シェーダーコンパイルターゲットレベル
Surface シェーダー か
一般の シェーダープログラムのいずれかを書く場合、
Cg/HLSL ソースを、さまざまな「シェーダーモデル」にコンパイルできます。
よりレベルの高いシェーダーコンパイルターゲットには、現在、より一般的に使用されている GPU 機能を使用することができます。
しかし、古い GPU やプラットフォームにはそのシェーダーが使用できなくなることもあります。
コンパイルターゲットは、#pragma target
名前 ディレクティブで示されます。例えば、以下のとおりです。
#pragma target 3.0
デフォルトコンパイルターゲット
デフォルトで、Unity はシェーダーを最低レベルの適応ターゲットにコンパイルします。これは、だいたい、シェーダーモデル 2.0 と同等です。
他のコンパイルディレクティブで、シェーダーを自動的により高レベルのターゲットにコンパイルします。
- ジオメトリシェーダー (
#pragma geometry
) を使用し、コンパイルターゲットを 4.0
にします。
- テッセレーションシェーダー (
#pragma hull
または #pragma domain
) を使用し、コンパイルターゲットを gl4.1
にします。
適用される #pragma ターゲット名
以下は、サポートされるシェーダーモデルとその増強される性能 (場合によっては、より高性能のプラットフォームや GPU が必要) の一覧です。
#pragma target 2.0 (デフォルト)
- Unity でサポートされるすべてのプラットフォームに使用できます。DX9 シェーダーモデル 2.0
- 制限された計算とテクスチャの指示。Interpolator 8個、頂点テクスチャサンプリング 無し、フラグメントシェーダーのデリバティブ 無し、明示的 LOD テクスチャサンプリング 無し。
#pragma target 3.0
- DX9 シェーダーモデル 3.0。デリバティブ指示、テクスチャ LOD サンプリング、Interpolator 10個、より多くの計算とテクスチャの指示が可能です。
- DX11 機能レベル 9.x GPU (ほとんどの Windows Phone デバイス) ではサポート無し
- OpenGL ES 2.0 デバイスのなかには、使用されるドライバ拡張と機能によって完全にはサポートしないものがあります。
#pragma target es3.0
- OpenGL ES 3.0 機能 (D3D プラットフォームの DX10 SM4.0、ジオメトリシェーダーのみ含まれない)
- DX9、DX11 9.x (WinPhone)、OpenGL ES 2.0 ではサポートされません。
- DX11+、OpenGL 3.2+、OpenGL ES 3+、Metal、PS4/XB1 コンソールでサポートされます。
- シェーダーなどでのネイティブ整数オペレーション
#pragma target 4.0
- DX11 シェーダーモデル 4.0
- DX9、DX11 9.x (WinPhone)、OpenGL ES 2.0/3.0/3.1、Metal ではサポートされません。
- DX11+、OpenGL 3.2+、OpenGL ES 3.1+AEP、PS4/XB1 コンソールでサポートされます。
- ジオメトリシェーダーと
es3.0
ターゲットが持つすべてが含まれます。
#pragma target es3.1
- OpenGL ES 3.1 機能 (D3D プラットフォームの DX11 SM5.0、テッセレーションシェーダーのみ含まれない)
- SM5.0 より前の DX9 と DX11、4.3 より前の OpenGL (Mac)、OpenGL ES 2.0/3.0 ではサポートされません。Metal でも、まだサポートされません。
- DX11+ SM5.0、OpenGL 4.3+、OpenGL ES 3.1、PS4/XB1 コンソールではサポートされます。
- コンピュートシェーダー、ランダムアクセステクスチャ書き込み、atomics などが含まれます。ジオメトリシェーダーとテッセレーションシェーダーは含まれません。
#pragma target gl4.1
- OpenGL 4.1 機能 (D3D プラットフォームの DX11 SM5.0、コンピュートシェーダーのみ含まれない)。基本的には、これが最高レベル。
Mac にサポートされる OpenGL レベル
- SM5.0 より前の DX9 と DX11、4.1 より前の OpenGL、OpenGL ES 2.0/3.0/3.1、Metal ではサポートされません。
- DX11+ SM5.0、OpenGL 4.1+、OpenGL ES 3.1+AEP、PS4/XB1 コンソールでサポートされます。
#pragma target 5.0
- DX11 シェーダーモデル 5.0.
- DX9、SM5.0 より前の DX11、4.3 より前の OpenGL (Mac)、OpenGL ES 2.0/3.0/3.1、Metal ではサポートされません。
- DX11+ SM5.0、OpenGL 4.3+、OpenGL ES 3.1+AEP、PS4/XB1 コンソールでサポートされます。
(モバイルを含む)すべての OpenGL ライクなプラットフォームは “シェーダーモデル 3.0 相当の能力を持つ”ものとして扱われることに注意してください。WP8/WinRT プラットフォーム(DX11 フィーチャーレベル 9.x)はシェーダーモデル 2.0 相当の能力のみを持つものとして扱われます。
関連項目