https://docs.unity3d.com/Manual/SL-PassTags.html
pass通过tags告诉渲染引擎它们期望何时、怎样被渲染。
语法
Tags { "TagName1" = "Value1" "TagName2" = "Value2" }
指定TagName1持有Value1的值,TagName2持有Value2的值。可以随心所欲的指定许多tags。
细节
tags是基础的键值对,在一个pass中tags用来控制这个pass在光照流水线中扮演一个什么样的角色(环境光,顶点光照,像素光照等等),并且其他一些选项。请注意下面的tag只会在pass中被识别,在subshader中不会被识别。
LightMode tag
LightMode tag定义了pass在光照流水线中的角色。查看渲染流水线章节(链接见原网页)获取更多信息。这些tag很少手动调用,大多数需要与光照交互的shader都会被写成表面shader,并且所有这些细节都会被考虑到。
LightMode tag的可选值是:
·Always:始终渲染;没有光照。
·ForwardBase:用于正向渲染,应用环境光,主平行光,顶点/ SH光和光照贴图。
·ForwardAdd:用于正向渲染,应用逐像素添加的光照,每个光照都会通过pass一次。
·Deferred:用于延时着色,渲染g-buffer。
·ShadowCaster:将对象深度渲染到阴影贴图或深度纹理中。
·MotionVectors:用于计算每个对象的运动矢量。
·PrepassBase:用于旧的延时光照,渲染法线和镜面反射指数。
·PrepassFinal:用于旧的延时光照,通过组合纹理,光照和自发光来渲染最终颜色。
·Vertex:当对象未进行光照贴图时,用于旧的顶点光照渲染 ; 应用所有顶点光照。
·VertexLMRGBM:在对象进行光照贴图时用于旧的Vertex光照渲染;在lightmap是RGBM编码的平台上(PC和控制台)。
·VertexLM:在对象进行光照贴图时用于旧的Vertex光照渲染;在光照贴图采用双LDR编码的平台上(移动平台)。
PassFlags tag
一个pass可以用一个标志表明改变渲染流水线是怎么样传递数据给pass的。这通过PassFlags tag来完成,用一个具有空格分离标志名字的值。目前支持的标志是:
·OnlyDirectional:当pass使用ForwardBase类型时,这个标志使只有主平行光和环境光/lightprobe数据可以传递到shader。这意味着不重要的光照数据不会被传递到顶点光照或是球面谐波shader变量中。查看正向渲染部分获取更多信息(链接见原网页)。
RequireOptions tag
一个pass可以表明它只在一些额外的条件被满足的情况下被渲染,这是通过使用RequireOptions tag来完成的,值为一个空格分离符的字符串选项。目前被Unity支持的选项是:
·SoftVegetation:只有当在Quality Settings选项中Soft Vegetation被开启时才渲染此通道。
也可以看看
SubShader也可以设置Tag,请看SubShader Tag章节(链接见原网页)。
网友评论