Unity Shader 深度测试

一个比较重要的概念就是深度测试。深度测试的作用其实是对裁剪的弥补,裁剪讨论的范围是局部坐标的模型本身的优化,而深度测试是在世界空间的对渲染的优化,想象一下,在世界空间中有很多出现在视野中,但是有互相遮挡的情况,其实我们是不需要去处理他的着色的。而要完成这个过程就必须用到两个术语(缺一不可):深度缓存(zwrite) + 颜色缓存(ztest)

zwrite 分类

zwrite on / off : 开启深度缓冲/关闭深度缓冲(其实就是记录Z值,把最小的Z存放在缓冲中),一般情况不透明的物体都会使用zwrite on 而 半透明的物体都会使用 zwrite off 这样半透明的物体就直接比较ztest了

ztest 分类

less / greater / lequal /gequal / equal / notequal /always(其实就是拿着当前的像素来对深度缓冲中的z值进行比较的条件)

那么他们的情况就有如下几种

1.当ZWrite为On时,ZTest通过时,该像素的深度才能成功写入深度缓存,同时因为ZTest通过了,该像素的颜色值也会写入颜色缓存。
2.当ZWrite为On时,ZTest不通过时,该像素的深度不能成功写入深度缓存,同时因为ZTest不通过,该像素的颜色值不会写入颜色缓存。
3.当ZWrite为Off时,ZTest通过时,该像素的深度不能成功写入深度缓存,同时因为ZTest通过了,该像素的颜色值会写入颜色缓存。
4.当ZWrite为Off时,ZTest不通过时,该像素的深度不能成功写入深度缓存,同时因为ZTest不通过,该像素的颜色值不会写入颜色缓存。

总结:zwrite只是处理深度值,ztest才是决定采用谁的颜色值,zwrite只是为ztest服务的。默认情况下unity采用的是zwrite为on,ztest为lqeual 也就是越靠近相机的显示优先级越高。

猜你喜欢

转载自blog.csdn.net/st75033562/article/details/129389564
今日推荐