📌 项目地址:Friedrich-M/UniMate | ⭐ 1,011 颗星 | 🔧 Python | 📜 未标注

动画领域的老问题:每个骨架都要重训一个模型

角色动画生成一直是“一模型一骨架”的局面——针对人形骨架训练的模型,遇到四足动物、机械结构、多关节生物就失效了。换一个 rig 结构,往往意味着重新标注、重新训练。

UniMate(普林斯顿、UC Berkeley、MIT、NTU 合作,SIGGRAPH Asia 2026 论文)给出了另一个思路:一个统一模型,直接驱动多样化的骨架。项目的做法是构建了一个 UniML3D 数据集(Truebones + Mixamo + Objaverse 三个来源混合),覆盖不同拓扑结构的骨骼,然后在统一的表征上训练。

对研究者来说,这更接近“动画版的基础模型”路线——不是解决某一个具体角色,而是验证骨架无关的通用动画建模是否可行。

当前能用到什么

截至 README 更新时,以下内容已公开:

  • 推理与训练代码(2026-09-06 发布)
  • 预览版 checkpoint,托管在 HuggingFace 的 Linzhan/UniMate,后续新 checkpoint 也会同步到那里
  • UniML3D 数据集及完整数据处理管线(data_process/ 目录)
  • 在线交互 Demo(linzhanmou.com/unimate/interactive.html),可直接在浏览器里查看 3D 动画结果

需要注意:官方用于新 rig(分布外骨架)的预处理管线尚未发布,README 中标注为“本周内放出”(TODO)。也就是说,想直接给自己的自定义骨架生成动画,目前还差最后一环。

环境搭建与训练

环境很简单,所有组件共用一个 conda 环境:

conda create -n unimate python=3.10 -y
conda activate unimate
pip install "setuptools ...

(README 中的安装命令在此处被截断,完整命令请以仓库 requirements.txt 相关说明为准。)

数据管线覆盖从原始资产到训练数据的全流程:下载 → 导出 → 渲染 → caption 标注 → 关节标注 → 特征提取 → 动画生成,详见 data_process/README.md。训练读取的是第 4 阶段产出的 canonicalized clips,位于 dataset/features// 目录下。

配置文件设计值得一看

训练由 configs/ 下的 JSON 文件控制,命名规则是:

{dataset}_{frames}frames_{attention}_{text_cond}.json

共 8 个配置:4 种数据组合 × 2 种模型变体,统一 60 帧。其中两个模型变体是论文对比的重点:

  • _graph_adaln:注意力按空间(逐帧)和时间(逐关节)两个维度分解,引入图距离、边类型和深度偏置;文本 caption 通过 adaLN 调制注入
  • _full_cross_attn:对展平的关节×时间 token 做单一注意力,caption 在每个 block 中作为 cross-attention 的 key/value

值得注意的是这两个轴(attention 结构 × 文本条件方式)是独立可组合的,full × adaln 和 graph × cross_attn 同样可以在配置中开启并运行——官方只是发布了论文对比用的那两种搭配。想做消融实验的话,这套代码直接支持。

另外,training.batch_size、training.num_steps、model.num_layers、dataset.max_joints 是按数据组合分别调过的(受显存限制),换数据时不要直接照抄。

适合谁

  • 做骨架无关动画 / 运动生成研究的人:这是直接相关的工作,8 个配置 + 可组合的模型轴 + 完整数据管线,复现和扩展都比较方便
  • 想用 UniML3D 数据集的人:数据集和处理管线都已开源,即使不跑 UniMate 本身,管线本身也有复用价值
  • 想立刻给自己的 rig 生成动画的生产用户:建议再等等,分布外 rig 的预处理管线还没放出来,目前更适合观望或用交互 Demo 感受效果

许可证信息 README 中未明确提及,使用前请自行确认仓库协议。

这篇文章对你有帮助吗?

发表回复