Journal

Progressive Dynamics for Cloth and Shell Animation

Jiayi Eris Zhang, Doug L. James, Danny M. Kaufman

Adobe; Stanford University

一句话总结

本文提出 Progressive Dynamics(渐进式动力学),一种由粗到细、支持细节层级(LOD)的物理动画方法:先在极粗网格上快速生成”预览”动画,再逐级细化到高分辨率,且保证各分辨率之间的逐帧轨迹一致逐帧时间连续。它让艺术家能在秒级的粗预览上反复试验设计参数,最终只对选定方案做一次昂贵的高分辨率细化,从而把布料/薄壳动画的设计迭代成本大幅降低。

问题背景

薄壳与布料的褶皱、屈曲、悬垂动力学在动画中至关重要,但同时具备”高质量”与”高速度”至今仍是难题。高保真方法(如基于 IPC 的 C-IPC 壳模拟 [Li et al. 2021])质量好,但要求高分辨率网格、模拟极慢,设计阶段反复迭代代价过高。

一个自然的做法是”预览”(previs):先用快速、低精度、低分辨率的模型搭好动画,再做最终高分辨率模拟。但这条路有两个长期存在的根本缺陷:

  1. 不一致(inconsistency):最终高分辨率的”英雄级”模拟结果,往往和精心设计的低分辨率起点截然不同——同样的抛掷动作在不同分辨率下会命中/错过目标(见论文 Toy Toss、Octocats 例子)。
  2. 粗网格伪影:低分辨率壳模拟常出现严重的膜锁定(membrane locking)、不稳定和崩溃,粗预览本身就不可用(例如充气球砸地时直接模拟直接皱成一团)。

因此本文的目标是:构建一套 LOD 模拟-设计流程,使粗预览既无低分辨率伪影,又能预测性地匹配后续任意更细分辨率的细化结果。这项工作把此前只针对静态悬垂建模的 Progressive Simulation 框架 [Zhang et al. 2022, 2023] 扩展到了动态动画

核心方法

作者把状态放在一个时空 + 多分辨率网格上:每个格点 \((t, l)\) 对应时间步 \(t \in [0, N]\) 与分辨率层级 \(l \in [0, L]\),存储位置 \(x_l^t\) 与速度 \(v_l^t\)。整个方法就是在这张网格上推进:水平方向是同一层级的时间步进 \((t,l)\to(t+1,l)\),垂直方向是同一时间步的分辨率细化 \((t,l)\to(t,l+1)\)。

挑战一:粗层级的高质量预览时间步进

标准隐式欧拉时间步可写成增量势能(Incremental Potential, IP)的最小化:

\[x_l^{t+1} = \arg\min_x \frac{1}{2h^2}\lVert x - \hat{x}_l^t\rVert_{M_l}^2 + E_l(x)\]

其中 \(h\) 是步长,\(M_l\) 是质量矩阵,\(\hat{x}_l^t = x_l^t + h v_l^t\) 是显式动量更新项,\(E_l\) 是壳弹性+接触+摩擦+应变限制的总势能。直接在粗网格上用它会产生锁定和发散。

作者的关键做法(沿用静态 PSQ 的思想)是在时间步中用最细层级的壳弹性势能,通过 shell 定制的延拓算子(prolongation) \(P_l(\cdot)\) 把粗网格位形映射到最细分辨率来评估弹性能,得到”粗-细延拓 IP”:

\[x_l^{t+1} = \arg\min_x \frac{1}{2h^2}\lVert x - \hat{x}_l^t\rVert_{M_l}^2 + C_l(x) + \Psi_L\big(P_l(x)\big)\]

其中 \(\Psi_L\) 是最细层级的壳弹性总势能,\(C_l\) 是当前层级的接触/应变限制屏障势能。这一步显著缓解了膜锁定,让粗预览稳定可用,同时因为各层级都用同一套最细弹性模型,为跨分辨率一致性打下基础。

挑战二:跨层级一致 vs 时间连续的矛盾

作者用实验说明了两种朴素策略都不行:

  • 纯水平(各层级独立时间步进,即便加了延拓 IP):每个层级都是良态时间积分,时间连续性好,但因为各层级在不同位形上采样细层弹性力,轨迹会随时间显著发散——欠约束。
  • 纯垂直(对粗预览的每一帧用 PSQ 静态细化):能得到逐帧跨分辨率一致,但 PSQ 的平衡态假设会把每帧拉回最近平衡(例如把撞墙皱缩的鸭子瞬间恢复成静止形状),从而破坏动力学、产生抖动/跳变——过约束。

挑战三:渐进推进(Progressive Advancement)——本文核心算法

解决办法是把上一层级的动量延拓到下一层级,用它来定义下一层级时间步的惯性(动量)更新,从而在保证时间连续的同时锁住跨层级的整体轨迹。

对每个新层级 \(l+1\),先由上一层级的位置做显式有限差分外推,构造延拓动量更新

\[\hat{x}_{l+1}^t = P_{l+1}^l(x_l^t) + h\, V_{l+1}^l(x_l^t)\, v_l^t = P_{l+1}^l(x_l^t) + V_{l+1}^l(x_l^t)\big(x_l^t - x_l^{t-1}\big)\]

其中 \(P_{l+1}^l\) 是 PSQ 壳延拓算子,\(V_{l+1}^l = \nabla P_{l+1}^l\) 是对应的速度延拓算子。然后在新层级上解渐进 IP

\[x_{l+1}^{t+1} = \arg\min_x \frac{1}{2h^2}\lVert x - \hat{x}_{l+1}^t\rVert_{M_{l+1}}^2 + C_{l+1}(x) + \Psi_L\big(P_{l+1}(x)\big)\]

这个能量有三个关键项:(1) 当前层级几何上的 IPC 屏障 \(C_{l+1}\) 保证严格无穿插、满足应变限制;(2) 延拓弹性 \(\Psi_L(P_{l+1}(x))\) 用最细层级弹性力丰富细节;(3) 惯性项用从上一层级动量外推而来的更新 \(\hat{x}_{l+1}^t\)。这样,新层级的动力学由上一层级的动量驱动(保证一致性),而弹性和接触在新层级生成更丰富的几何,再通过动量传给下一层级。

对角细化视角与并行性

从时空网格看,Progressive Dynamics 实际是沿对角线推进:每步同时前进时间与分辨率 \((t,l)\to(t+1,l+1)\),等价于在每个时间步做”网格自适应”到下一分辨率再求解。由于某格点 \((t,l)\) 的动量更新只依赖上一层级的 \((t-1,l-1)\) 与 \((t-2,l-1)\),原则上同一层级的各时间步可并行求解,打破了标准隐式积分必须顺序推进的限制。

作者定义了两种 warm-start 来给 IPC 的牛顿求解提供可行(无穿插)初值:水平 warm-start(用同层上一时间步的解)和垂直 warm-start(用 [Zhang et al. 2023] 的 safe upsampling 把下一层同时间步的解安全上采样)。二者可任意组合,只要格点所需的”下方与左方”支撑已算出即可,为多种并行策略打开空间。

技术细节

  • 底层物理模型:Neo-Hookean 膜 + 离散铰链弯曲(discrete-hinge bending)作为壳弹性;C-IPC [Li et al. 2021] 提供接触、摩擦与应变限制屏障。时间积分用隐式欧拉(BDF2、隐式 Newmark 也可类推)。
  • 延拓算子:\(P_{l+1}^l(x_l) = U_{l+1}^l x_l + a_{l+1}^l(x_l)\),由稀疏线性内蕴映射 \(U\) 与外蕴非线性偏移 \(a(\cdot)\) 组成,优于早期基于细分的算子。求梯度时把非线性偏移项 \(a\) 视为常量,故速度延拓近似用内蕴映射 \(U\)。
  • 求解器:采用 [Li et al. 2021] 的屏障过滤牛顿法。非最细层级解到牛顿减量小于 \(10^{-3}\)(或不再下降)即停;最细层级则解到收敛。
  • 层级与步长设置:实用步长 \(h\) 取 \(0.04\text{s}\sim0.01\text{s}\),中间层级一般 1~2 个。步长越小捕捉的高频动力学越多、数值阻尼越少但成本越高;中间层级越多,最细结果细节越丰富但成本越高(粗预览结果与层数无关,恒定)。
  • 实现:C++,CHOLMOD 做线性求解,Eigen 做其余线性代数;在 Intel i7-10700K / 32GB 上测试。

实验结果

作者在一系列压力测试与设计任务上验证:

  • 一致性:在 Bouncy Cube(软硬材料剧烈碰撞)、Bouncing Jumble(多体尖锐接触)、Waving Cat Flag(20s 长时高动态挥旗)等例子中,跨分辨率的质心轨迹与逐帧几何长期紧密匹配;而直接模拟(IPC 与 Houdini Vellum 的 XPBD)几乎立刻在不同分辨率间发散。用 2-范数质心偏差与逐帧动能曲线定量证实了这种”一阶一致性”。
  • 自我修复现象:Bouncing Jumble 中曾出现单个立方体在约 5 帧(0.05s)内跨层级偏离(第 91 帧动能差达峰值),随后 Progressive Dynamics 自动修复,恢复了与其他物体一致的轨迹。
  • 抗锁定:Ball Drop(930 顶点粗网格)中,直接模拟立刻锁定皱成一团,而 PD 粗预览能正确地压缩-凹陷-回弹。
  • 细节丰富性:Laundry Basket、Spin Cycle 等展示了随分辨率提升,褶皱分叉/合并、高速缠绕、摩擦 stick-slip、飞离时刻等细节被渐进丰富,且整体行为保持一致。
  • 加速比:相较于此前必须用”直接细层级预览”,PD 的预览步进在 Laundry Basket、Smushing Octocats、Bouncing Jumble、Waving Cat Flag 上分别加速约 21×、30×、52×、75×。最细层级每步与对应直接模拟的单步成本相同(无额外开销),而粗预览相对同分辨率直接模拟约有 2× 开销(来自梯度采样与限制到细层)。
  • 设计任务:Toy Toss、Smushing Octocats、Sky Dancers 等端到端例子说明,艺术家可用粗预览快速探索初始条件、材料、布局与风力等参数,定稿后再一次性细化为高质量成片。

贡献与局限

贡献

  1. 一种简单高效的粗层级隐式时间步进方法(延拓 IP),显著缓解粗网格壳动力学的锁定等伪影,提供高质量预览。
  2. 面向三角网格层级的多分辨率渐进公式与延拓模型(含速度延拓)。
  3. 一套 Progressive Dynamics LOD 时间步进与细化算法,同时保证逐时间步的跨分辨率一致与逐层级的时间连续,并具备对角推进带来的并行潜力。

局限与未来工作

  • 预览网格若过粗,运动学锁定仍会限制结果,值得引入自适应重网格化
  • 更小步长可能需要更多中间层级来平衡,层数/最细网格分辨率之间的权衡尚待更深入分析。
  • 目前聚焦布料与薄壳,向体积模型及更高余维模型推广是重要方向。