【问题标题】:openGl GPU optimization when rendering stacks of primitives渲染基元堆栈时的openGl GPU优化
【发布时间】:2015-08-21 00:39:25
【问题描述】:

如果我渲染 15 个完全不透明且大小相同的四边形并禁用深度测试,GPU 硬件/软件切割器是否足以处理最上面的四边形并丢弃其他顶点/片段?或者使用模板缓冲区来实现相同的效果会受益吗?

【问题讨论】:

    标签: opengl gpu


    【解决方案1】:

    在这种情况下,大多数 GPU 会过度绘制,如果您的四边形很大,这将对性能非常不利。最好的优化方法可能是启用深度测试,分配适当的深度值并从前到后渲染四边形,而不是使用模板缓冲区。

    但是,在某些条件下(例如,没有混合),许多移动设备(尤其是所有 iOS 设备和许多 Android 设备使用的 PowerVR 设备)中常见的基于图块的延迟渲染 (TBDR) GPU 将执行称为隐藏表面移除 ( HSR),它将优化这种情况并避免渲染将被遮挡的像素。

    【讨论】:

    • 即使从前向后渲染四边形,后面的四边形的顶点也会被处理并生成片段。他们只是丢弃它们而不是绘制。
    • 并且不要在帧中改变深度测试方向。这将破坏大多数 GPU 上的分层 z 缓冲优化,从而导致对每个片段进行早期 z 测试,而不是更粗略的 z 剔除(整个基元可能通过单个测试剔除)。
    • @mmostajab:不在 TBDR 硬件上。移动 GPU 的工作方式不同(对于不透明的几何体)。
    【解决方案2】:

    毫无疑问,它会为所有不透明的四边形生成片段。此外,如果您禁用深度测试,您可能会在屏幕上看到背面。因为深度测试被禁用,最后渲染的人将绘制屏幕。

    即使您使用模板缓冲区,仍然会为四边形生成片段,请通过模板和深度测试。

    【讨论】:

      猜你喜欢
      • 2020-02-29
      • 1970-01-01
      • 1970-01-01
      • 2011-06-16
      • 2015-07-18
      • 1970-01-01
      • 2011-10-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多