最近细看了一下cocos creator的图集资源,总结了几点,如果有不对的地方,欢迎指出来。
打图集的主要作用是
1优化包体,因为打图集会自动裁去图片周围的空白区域。
2减少drawcall,提升游戏运行性能。
第一点好理解,主要在第二点,什么是渲染批次,为什么会减少渲染批次。
渲染批次其实就是CPU给GPU(显卡)发出的指令,但是每次发出指令,CPU需要做很多准备工作,准备要渲染的数据,渲染方式等。如果六个散图打成一个图集那么在理想情况下就只要一次drawcall就可以完成,如果不打那么就是六张图六次drawcall。当然这是理想情况,还有一些情况,比如说你打成了一个图集,但是渲染顺序的原因,你在渲染这个图集中的散图的过程中,渲染了其他图集或者贴图资源。那么就不是2次drawcall(一次图集内资源,一次其他图集或者贴图资源)。
举个例子:
现在有两张散图a,b被打成图集AB,还有另一张贴图c。
- 那么如果渲染顺序是,a->b->c那么因为ab被打成图集AB,所以a,b一次drawcall就够了,再加上一次c的drawcall那么两次drawcall就可以完成。
- 如果渲染顺序是a->c->b那么此时虽然a,b被打成图集但是因为渲染顺序的问题,a,b不能一起完成因此,drawcall为3。
总结:
如果图集相当于把散图整合成一张大图,一个贴图资源的渲染就需要一次drawcall。但是如果渲染图集过程中被打断,那么CPU要重新准备其他贴图资源的内存,渲染方式等。因此需要重新drawcall以提交新散图的数据。所以,在打图集的时候如果考虑渲染顺序问题会使,性能进一步优化。