ShaderLab 语法:子着色器标记 (SubShader Tags)        

子着色器利用标记表明其希望渲染到渲染引擎的方式与时间。

语法

Tags { "TagName1" = "Value1" "TagName2" = "Value2" }
指定TagName1 的值为 Value1,TagName2的值为Value2。你可以使用任意数量的标记。

详细信息

标记从根本上来说是键值对。子着色器内的标记用于决定渲染顺序和子着色器的其他参数。请注意:以下 Unity 识别的标记必须是在子着色器 (SubShader) 部分内,而非通道 (Pass) 内!

渲染顺序 - 队列标记

使用队列 (Queue)标记可确定对象绘制的顺序。着色器决定其对象所归属的渲染队列,这样任何透明 (Transparent) 着色器都能确保它们绘制在所有不透明对象之后等等。

有四种预定义的渲染队列,但在预定义队列之间还可以有更多队列。预定义队列为:

  • 后台 (Background) - 这个渲染队列在其他所有队列之前被渲染。其用于天空盒之类的对象。

  • 几何结构 (Geometry) (默认) - 用于大多数对象。不透明的几何结构使用这种队列。

  • AlphaTest - alpha 测试的几何结构使用这种队列。它是一个独立于几何结构 (Geometry) 的队列,因为它可以在所有固体对象绘制后更有效地渲染采用 alpha 测试的对象。

  • 透明 (Transparent) - 这种渲染队列采用由后到前的顺序在几何结构 (Geometry)AlphaTest 队列后渲染。任何采用 alpha 混合的对象(即没有写入深度缓冲区的着色器)应到这里(玻璃、粒子效果)。

  • 叠加 (Overlay) - 这种渲染队列用于叠加效果。任何最后渲染的对象都应放置在此(比如镜头光晕)。

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 标记

RenderType 标记将着色器分为若干个预定义组。例如,透明着色器还是采用 alpha 测试的着色器等等。这个由着色器替换使用,有时用于生成相机的深度纹理。

ForceNoShadowCasting 标记

当给定ForceNoShadowCasting 标记并且该标记有“真”值时,使用该子着色器渲染的对象将永不投射阴影。当在透明对象上使用着色器替换、但不想从另一个子着色器获得阴影通道时,这会非常有用。

IgnoreProjector 标记

当给定IgnoreProjector 标记并且该标记有“真”值时,使用该着色器的对象将不会受到投影仪的影响。这对半透明对象非常有用,因为投影仪没有影响它们的好办法。

另请参阅

也可为通道指定标记 (Tag),请参阅通道标记。

,