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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Shader]渲染Image,ZWrite Off ZTest Always的理解相关的知识,希望对你有一定的参考价值。

参考技术A 新建两个shader,一个为ImageEffectShader,一个为UnlitShader,都是顶点/片元着色器,其中一个区别为ImageEffectShader有如下设置:

我们关注的就是ZWrite设置为Off,表示不需要深度缓存,ZTest设置为Always,表示深度测试总是通过,按照我的理解,使用该shader的物体都会一直绘制再最前面,下面来测试一下。

通过FrameDebugger发现,只要ImageEffectShader对应的物体后渲染,就会显示部分,这里说明ZTest起作用了。

但是为什么只会显示和另一个Cube重叠的部分,FrameDebugger中也很明显的,SkyBox在其后进行的渲染,ZWrite没有的部分,会直接渲染天空盒颜色(天空盒混合模式为one zero)。

所以这也是为什么ZWrite关闭适用于有RenderQueue在transparent的图像。

最后将ImageEffectShader对应的物体RenderQueue设置到transparent,并设置混合模式。

以上是关于[Shader]渲染Image,ZWrite Off ZTest Always的理解的主要内容,如果未能解决你的问题,请参考以下文章

Unity记一次Amplify Shader Editor入门渲染——ZTest,ZWrite,Cull Mode

Unity Shader-渲染队列,ZTest,ZWrite,Early-Z(转)

Unity ZTest 深度测试 & ZWrite 深度写入

记一次Amplify Shader Editor入门_Unity官方Shader基础属性说明之不得不说ZWrite,Ztest

[UnityShader]点染队列ZWrite和ZTest

unity, 在image effect shader中用_CameraDepthTexture重建世界坐标