ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

UniMate 完整上手:一句话让任意 3D 骨架生成动画

UniMate 完整上手:一句话让任意 3D 骨架生成动画

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.json

scripts/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),仅供参考

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进