1、深度测试和深度写入
有了深度测试和深度写入发挥作用让我们不需要关心不透明物体的渲染顺序比如一个物体A 挡住了 物体B,即使底层逻辑中 先渲染A,后渲染B,我们也不用担心 B的颜色会把A覆盖,因为在进行深度测试时,远处的B的深度值无法通过深度测试,因为它的深度会比已经写入深度缓冲中A的深度值大,重合处的片元会被丢弃,颜色自然就不会写入,最终重叠处渲染出来的会是A的颜色
之前写的所有Shader都没有刻意的去设置深度测试(默认小于判断)、深度写入(默认开启) 、混合模式(默认不混合) 、 渲染队列(默认几何Geometry队列) 相关内容,是因为对于不透明的物体来说,使用默认设置就能够得到正确的渲染效果,但目前处理透明混合时,需要关闭深度写入
2、透明混合为什么需要关闭深度写入
在图形学中模拟出现实世界的半透明效果是通过将多个颜色进行混合计算呈现出来的
举例:
如果前方的A对象不关闭深度写入,那么B被A遮挡的部分会在深度测试时被舍弃(因为A离摄像机更近深度更小),那么我们就无法得到被遮挡部分的颜色,也就无法进行颜色的混合计算,因此我们必须关闭透明物体的深度写入,让其不会导致被遮挡物体无法通过深度测试从而无法进行颜色混合。
3、关闭深度写入带来的问题
关闭深度写入,那么物体的渲染顺序就会变得非常的重要,谁先被渲染,谁后被渲染都会影响最终的呈现效果,举例说明
事例一:两个物体 A