16.Shader中的深度测试
16.1 题目
Unity Shader中,深度测试是在做什么?
16.2 深入解析

深度测试(Depth Test)是 GPU 渲染管线的一阶段,用来处理像素的可见性与遮挡关系。其原理如下:
深度缓冲区(Depth Buffer)
GPU 为每一个屏幕像素维护一个深度值(z 值),记录已绘制像素到摄像机的深度。深度比较(Depth Compare)
在绘制新像素前,GPU 会将该像素的深度与深度缓冲区中对应位置的深度值进行比较(如<、<=、>等模式)。- 若通过测试,新像素颜色写入帧缓冲,且更新深度缓冲;
- 若不通过,像素被丢弃,不会影响后续渲染。
遮挡消除
通过深度测试,能确保前面(靠摄像机近处)的几何体正确遮挡后面(更远处)的几何体,生成正确的三维场景可视效果。优化与设置
- 可设置不同的深度比较函数(
ZTest),如LessEqual、Greater等; - 可开启或关闭写入深度缓冲(
ZWrite),适用于半透明或特殊效果材质。
- 可设置不同的深度比较函数(
16.3 答题示例
“深度测试是在渲染每个像素前,将其深度值与深度缓冲区中该像素位置的深度进行比较,以决定是否绘制新像素并更新深度缓冲。这样能正确处理遮挡关系,确保前景物体遮挡背景物体。常用设置包括
ZTest(深度比较模式)和ZWrite(是否写深度)。”
16.4 关键词联想
- 深度缓冲区(Depth Buffer)
- 深度比较(Depth Compare)
- ZTest / ZWrite
- 遮挡剔除(Occlusion)
- GPU 渲染管线阶段
- 可见性判断
- 半透明材质处理
- 深度函数(Less, LessEqual, Greater)
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com