经常在Unity3D里的shader里见到这样的Tags{"Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent"}语句,这些语句都有什么意思呢?在不同的情景上,又怎么去用好这些命令,今天就主要讲讲这些问题。
首先第一个"Queue"="Transparent" ,"Queue"可以无视物体实际的位置,随意控制哪个物体显示在前面。以下是对渲染队列的描述。
来试试效果:
可以发现并没有什么效果。所以这个一般也很少用,它被用在天空上,天空是只一个被渲染的,然后被后渲染的物体遮挡住。
Tags { "Queue"="Background" }
来试试后面的球体的shader加上Tags { "Queue"="Geometry" },给在前面的球体的shader加上Tags { "Queue"="Geometry-100" },表示前面的球体先渲染。另外,程序默认是记录深度,即ZWrite默认是on,也即Tags { "Queue"="Geometry-100" }不起作用, 要想Tags { "Queue"="Geometry-100" }起作用,ZWrite的值必须为Off。运行后发现前面的球体看起来在后面。
再来试试Tags { "Queue"="Transparent" },对于透明的物体,加上Blend SrcAlpha OneMinusSrcAlpha才会有效果,其中同Geometry一样,Tags { "Queue"="Transparent-100" }也可以控制物体显示的前后顺序。
最后试了下Tags { "Queue"="Overlay" },也没有什么效果。
所以,我们可以通过Tags { "Queue"="Geometry" },和Tags { "Queue"="Transparent" }加减值控制重要物体的显示顺序,这个时候ZWrite的值必须为Off。
“IgnoreProjector”=“True”告诉Unity3D,我们不希望任何投影类型材质或者贴图,影响我们的物体或者着色器。这个特性往往那个用在GUI上。程序默认“IgnoreProjector”=“Flase”。
"RenderType"的用法类似于“Queue”。它将着色器归类到相机效果中。
Ztest的介绍见:http://blog.csdn.net/liqiangeastsun/article/details/44962661。
在渲染的时候,默认情况下是只有朝向摄像机的面才会被渲染,可以告诉Unity,我想渲染哪一个朝向的面,使用Cull命令在计算体积阴影的时候会用到对Cull的操作来计算和物体相交的投影。
Cull 有三种
Cull Off 不剔除
Cull Back 剔除背面(背向摄像机的面)
Cull Front 剔除前面 (朝向摄像机的面)