子着色器使用标签(Tags)来告诉渲染引擎何时和如何渲染对象。Tags使用语法如下:
Tags { "标签1" = "值1" "标签2" = "值2" }
标签是标准的键值对,可以有任意多个,常用的标签如下所列。
Queue——队列标签,Queue标签用来决定对象被渲染的次序。着色器决定对象所归属的渲染队列,任何透明物体都可以通过这种方法确保在不透明物体渲染之后渲染。
ShaderLab中有4种预定义的渲染队列
队列名称 | 说明 |
Background | 后台,这个渲染队列在所有队列之前被渲染,被用于渲染天空盒之类的对象 |
Geometry | 几何体,这个队列是默认队列,被用于大多数对象。不透明的几何体使用这个队列 |
Transparent | 透明,这个渲染队列在几何体队列之后被渲染,采用由后到前的次序。任何采用alpha混合的对象(不对深度缓冲产生写操作的着色器)应该在这里渲染(如玻璃,粒子效果) |
Overlay | 覆盖,这个渲染队列被用于实现叠加效果。任何需要最后渲染的对象应该放置在此处(如镜头光晕) |
队列标签的使用如下:
Tags { "Queue" = "Transparent" } //设置渲染队列为 "透明"
提示:
几何体渲染队列为了达到最优的性能优化了对象的绘制次序。其他渲染队列依据距离排序对象,从最远的对象开始渲染到最近的对象。
自定义队列标签,对于特殊的需要可以使用中间队列来满足。在Unity中每一个队列都有一个整数索引值。后台为1000,几何体为2000,透明为3000,叠加层为4000。通过着色器可以自定义一个队列,例如下面的代码:
Tags { "Queue" = "Geometry+1" } //自定义渲染队列
上面的代码使对象在所有不透明的对象渲染之后但却在所有透明物体前被渲染,该渲染队列的索引值为2001。自定义队列适用于某些对象总是需要在其他某些对象前被绘制的情况。例如,在大多数时候,透明的水总是应该在所有不透明的物体之后并在透明对象前被渲染。
IgnoreProjector——忽略投影标签,如果设置忽略投影标签为"True",那么使用这个着色器的对象将不会被投影器所影响。这对半透明的物体来说最有用,因为这样它就不会受到投影器的影响而产生阴影。忽略投影标签的使用如下:
Tags { "IgnoreProjector" = "True" } //忽略投影