子着色器利用标记表明其希望渲染到渲染引擎的方式与时间。
标记从根本上来说是键值对。子着色器内的标记用于决定渲染顺序和子着色器的其他参数。请注意:以下 Unity 识别的标记必须是在子着色器 (SubShader) 部分内,而非通道 (Pass) 内!
使用队列 (Queue)标记可确定对象绘制的顺序。着色器决定其对象所归属的渲染队列,这样任何透明 (Transparent) 着色器都能确保它们绘制在所有不透明对象之后等等。
有四种预定义的渲染队列,但在预定义队列之间还可以有更多队列。预定义队列为:
Shader "Transparent Queue Example" { SubShader { Tags {"Queue" = "Transparent" } Pass { // 着色器的其他部分... } } }
说明如何在透明队列中渲染对象的示例
为了达到最佳性能,几何结构 (Geometry) 渲染队列会优化对象的绘制顺序。其他所有渲染队列按距离将对象排序,从最远的对象渲染到最近的对象。
中间队列可用于特殊用途。在内部,每个队列都由一个整数索引代表。后台 (Background) 为 1000、几何结构 (Geometry) 为 2000、AlphaTest 为 2450、透明 (Transparent) 为 3000、叠加 (Overlay) 为 4000。如果着色器使用这样的队列:
Tags { "Queue" = "Geometry+1" }
这会使对象在所有不透明对象之后、在透明对象之前渲染,而渲染队列索引将为 2001(几何结构加 1)。这在您想在其他对象组之间始终绘制某些对象时会很有用。例如,在大多数时候,透明的水应在不透明的对象之后、透明对象之前绘制。
RenderType 标记将着色器分为若干个预定义组。例如,透明着色器还是采用 alpha 测试的着色器等等。这个由着色器替换使用,有时用于生成相机的深度纹理。
当给定ForceNoShadowCasting 标记并且该标记有“真”值时,使用该子着色器渲染的对象将永不投射阴影。当在透明对象上使用着色器替换、但不想从另一个子着色器获得阴影通道时,这会非常有用。
当给定IgnoreProjector 标记并且该标记有“真”值时,使用该着色器的对象将不会受到投影仪的影响。这对半透明对象非常有用,因为投影仪没有影响它们的好办法。
也可为通道指定标记 (Tag),请参阅通道标记。
Page last updated: 2013-06-28