GLSL 着色器程序
着色器编译目标级别

Unity 中使用的着色语言

在 Unity 中,着色器程序是用 HLSL 语言的一个变种(也称为 Cg,但对于大部分实际使用情况,这两种语言没有区别)编写的。

目前,为了在不同平台之间实现最大程度的可移植性,请使用 DX9 风格的 HLSL 编写程序(例如,使用 DX9 风格的 sampler2Dtex2D 进行纹理采样,而不是使用 DX10 风格的 Texture2DSamplerStatetex.Sample)。

着色器编译器

在内部将使用不同的着色器编译器来编译着色器程序

  • 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)。
  • 表面着色器使用 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 着色器程序
着色器编译目标级别