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

Unity 中使用的着色语言

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

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

着色器编译器

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

  • Windows & Microsoft platforms (DX9, DX11, DX12 and Xbox One) all use Microsoft’s HLSL compiler (currently d3dcompiler_47).
  • OpenGL Core, OpenGL ES 3 and Metal use Microsoft’s HLSL followed by bytecode translation into GLSL or Metal, using HLSLcc.
  • OpenGL ES 2.0 uses source level translation via hlsl2glslfork and glsl optimizer.
  • 其他游戏主机平台使用其各自的编译器(例如,PS4 使用 PSSL)。
  • 表面着色器使用 Cg 2.2 和 MojoShader 来完成代码生成分析步骤。

如果确实需要确定正在使用哪个编译器(为了使用仅一种编译器支持的 HLSL 语法,或解决编译器错误),可以使用预定义的着色器宏。例如,使用 HLSL 编译器进行编译时设置 UNITY_COMPILER_HLSL(针对 D3D 或 GLCore/GLES3 平台);通过 hlsl2glsl 进行编译时设置 UNITY_COMPILER_HLSL2GLSL

另请参阅

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