软体求解器#
除了刚体求解器,Genesis World 还提供五种用于连续介质与粒子材料的求解器。为实体指定 material 时,既选定了推进该实体的求解器,也选定了它遵循的本构模型(constitutive model),即把变形转换为应力的规则。仿真器只有在某个求解器至少持有一个实体时,才会在构建阶段激活它。
要挑选并运行某个求解器,见超越刚体。关于力如何跨越材质边界,见耦合。
求解器#
求解器 |
模拟对象 |
表示方式 |
|---|---|---|
MPM(Material Point Method,物质点法) |
弹性固体、塑性体、沙、雪、液体 |
粒子携带状态,背景网格求解力 |
FEM(Finite Element Method,有限元法) |
硬质弹性固体、体积肌肉、薄壳 |
四面体网格 |
PBD(Position-Based Dynamics,基于位置的动力学) |
布料、绳索、保持拓扑的可变形体 |
由约束连接的粒子 |
SPH(Smoothed-Particle Hydrodynamics,光滑粒子流体动力学) |
自由表面液体 |
粒子 |
SF(Stable Fluids,稳定流体) |
烟雾与气体 |
固定的欧拉网格 |
用于脚本化运动的运动学求解器和用于驱动机械臂的工具求解器补全了这套体系,材质同样可以像选择上面五种求解器那样选择它们:gs.materials.Kinematic 和 gs.materials.Tool。工具求解器通过单向耦合驱动软体求解器,而运动学实体只参与渲染,不参与物理仿真。
变形与应力#
每种连续介质材质都会跟踪变形梯度(deformation gradient)\(\mathbf F\),即从未变形邻域到其变形后形状的局部映射。其行列式 \(J = \det \mathbf F\) 是局部体积比:\(J = 1\) 表示体积不变,\(J < 1\) 为压缩,\(J > 1\) 为膨胀。本构模型把 \(\mathbf F\) 转换为应力,通常借助弹性应变能密度 \(\psi(\mathbf F)\),其导数即为力。
大多数固体采用三个参数,Genesis 由它们导出 Lamé 系数 \(\mu\)(抗剪切能力)和 \(\lambda\)(抗体积变化能力):
E: 杨氏模量,单位 Pa。E越大,物体越硬,系统在数值上也越刚硬,需要更小的子步。nu: 泊松比。接近0.5的取值表示几乎不可压缩。rho: 密度,单位 kg/m³;对 2D PBD 布料模型则为 kg/m²。
一些模型会先对 \(\mathbf F\) 做分解。极分解 \(\mathbf F = \mathbf R \mathbf S\) 把它拆分为一个旋转和一个对称拉伸;奇异值分解 \(\mathbf F = \mathbf U \boldsymbol\Sigma \mathbf V^\top\) 把主拉伸量显式呈现在 \(\boldsymbol\Sigma\) 的对角线上。塑性模型直接在这些拉伸量上运算。
弹性固体#
弹性材质在卸载后会恢复原始形状。弹性类同时也是塑性与肌肉模型扩展的基类。
gs.materials.MPM.Elastic 通过 model 选择其应力模型:
"corotation"(默认):固定共旋(fixed-corotated),\(\psi(\mathbf F) = \mu\,\lVert \mathbf F - \mathbf R\rVert_F^2 + \tfrac{\lambda}{2}(J-1)^2\)。能量会惩罚相对最近旋转的偏离,因此大旋转下仍保持良好性质。"neohooken":\(\psi(\mathbf F) = \tfrac{\mu}{2}(\operatorname{tr}(\mathbf F^\top\mathbf F) - 3) - \mu\ln J + \tfrac{\lambda}{2}(\ln J)^2\)。直接读取 \(\mathbf F\) 和 \(J\) 并跳过 SVD,因此每个粒子的开销更小。
gs.materials.FEM.Elastic 在四面体网格上求解弹性,默认为 "linear":
soft = scene.add_entity(
material=gs.materials.FEM.Elastic(E=3e5, nu=0.45, model="stable_neohookean"),
morph=gs.morphs.Sphere(radius=0.1),
)
"linear": 线性弹性,唯一使用常量预计算 Hessian 的模型。适用于小应变;大旋转会产生伪影。"stable_neohookean": 静止状态稳定的 Neo-Hookean。其能量对翻转或退化单元仍有定义,适合大变形与接触密集的场景。"linear_corotated": 在逐单元旋转坐标系中的线性弹性,大旋转下仍然正确,且对拉伸呈线性响应。
gs.materials.PBD.Elastic 不积分应力。基于位置的动力学在粒子位置上施加几何约束,并用柔度(compliance,即刚度的倒数)表示刚度:stretch_compliance、bending_compliance 和 volume_compliance 分别控制边约束、弯曲约束和体积约束。在 XPBD 下,约束的有效柔度为 \(\alpha = \text{compliance}/\Delta t^2\),因此 0.0 表示完全刚性。它以物理精度换取速度与稳定性。
塑性固体#
塑性材质在卸载后会保留一部分变形。Genesis 把 \(\mathbf F\) 拆成储存能量的弹性部分和不储存能量的塑性部分:每个时间步先计算试探性弹性状态,再通过返回映射(return mapping)把它投影到屈服面上,并将超出的部分移入塑性部分。
gs.materials.MPM.ElastoPlastic 通过 use_von_mises 在两种屈服准则之间选择:
von Mises(默认):屈服取决于 Hencky 应变 \(\boldsymbol\varepsilon = \ln\boldsymbol\Sigma\) 的偏量部分。当 \(\lVert \operatorname{dev}\boldsymbol\varepsilon\rVert\) 超过 \(\tau_Y / (2\mu)\) 时材料开始流动,其中
von_mises_yield_stress设定 \(\tau_Y\),于是物体会凹陷并保持凹陷形状。奇异值截断(
use_von_mises=False):主拉伸量被截断到 \([\,1-\texttt{yield\_lower},\ 1+\texttt{yield\_higher}\,]\) 区间内,在剩余变形变为永久之前限制弹性拉伸与压缩。
gs.materials.MPM.Sand 是用于无黏性颗粒介质的 Drucker-Prager 模型。其屈服面是应力空间中的一个圆锥,由以度为单位的 friction_angle 确定:粒子只有在围压下才抵抗剪切,因此沙能保持休止角,否则就会流动。
gs.materials.MPM.Snow 是仅使用奇异值截断的 ElastoPlastic 特化,并会在压实过程中硬化,因此能压实成可保持形状的固体。
液体#
液体在静止时不承受剪应力,只抵抗体积变化。这三种类别的区别在于不可压缩性的施加方式。
gs.materials.MPM.Liquid 是弱可压缩的:每个时间步丢弃 \(\mathbf F\) 的形状部分,只保留其体积部分 \(J^{1/3}\mathbf I\),因此不会累积剪应力,压力仅来自体积变化。viscous=True 会保留一个偏黏性项,使流体更黏稠。
gs.materials.SPH.Liquid 由 Tait 状态方程导出压力,
其中 \(k\) 来自 stiffness,\(n\) 来自 exponent,静止密度 \(\rho_0\) 来自 rho。黏度与表面张力分别由 mu 和 gamma 直接设定。
gs.materials.PBD.Liquid 以位置方式而非压力方式施加逐粒子密度约束,由 density_relaxation 和 viscosity_relaxation 调节。
布料#
布料的拉伸与弯曲可以忽略厚度。
gs.materials.PBD.Cloth: 基于约束的薄片,具有独立的stretch_compliance和bending_compliance。其rho是面密度,因此实体质量等于rho乘以表面积。gs.materials.FEM.Cloth: 用于 IPC 接触后端的薄壳 FEM 材质,由以米为单位的thickness和可选的bending_stiffness参数化。当布料需要与其他物体之间实现无穿透接触时使用它。
肌肉#
肌肉在被动弹性响应之上,沿嵌入的纤维方向 \(\mathbf m\) 叠加一个可控的主动应力,其大小与每步的驱动信号成正比。纤维收缩会把物体拉成新的形状;放松后,弹性部分会恢复静止构型。
gs.materials.MPM.Muscle: 按粒子驱动,以"neohooken"被动模型扩展MPM.Elastic。gs.materials.FEM.Muscle: 按四面体单元驱动,以"linear"被动模型扩展FEM.Elastic。
两者都接受 n_groups,用于定义可独立驱动的纤维组。控制循环见软体机器人。
选择模型#
行为 |
材质 |
关键参数 |
|---|---|---|
可恢复的弹性固体 |
|
|
凹陷并保持形状 |
|
|
颗粒介质 |
|
|
可压实的雪 |
|
|
流动的液体 |
|
|
驱动的软体 |
|
|
布料与薄壳 |
|
柔度;FEM 还需 |
参考文献#
Stomakhin, A. et al. “A Material Point Method for Snow Simulation.” SIGGRAPH 2013.
Klár, G. et al. “Drucker-Prager Elastoplasticity for Sand Animation.” SIGGRAPH 2016.
Smith, B., Goldade, T., Kim, T. “Stable Neo-Hookean Flesh Simulation.” ACM TOG 2018.
Macklin, M., Müller, M., Chentanez, N. “XPBD: Position-Based Simulation of Compliant Constrained Dynamics.” MIG 2016.
Bender, J., Koschier, D. “Divergence-Free Smoothed Particle Hydrodynamics.” SCA 2015.