我刚刚在我的 3D 应用程序中完成 VBO 的实现,并发现渲染速度提高了大约 5-10 倍。过去以每秒 1-2 帧渲染的内容现在以每秒 10-11 帧渲染。
我的问题是,是否可以进一步改进以提高渲染速度?三角带会有很大的不同吗?目前顶点不在面之间共享,每个面的顶点都是唯一但重叠的。
我的设备利用率为 100%,Tiler 利用率为 100%,渲染器利用率为 11%,资源字节为 114819072。这是在 CAD 模型上渲染 912,120 个面。
有什么建议吗?
最佳答案
100% 的 Tiler 利用率 indicates that your bottleneck is in the size of the geometry being sent to the GPU .根据我的经验,无论你能做什么来缩小几何尺寸,都可以导致渲染时间几乎呈线性减少。这些调整步骤过去对我有用:
如果您还没有这样做,您可以考虑使用索引,这可能会通过消除一些冗余顶点来减少几何体。 iOS 设备中的 PowerVR GPU 也针对使用索引几何进行了优化。
尝试为顶点信息使用较小的数据类型。我发现我可以对我的顶点和法线使用 GLshort 而不是 GLfloat,而不会在渲染中损失太多精度。这将显着压缩您的几何图形并显着提高渲染速度。
对颜色相似的顶点进行分类并将它们作为一组以设置的颜色呈现,而不是提供每个顶点的颜色信息。无需发送所有颜色信息所带来的加速将大大抵消这所需的少数额外绘制调用所带来的开销。通过在我的一个较大模型中合并颜色,我发现渲染时间减少了约 18%。
您已经在使用 VBO,因此您已经利用了该优化。
在任何时候都不要停止渲染管道。删除任何读取当前状态的内容,例如所有 glGet* 调用,因为它们确实会干扰 PowerVR GPU 的流程。
还有其他一些你可以做的事情会导致较小的性能改进,比如在你的 VBO 中使用交错的顶点、法线、纹理数据,将你的数据对齐到 4 字节边界等,但上面的那些是我'我发现它对我自己的 OpenGL ES 1.1 应用程序的调整影响最大。
Apple 的 iOS OpenGL ES 编程指南的“Best Practices for Working with Vertex Data”部分详细介绍了其中的大部分要点。
关于iphone - 如何在 OpenGL ES 1.1 中优化大型模型的渲染?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5718846/