サーフェスシェーダー か通常の シェーダープログラム を使用すると、HLSL ソースはさまざまなシェーダーモデルにコンパイルされます。より新しい GPU 機能を使用するには、より高いレベルのシェーダーコンパイルターゲットを使用する必要があります。
ノート: より高いレベルのシェーダーコンパイルターゲットを使用すると、古い GPU やプラットフォームでシェーダーが動作しなくなる場合があります。
Indicate the compilation target by using the #pragma target
name directive. For example:
# pragma target 3.5
デフォルトでは、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 相当の能力のみを持つものとして扱われます。