物理模拟学习总结 — PBD 与 XPBD
1. PBD(Position-Based Dynamics)理论理解
核心理念
-
PBD 不通过力和加速度积分来更新位置,而是直接修正粒子位置以满足约束。
-
优点:
- 稳定性高,不易爆炸
- 易于实现,适合实时仿真
- 约束直观(距离约束、体积约束、碰撞约束等)
-
缺点:
- 能量不守恒
- 刚度受迭代次数影响
- 物理表现可能不严格真实
核心步骤
-
预测位置:根据当前位置和速度预测下一帧位置
-
迭代修正:通过约束投影修正预测位置
-
速度更新:根据修正后的位置计算新速度
- 公式直觉:
v_new = (x_corrected - x_old) / dt - 保证速度与位置一致,避免约束被破坏累积误差
- 公式直觉:
质量分配
-
修正量按质量倒数分配:
- 质量大 → 移动少
- 质量小 → 移动多
-
使系统物理直觉合理
核心直觉总结
- PBD = “先保证约束满足,再反推速度”,类似“根据答案做题”
- 传统力积分 = “正向推导,误差累积”
- PBD 稳定性来源:每帧直接将位置投影到约束集合,误差不累积
- 缺点:能量不守恒,物理表现依赖预测精度
2. XPBD(Extended Position-Based Dynamics)理论
核心改进
- 引入拉格朗日乘子 λ(张力) ,记录约束的累积力
- 修正位置时结合 λ,使约束硬度可控,能量表现更合理
- 迭代次数对硬度影响减小
- 可实现柔体、布料以及“近似刚体”
λ 的作用
- 记录上一帧约束的拉力
- 影响下一帧修正量,使系统表现出弹性硬度
- 保证位置修正的稳定性和连续性
直觉类比
- PBD = “粗暴助手,几何错误就硬拉回去”
- XPBD = “有记忆的绳子,根据张力 λ 调整拉回力度”
核心理解
- λ 越大 → 下一帧表现越硬
- XPBD 可以通过调参数控制刚度,从软体到半刚体近似刚体
- 对真实刚体碰撞,传统冲量解算更适合;XPBD 用 λ 主要是保证稳定性和减少穿透
3. PBD 核心算法循环 (The Loop)
PBD 的独特之处在于它直接操作位置来满足约束,而不是像传统物理引擎那样计算力。每一帧的模拟分为三个主要步骤 1:
-
Step 1: 预测 (Prediction)
仅根据重力等外力,粗略预测粒子的去向,完全忽略约束。
- (应用重力)
- (关键:保存当前位置到 ,用于后续计算速度)
- (更新预测位置)
-
Step 2: 约束求解 (Constraint Solving)
将预测的“非法”位置 强制拉回到满足约束(如绳子长度、墙壁阻挡)的“合法”位置。
- 循环执行:
solve(C, dt)
- 循环执行:
-
Step 3: 速度更新 (Velocity Update)
基于位置的实际变化量,反推这一帧的真实速度。
- 优点:自然处理了碰撞响应和阻尼,防止物体在碰撞后保留朝向墙壁的速度而产生抖动。
2. 距离约束与质量分配
在修正位置时,PBD 遵循物理规律,根据物体的质量来分配移动距离 2:
-
原理:质量越大,移动越少;质量越小,移动越多。
-
倒数质量 (Inverse Mass, ) :使用 进行计算。
- 普通物体:。
- 无限质量物体 (如钉子、墙) :。代入公式后,其位置修正量为 0,即完全不动。
3. PBD 的局限性 vs XPBD 的改进
当场景中有多个约束互相冲突(Constraint Fighting)时,为了解算稳定,通常需要多次迭代 (Iterations) 。
| 特性 | 原始 PBD | XPBD (Extended PBD) |
|---|---|---|
| 刚度 (Stiffness) | 依赖于 迭代次数 和 时间步长 () 。迭代越多,物体越硬。 | 引入物理参数 Compliance () 。刚度是固定的物理属性。 |
| 公式差异 | $\lambda = \frac{-C}{\sum w_i | \nabla C |
| 物理准确性 | 不准确。改变 FPS 或迭代次数会改变物体材质手感。 | 准确。无论跑多快,橡皮筋的软硬程度保持一致。 |
| 适用场景 | 游戏视觉特效(追求速度和稳定性)。 | 工程模拟、精确物理(追求材质真实感)。 |
- XPBD 核心机制:通过在分母中加入 ,当时间步长 变小时,分母变大,修正力度 自动变小,从而抵消了因步长变小而增加的计算次数,保持总刚度不变。
4. 梯度计算 ()
梯度决定了粒子应该“往哪个方向移动”来最快地满足约束 3。
以 距离约束 为例:
-
我们希望增加或减少 和 之间的距离。
-
对于 :需要沿着 的方向移动(远离 )。
- 4
-
对于 :方向总是与 相反(牛顿第三定律)。
- 5
4. PBD/XPBD 与刚体、软体、流体的关系
刚体
- XPBD 可以近似“刚体”,但不是严格刚体动力学
- 刚体碰撞一般使用冲量解算,而不是 λ 修正
软体
- 传统刚体引擎理论可实现软体,但非常困难且低效
- PBD/XPBD 更适合软体模拟(布料、毛发、软组织等)
流体
- PBD 扩展(PBF/DFSPH)可模拟流体,但需额外密度约束
- XPBD 主要适合粒子约束系统,流体需要特定扩展
5. 通用物理模拟框架
| 方法 | 刚体 | 软体 | 流体 | 实时 | 统一程度 |
|---|---|---|---|---|---|
| XPBD/PBD | 近似 | ✔ | 需扩展 | 高 | ★★★ |
| MPM | ✔ | ✔ | ✔ | 中/高 | ★★★★★ |
| FEM | ✔ | ✔ | 有限 | 中 | ★★★★ |
| 传统刚体引擎 | ✔ | ✘ | ✘ | 高 | ★ |
- XPBD:游戏领域通用,稳定、易实时,硬度可控
- MPM:学术/电影级统一物理引擎,可从刚体→软体→流体无缝过渡
- FEM:适合连续体模拟,可通过本构模型调节硬度
- 传统刚体引擎:高效刚体,但无法自然处理软体或流体
6. 核心理论总结
-
PBD 的哲学:位置驱动 → 稳定,但能量不守恒
-
XPBD 的哲学:位置驱动 + λ 累积 → 稳定、可控硬度
-
统一物理模拟:现代方法通过粒子、约束或本构模型,参数调节实现刚体、软体、流体的连续过渡
-
实际应用:
- 游戏:XPBD/PBD(实时、稳定)
- 学术/影视:MPM/FEM(高精度、统一物理)