UniMate 完整上手:一句话让任意 3D 骨架生成动画
【免费下载链接】UniMate[SIGGRAPH Asia 2026] UniMate: One Unified Model to Animate Diverse Skeletons项目地址: https://gitcode.com/GitHub_Trending/un/UniMate
你有没有遇到过这种情况:手里有个绑好骨骼的 3D 模型——四足机器人、一条鱼、甚至一朵花,可就是没有动作让它动起来?UniMate 就是为此而生的:一个被 SIGGRAPH Asia 2026 接收的统一 3D 骨骼动画生成模型,输入任意绑好骨骼的资产加一句文字,直接产出自然连贯的动作序列,面向 3D 内容创作者、游戏与机器人开发者以及研究者。
🎬 先看效果:一句话让多种骨架动起来
从这张总览图就能感受到它的"离谱"程度:履带机器人原地旋转、人形机器人张开双臂、四足机器人迈步向前、一朵花居然"张嘴咬"向前方。而这些动作全部出自同一个模型——碰到新骨架不用单独喂数据,测试时也不用针对某个例子反复调参。
🚀 三步装好环境,跑通第一次采样
整个项目共用一个 conda 环境,训练、推理、数据处理都在里面。
第 1 步:克隆仓库并建好环境
git clone https://gitcode.com/GitHub_Trending/un/UniMate conda create -n unimate python=3.10 -y conda activate unimate pip install "setuptools<81" pip install -r requirements.txt --no-build-isolation第 2 步:下载模型和数据(UniML3D 数据集约 88GB,按需可只下部分)
hf download Linzhan/UniMate --repo-type model --local-dir outputs \ --include "unimate_uniml3d_f60_v3/*.json" --include "unimate_uniml3d_f60_v3/*.npy" \ --include "unimate_uniml3d_f60_v3/checkpoints/checkpoint_step_150000.pt" hf download Linzhan/UniML3D --repo-type dataset --local-dir dataset第 3 步:跑文本生成动作。测试用例是一个 JSON 文件(骨架名 → 提示词),assets/examples/ 里带了现成样例:
python -m unimate.inference.sample --exp_dir outputs/unimate_uniml3d_f60_v3 \ --test_cases_json assets/examples/examples.json --num_repetitions 3 \ --output_dir outputs/samples/examples采出来的动作还能"贴"回原始网格,导出带动画的 GLB / FBX:
SKIP_INVALID=1 bash scripts/run_animate_motion.sh outputs/samples/examples想自己训练的话,一条命令就能起:
accelerate launch -m unimate.training.train \ --config configs/uniml3d_60frames_graph_adaln.jsonscripts/run_train.sh 和各个run_sample_*.sh封装脚本会自动挑显存最充足的 GPU,新手直接跑 shell 脚本最省心。
⚠️ 最常见的坑:pip install -r requirements.txt直接装大概率报错——依赖里有个 git 库用到老接口,必须先装setuptools<81再带--no-build-isolation参数,这就是第 1 步里多出来两行的原因。
🔧 它能做什么:四个场景用例
除了"写句话得段动作",同一个模型还直接支持下面三种玩法,都不用额外训练:
| 场景 | 它替你做什么 | 关键开关 |
|---|---|---|
| 文本生成动作 | 一句提示词驱动整个骨架,输出.npy动作文件 | --prompt/--test_cases_json |
| 动作补间 | 只给首尾关键帧,中间由模型自动补上——像动画师补中间帧,只是这次模型替你自动补 | --keep_frames "0,-1" |
| 文本引导局部编辑 | 把髋部、颈部等几个关节锁在原轨迹上,换个提示词重生成其余部分,该留的留住、该动的重动 | --keep_joints |
| 动作扩展 | 把多条提示词排成队列,逐段生成并自动衔接接缝帧,拼出一条连贯长动画 | --expand_overlap |
三个进阶玩法共用同一套"替换式采样"机制:被锁定的帧在每一步去噪时都精确保持,而不是靠损失函数软约束。命令示例:
KEEP_FRAMES="0,-1" bash scripts/run_sample_motion_inbetween.sh \ outputs/unimate_uniml3d_f60_v3 cases.json KEEP_JOINTS="Neck,Head" bash scripts/run_sample_motion_edit.sh \ outputs/unimate_uniml3d_f60_v3 cases.json补间:只给首尾关键帧,模型把"蹲下再站起"的中间过渡补得平滑自然:
局部编辑:锁住颈部和头部关节后,把提示词从转头改成"向前走",躯干姿态纹丝不动,其余关节乖乖听新指令:
动作扩展:"站起来 → 向前走 → 原地转身"三段文字串成一个列表,模型逐段生成并在接缝处自动衔接:
想动自己的资产也行:用 data_process/rig_preprocess/ 把绑好骨骼的 GLB / glTF / FBX(有没有动画都行)处理成模型可用的格式,关节标签由 LLM 打,中间留了人工核对一步。仓库里的 Unitree Go2 四足机器人、鹰、鲨鱼就是这条流程处理的示例资产:
小提示词技巧:提示词写成 "An object flaps its wings." 这种风格——以 "An object" 开头、只描述动作不描述角色——越贴近训练时的字幕风格,模型跟得越听话;一次多生成几条(--num_repetitions)再挑。
🧠 背后原理:数据、模型与关键设计
训练数据是UniML3D:13,769 条带文本配对的运动片段、7,430 个骨架,把 Mixamo、Truebones ZOO、Objaverse-XL 三个来源统一到同一规范表示,每段动作都配了自然语言描述。模型是flow matching训练的去噪网络,图注意力与全注意力两种变体,文本条件通过 adaLN 调制或 cross-attention 注入。configs/ 里 8 份训练配置 = 4 种数据组合 × 2 种模型变体,统一 60 帧。
仓库导航:改哪块先看哪里
| 目录 | 是什么 | 想改哪块先看这里 |
|---|---|---|
| unimate/models/ | 去噪网络(图注意力 / 全注意力变体)、扩散与流匹配核心 | 改网络结构 |
| unimate/dataset/ | 数据加载、增强与条件构造 | 换数据组合、调增强 |
| unimate/training/ | 训练循环、EMA 与日志,入口train.py | 调训练超参 |
| unimate/inference/ | 采样入口sample.py及三大应用实现 | 加新的采样玩法 |
data_process/ | UniML3D 数据流水线:Blender 导出 / 渲染 / VLM 字幕 / 关节标注 | 重建或扩充数据集 |
configs/ | 8 份训练配置 JSON | 切换实验 |
已知局限与反馈渠道
作者自己也说得很直白:这仍是"任意骨架文本生成动画"的早期探索,部分骨架与动作依然会失败——比如关节标签猜得不对、或者动作本身就不符合骨架的物理常识,生成效果就会跑偏。团队认为扩大训练数据规模(从智能体蒸馏、或从视频里生成)是有望补上这块短板的方向。授权方面:代码为 MIT 许可,已发布的 checkpoints 是 CC BY-NC 4.0,数据则沿用 Mixamo、Objaverse-XL、Truebones 各自的源许可。如果你踩到失败案例,欢迎开 issue 反馈——这些坏例子正是让下一代 3D 骨骼动画模型变强的燃料。
【免费下载链接】UniMate[SIGGRAPH Asia 2026] UniMate: One Unified Model to Animate Diverse Skeletons项目地址: https://gitcode.com/GitHub_Trending/un/UniMate
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考