OpenGL - 会使用多个VBO的慢速渲染吗?

Don*_*urb 10 opengl performance vbo

我正在渲染一些网格(有时超过500),我想知道解决这个问题的最佳方法.创建500个VBO是否毫无意义,然后如果它们通过视锥和可见性测试,则渲染它们.有没有更有效的方法来做到这一点?我希望最大限度地提高性能.

ssu*_*ube 11

为了回答你的问题,是的,很多维多利亚州的公司都会放慢速度.更多的多边形通常会减慢渲染速度,但更多的绘制调用会受到更大的影响.您希望最小化状态更改和绘制,以及您拥有的缓冲区数量(以及内存使用).

我建议先看一下缓冲区,然后弄清楚你需要多少缓冲区.如果可以批处理/实例几何,则将静态几何合并到单个缓冲区中,更有效地重用缓冲区等.

一旦你将缓冲区减少到最小可能,你就会想要使用多种类型的剔除.通过frustrum(可能在八叉树中)和遮挡的可见性可以提供显着的性能提升.主要思想是尽可能快速和简单地取消几何图形的资格,所以你从粗糙测试(八叉树)开始,然后稍微更详细(可能是AABB和/或简化的船体),然后是遮挡,然后实际绘制.

这是关于截头剔除的一篇很好的文章,它涉及到四边形(并且通过扩展,八叉树).图表,解释和一些示例代码.

OpenGL遮挡剔除文章似乎有点不太常见,尽管GPU Gems中的这篇文章可能是一个很好的起点.

  • 是的,VBO是好的(如果有办法避免它,你永远不应该在每个帧上发送几何),但是有太多的缓冲区会导致内存不足错误并且会极大地损害性能.我不确定500是*太多*,但它足够推动你可能会考虑削减它. (2认同)