Draw call就是CPU调用图像编程接口(OpenGL中的glDrawElements命令),命令GPU进行渲染操作的过程。
命令缓冲区
如果CPU要等到GPU完成上一个渲染任务才能再发送渲染命令,显然会造成效率低下,因此为了让CPU和GPU可以同时工作命令缓冲区就此产生了。
命令缓冲区包含里一个命令队列,CPU向其中添加命令,而GPU从中读取命令,添加和读取过程是相互独立的,这使得CPU和GPU可以相互独立工作。
命令缓冲区除了Draw call以外还有其他命令(改变使用的着色器,使用不同的纹理等)。
Draw call对帧率的影响
在每次调用draw call之前,CPU需要向GPU发送很多内容,其中包括数据、状态、命令等。在这一阶段,CPU需要完成很多工作,列如检查渲染状态等。而一旦CPU完成了这些准备工作,CPU就可以开始本次的渲染。
GPU的渲染能力很强,渲染200个和2000个三角网格通常没有什么区别,因此渲染速度往往快于CPU提交命令的速度。如果Draw Call太多,CPU往往就会把大量的时间花费在提交Draw Call上,造成CPU的过载。
如何减少Draw Call
- 静态批处理——(Static复选框打勾)
- 如果使用大量很小的网格时,可以考虑是否合并它们。
- 避免使用过多的材质。尽量在不同的网格中使用共同的材质。