Unity中使用的着色器语言
在Unity中,着色器程序是用HLSL语言的变体编写的(也称Cg,但对于大多数实际应用,两者是相同的)。
目前,针对不同的平台之间最大的可移植性,在DX9风格的HLSL写(如使用DX9的风格sampler2D和tex2D纹理取样,而不是DX10风格Texture2D,SamplerState和tex.Sample)。
着色器编译器
内部,不同着色器编译器用于着色器程序编译:
- windows普遍使用 hlsl编译器。
- opengl core,opengles3,opengles2.0 和Metal也是使用hlsl,然后使用hlslcc将字节码转换为GLSL或Metal。
- OpenGL ES2 可以通过hlsl2glslfork 和glsl优化器使用源级转换。通过添加启用功能#pragma prefer_hlsl2glsl gles
- 其他控制台平台使用各自的编译器(例如PS4上的PSSL)。
- 曲面着色器使用Cg 2.2和MojoShader进行代码生成分析步骤。
如果你确实需要确定正在使用那个编译器(使用仅由一个编译器支持的HLSL语法,或者解决编译器错误),可以使用预定义的着色器宏。例如,UNITY_COMPILER_HLSL在使用HLSL编译器进行编译时设置(对于D3D或GLCore/GLES3/GLES平台);并UNITY_COMPILER_HLSL2GLSL通过hlsl2glsl编译时。