文章连接: http://gad.qq.com/article/detail/26927
在Unity中,Batch(批处理)一般是指进过打包之后的Draw call
绘制100万个物体,每个物体10个三角形 与 绘制10个物体,每个物体100万个三角形,那个效率更快;后者更快
每一次Btach都是CPU准备渲染数据,向GPU提供渲染数据,这个过程比较消耗性能,当这个Batch达到一定量,CPU负荷则会大大增加,达到瓶颈。(好的CPU的Batch瓶颈可能是200,差的CPU可能是130)
总结:每一次Batch的提交就是一次Draw call的调用,
Draw call消耗性能的原因:每调用一次API:Application->Runtime->Driver->VideoCard(GPU处理),其中每一步都会有一定的耗时
其中最大的耗时在Runtime发送渲染命令给Driver,如果每一个调用API都让Runtime发送命令给Driver,那样开销太大,所有在Runtime中有一个Command Buffer的东西,这个东西会缓存Runtime的命令,在适当时机一次发给Driver,这样避免了每次的调用;
综合所有:Draw call消耗的2个主要原因:1:把Draw call及渲染状态切换的API调用转换成设备无关命令的消耗时间(其中还包括命令检查等操作)
2:刷新Command Buffer导致CPU由用户模式切换到内核模式带来的消耗(这两个模式请百度)
第1点的消耗并不大,关键的消耗在第2点,所以我们希望Command尽可能的缓存多的命令,一次提交给Driver
最后:优化:1:目标平台的CPU性能 2:Batch提交操作所能够占用的CPU性能百分比(为其他CPU任务留出资源)
解决渲染问题的办法 1是合并批次减少DC,2是对Driver进行优化(有DX,OpenGL优化) 对于开发人员来说,减少DC还是很重要的