一、什么是Draw Call
CPU命令GPU进行渲染操作就是Draw Call,调用一次就是一次Draw Call,如OpenGL中glDrawElements,或是DX中的DrawIndexedPrimitive。而Draw Call影响性能的其实是在CPU,而不是在GPU的渲染状态改变
二、CPU与GPU如何并行工作
CPU与GPU之间有一个命令缓冲区(Command Buffer),是一个命令队列,CPU不断的向其中添加命令,GPU不断的读取命令,其过程是相互独立的,所以CPU和GPU能并行工作。
命令有很多种,Draw Call只是其中一种,还有改变各种渲染状态的命令。

往往改变渲染状态会更加耗时
三、Draw Call多了会影响性能
每次调用Draw Call之前,CPU都会向GPU发送很多内容,各种数据,状态,命令。而这一阶段CPU需要完成很多工作,比如检查渲染状态,一旦CPU做好了准备工作,GPU就可以进行渲染工作了,而GPU多是并行计算,所以处理时间很快,所以渲染速度的快慢往往取决于CPU的提交速度,所以Draw Call数量太多就会大量占用CPU,造成性能下降。

四、减少Draw Call
1、批处理(Batching)
将一些小的Draw Call合并成一个大的Draw Call,在CPU的内存中将渲染状态相同的网格合并,而合并操作很耗时,所以批处理适合将静态物体合并,如地形,建筑。如果渲染状态不同则无法合并。
2、资源上
避免使用大量小的网格,在建模时注意合并可以合并的小网格。
避免使用过多材质,尽量共用材质。
网友评论