【问题标题】:My experiment shows that rendering order affects performance a lot in TBR architecture, why?我的实验表明渲染顺序对架构中的性能影响很大,为什么?
【发布时间】:2009-11-05 18:43:02
【问题描述】:

TBR 芯片在片段处理之前执行 HSR(隐藏表面去除),因此仅渲染可见像素。此功能无需从前到后对不透明对象进行排序。但是我在我的 iPhone 3GS 上做了一个实验。通过比较帧时间,从前向后渲染不透明对象比从后向前渲染要快得多。 为什么会显示这个结果?无论以何种顺序渲染对象,性能都应该非常接近。

【问题讨论】:

    标签: ios performance opengl-es rendering tile


    【解决方案1】:

    我相信不执行片段处理的优化是通过使用 Z 缓冲区来确定像素是否可见(如果像素不可见,则尽早退出管道)。因此,对于该优化,从后到前渲染将是最坏的情况(不可能进行优化),而从前到后渲染是最好的情况(所有最终隐藏的像素都已隐藏)。

    【讨论】:

      【解决方案2】:

      如果为真,则与 Apple's documentation on the topic 相矛盾:

      • 不要浪费 CPU 时间从前到后排序对象。 OpenGL ES 用于 iPhone 和 iPod touch 实现了一个 基于瓦片的延迟渲染模型 这使得这没有必要。看 “基于图块的延迟渲染” 更多信息。
      • 按对象的不透明度对对象进行排序:

        1. 首先绘制不透明的对象。
        2. 接下来绘制需要 alpha 测试的对象(或在 OpenGL ES 2.0 基于应用程序的对象 要求在 片段着色器。)请注意,这些 操作有性能损失, 如“避免 Alpha 测试和 丢弃。”
        3. 最后,绘制 alpha 混合对象。

      以及文档here:

      延迟的另一个优点 渲染是它允许GPU 之前执行隐藏表面移除 片段被处理。像素 不可见被丢弃 采样纹理或执行 片段处理,显着 减少 GPU 的计算量 必须执行以渲染场景。到 从中获得最大的利益 功能,您应该尝试绘制为 大部分内容不透明的场景 尽可能减少使用 混合、阿尔法测试和 在 GLSL 着色器中丢弃指令。 因为硬件执行隐藏 表面去除,没有必要 让您的应用程序对其进行排序 从前到后的几何图形。

      【讨论】:

      • 是的,我看过这个文档“OpenGLES_ProgrammingGuide”,所以结果真的很奇怪。这也可以在从纹理中获取像素的实验中找到。我没有看到高铁的好处。
      • @Brad Larson - 可能是芯片在确定哪些像素可见之前没有进行纹理/着色。但是 - 确定哪些像素位于 z 顺序的顶部仍然可以通过使用提前输出机制进行优化,这将使从前到后的渲染速度比从后到前的渲染速度(如果您使用分层 z 缓冲区比你可以消除扫描整个三角形而不是像素化它们并确定像素可见性的需要)。
      猜你喜欢
      • 2015-01-10
      • 1970-01-01
      • 2012-05-11
      • 1970-01-01
      • 2018-11-19
      • 1970-01-01
      • 2011-06-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多