【万人同屏】Spine多角色合批,性能优化

1 万个 Spine 同屏,微信真机稳 60 帧

做小游戏 / 手游大概率都遇到过同一个噩梦:Spine 动画效果好,但角色一多就卡。
几百个角色 Draw Call 爆炸、CPU 骨骼计算吃不消,最后砍表现、砍人数,气氛暴跌。
现在来个骁龙 865 真机压测:10000 个 Spine 角色同屏,Draw Call 只有 1,稳 60 帧。

:point_right: 完整演示视频:https://www.bilibili.com/video/BV1mnh766EEj

实测数据:直接上真机截图

测试机器:小米10 pro , 骁龙865
测试环境:微信小游戏真机,Cocos Creator 3.8.x,
开启实时性能面板(RT-FPS / Draw Call 全部来自引擎真机数据)。

10000 人同屏:依然一条 Draw Call

指标 静止站位 移动+排序
RT-FPS(真机帧率) 63 63
Draw Call 1 1
逻辑帧时间 0.4 ms左右 9.00 ms左右
三角形 380,278 380,280

万人同屏、全员播放骨骼动画、全实时移动+深度排序,真机帧率仍然顶在 60 帧上限,全程零卡顿零抖动。这不是模拟器跑分,是真机压测。

有人可能会问:1w 角色同屏,真有人需要吗?

说实话,正常玩法 500~1000 人就够用了。但这个数字能跑到,意味着 500 人对你来说是零压力——中端机随便霍霍,性能余量直接拉满。1w 不是目标,是「你再也不同为角色数量焦虑」的证明。

1000 人同屏:帧时间不到 1ms

指标 静止站位 移动+排序
RT-FPS(真机帧率) 63 61
Draw Call 1 1
逻辑帧时间 0.12 ms 左右 0.80 ms左右
三角形 38,278 38,278

回到日常场景:1000 人同屏,移动 + 排序全开,CPU 帧时间也只有 0.8ms——60 帧预算(16.6ms)连零头都没用到。

它是怎么做到的?

这款 Cocos Creator 插件:【高性能合批】Spine 多角色,
核心思路是把 Spine 的顶点动画,渲染管线搬到 GPU 合批轨道上,不是在传统高cpu运算方式:

  • GPU 合批渲染:同屏任意数量角色合并为个位数 Draw Call,角色数量不再是渲染瓶颈;
  • 多角色同屏:一套方案覆盖大量不同角色 / 大量同角色的战场、割草、塔防、MMO 人群场景;
  • 动画切换:运行时自由切换动画,实例之间动画状态互相独立;
  • 事件系统:完整支持 Spine 动画事件,逻辑与表现不脱节;
  • 挂点系统:武器、特效等挂点照常工作,不需要为性能牺牲功能。

一句话总结:不砍美术表现、不砍玩法人数,把「同屏角色数」这个性能枷锁直接摘掉。

适合谁?

  • 微信小游戏 / 抖音小游戏开发者:包体小、性能上限低,合批收益最大;
  • 塔防、割草、SLG、放置、MMO 类项目:同屏单位动辄成百上千;
  • 已经被 Spine 性能折磨过、先试试这个,可能不用降级。

版本支持

  • 全平台支持 H5 和 原生
  • 正在支持:creator 2.4.x
  • 已经支持:creator 3.73 到 3.8.x

获取方式

联系方式(个人微信)

欢迎试用和交流,讨论游戏优化问题:

3赞

:+1:,支持安卓的spine合批是吗,应该可以和多纹理合批共用的吧,期待大佬做出支持2.4版本的。

49 个Spine 角色,3969帧,智能压缩:烘培 2048x704 大概 4.4m


里面包含打包工具,可以把多个不同角色打包成一个整体,支持原生和h5,优先考虑使用现在这个。

有2.X的兼容计划吗

烘焙工具是通用,
2x渲染暂时还没支持(理论上改大buffer顶点Mesh是可以),
目前主要是利用3 x的GPUinstancing做渲染显示优化,2x看后续计划

支持spine内部渲染模式切换不断批吗

打包整体为统一合批(同blend),
不支持,内部blend渲染模式是附件级别(不同blend),
但是,工具有做代替性转换(近似不等同原效果)或剔除。

隐藏附件也占位,导致vat.bin巨大,解压缩时会卡 :joy:

数据大小,加载体验
1.数据算法压缩策略
2.加载提前进行解压

49 个Spine 角色 ,3969帧,最大压缩:烘培 2048x704 大概 5.5m
06fbf532-1d48-42fa-a9ce-6e03244d8d85

这是纯原始数据

:face_with_raised_eyebrow:动画不算复杂?想要了解 如何压缩的

大收益: 减少采样帧数,立杆见影

小收益: 数据编排,数据复用…已交给AI发挥

还在优化调整中,等稳定下来,再详细写一篇介绍

拿上面 插件框架,

让 AI 挫个红蓝对战玩玩,验证测试

1赞

2x 版本的支持,换了两种方案,现在差不多可以稳定下来了

Creator 2x 版本支持已上线

  • 支持 creator 2.4.x
  • 支持 creator 3.73 - 3.8.x
  • 全平台支持 原生 和 H5

creator 2.4.13 , 10000 排序,不移动

creator 2.4.13 ,10000 排序,移动

1赞

label,sprite穿插会打断合批吗?

可惜了 错过了优惠

哈哈哈,有想法加我上面微信

Sprite和label常规会断,这是单独渲染Spine,
但是想合,就要用其他动态办法,不过目前我还没尝试


大佬,之前买了你的这个插件,跟你这个帖子发的有何区别

这个是很早以前方案,采用多纹理+节点数据GPU优化,

现方案,使用性能更加好打包方式,同时支持 h5 和 原生,支持2x/3x,

但是支持特性,不是100%完整,
详细可以看介绍,也可以找我了解,
会牺牲一些不常用功能(裁剪…),方便进行整体打包优化

针对老用户,如果需要现在上面的新版,可以找我优惠