25

我一直在尝试执行一些 OpenGL ES 性能优化,以提高我在 iPhone 应用程序中每秒能够渲染的三角形数量,但我遇到了障碍。我尝试将我的 OpenGL ES 数据类型从固定转换为浮点(根据Apple 的建议),交错我的顶点缓冲区对象,并最大限度地减少绘图状态的变化,但这些变化都没有对渲染速度产生影响。无论如何,我似乎无法在运行 3.0 操作系统的 iPhone 3G 上将我的应用程序推到 320,000 个三角形/秒以上。根据这个基准,我应该能够在这个硬件上使用我正在使用的平滑阴影达到 687,000 个三角形/秒。

在我的测试中,当我在 Instruments 中针对正在运行的设备运行 OpenGL ES 性能工具时,我看到在渲染我的基准测试时统计“Tiler Utilization”达到了近 100%,但“Renderer Utilization”仅达到了大约 30 %。这可能提供了关于显示过程中的瓶颈是什么的线索,但我不知道这些值是什么意思,也没有找到任何关于它们的文档。有人对 iPhone OpenGL ES 仪器中的这个和其他统计数据代表什么有很好的描述吗?我知道 iPhone 3G 中的 PowerVR MBX Lite 是基于tile 的延迟渲染器,但我不确定该架构中的 Renderer 和 Tiler 之间有什么区别。

如果它有任何帮助,如果您想自己下载和测试,可以使用此应用程序的(BSD 许可)源代码。在当前配置中,每次加载新的分子结构时它都会启动一个小基准测试并将三角形/s 输出到控制台。

4

2 回答 2

27

Tiler Utilization 和 Renderer Utilization 百分比分别衡量顶点和片段处理硬件的占空比。在 MBX 上,Tiler Utilization 通常随着发送到 GPU 的顶点数据量(根据顶点数量和每个顶点发送的属性大小)而缩放,并且 Fragment Utilization 通常随着过度绘制和纹理采样而增加.

在您的情况下,最好的办法是减少您发送的每个顶点的大小。对于初学者,我会尝试按颜色对原子和键进行分箱,并使用恒定颜色而不是数组发送这些箱中的每一个。考虑到适当的缩放比例,我还建议调查短裤是否适合您的位置和法线。在这种情况下,您可能还必须按位置分箱,如果按比例缩放以提供足够精度的短裤不能覆盖您需要的范围。这些技术可能需要额外的绘图调用,但我怀疑顶点吞吐量的提高将超过每次绘图调用的额外 CPU 开销。

请注意,确保每个顶点属性从 32 位边界开始通常是有益的(在 MBX 和其他地方),这意味着如果您将位置和法线切换为短裤,您应该将它们填充到 4 个组件。MBX 平台的特性也使得您希望在这种情况下在调用 glVertexPointer 时实际包含位置的 W 分量。

您还可以考虑为多边形数据(尤其是球体)采用 DOT3 等替代照明方法,但这需要特别小心,以确保您不会使渲染片段绑定,或无意中发送比以前更多的顶点数据。

于 2009-08-22T17:15:03.540 回答
7

很好的答案,@Pivot!作为参考,此 Apple 文档定义了以下术语:

  • 渲染器利用率 %。GPU 用于执行片段处理的时间百分比。
  • 瓷砖利用率 %。GPU 用于执行顶点处理和平铺的时间百分比。
  • 设备利用率 %。GPU 花费在任何平铺或渲染工作上的时间百分比。
于 2015-06-11T05:00:57.090 回答