MagicArticulate: Make Your 3D Models Articulation-Ready¶
Abstract¶
- MagicArticulate 是一个有效的框架,能够自动将静态 3D 模型转换为支持现实动画的关节化版本
- 传统方法严重依赖人工标注,既耗时又劳动密集,且缺乏大规模基准数据集阻碍了基于学习方法的发展
- 该工作提出了三个关键贡献:
- Articulation-XL:包含 33k+ 3D 模型的大规模关节化基准数据集,具有高质量关节标注
- 新颖的骨骼生成方法:将任务表述为序列建模问题,利用自回归 Transformer 自然处理不同 3D 模型中骨骼或关节数量的变化
- 蒙皮权重预测:使用融合体积测地距离先验的函数扩散过程预测顶点和关节之间的蒙皮权重
- 在多个对象类别上显著超越现有方法,实现了支持现实动画的高质量关节化
Introduction¶
3D 内容创建的快速发展导致对关节化 3D 模型的需求不断增长,特别是在游戏、VR/AR 和机器人仿真领域。
传统挑战¶
- 人工流程繁琐:需要专业艺术家手动放置骨骼、定义关节层次结构和指定蒙皮权重
- 缺乏大规模数据集:阻碍了可泛化模型的训练
- 框架设计复杂:需要处理复杂网格拓扑、适应变化的骨骼结构,确保骨骼和蒙皮权重的连贯生成
现有方法局限性¶
- 模板基方法(如 Pinocchio、Morig):对特定类别效果好但难以泛化到不同结构模式的对象
- 无模板方法:从网格或点云提取曲线骨骼,但通常产生不适合动画的密集关节
- 深度学习方法(如 RigNet):严重依赖精心设计的特征,对形状方向做出强假设,限制了处理多样对象类别的能力
贡献¶
- Articulation-XL 数据集:首个包含 33k+ 高质量关节标注 3D 模型的大规模数据集
- 新颖两阶段框架:有效处理骨骼生成和蒙皮权重预测
- SOTA 性能:在实际动画流水线中展示实用性
Related Work¶
骨骼生成¶
- 模板基方法
- Pinocchio:开创性的自动提取动画骨骼方法,将预定义骨骼模板拟合到 3D 模型
- 局限性:仅限于与预定义模板兼容的角色,难以泛化到不同结构的对象
- 无模板方法
- 曲线骨骼提取:利用形状的中轴或中心线从网格或点云提取骨骼,但通常产生不适合有效关节和动画的密集关节
- 深度学习方法:
- Xu et al. 通过 体积网络 为输入的 3D 模型生成骨骼
- RigNet 利用图卷积学习网格表示,增强骨骼提取精度,但要求输入训练和测试形状保持一致的直立和正面朝向
本工作通过自回归方法实现可变骨骼数量,可以动态适应不同 3D 模型。
蒙皮权重预测¶
- 几何基方法
- 距离度量:基于关节和顶点之间的距离分配蒙皮权重
- 局限性:当 3D 形状具有复杂拓扑时常常失败
- 深度学习方法
- NeuroSkinning:使用图神经网络预测蒙皮权重
- RigNet:利用捕获顶点和骨骼之间测地距离的内在形状表示
- SkinningNet:使用双流图神经网络直接从输入网格和对应骨骼计算蒙皮权重
- 问题:这些基于 GNN 的方法在方向激烈变化的数据集上性能可能下降
本工作通过引入函数扩散过程,利用体积测地距离先验来增强蒙皮权重预测的鲁棒性,可以处理更加复杂的网格拓扑和骨架结构。
自回归 3D 生成¶
- MeshGPT:将网格建模为三角形序列,使用 VQ-VAE 进行标记化,但是后续方法大多限制在 800 个面以内
- MeshAnythingV2:引入相邻网格标记化(AMT),将最大面数提高到 1600
- EdgeRunner:通过增强网格标记化技术将限制提高到 4000 个面
本工作探索自回归模型在形状条件骨骼生成中的潜力,将骨骼表述为骨骼序列。
Articulation-XL Dataset¶
数据集构建流程¶
包含三个主要阶段:初始过滤、基于 VLM 的过滤和类别标注。
初始数据收集¶
- 从 Objaverse-XL 中识别包含骨骼和蒙皮权重标注的 3D 模型
- 过滤标准:
- 基于骨骼和网格相似性去除重复数据
- 排除只有单个关节/骨骼结构的模型
- 过滤超过 100 个骨骼的数据(占数据集极小部分)
- 初始过滤产生 38.8k 个候选模型
基于 VLM 的过滤¶
- 问题:许多初始候选包含定义较差的骨骼
- 解决方案:
- 从四个视角渲染每个对象及其骨骼
- 利用 GPT-4o 基于特定标准评估骨骼质量
- 最终获得 33k+ 高质量关节标注 3D 模型
类别标签标注¶
- 使用 VLM 自动标注每个模型的类别标签
- 包含丰富的对象类别,人体相关模型占最大子集
Methods¶
提出两阶段流水线使 3D 模型具备关节化能力:
自回归骨骼生成¶
问题表述¶
给定输入 3D 网格 \(\mathcal{M}\),目标是生成结构有效的骨骼 \(S\),捕获对象的关节结构。
骨骼由两个关键组件组成:
- 关节集合 \(J \in \mathbb{R}^{j \times 3}\):定义空间位置
- 骨骼连接 \(B \in \mathbb{N}^{b \times 2}\):通过关节索引指定拓扑结构
目标学习条件分布:
\[p(S|\mathcal{M}) = p(J, B|\mathcal{M})\]
基于序列生成的框架¶
动机:传统方法采用预定义骨骼模板,对特定类别效果好但无法泛化到多样结构模式的对象。
解决方案:将骨骼生成重新表述为序列建模任务
- 处理不同 3D 模型中骨骼或关节数量的变化
- 捕获骨骼之间的内在依赖关系
- 有效扩展到多样对象类别
具体实现¶
- 骨骼标记化:
- 将每个骨骼 \(S\) 表示为骨骼序列,每个骨骼由两个连接关节定义(总共 6 个坐标)
- 将输入网格和对应骨骼缩放和平移到单位立方体 \([-0.5, 0.5]^3\)
- 将标准化关节坐标映射到离散 \(128^3\) 空间,序列长度为 \(6b\)(\(b\) 个骨骼)
- 不使用 VQ-VAE 压缩步骤(因为大多数模型少于 100 个骨骼)
- 形状条件生成:
- 从输入网格 \(\mathcal{M}\) 采样 8192 个点作为形状条件
- 通过被冻结的预训练形状编码器处理点云,转换为适合 Transformer 处理的固定长度特征序列
- 将该特征序列附加到 Transformer 输入序列的开始
- 插入
<bos>
和<eos>
标记,分别表示骨骼序列的开始和结束
-
自回归学习:
- 使用仅解码器 Transformer 架构(OPT-350M 模型)
- 训练时使用交叉熵损失进行下一个标记预测(\(T\) 表示真实序列的 one-hot 编码):
\[\mathcal{L}_{pred} = CE(T, \hat{T})\]- 推理时从形状标记开始,顺序生成每个骨骼标记
蒙皮权重预测¶
预备知识:函数扩散¶
函数扩散将经典扩散模型扩展到直接操作函数,特别适合我们的任务。
考虑从域 \(\mathcal{X}\) 到范围 \(\mathcal{Y}\) 的函数
\[f_0: \mathcal{X} \to \mathcal{Y}\]
扩散过程逐渐向原始函数添加函数噪声 \(g\):
\[f_t(x) = \alpha_t \cdot f_0(x) + \sigma_t \cdot g(x), \quad t \in [0,1]\]
目标是训练去噪器 \(D\) 恢复原始函数:
\[D_\theta[f_t, t](x) \approx f_0(x)\]
蒙皮权重预测实现¶
表述:将蒙皮权重预测表述为学习映射 \(f: \mathbb{R}^3 \to \mathbb{R}^n\),从 3D 点到对应权重。
输入输出:
- 输入:从网格表面采样的 3D 点 \(\mathcal{P} \in \mathbb{R}^{v \times 3}\)
- 输出:\(n\) 维蒙皮权重矩阵 \(\mathcal{W} \in \mathbb{R}^{v \times n}\)
关键组件:
- 条件生成:基于关节坐标和预训练编码器提取的全局形状特征进行条件生成
- 体积测地先验:
- 计算从每个网格顶点到每个关节的体积测地先验
- 基于最近顶点将这些先验分配给采样点并标准化
- 形成体积测地矩阵 \(\mathcal{G} \in \mathbb{R}^{v \times n}\)
- 模型学习预测实际蒙皮权重和几何先验之间的残差:\(f: \mathcal{P} \to (\mathcal{W} - \mathcal{G})\)
优化目标:
\[\mathcal{L}_{denoise} = \|D_\theta(\{x, f_t(x)\}, t) - f_0(x)\|_2^2, \quad x \in \mathcal{P}\]
使用 DDPM 作为调度器,同时将蒙皮权重和体积测地先验标准化到 \([-1, 1]\) 范围。
Experiments¶
实现细节¶
数据集:
- Articulation-XL:33k 样本(31.4k 训练,1.6k 测试)
- ModelsResource:2163 训练样本,270 测试样本
训练:
- 骨骼生成:8 张 NVIDIA A100 GPU 训练约 2 天
- 蒙皮权重预测:相同硬件配置训练约 1 天
- 数据增强:缩放、平移和旋转变换
骨骼生成结果¶
评估指标¶
采用三个标准指标:
- CD-J2J:关节到关节的 Chamfer 距离
- CD-J2B:关节到骨骼的 Chamfer 距离
- CD-B2B:骨骼到骨骼的 Chamfer 距离
基线方法¶
- Pinocchio:传统模板拟合方法
- RigNet:使用图卷积的基于学习的方法
结果对比¶
- Pinocchio 在与预定义模板不同的对象上表现困难,特别是非人形对象
- RigNet 在保持一致直立和正面朝向的 ModelsResource 上表现改善,但在复杂拓扑上仍有困难
- 本方法在多样对象类别中生成与艺术家创建参考紧密匹配的高质量骨骼
- 在两个数据集的所有指标上持续超越基线方法
泛化分析¶
- 跨数据集评估:在 Articulation-XL 上训练,在 ModelsResource 上测试
- 本方法保持竞争性能,而 RigNet 性能显著下降
- 在 AI 生成的 3D 网格上评估显示本方法成功生成合理骨骼
蒙皮权重预测结果¶
评估指标¶
- 精确度和召回率:测量识别显著关节影响的准确性(权重 > 1e-4)
- L1 范数误差:计算所有顶点预测权重和真实权重的平均差异
基线方法¶
- Geodesic Voxel Binding (GVB):Autodesk Maya 中可用的几何基方法
- RigNet:基于学习的方法
结果对比¶
- 定性比较:本方法预测更准确的蒙皮权重,在多样对象类别中误差显著更低
- 定量结果:在两个数据集的大多数指标上持续超越基线方法
消融研究¶
骨骼生成消融¶
- VLM 基数据过滤:去除数据过滤导致性能显著下降
- 类别平衡策略:通过复制非人形类别数据和应用增强的平衡训练策略没有改善
蒙皮权重预测消融¶
- 体积测地距离:去除后精确度降低 0.6%,召回率降低 3.9%
- 权重标准化:去除标准化策略导致 L1 误差增加 8.7%
- 全局形状特征:排除预训练编码器的全局形状特征导致预测不够准确