7

我刚刚在我的 3D 应用程序中完成了 VBO 的实现,并且看到渲染速度大约提高了 5-10 倍。过去以每秒 1-2 帧的速度呈现的内容现在以每秒 10-11 帧的速度呈现。

我的问题是,我可以做任何进一步的改进来提高渲染速度吗?三角带会有很大的不同吗?当前顶点没有在面之间共享,每个面的顶点都是唯一的但重叠。

我的设备利用率为 100%,Tiler 利用率为 100%,渲染器利用率为 11%,资源字节为 114819072。这是在 CAD 模型上渲染 912,120 个面。

有什么建议么?

4

1 回答 1

10

100% 的 Tiler Utilization表示您的瓶颈在于发送到 GPU 的几何图形的大小。根据我的经验,无论你可以做什么来缩小几何尺寸,都会导致渲染时间几乎线性减少。这些调整步骤过去对我有用:

  • 如果您还没有,您可以考虑使用索引,这可能会通过消除一些冗余顶点来减少几何图形。iOS 设备中的 PowerVR GPU 也针对使用索引几何进行了优化。

  • 尝试为您的顶点信息使用较小的数据类型。我发现我可以对顶点和法线使用 GLshort 而不是 GLfloat,而不会在渲染中损失太多精度。这将显着压缩您的几何图形并大大提高渲染速度。

  • Bin 相似颜色的顶点并将它们作为一组以设定的颜色渲染,而不是提供每个顶点的颜色信息。这需要的几个额外绘制调用的开销将大大超过您不必发送所有颜色信息所获得的加速。通过在我的一个较大模型中合并颜色,我发现渲染时间减少了约 18%。

  • 您已经在使用 VBO,因此您已经利用了该优化。

  • 不要在任何时候停止渲染管道。删除读取当前状态的任何内容,例如所有 glGet* 调用,因为它们确实会干扰 PowerVR GPU 的流程。

你可以做一些其他的事情来提高性能,比如在你的 VBO 中使用交错的顶点、法线、纹理数据,将你的数据对齐到 4 字节边界等,但上面的那些是我发现的对我自己的 OpenGL ES 1.1 应用程序的调优影响最大。

苹果的 OpenGL ES Programming Guide for iOS 的“ Best Practices for Working with Vertex Data ”部分很好地涵盖了这些要点中的大部分。

于 2011-04-19T18:44:08.577 回答