Spine 动画 GPU 化实战:用 VAT 把骨骼计算挪出主线程

效果对比

左:原生 Spine 渲染 | 右:VAT(顶点动画贴图)渲染
同场景 200 个角色同屏,画面表现一致。


测试环境

测试机器

  • 设备:Apple M4 Pro / 24GB 内存
  • 浏览器:Chrome,性能面板设为低端机模拟(CPU 降频 + 内存限制)

测试负载

  • 角色数量:200 个同屏 spine
  • 三角面总量:约 28,840(两边一致,等同负载)
  • 采样方式:连续 1729 帧稳定采样(排除首帧加载与 GC 抖动)

结果展示

1. 帧时间(ms,越低越好)

指标          原始      VAT      提升
----------------------------------------
平均帧        33.89     4.88    6.9×
p50           33.1      4.3     7.7×
p90           37.9      8.2     4.6×
p95           40.5      9.8     4.1×
p99           45.0      12.5    3.6×
最差帧        78.8      19.1    4.1×

2. 掉帧分布

区间                  原始       VAT
----------------------------------------
超 4ms                100%       54%
超 8ms                100%       10%
超 16ms(掉帧)       100%       0.1%

原始路径每一帧都越线,VAT 1729 帧只有 2 帧掉帧。

3. 渲染管线

指标              原始       VAT      变化
--------------------------------------------
Render 耗时(ms)   29.98      4.40     ↓ 6.8×
Draw Call         203        5        ↓ 40×
三角面            28847      28841    一致

4. 显存

指标         原始        VAT
--------------------------------
纹理         20.39 MB    20.51 MB
Buffer       6.98 MB     6.94 MB

显存几乎持平,性能换显存的代价没有发生


一句话结论

200 角色同屏,VAT 把渲染耗时从 约 34ms 降到约 5ms(6.9×),Draw Call 从 203 降到 5(40×),掉帧率从 100% 降到 0.1%,显存零额外开销。


3赞

一句话。很强

硬核,有详细实现教程吗

杀伤力太大,不开源,探讨实现过程

烘培顶点数据到纹理,播放的时候着色器之直接采样该纹理,大概这么个流程把但是也会有限制比如可能做不了动作融合,当然工程细节肯定更多,这确实是个解决spine性能拉跨的一个不错的方案,unity那边参考实践比较多

和cocos文档中的 顶点动画贴图 (VAT)是同一个东西吗 ?

这个实现难度挺大的,之前捣鼓过,没搞成功。楼主:ox::pen:

原理一样,不过文档里应该是针对3d模型的,楼主是针对spine的

1赞

让ai来蹬,知道思路AI Token量大管饱可以搞

哈哈哈 所以我没有开源实现

你这个让我想起unity好像也有个GPU渲染spine动画的插件

之前是gpt5.5还没普及用其他ai搞的,AI整不明白。手搓难度太大了,不现实。后面有空的我用强一点的AI再试试。感觉现在5.5的水平应该能搞出来

链接在哪里,源码在哪里?

我的理解是骨骼动画转序列帧,用空间换时间。蹲个后续,看看是否正确。

没想明白为什么显存没有增加.
这就是将需要cpu计算的所有顶点点数据预先计算后用纹理格式保存,然后自定义shader采样这个数据作为定点期间的数据.
这样的优化方案甚至可以不需要做任何改动,就可以提前根据spine的动画数据写个脚本预生成出来.
需要额外做的就是单独做个材质,单独实现一些参数接口.

纹理内存没变肯定不是

因为我的测试用例里面 vat那张图非常的小

发了内容 还在审核中…没出来

截图发就可以了.

如果单独弄一个shader的话,纹理合批就会只有这一个spine可以用了,其他不行了吧?