🧩 非刚体动力学#
本页简要概述了 Genesis 的连续介质和离散求解器实现的物理模型。重点在于正在求解哪些方程以及如何求解,而不是 Python API。耦合理论请参见专门的求解器与耦合章节。
1. 欧拉稳定流体求解器 (SFSolver)#
目的。 在固定网格上进行快速烟雾/气体模拟。
控制方程 – 不可压缩 Navier–Stokes 方程。
算法 – Jos Stam 的稳定流体:
对流 – 速度用三阶 RK 回溯并插值(
backtrace+trilerp)。数值上无条件稳定。外部脉冲 – 喷射源在对流后注入动量。
粘度/衰减 – 可选的指数阻尼项。
压力投影 – 用 Jacobi 迭代求解 Poisson 方程(
pressure_jacobi)。边界条件 – 通过在固体面镜像分量强制执行法向速度为零。
因为所有步骤都是显式或对角隐式的,该方法在大时间步长下极其鲁棒,适合实时效果。
2. 物质点法求解器 (MPMSolver)#
目的。 使用粒子 + 背景网格统一模拟固体、液体和颗粒介质。
核心思想。 连续介质动量方程在欧拉网格上求解,而材料历史(变形梯度、塑性应变等)存储在拉格朗日粒子上。
2.1 更新序列(APIC / CPIC 变体)#
阶段 |
描述 |
|---|---|
P2G |
用 B-样条权重将质量和动量传输到相邻网格节点;添加应力贡献。 |
Grid solve |
除以质量获得速度,应用重力和边界碰撞。 |
G2P |
插值回网格速度,更新仿射矩阵和位置。 |
Polar-SVD |
分解变形梯度;材料定律返回新的变形梯度。 |
2.2 本构模型#
Genesis 提供了几个解析应力函数:
Neo-Hookean 弹性(粉笔/雪)
Von Mises capped 塑性(雪-塑性)
弱可压缩液体(WC 流体)
各向异性肌肉 添加主动纤维应力
3. 有限元法求解器 (FEMSolver)#
目的。 具有四面体网格的高质量可变形固体;对刚性材料可选隐式积分。
3.1 能量公式#
总势能
第一变分产生内力;第二变分给出单元刚度。
3.2 隐式后向欧拉#
给定当前状态 \((\mathbf x^n, \mathbf v^n)\) 通过 Newton–Raphson 求解 \(\mathbf x^{n+1}\):
其中 \(\hat{\mathbf x} = \mathbf x^{n} + \Delta t\,\mathbf v^{n}\) 是惯性预测。
每个 Newton 步骤用 PCG 求解 \(\mathbf H\,\delta \mathbf x = -\mathbf r\);\(\mathbf H\) 是一致的刚度 + 质量矩阵。使用逐顶点 3×3 块的块-Jacobi 逆作为预处理器。线搜索(Armijo 回溯)保证能量减少。
4. 基于位置的动力学求解器 (PBDSolver)#
目的。 实时布料、弹性杆、XPBD 流体和粒子群。
4.1 XPBD 积分循环#
预测 – 显式 Euler:\(\mathbf v^{*}\!=\!\mathbf v + \Delta t\,\mathbf f/m\) 和 \(\mathbf x^{*}\!=\!\mathbf x + \Delta t\,\mathbf v^{*}\)。
投影约束 – 迭代边、四面体、SPH 密度等。 对于每个约束 \(C(\mathbf x)\!=\!0\) 求解 Lagrange 乘子 λ
\[ \Delta\mathbf x = -\frac{C + \alpha\,\lambda^{old}}{\sum w_i\,|\nabla\!C_i|^{2}+\alpha}\,\nabla\!C, \quad \alpha = \frac{\text{compliance}}{\Delta t^{2}}. \]更新速度 – \(\mathbf v = (\mathbf x^{new}-\mathbf x^{old})/\Delta t\)。
4.2 支持的约束#
拉伸/弯曲(布料)
体积保持(XPBD 四面体)
不可压缩 SPH 密度和粘度约束(流体-PBD)
通过位置校正 + 库仑模型的碰撞和摩擦。
5. 光滑粒子流体动力学求解器 (SPHSolver)#
目的。 具有 WCSPH 或 DFSPH 压力求解器的基于粒子的流体。
5.1 核函数#
三次样条核 \(W(r,h)\) 和梯度 \(\nabla W\),支撑半径 \(h=\) _support_radius。
5.2 弱可压缩 SPH (WCSPH)#
状态方程:\(p_i = k\bigl[(\rho_i/\rho_0)^{\gamma}-1\bigr]\)。
动量方程:
\[ \frac{d\mathbf v_i}{dt} = -\sum_j m_j \left( \frac{p_i}{\rho_i^2} + \frac{p_j}{\rho_j^2} \right) \nabla W_{ij} + \mathbf g + \mathbf f_{visc} + \mathbf f_{surf}. \]
5.3 无散度 SPH (DFSPH)#
将求解分为散度遍(强制执行 \(\nabla\!\cdot\mathbf v = 0\))和密度遍(强制执行 \(\rho\!=\!\rho_0\))。
两遍都使用 DFSPh 因子场通过 Jacobi 迭代迭代计算每个粒子的压力系数 κ。
确保比 WCSPH 更大的时间步长下的不可压缩性。
参考文献#
Stam, J. “Stable Fluids”, SIGGRAPH 1999.
Zhu, Y. & Bridson, R. “Animating Sand as a Fluid”, SIGGRAPH 2005.
Gao, T. et al. “Robust Simulation of Deformable Solids with Implicit FEM”, SIGGRAPH 2015.
Macklin, M. et al. “Position Based Fluids”, SIGGRAPH 2013.
Bender, J. et al. “Position Based Dynamics”, 2014.
Bavo et al. “Divergence-Free SPH”, Eurographics 2015.