creator采坑之渲染合并~drawcall

1.合并的规则AABBCC:
ABC三个节点里分别里面都有sprite,AA代表两个节点里的图是一样的,或者是来自同一个图集(Atlas)。这样的节点排序情况下,会产生3个drawcall,如果是ABABAC,这样的排序是6个drawcall。如果想减少drawcall就尽量用含相同图集的节点排序相邻,或者包含子同一个节点里,中间不能有label或者不同图集或者不同的纹理,否则渲染会被打断。
2.第二个坑rgba不一样,类型不一样,都不会进行渲染合并,drawcall自然会高居不下,比如sprite的type不一样,一个是sliced,一个是simple,是不会合并到一起的,就算两个sprite是来自同一个图集,也是分两次渲染,算两个drawcall…所以,想要两个节点甚至两百个节点只产生一个drawcall…只能让他们都是同一个type的sprite,type都是simple或者都是xxx…并且来自同一张图集的,或者是同一个纹理(同一张图),最后,他们的节点树中,这两百个节点,中间不能包含有label、或者其他的纹理和其他图集的图等,否则渲染就被打断了,就可能会产生2个3个…甚至200个drawcall,drawcall的多少关键在于节点包含的sprite在渲染的过程中,你在他们相邻的节点中,哪里打断了他们,打断后,如果后面的sprite全是一样的,他们还是会进行渲染合并的,只是中间被中断了。比如:
AAABAAA ------> 这样是算3个drawcall
AABAAAA -------> 这样也是算3个drawcall
AABABAA -------> 这样就算5个drawcall

小结:渲染合并很容易被打断…太难了~像背包、游戏战斗场景,怪物多,或者是背包的物品里包含的纹理多等等的情况下,drawcall会很高~掉帧的情况就会很严重,不过也看手机~像iphoneXS,就算400 drawcall也不会有很直观的感受~ 中低端手机就惨了,卡成狗。 我也是自己用demo去测试了一下,模拟了下现在做的项目的情况,找出了项目的瓶颈所在,上面的看不懂小伙伴或者新手建议自己去用一个简单的demo去测试一下就清晰明白了~

有漏的也麻烦各位补充下~!小弟像各位学习!:wink:

大神看到的话嘴下留情~~~~只是想分享一下心得,给正在学习creator或者在这方面有疑问的小伙伴~有说错的麻烦指正下~同时也希望引擎组能对creator的渲染合并这一块做出更多的优化,或者开放API接口,方便开发者根据项目的需求自行调整策略~:wink:

3赞

赞一个

Mark

:grin:谢谢

最近也再用creator,最近用的2.3.4,引擎中已经有动态合图开关,来优化drawcall 了,但是label 还是会打断,苦恼,正在优化别人拼的界面结构和label的cache mode. …

对呀,最简单的办法就是从节点上的排布来解决这种被打断动态合图的情况,还有种取巧的办法,就是做快照,但是这方法只适用于刷新比较少,但是dc占用比较大的预制

写一个渲染分组管理器,背包中的每一项,加载完毕后,把渲染节点转移到渲染分组管理器中。

也是个方向,感谢分享:pray:

能用bitmap就用bitmap,不行就只能自己多考量下层级位置了

嗯嗯,正在优化。。。。。

嗯,好,我在研究研究

用fairygui,没有子节点的,会不会因为这个,所以drawcall低?