Draw call严格意义上,CPU每次调用图形API的渲染函数(使用OpenGL举例,是gl DrawElements或者DrawIndexedPrimitive)都算作一次Draw Call,但是对于Unity而言,它可以多个Draw Call合并成一个Batch去渲染。
Set Pass Call代表渲染状态切换,主要出现在材质不一致的时候,进行渲染状态切换
batches(批处理)其实就理解成DrawCall值就可以,一个Batch至少包含一个DrawCal
真正造成开销较大的地方,第一个在于在于切换渲染状态,第二在于整理和提交数据。在真正的实践过程当中,可以不用过于介意Draw call这个数字(因为没有提交数据或者切换渲染状态的话,其实多来几个draw call没什么所谓),但是Set Pass Call和Batch两个数字都要想办法降低。由于二者存在强相关性,那么通常降低一个,就一并可以降低第二个。
优化原理:
draw call 与图片精灵有关,即不同图片的个数影响,相同图片的个数不影响
所以将不同的小图片放在一个大图片中可进行优化
优化方式:
精灵打包packing tag
打包时要保证图片类型相同
一张图片在多种场景中使用就不如不打包
切割图片:
美工制作图片时,尽量将需要在同个界面显示的小图做到一张大图中
在unity中切割精灵:
- 选中图集,在Inspector面板中将Sprite Mode 设置为Multiple
- 编辑精灵Sprite Editor