2021年3月2日

如何减少Draw Call?

尽管减少Draw Call 的方法有很多,但我们这里仅讨论使用批处理(Batching )的方法。

我们讲过,提交大量很小的Draw Call 会造成CPU 的性能瓶颈,即CPU 把时间都花费在准备Draw Call 的工作上了。那么,一个很显然的优化想法就是把很多小的DrawCall 合并成一个大的Draw Call ,这就是批处理的思想。.21 显示了批处理所做的工作。

需要注意的是,由于我们需要在CPU 的内存中合并网格,而合并的过程是需要消耗时间的。因此,批处理技术更加适合于那些静态的物体,例如不会移动的大地、石头等,对于这些静态物体我们只需要合并一次即可。当然,我们也可以对动态物体进行批处理。但是,由于这些物体是不断运动的,因此每一帧都需要重新进行合并然后再发送给GPU,这对空间和时间都会造成一定的影响。

在游戏开发过程中,为了减少Draw Call 的开销,有两点需要注意。

( 1) 避免使用大量很小的网格。当不可避免地需要使用很小的网格结构时,考虑是否可以合并它们。

(2)避免使用过多的材质。尽量在不同的网格之间共用同一个材质。