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

Posted avi9111

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity记一次Amplify Shader Editor入门渲染——ZTest,ZWrite,Cull Mode相关的知识,希望对你有一定的参考价值。

 

效果图

玩家主角被建筑物的遮罩,貌似是很简单的实现方法

有用射线的,也有用Zwrite的

也就是除了多个Pass以外,其实ZWrite和ZTest也很重要

今天就来理一理这些参数和知识点

理论部分

ZTest:深度测试,开启后测试结果决定片元是否被舍弃,可配置 
ZWrite:深度写入,开启后决定片元的深度值是否写入深度缓冲,可配置

ZTest可设置的测试规则:

ZTest Less:深度小于当前缓存则通过
ZTest Greater:深度大于当前缓存则通过
ZTest LEqual:深度小于等于当前缓存则通过
ZTest GEqual:深度大于等于当前缓存则通过
ZTest Equal:深度等于当前缓存则通过
ZTest NotEqual:深度不等于当前缓存则通过
ZTest Always:不论如何都通过

 

实战部分

   SubShader
{
        Tags{"RenderType" = "Opaque" "Queue" = "Geometry"}

        //---------- The Blocked Part ----------
        Pass
        {
            ZTest Greater
            ZWrite Off

            Blend SrcAlpha OneMinusSrcAlpha

            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
//..... 其他Shader代码

这里我们用了"ZTest Greater";

因为主角被遮挡了,我们还是希望主角绘制“”描边“”,所以选择大于当前缓存(墙比主角前,所以墙在ZTest的最优先,为当前片元深度缓存)

这里我们也用了"ZWrite Off"

理论上,我们是不喜欢当前主角把片元写到深度缓存中,ZWrite On,如下,主角box会一直写入“Z深度的缓存”,一直在最前,也就没有Greater了

ZWrite On,如下,“感觉怪怪的”

ZWrite Off, 如下,“”Z深度稳定“”

理论上,ZWrite On + ZTest GEqual也是可以正常渲染效果的

实际上,不行

所以,结论是

初学者一看,貌似ZTest,ZWrite的选项很多,怎么才能记住?实际上实用的组合也就那2个

ZTest Greater,就必须关ZWrite,没其他选择

Cull Mode, Blend

 

总结

其实没啥好总结的,死记硬背即可

以上是关于Unity记一次Amplify Shader Editor入门渲染——ZTest,ZWrite,Cull Mode的主要内容,如果未能解决你的问题,请参考以下文章

Unity记一次Amplify Shader Editor入门渲染案例中文解释——UV流动动画

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

unity再记一次shader渲染性能工具

Unity Amplify Shader Editor-编辑器扩展开发Canvas框架

Shader Graph 和 Amplify Shader Editor 节点文档地址

Unity记一次TA的二次元风格渲染