2.深度测试与DrawCall产生

  1. 2.渲染中深度测试与DrawCall产生
    1. 2.1 题目
    2. 2.2 深入解析
    3. 2.3 答题示例
    4. 2.4 关键词联想

2.渲染中深度测试与DrawCall产生


2.1 题目


在没有使用遮挡剔除的情况下,图中A和B都是默认标准材质。图中的小球最终是否会被渲染,是否会产生DrawCall?


2.2 深入解析

  • 是否会被渲染:最终屏幕上不可见(被遮挡)。标准材质默认 ZTest 开启,小球在立方体后方时,该片元深度测试失败,颜色不写入(或依赖 Early-Z 在片元着色前即被丢弃)。

  • 是否会产生 DrawCall。DrawCall 由 CPU 提交;只要物体未被视锥体剔除且进入渲染列表,就会为对应 SubMesh 发起绘制。深度测试在 GPU 上决定片元是否保留,与「是否发过 DrawCall」无关。

  • 深度测试时机:与硬件与 Shader 有关;不透明物体常可利用 Early-Z 在片元着色器之前做深度比较,并非一律「先跑完片元着色再测深度」。面试答:DrawCall 是提交阶段,深度测试是光栅化后的可见性判定


2.3 答题示例

“在无遮挡剔除的情况下:

  1. DrawCall:小球会产生DrawCall,因为引擎需向GPU提交网格数据以执行深度测试。
  2. 渲染结果:小球不会被最终显示。标准材质默认启用深度测试(Z-Test),由于小球被立方体遮挡,其片元的深度值大于缓冲区值,测试失败后被丢弃。

注意:DrawCall发生在CPU提交命令时,而深度测试在GPU片元处理阶段执行,两者属于渲染管线的不同阶段。”


2.4 关键词联想

  • 深度测试(Depth Testing)
  • Z-缓冲(Z-Buffer)
  • DrawCall提交
  • 片元着色器(Fragment Shader)
  • 遮挡关系(Occlusion)
  • 渲染管线阶段
  • GPU片元处理


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

×

喜欢就点赞,疼爱就打赏