Unity3d ZWrite ZTest Blend 相关的测试 以及 Queue

ZWrite 的意思是  是否将当前像素z值写入zbuffer,其实这个值是别的图形在做zTest的时候使用的
     Queue决定绘制顺序,先绘制的写入zbuffer,后绘制的在做ZTest的时候,会受到影响。
     两个Queue相同的时候,则按照创建顺序绘制。在不写入zwrite的时候,效果如下。
     棕色的先创建,灰色的后创建的。
     
     如果给棕色的 Queue改为Transparent,则效果如下。
     

如果两个都写入深度,并且开启zTest,则根据z来显示,效果如下。
     
     上图是先绘制灰色的,queue是Geomery,而棕色的是transparent。而且灰色的zwrite on,而棕色的zwrite是什么,都无所谓。
     如果棕色的关闭zTest。则效果如下
     
     和两个zwrite都关闭的时候一样。和zbuffer就没有关系了。
     针对上图,棕色的alpha都是0.5,但是由于没有打开blend,所以并不影响最终结果。
     打开blend srcalpha oneMinusSrcAlpha时,则效果如下
     
     如果在打开blend的情况下,再打开ztest,则半透明的地方,则根据zbuffer,来进行混合,效果如下:
     
     可以看到,先根据z进行了测试是否显示,然后根据alpha,进行blend。

根据以上实验,总结如下:
1、ZWrite 是表示是否写入zbuffer。和自己的深度测试不相关。如果A物体写入深度测试,则B物体在进行ztest的时候,如果B的z值大于A的z值,则显示A的颜色,否则显示B的颜色
2、ZTest 表示的是自己是否参入深度测试。如果参与,则根据测试结果显示像素。否则,按照其他方式
3、Blend 表示当前像素和已经存在像素的混合模式。只在自己绘制的那一刻发生作用。比如上图中,由于灰色先绘制,而棕色后绘制,所以可以看到灰色和棕色的重叠部分发生了混合。而且由于灰色使用zTest的时候,z值都是无穷大,所以灰色球全部显示。如果将棕色的Queue调整到Background,而先绘制棕色,后绘制灰色,则会出现如下效果图(两个都写入zbuff,都做ztest):
实际上,上图左图是最终结果,可以看到,棕色的球和背景发生了blend。而灰色和棕色根据ztest进行了切除。

你可能感兴趣的:(unity3d)