サーフェスシェーダー か通常の シェーダープログラム を使用すると、HLSL ソースはさまざまなシェーダーモデルにコンパイルされます。より新しい GPU 機能を使用するには、より高いレベルのシェーダーコンパイルターゲットを使用する必要があります。
ノート: より高いレベルのシェーダーコンパイルターゲットを使用すると、古い GPU やプラットフォームでシェーダーが動作しなくなる場合があります。
以下の例のように、#pragma target
名前 のディレクティブか、より具体的な #pragma require
機能 のディレクティブを使用してコンパイルターゲットを指定します。
# pragma target 3.5
# pragma require integers 2darray instancing
デフォルトでは、Unity はシェーダーをほとんど最低レベルの適応ターゲット (2.5) にコンパイルします。これは、だいたい DirectX シェーダーモデル 2.0 と 3.0 の間と同等です。他のコンパイラーディレクティブには、シェーダーを自動的により高いターゲットにコンパイルするものもあります。
#pragma geometry
) を使用すると、コンパイルターゲットを 4.0
に設定します。#pragma hull
または #pragma domain
) を使用すると、コンパイルターゲットを 4.6
に設定します。ジオメトリシェーダー、ハルシェーダー、ドメインシェーダーの #pragma
を通して関数のエントリーポイントを明示的に設定しないシェーダーはすべて、内部シェーダーの機能要件をダウングレードします。これにより、ランタイムと機能の違いがより大きい DX11 以外のターゲットに既存のシェーダーコンテンツと互換性を持たせることができます。
例えば、Unity は Metal グラフィックスのテッセレーションシェーダーをサポートしますが、Metal はジオメトリシェーダーをサポートしません。#pragma target 5.0
の使用は、ジオメトリシェーダーを使用しない限り有効です。
以下は、サポートされるシェーダーモデルとその増強される性能 (場合によっては、より高性能のプラットフォームや GPU が必要) の一覧です。
es3.0
ターゲットが持つすべてが含まれます。(モバイルを含む) すべての OpenGL のようなプラットフォームは “シェーダーモデル 3.0 相当の能力を持つ” ものとして扱われることに注意してください。WP8/WinRT プラットフォーム(DX11 フィーチャーレベル 9.x)はシェーダーモデル 2.5 相当の能力のみを持つものとして扱われます。
以下は、#pragma require
ディレクティブのサポートされている機能名の一覧です。
interpolators10
: 最低 10 個の頂点からフラグメントへの補間 (varying) が可能です。interpolators15
: 最低 15 個の頂点からフラグメントへの補間 (varying) が可能です。interpolators32
: 最低 32 個の頂点からフラグメントへの補間 (varying) が可能です。mrt4
: 複数のレンダーターゲット、少なくとも 4mrt8
: 複数のレンダーターゲット、少なくとも 8derivatives
: ピクセルシェーダー派生命令 (ddx/ddy)samplelod
: 明示テクスチャ LOD サンプリング (tex2Dlod/SampleLevel)fragcoord
: ピクセルシェーダーのピクセル位置 (画面の XY、クリップスペースの ZW 深度) の入力integers
: 整数は、ビット/シフト演算を含む実際のデータ型です。2darray
: 2D テクスチャ配列 (Texture2DArray)cubearray
: キューブマップ配列 (CubemapArray)。instancing
: SV_InstanceID 入力システム値geometry
: DX10 ジオメトリシェーダーcompute
: コンピュートシェーダー、構造化バッファ、アトミック演算randomwrite
: “ランダム書き込み” (UAV) テクスチャtesshw
: ハードウェアテッセレーションの GPU サポート。ただし、必ずしもテッセレーションシェーダーステージをサポートしません (例えば、Metal はテッセレーションをサポートしますが、シェーダーステージ経由ではサポートしません)。tessellation
: テッセレーションのハルシェーダー/ドメインシェーダーステージmsaatex
: マルチサンプリングされたテクスチャにアクセスする能力 (HLSL の Texture2DMS)sparsetex
: 常駐情報を持つスパーステクスチャ (D3D 用語の “Tier2” サポート、CheckAccessFullyMapped HLSL 関数)。現在、これは DX11/12 でのみ実装されています。framebufferfetch
: フレームバッファフェッチ – ピクセルシェーダーで入力ピクセルカラーを読み取る機能。一般に言う #pragma target
ディレクティブは上の要件を簡略にしたものであり、以下に対応します。
2.5
: derivatives3.0
: 2.5 + interpolators10 + samplelod + fragcoord3.5
: 3.0 + interpolators15 + mrt4 + integers + 2darray + instancing4.0
: 3.5 + geometry5.0
: 4.0 + compute + randomwrite + tesshw + tessellation4.5
: 3.5 + compute + randomwrite4.6
: 4.0 + cubearray + tesshw + tessellationDirect3D の用語では、シェーダーモデル 4.0 は “mrt8” を意味することもあります。シェーダーモデル 5.0 は “interpolators32” と “cubearray” を意味することもあります。ただし、これらは多くのモバイルプラットフォームでそうであるとはかぎりません。したがって、既存のシェーダーとの後方互換性を保つために #pragma target 4.0 と記しても、必ずしも 8 つのレンダーターゲットを必要とするわけではありません。#pragma target 5.0 と記しても、必ずしも 32 の補間やキューブマップ配列を必要とするわけではありません。
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.