通过这篇的学习,对ZTest,ZWrite有了更深层次的理解。
新建两个shader,一个为ImageEffectShader,一个为UnlitShader,都是顶点/片元着色器,其中一个区别为ImageEffectShader有如下设置:
Cull Off ZWrite Off ZTest Always
我们关注的就是ZWrite设置为Off,表示不需要深度缓存,ZTest设置为Always,表示深度测试总是通过,按照我的理解,使用该shader的物体都会一直绘制再最前面,下面来测试一下。
-
深度相同,RenderQueue=2000,ImageEffectShader对应的cube没有显示
image.png -
ImageEffectShader对应shader深度设置更大,RenderQueue=2000,部分显示
image.png -
深度相同,ImageEffectShader对应的物体RenderQueue=2000+1,部分显示
image.png
通过FrameDebugger发现,只要ImageEffectShader对应的物体后渲染,就会显示部分,这里说明ZTest起作用了。
image.png
但是为什么只会显示和另一个Cube重叠的部分,FrameDebugger中也很明显的,SkyBox在其后进行的渲染,ZWrite没有的部分,会直接渲染天空盒颜色(天空盒混合模式为one zero)。
所以这也是为什么ZWrite关闭适用于有RenderQueue在transparent的图像。
最后将ImageEffectShader对应的物体RenderQueue设置到transparent,并设置混合模式。
image.png
网友评论