通過(guò)這篇的學(xué)習(xí),對(duì)ZTest,ZWrite有了更深層次的理解。
新建兩個(gè)shader,一個(gè)為ImageEffectShader,一個(gè)為UnlitShader,都是頂點(diǎn)/片元著色器,其中一個(gè)區(qū)別為ImageEffectShader有如下設(shè)置:
Cull Off ZWrite Off ZTest Always
我們關(guān)注的就是ZWrite設(shè)置為Off,表示不需要深度緩存,ZTest設(shè)置為Always,表示深度測(cè)試總是通過(guò),按照我的理解,使用該shader的物體都會(huì)一直繪制再最前面,下面來(lái)測(cè)試一下。
-
深度相同,RenderQueue=2000,ImageEffectShader對(duì)應(yīng)的cube沒(méi)有顯示
image.png -
ImageEffectShader對(duì)應(yīng)shader深度設(shè)置更大,RenderQueue=2000,部分顯示
image.png -
深度相同,ImageEffectShader對(duì)應(yīng)的物體RenderQueue=2000+1,部分顯示
image.png
通過(guò)FrameDebugger發(fā)現(xiàn),只要ImageEffectShader對(duì)應(yīng)的物體后渲染,就會(huì)顯示部分,這里說(shuō)明ZTest起作用了。

但是為什么只會(huì)顯示和另一個(gè)Cube重疊的部分,F(xiàn)rameDebugger中也很明顯的,SkyBox在其后進(jìn)行的渲染,ZWrite沒(méi)有的部分,會(huì)直接渲染天空盒顏色(天空盒混合模式為one zero)。
所以這也是為什么ZWrite關(guān)閉適用于有RenderQueue在transparent的圖像。
最后將ImageEffectShader對(duì)應(yīng)的物體RenderQueue設(shè)置到transparent,并設(shè)置混合模式。


