如何在OpenGL ES 1.1中优化大型模型的渲染?

时间:2011-04-19 15:27:51

标签: iphone ios opengl-es vbo

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

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

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

有什么建议吗?

1 个答案:

答案 0 :(得分:10)

Tiler利用率为100%indicates that your bottleneck is in the size of the geometry being sent to the GPU。根据我的经验,无论你如何缩小几何尺寸都可以使渲染时间几乎呈线性减少。这些调整步骤过去对我有用:

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

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

  • Bin类似地着色顶点并将它们渲染为设定颜色的一个组,而不是提供每顶点颜色信息。由于不需要发送所有颜色信息所带来的加速,所需的几个额外绘制调用的开销将大大超过。通过在我的一个较大模型中对颜色进行分级,我看到渲染时间缩短了约18%。

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

  • 不要在任何时候停止渲染管道。删除所有读取当前状态的内容,就像所有glGet *调用一样,因为它们真的搞乱了PowerVR GPU的流程。

你可以做的其他事情会导致更小的性能提升,例如在VBO中使用交错的顶点,法线,纹理数据,将数据对齐到4字节边界等等,但上面的那些就是我的意思。我发现在调整我自己的OpenGL ES 1.1应用程序时影响最大。

Apple的OpenGL ES Programming Guide for iOS的“Best Practices for Working with Vertex Data”部分详细介绍了这些要点。