物理模拟学习总结 — PBD 与 XPBD

215 阅读5分钟

物理模拟学习总结 — PBD 与 XPBD

1. PBD(Position-Based Dynamics)理论理解

核心理念

  • PBD 不通过力和加速度积分来更新位置,而是直接修正粒子位置以满足约束。

  • 优点:

    • 稳定性高,不易爆炸
    • 易于实现,适合实时仿真
    • 约束直观(距离约束、体积约束、碰撞约束等)
  • 缺点:

    • 能量不守恒
    • 刚度受迭代次数影响
    • 物理表现可能不严格真实

核心步骤

  1. 预测位置:根据当前位置和速度预测下一帧位置

  2. 迭代修正:通过约束投影修正预测位置

  3. 速度更新:根据修正后的位置计算新速度

    • 公式直觉:v_new = (x_corrected - x_old) / dt
    • 保证速度与位置一致,避免约束被破坏累积误差

质量分配

  • 修正量按质量倒数分配:

    • 质量大 → 移动少
    • 质量小 → 移动多
  • 使系统物理直觉合理

核心直觉总结

  • PBD = “先保证约束满足,再反推速度”,类似“根据答案做题”
  • 传统力积分 = “正向推导,误差累积”
  • PBD 稳定性来源:每帧直接将位置投影到约束集合,误差不累积
  • 缺点:能量不守恒,物理表现依赖预测精度

2. XPBD(Extended Position-Based Dynamics)理论

核心改进

  • 引入拉格朗日乘子 λ(张力) ,记录约束的累积力
  • 修正位置时结合 λ,使约束硬度可控,能量表现更合理
  • 迭代次数对硬度影响减小
  • 可实现柔体、布料以及“近似刚体”

λ 的作用

  1. 记录上一帧约束的拉力
  2. 影响下一帧修正量,使系统表现出弹性硬度
  3. 保证位置修正的稳定性和连续性

直觉类比

  • PBD = “粗暴助手,几何错误就硬拉回去”
  • XPBD = “有记忆的绳子,根据张力 λ 调整拉回力度”

核心理解

  • λ 越大 → 下一帧表现越硬
  • XPBD 可以通过调参数控制刚度,从软体到半刚体近似刚体
  • 对真实刚体碰撞,传统冲量解算更适合;XPBD 用 λ 主要是保证稳定性和减少穿透

3. PBD 核心算法循环 (The Loop)

PBD 的独特之处在于它直接操作位置来满足约束,而不是像传统物理引擎那样计算力。每一帧的模拟分为三个主要步骤 1:

  • Step 1: 预测 (Prediction)

    仅根据重力等外力,粗略预测粒子的去向,完全忽略约束。

    • vivi+Δtgv_{i} \leftarrow v_{i} + \Delta t \cdot g (应用重力)
    • pixip_{i} \leftarrow x_{i}关键:保存当前位置到 pp,用于后续计算速度)
    • xixi+Δtvix_{i} \leftarrow x_{i} + \Delta t \cdot v_{i} (更新预测位置)
  • Step 2: 约束求解 (Constraint Solving)

    将预测的“非法”位置 xix_i 强制拉回到满足约束(如绳子长度、墙壁阻挡)的“合法”位置。

    • 循环执行:solve(C, dt)
  • Step 3: 速度更新 (Velocity Update)

    基于位置的实际变化量,反推这一帧的真实速度。

    • vi(xipi)/Δtv_{i} \leftarrow (x_{i} - p_{i}) / \Delta t
    • 优点:自然处理了碰撞响应和阻尼,防止物体在碰撞后保留朝向墙壁的速度而产生抖动。

2. 距离约束与质量分配

在修正位置时,PBD 遵循物理规律,根据物体的质量来分配移动距离 2:

  • 原理:质量越大,移动越少;质量越小,移动越多。

  • 倒数质量 (Inverse Mass, ww) :使用 w=1/mw = 1/m 进行计算。

    • 普通物体w>0w > 0
    • 无限质量物体 (如钉子、墙)w=0w = 0。代入公式后,其位置修正量为 0,即完全不动。

3. PBD 的局限性 vs XPBD 的改进

当场景中有多个约束互相冲突(Constraint Fighting)时,为了解算稳定,通常需要多次迭代 (Iterations)

特性原始 PBDXPBD (Extended PBD)
刚度 (Stiffness)依赖于 迭代次数时间步长 (Δt\Delta t) 。迭代越多,物体越硬。引入物理参数 Compliance (α\alpha) 。刚度是固定的物理属性。
公式差异$\lambda = \frac{-C}{\sum w_i\nabla C
物理准确性不准确。改变 FPS 或迭代次数会改变物体材质手感。准确。无论跑多快,橡皮筋的软硬程度保持一致。
适用场景游戏视觉特效(追求速度和稳定性)。工程模拟、精确物理(追求材质真实感)。
  • XPBD 核心机制:通过在分母中加入 αΔt2\frac{\alpha}{\Delta t^2},当时间步长 Δt\Delta t 变小时,分母变大,修正力度 λ\lambda 自动变小,从而抵消了因步长变小而增加的计算次数,保持总刚度不变。

4. 梯度计算 (C\nabla C)

梯度决定了粒子应该“往哪个方向移动”来最快地满足约束 3。

距离约束 C=x1x2dC = |x_1 - x_2| - d 为例:

  • 我们希望增加或减少 x1x_1x2x_2 之间的距离。

  • 对于 x1x_1 :需要沿着 x1x2x_1 - x_2 的方向移动(远离 x2x_2)。

    • x1C=x1x2x1x2\nabla_{x_1} C = \frac{x_1 - x_2}{|x_1 - x_2|} 4
  • 对于 x2x_2 :方向总是与 x1x_1 相反(牛顿第三定律)。

    • x2C=x1C\nabla_{x_2} C = - \nabla_{x_1} C 5

4. PBD/XPBD 与刚体、软体、流体的关系

刚体

  • XPBD 可以近似“刚体”,但不是严格刚体动力学
  • 刚体碰撞一般使用冲量解算,而不是 λ 修正

软体

  • 传统刚体引擎理论可实现软体,但非常困难且低效
  • PBD/XPBD 更适合软体模拟(布料、毛发、软组织等)

流体

  • PBD 扩展(PBF/DFSPH)可模拟流体,但需额外密度约束
  • XPBD 主要适合粒子约束系统,流体需要特定扩展

5. 通用物理模拟框架

方法刚体软体流体实时统一程度
XPBD/PBD近似需扩展★★★
MPM中/高★★★★★
FEM有限★★★★
传统刚体引擎
  • XPBD:游戏领域通用,稳定、易实时,硬度可控
  • MPM:学术/电影级统一物理引擎,可从刚体→软体→流体无缝过渡
  • FEM:适合连续体模拟,可通过本构模型调节硬度
  • 传统刚体引擎:高效刚体,但无法自然处理软体或流体

6. 核心理论总结

  1. PBD 的哲学:位置驱动 → 稳定,但能量不守恒

  2. XPBD 的哲学:位置驱动 + λ 累积 → 稳定、可控硬度

  3. 统一物理模拟:现代方法通过粒子、约束或本构模型,参数调节实现刚体、软体、流体的连续过渡

  4. 实际应用

    • 游戏:XPBD/PBD(实时、稳定)
    • 学术/影视:MPM/FEM(高精度、统一物理)