unity中使用的着色器语言
在unity中,着色器编程使用了一列列的HLSL语言变种(也叫作Cg,但是大部分实际上两者都是一样的)。
目前,为了在不同平台下保持最好的跨平台性, 取样贴图时,最好使用DX9风格 的HLSL。
着色器编译器
在内部,不同的着色器编译器用来编译shader:
- Windows & Microsoft 平台(DX11, DX12 and Xbox One) 使用Microsoft的 HLSL编译器(当前为d3dcompiler_47)
- OpenGL Core,OpenGL ES 3 & Metal使用的微软的HLSL,通过字节码转化为GLSL或者Metal,使用HLSLcc
- OpenGL ES2.0 使用hlsl2glslfork和glsl optimizer.
- 其它控制台平台使用它们自己的编译器。
- 表面着色器 使用Cg 2.2 和 MojoShader 来做代码生产分析步骤
为了万一你真的需要知道到底哪个编译器被使用(比如要使用只被一个编译器支持的HLSL语法,或者遇到编译器BUG),预定义着色器宏命令可以做到。比如,UNITY_COMPILER_HLSL设置了使用HLSL编译器, UNITY_COMPILER_HLSL2GLSL设置使用hlsl2glsl编译器。