Learned Motion Matching
论文信息: ACM SIGGRAPH 2020, Daniel Holden et al., Ubisoft La Forge / Concordia University
一、核心问题
1.1 研究背景
在游戏工业中,Motion Matching 是主流的角色动画技术,但存在内存限制问题。同时,神经网络生成模型虽然扩展性好,但质量不如 Motion Matching。
Motion Matching 的优势:
- 灵活性高
- 行为可预测
- 预处理时间短
- 视觉质量高
Motion Matching 的局限:
- 内存使用随数据量线性增长
- 无法利用强大数据处理方法(如数据增强)
- 在多样性和预算间需要权衡
神经网络模型的优势:
- 内存使用低
- 数据扩展性好
- 运行时评估快
神经网络模型的局限:
- 难以控制
- 行为不可预测
- 训练时间长
- 质量可能低于训练集
1.2 核心问题
如何构建一个学习型的 Motion Matching 替代方案,能够:
- 保留 Motion Matching 的优点(质量、控制、迭代时间)
- 具有神经网络的扩展性(低内存、数据可扩展)
- 无需存储动画数据和匹配元数据
1.3 本文方法
论文提出了 Learned Motion Matching 框架:
核心思想:
- 将 Motion Matching 算法分解为独立步骤
- 用学习的、可扩展的替代方案替换每个操作
- 三个专用神经网络:Decompressor、Projector、Stepper
二、核心贡献
-
Learned Motion Matching 算法
- 用三个神经网络替换 Motion Matching 的三阶段
- 无需存储任何数据库
- 内存扩展性与神经网络相当
-
保留 Motion Matching 行为
- 质量、控制、快速迭代时间
- 工业界友好的特性
-
State-of-the-art 结果
- 动画质量
- 运行时性能
- 内存使用
三、方法详解
3.1 Basic Motion Matching 回顾
算法流程:
每 N 帧执行:
1. 搜索动画数据库
2. 找到最佳匹配当前帧
3. 如果找到更低成本帧,插入过渡
4. 继续播放
特征向量 x ∈ R^27:
- tt ∈ R^6: 未来轨迹位置 (20, 40, 60 帧)
- td ∈ R^6: 未来朝向方向
- ft ∈ R^6: 过去轨迹位置
- ˙ft ∈ R^6: 过去轨迹速度
- ˙ht ∈ R^3: 根节点高度速度
三阶段:
- Projection: 最近邻搜索找到最佳匹配
- Stepping: 推进 Matching Database 索引
- Decompression: 从 Animation Database 查找姿态
加速结构:
- KD-Tree
- Voxel-based lookup
- Clustering
- 自定义两层 BVH
3.2 Learned Motion Matching 架构
┌─────────────────────────────────────────────────────────────────┐
│ Learned Motion Matching │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 输入:查询特征向量 ˆx │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Projector Network │ │
│ │ 输入:ˆx │ │
│ │ 输出:最近邻索引 k* │ │
│ │ 替代:最近邻搜索 │ │
│ └─────────────────────────────────────────────────────────┘ │
│ ↓ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Stepper Network │ │
│ │ 输入:当前索引 k* │ │
│ │ 输出:下一帧索引 │ │
│ │ 替代:数据库索引推进 │ │
│ └─────────────────────────────────────────────────────────┘ │
│ ↓ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Decompressor Network │ │
│ │ 输入:特征向量 x + 潜变量 z │ │
│ │ 输出:姿态 y │ │
│ │ 替代:动画数据库查找 │ │
│ └─────────────────────────────────────────────────────────┘ │
│ ↓ │
│ 输出:角色姿态 │
│ │
│ 关键:无需存储任何数据库! │
│ │
└─────────────────────────────────────────────────────────────────┘
3.3 三个核心网络
(1) Decompressor Network
目的:从特征向量重建姿态,无需存储 Animation Database
输入:
- 特征向量 \(x\)
- 潜变量 \(z\)(通过 Encoder 找到)
输出:姿态 \(y\)
训练:
- Encoder-Decoder 架构
- Encoder: \(y \to z\)
- Decoder: \((x, z) \to \hat{y}\)
- 损失:\(||y - \hat{y}||^2\)
优势:
- 无需存储姿态数据库
- 支持多样性(通过不同 \(z\))
(2) Projector Network
目的:执行最近邻搜索,无需存储 Matching Database
输入:查询特征向量 \(\hat{x}\)
输出:最近邻索引 \(k^*\)
训练:
- 监督学习
- 真实标签:实际最近邻索引
- 损失:交叉熵或对比损失
优势:
- 无需加速结构(KD-Tree 等)
- 固定推理时间
(3) Stepper Network
目的:预测下一帧索引,无需手动推进
输入:当前索引 \(k^*\)
输出:下一帧索引
训练:
- 从数据中学习过渡模式
- 损失:预测索引 vs 真实下一帧
优势:
- 学习平滑过渡
- 处理非线性时间推进
3.4 网络变体
根据需求,可使用不同组合:
| 变体 | 使用网络 | 特点 |
|---|---|---|
| Full | Decompressor + Projector + Stepper | 完整替代 |
| Partial | 任意组合 | 根据需求调整 |
| Hybrid | 部分网络 + 部分数据库 | 过渡方案 |
四、训练细节
4.1 数据集
- 大规模动捕数据集
- 包含多样化 locomotion 动作
- 用于训练三个网络
4.2 训练配置
| 网络 | 架构 | 输入维度 | 输出维度 |
|---|---|---|---|
| Decompressor | MLP | 27 + latent | 姿态维度 |
| Projector | MLP | 27 | 索引 (分类) |
| Stepper | MLP | 索引 | 索引 (分类) |
4.3 训练策略
-
预训练 Decompressor
- 先训练 Encoder-Decoder
- 学习姿态 - 特征映射
-
训练 Projector
- 使用预训练的 Decompressor
- 监督学习最近邻预测
-
训练 Stepper
- 基于 Projector 输出
- 学习过渡模式
五、实验与结论
5.1 评估任务
-
Locomotion 控制
- 行走、跑步、跳跃
- 轨迹跟踪
-
复杂场景
- 崎岖地形
- 角色交互
- 场景道具使用
5.2 对比基线
- Motion Matching (原始算法)
- PFNN [Holden et al. 2017]
- 神经网格生成模型
5.3 评估指标
| 指标 | 含义 |
|---|---|
| Memory Usage | 内存占用 |
| Runtime | 运行时间 |
| Animation Quality | 动画质量 |
| Control Accuracy | 控制精度 |
5.4 主要结果
内存对比: | 方法 | 内存 | |------|------| | Motion Matching | 随数据线性增长 | | Learned MM | 固定(网络权重)|
性能对比:
- 动画质量:与 Motion Matching 相当
- 运行时间:实时
- 迭代时间:快速
5.5 工业应用
- 已用于多个 AAA 游戏
- 支持复杂交互场景
- 与现有工具链兼容
六、局限性
-
训练时间
- 需要训练多个网络
- 比原始 Motion Matching 长
-
精度损失
- 网络预测 vs 精确搜索
- 可能有轻微质量下降
-
泛化能力
- 依赖训练数据
- 新动作需要重新训练
七、启发
7.1 方法学启发
-
算法分解思想
- 将复杂算法分解为独立阶段
- 逐阶段用学习替代
-
工业界友好设计
- 保留原有行为
- 改进关键限制
-
混合方案可能性
- 部分网络 + 部分数据库
- 灵活权衡
7.2 与相关工作对比
| 方法 | 内存 | 质量 | 控制 | 扩展性 |
|---|---|---|---|---|
| Learned MM | 低 | 高 | 高 | 高 |
| Motion Matching | 高 | 高 | 高 | 低 |
| PFNN | 低 | 中 | 高 | 中 |
| VAE | 低 | 中 | 中 | 高 |
八、关键公式
原始 Motion Matching: $$k^* = \arg\min_k ||\hat{x} - x_k||^2$$
Learned Decompressor: $$\hat{y} = \text{Decoder}(x, z), \quad z = \text{Encoder}(y)$$
Learned Projector: $$k^* = \text{Projector}(\hat{x})$$
Learned Stepper: $$k_{next} = \text{Stepper}(k^*)$$
笔记说明:Learned Motion Matching 是 SIGGRAPH 2020 工业向工作,核心贡献是将 Motion Matching 三阶段用神经网络替代,在保留质量的同时实现低内存占用。这是工业界 (Ubisoft) 与学术界合作的典范,展示了如何用深度学习改进现有技术而非完全替代。