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

Unity 中使用的着色语言

在 Unity 中,可使用 HLSL 编程语言来编写着色器程序

Unity 最初使用 Cg 语言,因此会使用 Unity 某些着色器关键字的名称 (CGPROGRAM) 和文件扩展名 (.cginc)。Unity 已不再使用 Cg,但仍支持这些关键字和文件扩展名。请注意,所有着色器程序代码都必须是有效的 HLSL,即使代码使用与 Cg 相关的关键字和文件扩展名也如此。

使用 HLSLPROGRAM 与使用 CGPROGRAM 之间的唯一区别在于 Unity 在编译着色器程序时自动包含的文件。这是为了向后兼容。有关更多信息,请参阅内置着色器 include 文件

HLSL 语法

HLSL 语言本身有两种语法:“旧版”的 DX9 样式语法以及更现代的 DX10+ 样式语法。

不同之处主要在于纹理采样函数的工作方式:

  • 旧版语法使用 sampler2Dtex2D() 和类似函数。此语法适用于所有平台。
  • DX10+ 语法使用 Texture2DSamplerState.Sample() 函数。由于纹理和采样器在 OpenGL 中_不是_不同对象,因此该语法的某些形式在 OpenGL 平台上无效。

在 Unity 中,可使用预定义宏来声明和采样纹理,从而避免发生 HLSL 语法平台支持问题。Unity 将根据编译着色器的目标平台,将这些宏扩展为最合适的语法。

另请参阅

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