Version: 5.4
Unityで使用するシェーダー言語
シェーダーのデータタイプと精度

シェーダーコンパイルターゲットレベル

When writing either Surface Shaders or regular Shader Programs, the Cg/HLSL source can be compiled into different “shader models”. Higher shader compilation targets allow using more modern GPU functionality, but might make the shader not work on older GPUs or platforms.

コンパイルターゲットは、#pragma target 名前 ディレクティブで示されます。例えば、以下のとおりです。

# pragma target 3.5

デフォルトコンパイルターゲット

デフォルトでは、Unity はシェーダーをほとんど最低レベルの適応ターゲット (2.5) にコンパイルします。これは、だいたい DirectX シェーダーモデル 2.0 と 3.0 の間と同等です。他のコンパイラーディレクティブには、シェーダーを自動的により高いターゲットにコンパイルするものもあります。

  • ジオメトリシェーダー (#pragma geometry) を使用すると、コンパイルターゲットを 4.0 に設定します。
  • テッセレーションシェーダー (#pragma hull または #pragma domain) を使用すると、コンパイルターゲットを 4.6 に設定します。

適用される #pragma ターゲット名

以下は、サポートされるシェーダーモデルとその増強される性能 (場合によっては、より高性能のプラットフォームや GPU が必要) の一覧です。

#pragma target 2.0

  • Unity でサポートされるすべてのプラットフォームに使用できます。DX9 シェーダーモデル 2.0
  • 制限された計算とテクスチャの指示。Interpolator 8個、頂点テクスチャサンプリング 無し、フラグメントシェーダーのデリバティブ 無し、明示的 LOD テクスチャサンプリング 無し。

#pragma target 2.5 (デフォルト)

  • 依然として補間が 8 しかない点、明白な LOD テクスチャサンプリングがない点 を除いて 3.0 ターゲットとほとんど同じ (後述を参照)
  • DX9 で SM3.0 に、Windows Phone で DX11 フィーチャーレベル 9.3 にコンパイル

#pragma target 3.0

  • DX9 シェーダーモデル 3.0。デリバティブ指示、テクスチャ LOD サンプリング、Interpolator 10個、より多くの計算とテクスチャの指示が可能です。
  • DX11 フィーチャーレベル 9.x GPU (ほとんどの Windows Phone デバイス) ではサポート無し
  • OpenGL ES 2.0 デバイスのなかには、使用されるドライバ拡張と機能によって完全にはサポートしないものがあります。

#pragma target 3.5 (または 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 4.5 (または 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 4.6 (または 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.5 相当の能力のみを持つものとして扱われます。

参照

Unityで使用するシェーダー言語
シェーダーのデータタイプと精度