【发布时间】:2011-07-06 18:15:38
【问题描述】:
我正在渲染一些网格(有时超过 500 个),我想知道解决这个问题的最佳方法。创建 500 个 VBO,然后如果它们通过了截锥体和可见性测试,那么渲染它们是否毫无意义。有没有更有效的方法来做到这一点?我希望最大限度地提高性能。
【问题讨论】:
标签: performance opengl vbo
我正在渲染一些网格(有时超过 500 个),我想知道解决这个问题的最佳方法。创建 500 个 VBO,然后如果它们通过了截锥体和可见性测试,那么渲染它们是否毫无意义。有没有更有效的方法来做到这一点?我希望最大限度地提高性能。
【问题讨论】:
标签: performance opengl vbo
要回答您的问题,是的,许多 VBO 会放慢速度。更多的多边形通常会减慢渲染速度,但更多的绘制调用会产生更大的影响。您希望最大限度地减少状态更改和绘制,以及您拥有的缓冲区数量(和内存使用)。
我建议首先查看缓冲区并确定需要多少。如果您可以批处理/实例化几何体、将静态几何体合并到单个缓冲区、更有效地重用缓冲区等。
一旦您将缓冲区减至最少,您将需要使用多种类型的剔除。通过平截头体(可能在八叉树中)和遮挡的可见性可以提供显着的性能提升。主要想法是尽可能快速和简单地取消几何体的资格,因此您从粗略测试(八叉树)开始,然后更详细(可能是 AABB 和/或简化的船体),然后是遮挡,然后实际绘制。
这是一个good article on frustrum culling,它涉及到四叉树(以及扩展的八叉树)。图表、解释和一些示例代码。
OpenGL 遮挡剔除文章似乎不太常见,尽管this one from GPU Gems 可能是一个不错的起点。
【讨论】: