我正在渲染一些网格(有时多达500个),我想知道最好的处理方法是什么。是否创建500个VBO并在它们通过视锥体和可见性测试后渲染它们是无意义的?有没有更高效的方法来完成这项工作?我想要最大化性能。
我正在渲染一些网格(有时多达500个),我想知道最好的处理方法是什么。是否创建500个VBO并在它们通过视锥体和可见性测试后渲染它们是无意义的?有没有更高效的方法来完成这项工作?我想要最大化性能。
回答您的问题,是的,许多VBO会减慢速度。更多的多边形通常会降低渲染速度,但更多的绘制调用会产生更大的影响。您想要尽量减少状态更改和绘制次数,以及您拥有的缓冲区数量(和内存使用)。
我建议首先查看缓冲区,并确定您需要多少个。如果您可以批量/实例几何图形,将静态几何图形合并到单个缓冲区中,更有效地重用缓冲区等。
一旦将缓冲区减少到可能的最小值,您将想要使用多种裁剪。能见度,通过视锥体(也许在八叉树中)和遮挡,可以提供显著的性能提升。主要思想是尽快简单地淘汰几何图形,因此您从粗略测试开始(八叉树),然后进行稍微详细的测试(也许是AABB和/或简化的外壳),然后进行遮挡,最后再进行绘制。
这是一个关于视锥体裁剪的好文章,涉及一些四叉树(以及八叉树)。图示、解释和一些示例代码。
OpenGL遮挡裁剪文章似乎较少,虽然这篇来自GPU Gems的文章可能是一个好的起点。