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

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

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

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

シェーダーコンパイラー

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

  • Windows と Microsoft のプラットフォーム (DX11, DX12, Xbox One) はすべて、 Microsoft の HLSL コンパイラー (現在、d3dcompiler_47) を使用します。
  • OpenGL Core, OpenGL ES 3, OpenGL ES 2.0 and Metal use Microsoft’s HLSL followed by bytecode translation into GLSL or Metal, using HLSLcc.
  • OpenGL ES 2.0 can use source level translation via hlsl2glslfork and glsl optimizer. This is enabled by adding #pragma prefer_hlsl2glsl gles
  • 他のコンソールプラットフォームは、それぞれに応じたコンパイラー (例えば、PS4 の PSSL) を使用します。
  • Surface Shaders は、コード生成解析処理のために Cg 2.2 と MojoShader を使用します。

In case you really need to identify which compiler is being used (to use HLSL syntax only supported by one compiler, or to work around a compiler bug), predefined shader macros can be used. For example, UNITY_COMPILER_HLSL is set when compiling with HLSL compiler (for D3D or GLCore/GLES3/GLES platforms); and UNITY_COMPILER_HLSL2GLSL when compiling via hlsl2glsl.

参照

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