UIStaticBatch静态合批没用?

现状:cocos3.0.1引擎版本,项目中使用了2D拼接地图,使用UIStaticBatch静态合批,浏览器下运行drawcall正常,原生平台和微信小游戏上drawcall异常高。
测试:使用引擎组示例项目浏览器下运行,drawcall正常,如下图11个drawcall


排查后发行这合并drawcall并不是UIStaticBatch静态合批,只是浏览器默认开启了动态合批而已
dynamicAtlasManager.enabled = false;
如上代码禁用动态合批后再测试,如下图drawcall涨到22了

在这里解释一下,现在 UI 静态合批的作用是为了减少对象的数据计算,并不是把所有的 UI 静态对象主动合并到一个批次。当然,也可以通过一些其他手段做到你想象的这样。就是利用静态合批和动态合图。

因为合图的条件是:

  1. 单张图片尺寸不超 512
  2. 文本启用 bitmap 模式或者用 bitmap
  3. 保持 spriteFrame 上的 package 属性开启

这样就可以将所有的图片生成一张大图。共用一张纹理的 UI 渲染节点就可以合并批次。

dynamicAtlasManager.enabled = false; 是关闭了动态合图,那么不同纹理之间的渲染节点就只能单独提交批次,drawcall 上去也是必然

合图条件是在:https://docs.cocos.com/creator/3.2/manual/zh/advanced-topics/dynamic-atlas.html?h=动态图集

当然,现在引擎的同学也在重新梳理这块架构,之后可能会有更加方便的合批方案。

静态合批+图集呢?我之前在c3d1.2.0版本上是可以的
但是现在无论是在原生平台和微信小游戏静态合批+图集也不能减少drawcall
静态合批只是保存了合批后的batch数据,我是不是可以理解静态合批和gpu的渲染没什么关系了,只是采集数据的性能提高了?

对的,你理解的没错。我上面说的静态 + 动态合图,其实跟静态 + 图集的方案是一样的。现在是静态+ 图集的方案在微信上也有问题是吗,你微信小游戏是什么版本的

当前用的是最新的3.1.2版本在微信小游戏上测试

好,你微信开发者工具用的是什么版本的

image

好的,稍等,有结果了我再跟你说

我这里看了一下,用 static-ui 测试,微信小游戏平台数据也没有问题呀。你那里断点看下引擎内的 batch-2d, this._batches 就是收集到的批次,数据收集实在这几个地方,哪里出现本应该合批的数据没有合批,

好的,我尝试一下

引擎3.1.2静态合批+图集是正常的,我之前是把图集打错了才导致异常,感谢~

不用客气哈

该主题在最后一个回复创建后14天后自动关闭。不再允许新的回复。