[Shader]渲染Image,ZWrite Off ZTest Always的理解

通过这篇的学习,对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

你可能感兴趣的:([Shader]渲染Image,ZWrite Off ZTest Always的理解)