深度

现在常用的算法是深度缓存Z-buffer
需要注意的是深度缓存存的是每个像素的深度,不是物体的深度
frame buffer 存储颜色值
depth buffer (z-buffer) 存储深度值
一般情况下,越近z越小,越远z越大

在这张图中,越远则z越趋近于+∞,越近z趋近于0.近的地方颜色深,远的地方颜色白
算法流程:

物体由很多三角形组成,每个三角形可能会覆盖若干个像素
这个算法的意思,先初始化深度缓存为0,遍历三角形中每个点,如果当前z<深度缓存中的z,则向z-buffer写入深度,向frame-buffer写入颜色
这个过程也被称作深度测试,通过深度测试的部分会被更新到深度缓存(也被称为深度写入),未通过的部分会被舍弃
在写透明类型的shader中经常要关闭深度写入,改变渲染队列,即用Zwrite Off和"Queue" = "Transparent",因为需要让unity知道我们想要先绘制不透明的,再绘制半透明的,如果不关闭深度写入,深度缓存中近处物体的信息会覆盖远处物体

posted @ 2022-01-06 01:25  melt00  阅读(128)  评论(0编辑  收藏  举报