繁体   English   中英

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

[英]How can I optimize the rendering of a large model in OpenGL ES 1.1?

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

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

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

有什么建议么?

Tiler利用率为100% 表示您的瓶颈大小与发送到GPU的几何体的大小相同 根据我的经验,无论你如何缩小几何尺寸都可以使渲染时间几乎呈线性减少。 这些调整步骤过去对我有用:

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

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

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

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

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

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

Apple的OpenGL ES编程指南(适用于iOS)的“ 使用顶点数据的最佳实践 ”部分详细介绍了这些要点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM