讨论一下 Drawcall 优化,大家来围观

不是,动态图集只是帮你把工程目录自动打包成图集而已,跟手动打图集一样,节约了你手动打图集的步骤,但自动打图集是有弊端的。

动态加载的资源需要通过cc.loader.release(uuid)才能释放出内存。

你是混淆了动态图集和自动图集的概念吧…dynamicAtlas != autoAtlas

编程就是在各种最优之间取舍,很多的非全屏功能说明设计本身没有做好规划,加个遮罩隐藏底层面板这个最容易做的优化都没做就更不要纠结更麻烦的优化了。如果实在不能隐藏就把底层不响应的面板截图成sprite放在下面好了。。。

1赞

我是以为你想指的是自动打包图集。
除了label字体,其它有动态图集?

业务需求可不是一个人说了算,需要在不放弃表现效果的情况下做到流畅,尽量完整的实现设计者的设定,而你说的那些也仅仅是迫不得已才那样处理的一种方式。如果底层性能更好,提供的优化方案更多,那开发者实现功能可以更灵活嘛。当然,在性能瓶颈时,往往都需要放弃一些表现。

我知道一种优化方案:就是动态修改node的渲染顺序,将同图集和label渲染分开,就能达到优化drawcall的效果。
这种思路是参考fairyGUI,奈何本人才刚刚开始使用creater,还没有具体验证这种思路可不可行。

把label的zindex 置于非纹理图的最高层, laya也是这样处理的。这样就是

AAAABBBB AAAABBBB CCCCCCC

不用他的富文本和lable这样问题就解决了

听说 Mask 也会增加 Drawcall,可是我需要用到啊,有大佬支招吗?

尽量用背景色盖住多出的部分,而尽量不用mask。

mask增加drawcall是没办法的事,
因为mask的实现方法,无非stencil check或者rendered texture两种方法
cc显然用的第一种。都需要单独的渲染步骤。

最好的办法就是强行把ABC放进一个图集里。

如果从学术角度探讨,就只能把所有A、B、C的Sprite节点分别集中到3个Node下。

而你的Item不放任何cc.Sprite,而是放一个自己写一个Component,负责不断更新对应Sprite节点的位置……:confounded: (就感觉这个方法很滑稽)

我之前试过把A、B、C分Group。然后放3个Camera分别渲染A、B、C三个组,
且不说要全改成3D节点靠Z坐标控制遮挡关系……

Drawcall根本没降低!!!!:rage:

目前做的功能有多级弹框,drawcall能达到400+,真的难顶…

400+也太多了,怕是完全没用图集吧 :cold_sweat:
如果是预览模式那Drawcall不算数,要构建以后看才行

用了图集了,主要是item里面有些用到了spine以及label都会打断合批

不过话说回来,我预览模式,跟打包后装机的dc是一样高的耶…

其实,最好是显示层级和渲染层级分开,这样能完美解决问题,只是可能对引擎修改较大。

在现有条件下,优化DrawCall可参考我这个帖子:分享一个游戏DrawCall分析利器-SpectorJS

如果把item上面的按最有的方式渲染,然后自己通过代码再调整层级呢?

:laughing:了解了DrawCall之后如何帮助实践?试试这个预览模式和构建模式都能实时查看每个节点的DrawCall的Creator节点树插件:
https://store.cocos.com/app/detail/2940


想要优化列表的DC,区域裁剪+分层渲染。
将item分到不同的层即可。按照这种做法,那么一个列表的DC会在10以下。
例如:mask+item背景层+item道具图标层+item文本层+item选中层=7(DC)

1赞