UG2L15——Drawcall

Drawcall

字面理解DrawCall 就是 绘制呼叫的意思 表示 CPU(中央处理器)通知GPU(图形处理器-显卡)

DrawCall的概念

就是CPU(处理器)准备好渲染数据(顶点,纹理,法线,Shader等等)后
告知GPU(图形处理器-显卡)开始渲染(将命令放入命令缓冲区)的命令

简单来说:一次DrawCall就是 CPU准备好渲染数据通知 GPU渲染的这个过程

如果游戏中DrawCall数量较高会影响CPU的效率,最直接的感受就是游戏会卡顿

举例说明:
以拷贝文件来进行类比
假设我们创建10000个小文件,每个文件大小为1kb,然后把这些文件拷贝到另一个文件夹中
你会发现,即使这些文件加起来不超过10MB,但是拷贝花费的时间是很长的
如果我们单独创建1个10MB的文件拷贝到另一个文件夹,基本可以瞬间拷贝完毕
为什么会这样呢?
因为每一个文件赋值动作都需要很多额外的操作,比如分配内存,创建数据等等
这些操作就会带来一些额外的性能开销
简单理解 文件越多额外开销就越大

渲染过程和上面的例子很类似,每次DrawCall,CPU都需要准备很多数据发送给GPU
那么如果DrawCall越多那么额外开销就越大,其实GPU的渲染效率是很强大的,往往影响渲染效率的
都是因为CPU提交命令的速度
如果DrawCall 太多CPU就会把大量时间花在提交DrawCall上 造成CPU过载,游戏卡顿

如何降低DrawCall数量

在UI层面上
小图合大图——>即多个小DrawCall变一次大DrawCall

制作UI时降低DrawCall的技巧

  1. 通过NGUI Panel上提供的DrawCall查看工具
  2. 注意不同图集之间的层级关系
  3. 注意Label的层级关系