DrawCall 优化。自动图集配置小图尺寸满足动态合批,将优先插入动态图集,导致合批被打断的问题。

  • Creator 版本:3.8.5

  • 目标平台:

  • 重现方式:

  • 首个报错:

  • 之前哪个版本是正常的:

  • 手机型号:

  • 手机浏览器:

  • 编辑器操作系统:

  • 重现概率:

在我的Demo项目中,


场景中存在 5 个 进度条,进度条的图集全部是一张自动图集配置。
理论上我的DrawCall应该是1.

但是因为Cocos3.8.5 有一个Bug,那就是图片精灵的类型如果是 TILED

,动态图集将不会插入这张图片,从而合批被打断。导致我的DrawCall变为 11

上面的Bug我不关心如何接近,但是因为这个Bug,我发现了另一个问题,在我的图片文件夹中,存在一个 自动图集配置 文件,文件希望将进度条相关的所有资源进行合图。
但是当我配置了自动图集配置文件并进行打包的时候,发现完全没有使用我自动图集配置打包生成的大图,Cocos这边是直接将大图中的小图放进动态图集中了,顺序是:加载图片->判断图片尺寸是否满足自动图集配置添加 的尺寸->将图片插入到动态图集。

这个流程是完全跳过自动图集配置生成的大图的。导致我打包后,DrawCall与编辑器预览的DrawCall一致都是11

我的需求就是:我不希望自动图集配置中的图片被 动态图集所添加。所以我后来考虑的方案是:将图片SpriteFrame的Packable反选image 。 但是这样的话不光动态图集不添加了,自动图集配置也不会添加了。

就感觉很邪门,如果说我的动态图集配置中全是类似的小图,那么动态图集配置岂不是一点用处都没有了?

就是说,如果我把自动合图设置为关闭,那么cocos才会使用 自动图集配置的大图,我的DrawCall会降为2

如果我把动态图集开启,那么精灵图片就会被加入到动态图集中,导致我的DrawCall变为 12

我觉得这个东西本身就是一个隐藏缺陷。 我的大图集里面不能放小图,这就很恶心了。 如果我的大图里面全是小图,这就导致我的合批规则直接发生非常大的改变,而这又是各个文档中不曾提及的。 不是不经意间用小Demo发现问题,项目中如果遇到这种问题,能把人查的想吐。。。。