DrawCall我们经常会在各个地方提到。大佬给你说拼UI啊,要注意drawcall啊。发现游戏帧率不高,是不是drawcall过高啊....
其实drawcall就是一个命令,是cpu调用图形渲染的一个命令,也就是CPU与GPU通信的一个接口。
CPU收集筛选数据,在调用DrawCall把渲染命令添加到命令缓冲区中,然后GPU从这个缓冲区中读取渲染命令。
我们的游戏的性能变差真正的原因是CPU在添加命令造成的,也就是多次调用drawcall的原因。我们在添加命令时需要收集创建各种元数据、分配内存等。这就使得性能降低了。同时改变渲染状态也是很慢的一个过程,所以我们要减少调用drawcall。
我们可以使用批处理来减少drawcall的调用,批处理分为静态批处理和动态批处理,静态就是把游戏中不移动的物体统一合并调用一次即可,动态批处理就是把需要同时变化的一个一些物体合并在一起,然后调用。这里就可以间接的理解为什么我们要把一个界面中使用UI图片打到一个图集或者定义到一个图集,并且尽量在同一个界面上不使用多个图集中的图片。还有就是我们避免使用过多的材质,尽量在不同的网格之前共用同一个材质。
这里说到的网格,如果我们使用网格来判断碰撞的话,性能就会降低,也就是间接的解释了为啥少用网格碰撞器的原因吧。