16.Shader中的深度测试

  1. 16.Shader中的深度测试
    1. 16.1 题目
    2. 16.2 深入解析
    3. 16.3 答题示例
    4. 16.4 关键词联想

16.Shader中的深度测试


16.1 题目

Unity Shader中,深度测试是在做什么?


16.2 深入解析

深度测试(Depth Test)是 GPU 渲染管线的一阶段,用来处理像素的可见性与遮挡关系。其原理如下:

  1. 深度缓冲区(Depth Buffer)
    GPU 为每一个屏幕像素维护一个深度值(z 值),记录已绘制像素到摄像机的深度。

  2. 深度比较(Depth Compare)
    在绘制新像素前,GPU 会将该像素的深度与深度缓冲区中对应位置的深度值进行比较(如 <<=> 等模式)。

    • 若通过测试,新像素颜色写入帧缓冲,且更新深度缓冲;
    • 若不通过,像素被丢弃,不会影响后续渲染。
  3. 遮挡消除
    通过深度测试,能确保前面(靠摄像机近处)的几何体正确遮挡后面(更远处)的几何体,生成正确的三维场景可视效果。

  4. 优化与设置

    • 可设置不同的深度比较函数(ZTest),如 LessEqualGreater 等;
    • 可开启或关闭写入深度缓冲(ZWrite),适用于半透明或特殊效果材质。

16.3 答题示例

“深度测试是在渲染每个像素前,将其深度值与深度缓冲区中该像素位置的深度进行比较,以决定是否绘制新像素并更新深度缓冲。这样能正确处理遮挡关系,确保前景物体遮挡背景物体。常用设置包括 ZTest(深度比较模式)和 ZWrite(是否写深度)。”


16.4 关键词联想

  • 深度缓冲区(Depth Buffer)
  • 深度比较(Depth Compare)
  • ZTest / ZWrite
  • 遮挡剔除(Occlusion)
  • GPU 渲染管线阶段
  • 可见性判断
  • 半透明材质处理
  • 深度函数(Less, LessEqual, Greater)


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏