UG2L15——Drawcall
UG2L15——Drawcall
Drawcall
字面理解 DrawCall 就是 绘制呼叫的意思 表示 CPU(中央处理器)通知GPU(图形处理器-显卡)
关于 DrawCall 更详细的介绍,参见:UPL6-1——DrawCall
DrawCall 的概念
就是 CPU(处理器)准备好渲染数据(顶点,纹理,法线,Shader 等等)后
告知 GPU(图形处理器 - 显卡)开始渲染(将命令放入命令缓冲区)的命令
简单来说:一次 DrawCall 就是 CPU 准备好渲染数据通知 GPU 渲染的这个过程
如果游戏中 DrawCall 数量较高会影响 CPU 的效率,最直接的感受就是游戏会卡顿
举例说明:
以拷贝文件来进行类比,假设我们创建 10000 个小文件,每个文件大小为 1 kb,然后把这些文件拷贝到另一个文件夹中
你会发现,即使这些文件加起来不超过 10 MB,但是拷贝花费的时间是很长的,
如果我们单独创建 1 个 10 MB的文件拷贝到另一个文件夹,基本可以瞬间拷贝完毕
为什么会这样呢?因为每一个文件赋值动作都需要很多额外的操作,比如分配内存,创建数据等等
这些操作就会带来一些额外的性能开销,简单理解,文件越多额外开销就越大
渲染过程和上面的例子很类似,每次 DrawCall,CPU 都需要准备很多数据发送给 GPU
那么如果 DrawCall 越多那么额外开销就越大,其实 GPU 的渲染效率是很强大的,往往影响渲染效率的,都是因为 CPU 提交命令的速度
如果 DrawCall 太多,CPU 就会把大量时间花在提交 DrawCall 上 造成 CPU 过载,游戏卡顿
如何降低 DrawCall 数量
在 UI 层面上:小图合大图——>即多个小 DrawCall 变一次大 DrawCall
制作 UI 时降低 DrawCall 的技巧
- 通过 NGUI Panel 上提供的 DrawCall 查看工具
- 注意不同图集之间的层级关系
- 注意 Label 的层级关系
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 文KRIFE齐的博客!
