Unity Shader常见问题
ShaderLab基础
shader语法基本框架
1 | Shader"ShaderName"{//定义Shader名字 |
Pass的执行
Pass译为通道,一般渲染对象只经过一次Pass,效果是单薄的,多Pass渲染会让画面更加有趣。Pass可以命名,可以设置标签,可以指定某个Pass对对象进行渲染,也可以指定多个Pass进行渲染。
关于标签1常出现的字符串:
1 | SubShader{ |
RenderType
其中RenderType使用的值通常包括Opaque、Transparent、Background等,实际上是一种约定,用来区别这个Shader要渲染的对象。并且可以使用自定义值,影响不大,只是在代替渲染时,定义者要区分不同RenderType类型的Shader。
代替渲染解释:
1 | Camera.SetReplacementShader("shader1","") //场景中所有的渲染对象的shader都替换成shader1进行渲染 |
Queue
Queue渲染队列,用来指定当前shader渲染对象的渲染顺序,其值有Background、Geometry、AlphaTest、Transparent等,
乐乐在书中介绍,队列索引号越小说明越先被渲染:
关于标签2中常出现的字符串:
1 | Pass{ |
程序员指定渲染路径LightMode,是想配置光照属性与渲染流程。这是程序员与Unity的一个暗号。详见这里
状态设置
- SubShader或Pass中常出现一些状态设置:
: Cull
: ZTest
: Zwrite - Blend
在SubShader中出现,表示该SubShader中所有的Pass都受状态设置的影响;在Pass中出现,说明只有当前Pass受状态设置的影响。
Shader中的系统语义
在定义输入struct的时,常遇到POSITION、SV_POSITION、SV_Target、NORMAL等语义,这些语义告诉Unity此处变量的输入输出类型,例如变量后有”:POSITION”指示Unity把模型的顶点坐标存到变量里,变量后有“:SV_POSITION”指示该变量存的值是裁剪空间中的模型坐标,“SV_Target”指示将输出输入到渲染缓冲中,一般为帧缓冲。