GLSL シェーダープログラム
シェーダーコンパイルターゲットレベル

Unityで使用するシェーダー言語

Unity では、シェーダープログラムHLSL 言語の異形で書かれています。(Cg とも呼ばれますが、ほとんどの実際的な使用においては、2つは同じです)。

現在、異なるプラットフォームで可搬性を最大にするために、DX9 スタイル HLSL で書かれています (例えば、DX10 スタイルの Texture2DSamplerStatetex.Sample の代わりに、DX9 スタイルの sampler2Dtex2D をテクスチャサンプリングに使用)。

シェーダーコンパイラー

内部では、シェーダープログラム コンパイルに異なるシェーダーコンパイラーが使用されます。

  • Windows および、 Microsoft プラットフォーム (DX9、DX11、DX12、XboxOne、Xbox360) はすべて、 Microsoft の HLSL コンパイラー (現在、d3dcompiler_47) を使用します。
  • OpenGL Core (GL3 以降) と OpenGL ES 3 以降は Microsoft の HLSL でコンパイルし、 その後、hlslcc の改訂バージョンを使い GLSL にバイトコード変換を行っています。
  • OpenGL Legacy (GL2、OpenGL ES 2.0、Metal は、 hlsl2glslforkglsl optimizer を通してソースレベルの変換を行います。
  • 他のコンソールプラットフォームは、それぞれに応じたコンパイラー (例えば、PS4 の PSSL) を使用します。
  • Surface Shaders は、コード生成解析処理のために Cg 2.2 と MojoShader を使用します。

使用されているコンパイラーを識別する必要がある場合は (あるコンパイラーだけにサポートされている HLSL シンタックスを使用するため、または、あるコンパイラーバグを回避するため)、定義済みシェーダープリプロセッサーマクロを使用します。例えば、HLSL コンパイラーでコンパイルするときは、UNITY_COMPILER_HLSL (D3D か GLCore/GLES3 プラットフォーム用) が設定され、hlsl2glsl を使ってコンパイルする場合は、UNITY_COMPILER_HLSL2GLSL が設定されます。

関連項目

GLSL シェーダープログラム
シェーダーコンパイルターゲットレベル