-
Creator 版本:V2.2.1
-
目标平台: iOS微信平台
-
手机型号:苹果6
用代码创建100个spine动画小人,无动作。
合批后是 2 drawcall.但是在苹果6设备的微信版本里,渲染效率只有7 帧。
同时在 oppo手机上查看 内存,有100M内存的增长。
案例在附件里。请查看。
理论上2 drawcall 画 100个小人,不应该有渲染降帧影响 ,麻烦帮忙解决下。
Creator 版本:V2.2.1
目标平台: iOS微信平台
手机型号:苹果6
用代码创建100个spine动画小人,无动作。
合批后是 2 drawcall.但是在苹果6设备的微信版本里,渲染效率只有7 帧。
同时在 oppo手机上查看 内存,有100M内存的增长。
案例在附件里。请查看。
理论上2 drawcall 画 100个小人,不应该有渲染降帧影响 ,麻烦帮忙解决下。

要沉了吗?


你好,我在确认问题了。
同屏渲染多个骨骼动画需要开销大量的 js 内存,并且需要大量逻辑运算。这是无法避免的。ios 端的微信小游戏平台由于 ios 系统的限制,无法使用 JIT 优化性能,所以帧率比 android 平台来得低。建议使用骨骼动画的 Animation Cache Mode,选择 SHARED_CACHE 模式或者 PRIVATE_CACHE 模式。
详细请查看文档:
https://docs.cocos.com/creator/manual/zh/components/spine.html
SHARED_CACHE PRIVATE_CACHE 这两个模式我也测试了。 也没什么效果。
现在是批次不高。 只有2个drawcall。 这个问题暂时不好解决是不?
嗯,暂时不好解决。
但是有个现象,加载一百个spine动画后,持续跑一段时间,内存会有降下来。这个也没办法解决是不?
ios 微信平台上合批的代价是让js去算矩阵,由于ios 微信平台没有jit,所以js运算性能会很差,动画的顶点越多,js的运算瓶颈会越明显,这个也是ios 微信小游戏独有的问题,所以在ios 微信小游戏上不要一味地追求drawcall低,还不如不合批,让gpu去算矩阵,可能来得更快一些。
嗯。确实是。发现合批和不合批没什么效果。十分感谢~~
希望能尽快优化 spine 性能问题 。
后面怎么解决了这个问题
现在解决了吗。我目前的发生的情况也跟这个类似,我使用了两种方法但是渲染的结果不一样。一种drawcall低但是帧率也低,另外一种drawcall高,帧率也会高,合批的效果有生效但是没有前一种那么好
大量复杂Mesh的Spine,就别合批了,
所有顶点数据都是在CPU本地运算出来,根本吃不消。
导入的spine就四个动作,常用的就只有行走跟死亡这两个动画,场景渲染几百个跟几十个是有差别的,几十个满帧率drawcall不到10(是否说明合批成功),后面的个数比较多以后,drawcall值约等于node渲染个数除以2。这种情况是没有办法继续优化的吗?
那有可能,你单个Spine就是打断dc, 单个spine 是不是超过 2 dc。
无论你合与不合,只要你勾了合批开关,spine 都会在本地算顶点数据。
确实,我导入的spine是2dc,个数少的时候合批非常成功,但就是个数多起来以后,dc飞速增加,但是不影响帧率。我换另外一个方法,dc一直都是低的,但是帧率就没法稳定60,只有30左右,而且还会随着spine的生成继续降低
复杂Mesh的Spine 不建议开启合批,性能非常不划算。