总结一下Shader开启透明渲染后的一些显示问题的解决方案,考虑Zwrite,Ztest,Queue这三个属性的设置问题。
首先需要记住的是:
对于不透明物体,渲染的正确顺序是从前往后;
对于半透明物体。渲染的顺序是从后往前。
这样才能实现正确的渲染输出。
注意:Alpha Test,Alpha to Coverage不在讨论之列。这里涉及到的是使用Alpha Blend的物体。
其次是,Unity Shader中需要注意的三个属性。
Zwirte:是否开启深度缓存,默认为On。
Ztest:深度测试的模式,默认为Lequal(小于等于)。
Queue:渲染队列,默认为Geometry。
常规来说:
对于不透明物体,默认的设置为Zwrite On,Ztest Lequal,Queue=“Geometry”。
对于半透明物体,默认的设置为Zwrite Off,Ztest Lequal,Queue=“Transparent”。
对于半透明物体,这样的设置在一般的情况下是没有问题的,但是在某些情况下会出现问题。
先解释一下相关的概念:
Queue:最好理解,也就是物体的在渲染队列中的顺序。
Zwrite On:会开启深度缓存和深度测试,即在绘制物体表面上的一个像素时,会对像素的深度值和深度缓存中对应点的值进行比较,如果该像素的深度值小于或等于(Ztest Lequal)深度缓存中