【发布时间】:2009-11-05 18:43:02
【问题描述】:
TBR 芯片在片段处理之前执行 HSR(隐藏表面去除),因此仅渲染可见像素。此功能无需从前到后对不透明对象进行排序。但是我在我的 iPhone 3GS 上做了一个实验。通过比较帧时间,从前向后渲染不透明对象比从后向前渲染要快得多。 为什么会显示这个结果?无论以何种顺序渲染对象,性能都应该非常接近。
【问题讨论】:
标签: ios performance opengl-es rendering tile
TBR 芯片在片段处理之前执行 HSR(隐藏表面去除),因此仅渲染可见像素。此功能无需从前到后对不透明对象进行排序。但是我在我的 iPhone 3GS 上做了一个实验。通过比较帧时间,从前向后渲染不透明对象比从后向前渲染要快得多。 为什么会显示这个结果?无论以何种顺序渲染对象,性能都应该非常接近。
【问题讨论】:
标签: ios performance opengl-es rendering tile
我相信不执行片段处理的优化是通过使用 Z 缓冲区来确定像素是否可见(如果像素不可见,则尽早退出管道)。因此,对于该优化,从后到前渲染将是最坏的情况(不可能进行优化),而从前到后渲染是最好的情况(所有最终隐藏的像素都已隐藏)。
【讨论】:
如果为真,则与 Apple's documentation on the topic 相矛盾:
- 不要浪费 CPU 时间从前到后排序对象。 OpenGL ES 用于 iPhone 和 iPod touch 实现了一个 基于瓦片的延迟渲染模型 这使得这没有必要。看 “基于图块的延迟渲染” 更多信息。
按对象的不透明度对对象进行排序:
- 首先绘制不透明的对象。
- 接下来绘制需要 alpha 测试的对象(或在 OpenGL ES 2.0 基于应用程序的对象 要求在 片段着色器。)请注意,这些 操作有性能损失, 如“避免 Alpha 测试和 丢弃。”
- 最后,绘制 alpha 混合对象。
以及文档here:
延迟的另一个优点 渲染是它允许GPU 之前执行隐藏表面移除 片段被处理。像素 不可见被丢弃 采样纹理或执行 片段处理,显着 减少 GPU 的计算量 必须执行以渲染场景。到 从中获得最大的利益 功能,您应该尝试绘制为 大部分内容不透明的场景 尽可能减少使用 混合、阿尔法测试和 在 GLSL 着色器中丢弃指令。 因为硬件执行隐藏 表面去除,没有必要 让您的应用程序对其进行排序 从前到后的几何图形。
【讨论】: