预定义shader预处理宏:
Target platform:
SHADER_API_OPENGL - desktop OpenGL SHADER_API_D3D9 - Direct3D 9 SHADER_API_XBOX360 - Xbox 360 SHADER_API_PS3 - PlayStation 3 SHADER_API_D3D11 - desktop Direct3D 11 SHADER_API_GLES - OpenGL ES 2.0 (desktop or mobile), use presence of SHADER_API_MOBILE to determine. SHADER_API_FLASH - Flash Stage3D SHADER_API_D3D11_9X - Direct3D 11 target for Windows RT
Surface shader pass indicators:
UNITY_PASS_FORWARDBASE - 前向渲染的base pass(主方向光、lightmaps、SH) UNITY_PASS_FORWARDADD - 前向渲染的add pass(没盏灯一个pass) UNITY_PASS_PREPASSBASE - 延迟渲染base pass(renders normals & specular exponent). UNITY_PASS_PREPASSFINAL - 延迟渲染final pass (applies lighting & textures). UNITY_PASS_SHADOWCASTER - 阴影投射渲染pass. UNITY_PASS_SHADOWCOLLECTOR - 阴影手机pass for directional light shadows.
内置全局状态变量:
内置的矩阵:
UNITY_MATRIX_MVP: Current model*view*projection matrix UNITY_MATRIX_MV: Current model*view matrix UNITY_MATRIX_V: Current view matrix. UNITY_MATRIX_P: Current projection matrix UNITY_MATRIX_VP: Current view*projection matrix UNITY_MATRIX_T_MV: Transpose of model*view matrix UNITY_MATRIX_IT_MV: Inverse transpose of model*view matrix UNITY_MATRIX_TEXTURE0 to UNITY_MATRIX_TEXTURE3: Texture transformation matrices
内置的向量:
UNITY_LIGHTMODEL_AMBIENT: Current ambient color.
使用multi_compile编译Shader的多个版本:
有时候我们希望保留一个shader的大多数实现,而只是做一些细节的修改,此时我们就可以通过该方式来生成shader的多个版本,然后在代码中控制使用哪个版本。
命令:
#pragma multi_compile FANCY_STUFF_OFF FANCY_STUFF_ON
控制:
Material.EnableKeyword/DisableKeyword
Shader.EnableKeyword/DisableKeyword
在shader中根据定义好的关键字处理具体显示方案:
float4 frag(vertOut i):COLOR { float4 c = float4(0, 0, 0, 0); #ifdef MY_multi_1 c = float4(0, 1, 0, 0); #endif #ifdef MY_multi_2 c = float4(0, 0, 1, 0); #endif return c; }
注意不要在shader中大量使用此命令,因为关键字的个数是有上限的,而多条multi_complie会交叉匹配产生很多种结果。
GLSL shader编程
在Shader中,除了Cg/HLSL以外,GLSL(OpenGL Shading Languate)也可以直接使用。
一般不建议使用GLSL,除非你确定你的目标平台只有Max OS X或兼容OpenGL ES 2.0的移动设备。
Unity默认都会将Cg/HLSL交叉编译出优化过得GLSL,以此来支持多平台。在desktop平台下可以通过打开#pragma glsl选项来支持。
CSDN博客:http://blog.csdn.net/candycat1992/article/details/47284289
时间: 2024-12-26 18:39:59