为什么有很多网格有很高的性能?

我正在阅读几何实例,因为我想在屏幕上渲染大量的animation对象。

然而,我首先遇到了一个更基本的问题:为什么我甚至需要使用它?

考虑这个设置:

  • 一架飞机作为游戏世界的基础
  • 最重要的是,可以使用物理引擎来破坏大量的瓦片。
  • 一个摄像头,你可以用WASD +鼠标控制方向。

现在我明白,在某些时候肯定会有一个performance冲击。 我认为将所有的对象数据(顶点)发送到GPU会发生。

然而,性能的影响仍然存在,它呈现的每一帧,实际上发生在后台? 考虑到我的场面没有任何变化,甚至在我根本不移动相机的时候也是如此。

我不知道到底发生了什么,在开始解决一个我不明白的问题之前,肯定会想更多地了解它,从而使修复更难理解。 然而我知道修复(几何实例化)的工作原理是每个多个对象基于同一个顶点发送顶点数据一次。 所以不知怎的,这将与顶点的数量有关,但我不知道是怎么回事?

另外:我正在使用Ogre3D引擎,所以任何具体的答案/提示,该引擎也将受到欢迎。

问候。

既然你谈论绘图瓷砖,我认为瓷砖的几何是非常简单的,例如在一个正方形只有2个三角形。 如果是这样的话,你正在绘制大量的瓷砖,几何实例可以帮助你。

在CPU和GPU上,每次绘制调用都会有一定的性能开销。 细节取决于您的硬件,驱动程序等,但一般来说,如果每次绘制调用less于几百个顶点,则不太可能有效地使用GPU; 如果每帧有超过数千次的绘制调用,则可能会使用太多的CPU并成为CPU限制。 实例化可以让你在每一个抽奖中放更多的东西,使每一个抽奖做更多的工作,所以每抽奖的开销并没有太多的伤害你。

在GPU上造成太小的伤害的原因是在内部,GPU需要存储关于当前正在飞行的每个绘制调用的一点点数据,并且这些数据具有有限的内存缓冲区,所以只有大约8个绘制调用最多可以同时运行。 如果抽签是如此之小(有很less的顶点),那么8个抽奖的筹码就不会使用所有的GPU容量,那么这个额外的容量就会被闲置,并且可以通过实例化来使得抽签更大。

在CPU方面,graphics驱动程序在提交绘图调用时必须进行一些validation,内存管理和其他内务处理任务,这可以加起来。 D3D9的经验法则是每帧不超过2000到3,000个绘图调用,以避免成为CPU限制。 我不确定OpenGL或者更新的D3D,但限制将会在几千个范围内。 这个工作并不是真正依赖于绘制的顶点数量,而是依赖于单个绘制调用的数量。 所以更less,更大的平局呼叫在这里也更有效率。