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 Amplify Shader Editor-编辑器扩展开发Canvas框架