1. 符号记法

1.1 标量

  • 标量 用非加粗的小写字母或者大写字母表示。
符 号 含 义
mim_imi​ 第 iii 个网格的质量
Vp0V^0_pVp0​ 第 ppp 个粒子在第 000 个时间步的体积

1.2 向量及矩阵

  • 向量 用加粗的小写字母表示;
  • 矩阵 用加粗的大写字母表示。
符 号 含 义
vp\bold{v}_pvp​ 第 ppp 个粒子的速度
Cp\bold{C}_pCp​ 第 ppp 个粒子相关矩阵(下述中为粒子速度的梯度)

1.3 角标

  • 左下角的 iii 表示第 iii 个 网格
  • 左下角的 ppp 表示第 ppp 个 粒子
  • 左上角的 nnn 表示第 nnn 个 时间步
符 号 含 义
vi\bold{v}_ivi​ 第 iii 个网格的速度
vp\bold{v}_pvp​ 第 ppp 个粒子的速度
xpn\bold{x}^n_pxpn​ 第 ppp 个粒子在第 nnn 个时间步的位置
xpn+1\bold{x}^{n+1}_pxpn+1​ 第 ppp 个粒子在第 n+1n+1n+1 个时间步的位置

2. 不可压缩流体的 APIC

2.1 Particle to grid (P2G)

网格结点的动量:

(mv)in+1=∑pwip[mpvpn+mpCpn(xi−xpn)](m\bold{v})^{n+1}_i = \sum_p w_{ip}[m_p \bold{v}^n_p + m_p \bold{C}^n_p(\bold{x}_i - \bold{x}^n_p)] (mv)in+1​=p∑​wip​[mp​vpn​+mp​Cpn​(xi​−xpn​)]

网格结点的质量:

min+1=∑pmpwipm^{n+1}_i = \sum_p m_p w_{ip} min+1​=p∑​mp​wip​

2.2 Grid operations

网格结点的速度:

v^in+1=(mv)in+1/min+1\hat{\bold{v}}^{n+1}_i = (m \bold{v})^{n+1}_i / m^{n+1}_i v^in+1​=(mv)in+1​/min+1​

使用 Chorin-style 压力投影:

vn+1=project(v^n+1)\bold{v}^{n+1} = \bold{project} (\bold{\hat{v}}^{n+1}) vn+1=project(v^n+1)

2.3 Grid to particle (G2P)

粒子速度:

vpn+1=∑iwipvin+1\bold{v}^{n+1}_p = \sum_i w_{ip} \bold{v}^{n+1}_i vpn+1​=i∑​wip​vin+1​

粒子速度的梯度:

Cpn+1=4Δx2∑iwipvin+1(xi−xpn)T\bold{C}^{n+1}_p = \cfrac{4}{\Delta x^2} \sum_i w_{ip} \bold{v}^{n+1}_i(\bold{x}_i - \bold{x}^n_p)^T Cpn+1​=Δx24​i∑​wip​vin+1​(xi​−xpn​)T

Note

  • APIC 矩阵,表示网格结点上的速度 vin+1\bold{v}^{n+1}_ivin+1​ 与 x\bold{x}x 的变化量 (xi−xpn)(\bold{x}_i - \bold{x}^n_p)(xi​−xpn​) 之间的关系;
  • 二者之间做个外积: vin+1⊗(xi−xpn)=vin+1(xi−xpn)T\bold{v}^{n+1}_i \otimes (\bold{x}_i - \bold{x}^n_p) = \bold{v}^{n+1}_i(\bold{x}_i - \bold{x}^n_p)^Tvin+1​⊗(xi​−xpn​)=vin+1​(xi​−xpn​)T 。

粒子位置:

xpn+1=xpn+Δtvpn+1\bold{x}^{n+1}_p = \bold{x}^n_p + \Delta t \bold{v}^{n+1}_p xpn+1​=xpn​+Δtvpn+1​

3. MLS-MPM(隐式)

3.1 Particle to grid (P2G)

粒子形变:

Fpn+1=(I+ΔtCpn)Fpn\bold{F}^{n+1}_p = (\bold{I} + \Delta t \bold{C}^n_p)\bold{F}^n_p Fpn+1​=(I+ΔtCpn​)Fpn​

网格动量:

(mv)in+1=∑pwip{mpvpn+[mpCpn−4ΔtΔx2∑pVp0P(Fpn+1)(Fpn+1)T](xi−xpn)}(m \bold{v})^{n+1}_i = \sum_p w_{ip} \{ m_p \bold{v}^n_p + [m_p \bold{C}^n_p - \frac{4\Delta t}{\Delta x^2} \sum_p V^0_p \bold{P}(\bold{F}^{n+1}_p)(\bold{F}^{n+1}_p)^T] (\bold{x}_i - \bold{x}^n_p) \} (mv)in+1​=p∑​wip​{mp​vpn​+[mp​Cpn​−Δx24Δt​p∑​Vp0​P(Fpn+1​)(Fpn+1​)T](xi​−xpn​)}

网格质量:

min+1=∑pmpwipm^{n+1}_i = \sum_p m_p w_{ip} min+1​=p∑​mp​wip​

3.2 Grid operations

网格速度:

v^in+1=(mv)in+1/min+1\hat{\bold{v}}^{n+1}_i = (m \bold{v})^{n+1}_i / m^{n+1}_i v^in+1​=(mv)in+1​/min+1​

网格边界条件(其中 BC 是边界条件运算符):

vin+1=BC(v^in+1)\bold{v}^{n+1}_i = \mathsf{BC}(\hat{\bold{v}}^{n+1}_i) vin+1​=BC(v^in+1​)

3.3 Grid to particle (G2P)

粒子速度:

vpn+1=∑iwipvin+1\bold{v}^{n+1}_p = \sum_i w_{ip} \bold{v}^{n+1}_i vpn+1​=i∑​wip​vin+1​

粒子速度梯度:

Cpn+1=4Δx2∑iwipvin+1(xi−xpn)T\bold{C}^{n+1}_p = \frac{4}{\Delta x^2} \sum_i w_{ip} \bold{v}^{n+1}_i (\bold{x}_i - \bold{x}^n_p)^T Cpn+1​=Δx24​i∑​wip​vin+1​(xi​−xpn​)T

粒子坐标:

xpn+1=xpn+Δtvpn+1\bold{x}^{n+1}_p = \bold{x}^{n}_p + \Delta t \bold{v}^{n+1}_p xpn+1​=xpn​+Δtvpn+1​

4. 更新粒子的形变

局部速度场的梯度不为零,因此粒子的形变梯度 F\bold{F}F 会变化:

∇v=∂vn∂x|x=xpn≠0\nabla \bold{v} = \left. \frac{\partial \bold{v}^n}{\partial \bold{x}} \middle | \begin{aligned} \\ {\bold{x} = \bold{x}^n_p} \end{aligned} \right. \neq \bold{0} ∇v=∂x∂vn​∣∣∣∣∣​x=xpn​​​=0

可推出形变梯度的递推式:

Fpn+1=(I+Δt∇v)Fpn\bold{F}^{n+1}_p = (\bold{I} + \Delta t \nabla \bold{v})\bold{F}^n_p Fpn+1​=(I+Δt∇v)Fpn​

在 APIC 中,∇v\nabla \bold{v}∇v 使用 Cpn\bold{C}^n_pCpn​ 进行近似:

Fpn+1=(I+ΔtCpn)Fpn\bold{F}^{n+1}_p = (\bold{I} + \Delta t \bold{C}^n_p)\bold{F}^n_p Fpn+1​=(I+ΔtCpn​)Fpn​

5. P2G

5.1 内力计算

网格动量:

(mv)in+1=∑pwip{mpvpn+[mpCpn−4ΔtΔx2∑pVp0P(Fpn+1)(Fpn+1)T](xi−xpn)}(m \bold{v})^{n+1}_i = \sum_p w_{ip} \{ m_p \bold{v}^n_p + [\textcolor{Red}{m_p \bold{C}^n_p} - \textcolor{Blue}{\frac{4 \textcolor{Black}{\Delta t}}{\Delta x^2} \sum_p V^0_p \bold{P}(\bold{F}^{n+1}_p)(\bold{F}^{n+1}_p)^T}] (\bold{x}_i - \bold{x}^n_p) \} (mv)in+1​=p∑​wip​{mp​vpn​+[mp​Cpn​−Δx24Δt​p∑​Vp0​P(Fpn+1​)(Fpn+1​)T](xi​−xpn​)}

两个动量项:

  • APIC:

wip[mpvpn+mpCpn(xi−xpn)]w_{ip} [m_p \bold{v}^n_p + \textcolor{Red}{m_p \bold{C}^n_p} (\bold{x}_i - \bold{x}^n_p)] wip​[mp​vpn​+mp​Cpn​(xi​−xpn​)]

  • 粒子的弹力冲量:

Δtfip=−wip4ΔtΔx2∑pVp0P(Fpn+1)(Fpn+1)T(xi−xpn)\Delta t \bold{f}_{ip} = - w_{ip} \textcolor{Blue}{\frac{4 \textcolor{Black}{\Delta t}}{\Delta x^2} \sum_p V^0_p \bold{P}(\bold{F}^{n+1}_p)(\bold{F}^{n+1}_p)^T} (\bold{x}_i - \bold{x}^n_p) Δtfip​=−wip​Δx24Δt​p∑​Vp0​P(Fpn+1​)(Fpn+1​)T(xi​−xpn​)

假设超弹性材料,使用势能梯度导出 fi\bold{f}_ifi​ ,即粒子 ppp 对网格结点 iii 力的贡献:

U=∑pVp0Ψp(Fp)fi=−∂U∂xi\begin{aligned} U &= \sum_p V^0_p \Psi_p (\bold{F}_p) \\ \bold{f}_i &= -\cfrac{\partial U}{\partial \bold{x}_i} \end{aligned} Ufi​​=p∑​Vp0​Ψp​(Fp​)=−∂xi​∂U​​

Note

  • Ψp\Psi_pΨp​ :粒子 ppp 的弹性能量密度;
  • UUU :总弹性势能;
  • Vp0V^0_pVp0​ :粒子 ppp 的初始体积。

5.2 节点力计算

总所周知,网格上的结点理论上是不会发生位移和形变的,因此这使得我们需要借助微分工具来获得一个微形变,从而计算出总弹性势能 UUU 对位移 xi\bold{x}_ixi​ 的梯度,继而获得 fi\bold{f}_ifi​ 。

设网格结点经过了一个微小的时间间隔 τ\tauτ ,该值趋于零,即 τ→0\tau \to 0τ→0 ,那么我们可以获得以下几个对应的式子:

  • 网格结点的当前位置(前向欧拉积分):

xi^=xi+τvi\textcolor{Orange}{\hat{\bold{x}_i} = \bold{x}_i + \tau \bold{v}_i} xi​^​=xi​+τvi​

  • 网格结点的 APIC 矩阵:

Cp=4Δx2∑iwipvi(xi−xp)T\textcolor{Red}{\bold{C}_p = \cfrac{4}{\Delta x^2} \sum_i w_{ip} \bold{v}_i (\bold{x}_i - \bold{x}_p)^T} Cp​=Δx24​i∑​wip​vi​(xi​−xp​)T

  • 网格结点的形变梯度:

Fp′=(I+τCp)Fp\textcolor{SkyBlue}{\bold{F}'_p = (\bold{I} + \tau \bold{C}_p)\bold{F}_p} Fp′​=(I+τCp​)Fp​

  • 网格结点的受力:

fi=−∂U∂xi=−∑pVp0∂Ψ(Fp′)∂x^i=−∑pVp0τ∂Ψp(Fp′)∂vi=−∑pVp0τ∂Ψ(Fp′)∂Fp′∂Fp′∂Cp∂Cp∂vin=−∑pVp0τPp(Fp′)⋅τFpT⋅4wipΔx2(xi−xp)=−4Δx2∑pVp0P(Fp′)⋅FpTwip(xi−xp)\begin{aligned} \bold{f}_i &= -\cfrac{\partial U}{\partial \bold{x}_i} \\ &= - \sum_p V^0_p \cfrac{\partial \Psi(\bold{F}'_p)}{\partial \textcolor{Orange}{\hat{\bold{x}}_i}} \\ &= - \sum_p \cfrac{V^0_p}{\textcolor{Orange}{\tau}} \cfrac{\partial \Psi_p (\bold{F}'_p)}{\partial \textcolor{Orange}{\bold{v}_i}} \\ &= - \sum_p \cfrac{V^0_p}{\tau} \textcolor{Green}{\cfrac{\partial \Psi (\bold{F}'_p)}{\partial \bold{F}'_p}} \textcolor{SkyBlue}{\cfrac{\partial \bold{F}'_p}{\partial \bold{C}_p}} \textcolor{Red}{\cfrac{\partial \bold{C}_p}{\partial \bold{v}^n_i}} \\ &= - \sum_p \cfrac{V^0_p}{\tau} \textcolor{Green}{\bold{P}_p(\bold{F}'_p)} \cdot \textcolor{SkyBlue}{\tau \bold{F}^T_p} \cdot \textcolor{Red}{\cfrac{4w_{ip}}{\Delta x^2}(\bold{x}_i - \bold{x}_p)} \\ &= - \textcolor{Blue}{\cfrac{4}{\Delta x^2} \sum_p V^0_p \bold{P}(\bold{F}'_p) \cdot \bold{F}^T_p} w_{ip}(\bold{x}_i - \bold{x}_p) \end{aligned} fi​​=−∂xi​∂U​=−p∑​Vp0​∂x^i​∂Ψ(Fp′​)​=−p∑​τVp0​​∂vi​∂Ψp​(Fp′​)​=−p∑​τVp0​​∂Fp′​∂Ψ(Fp′​)​∂Cp​∂Fp′​​∂vin​∂Cp​​=−p∑​τVp0​​Pp​(Fp′​)⋅τFpT​⋅Δx24wip​​(xi​−xp​)=−Δx24​p∑​Vp0​P(Fp′​)⋅FpT​wip​(xi​−xp​)​

6. Grid operations

6.1 强边界条件(BC)

因为上述的分部积分、散度定理、自由度均在网格上进行操作,所以 MPM 中应在网格上计算边界条件,对于每个在边界内的网格结点 iii :

6.1.1 sticky 边界条件

粒子在边界上速度直接归零:

vin+1=BCsticky(v^in+1)=0\bold{v}^{n+1}_i = \mathsf{BC_{sticky}} (\bold{\hat{v}}^{n+1}_i) = \bold{0} vin+1​=BCsticky​(v^in+1​)=0

6.1.2 slip 边界条件(滑移)

粒子在边界上法线方向上的速度归零,切向速度不变,粒子会在边界上沿着边界光滑地滑动:

vin+1=BCslip(v^in+1)=v^in+1−n(nTv^in+1)\bold{v}^{n+1}_i = \mathsf{BC_{slip}} (\bold{\hat{v}}^{n+1}_i) = \bold{\hat{v}}^{n+1}_i - \bold{n}(\bold{n}^T \bold{\hat{v}}^{n+1}_i) vin+1​=BCslip​(v^in+1​)=v^in+1​−n(nTv^in+1​)

Note

  • n\bold{n}n :表面法向量。

6.1.3 separate 边界条件(分离)

仅仅使得靠近边界的粒子应用 slip 边界条件:

vin+1=BCseparate(v^in+1)=v^in+1−n⋅min⁡(nTv^in+1,0)\bold{v}^{n+1}_i = \mathsf{BC_{separate}} (\bold{\hat{v}}^{n+1}_i) = \bold{\hat{v}}^{n+1}_i - \bold{n} \cdot \min(\bold{n}^T \bold{\hat{v}}^{n+1}_i , 0) vin+1​=BCseparate​(v^in+1​)=v^in+1​−n⋅min(nTv^in+1​,0)

Note

  • 其中 nTv^in+1\bold{n}^T \bold{\hat{v}}^{n+1}_inTv^in+1​ 是速度法线方向的分量;
  • 当粒子有靠近边界的趋势时( nTv^in+1<0\bold{n}^T \bold{\hat{v}}^{n+1}_i < 0nTv^in+1​<0 ),即 min⁡(nTv^in+1,0)=nTv^in+1\min(\bold{n}^T \bold{\hat{v}}^{n+1}_i , 0) = \bold{n}^T \bold{\hat{v}}^{n+1}_imin(nTv^in+1​,0)=nTv^in+1​ ,边界条件变为 slip 边界条件;
  • 当粒子远离边界时,速度不发生变化,这使得原本在边界上的粒子有了离开边界的可能。

6.1.4 施加额外的外力

  • 添加重力:vin+1+=Δtg\bold{v}^{n+1}_i += \Delta t \bold{g}vin+1​+=Δtg (在边界条件之前操作)
  • 移动碰撞对象:在相对速度上计算边界条件
  • 库伦摩擦

7. 本构模型

  • 弹性物体:NeoHookean & Corotated
  • (弱可压缩)流体:Equation-of-States (EOS)
  • 弹塑性物体(雪,沙等):屈服准则(例如 ad-hoc boxing ,Cam-clay , Drucker-prager ,NACC)

本构模型主要分为两个部分:

  • (弹性/塑性)形变更新
  • (PK1)计算应力

7.1 弹性固体

7.1.1 形变更新

Fpn+1=(I+ΔtCpn)Fpn\bold{F}^{n+1}_p = (\bold{I} + \Delta t \bold{C}^n_p)\bold{F}^n_p Fpn+1​=(I+ΔtCpn​)Fpn​

7.1.2 超弹性材料模型的 PK1 应力

Neo-Hookean 模型

Ψ(F)=μ2∑i[(FTF)ii−1]−μlog⁡(J)+λ2log⁡2(J)P(F)=∂Ψ∂F=μ(F−F−T)+λlog⁡(J)F−T\begin{aligned} \Psi(\bold{F}) &= \cfrac{\mu}{2} \sum_i [(\bold{F}^T \bold{F})_{ii} - 1] - \mu \log (J) + \cfrac{\lambda}{2} \log^2(J) \\ \bold{P(F)} &= \cfrac{\partial \Psi}{\partial \bold{F}} = \mu (\bold{F} - \bold{F}^{-T}) + \lambda \log (J) \bold{F}^{-T} \end{aligned} Ψ(F)P(F)​=2μ​i∑​[(FTF)ii​−1]−μlog(J)+2λ​log2(J)=∂F∂Ψ​=μ(F−F−T)+λlog(J)F−T​

(Fixed)Corotated 模型

Ψ(F)=μ∑i(σi−1)2+λ2(J−1)2P(F)=∂Ψ∂F=2μ(F−R)+λ(J−1)JF−T\begin{aligned} \Psi(\bold{F}) &= \mu \sum_i(\sigma_i - 1)^2 + \cfrac{\lambda}{2}(J - 1)^2 \\ \bold{P(F)} &= \cfrac{\partial \Psi}{\partial \bold{F}} = 2\mu(\bold{F} - \bold{R}) + \lambda (J - 1)J \bold{F}^{-T} \end{aligned} Ψ(F)P(F)​=μi∑​(σi​−1)2+2λ​(J−1)2=∂F∂Ψ​=2μ(F−R)+λ(J−1)JF−T​

Note

  • σi\sigma_iσi​ :F\bold{F}F 的奇异值;
  • R\bold{R}R :F\bold{F}F 做 SVD 后的旋转分量;
  • 柯西应力 σ=1JPFT\sigma = \cfrac{1}{J} \bold{P} \bold{F}^Tσ=J1​PFT 在 MPM 中不常使用。

7.2 弱可压缩流体

7.2.1 体积比

Jp=Vpn/Vp0=det⁡(Fpn)J_p = V^n_p / V^0_p = \det(\bold{F}^n_p) Jp​=Vpn​/Vp0​=det(Fpn​)

Note

  • 体积比直接可以反映当前位置的压强;
  • 体积比是粒子 ppp 在时间步 nnn 的形变 Fpn\bold{F}^n_pFpn​ 的行列式,即矩阵 Fpn\bold{F}^n_pFpn​ 代表的变换中空间体积沿着各个特征向量发生变化的倍数。

7.2.2 简易状态方程

使用一个物理层面上不够严谨的方程,来反映体积比和压强之间的关系:

p=K(1−J)p = K(1 - J) p=K(1−J)

Note

  • KKK :体积系数。

之后可以计算柯西应力:

σ=−pI\sigma = -p \bold{I} σ=−pI

7.2.3 形变更新

为了避免 catastrophic cancellation ,不维护 Fp\bold{F}_pFp​ ,直接维护 Jpn=det⁡(Fpn)J^n_p = \det(\bold{F}^n_p)Jpn​=det(Fpn​) :

Fpn+1=(I+ΔtCpn)Fpn⇒det⁡(Fpn+1)=det⁡(I+ΔtCp)det⁡(Fpn)⇒Jpn+1=(1+Δttr(Cpn))Jpn\begin{aligned} \bold{F}^{n+1}_p &= (\bold{I} + \Delta t \bold{C}^n_p) \bold{F}^n_p \\ \Rightarrow \det(\bold{F}^{n+1}_p) &= \det(\bold{I} + \Delta t \bold{C}_p) \det(\bold{F}^n_p) \\ \Rightarrow J^{n+1}_p &= (1 + \Delta t \bold{tr}(\bold{C}^n_p)) J^{n}_p \end{aligned} Fpn+1​⇒det(Fpn+1​)⇒Jpn+1​​=(I+ΔtCpn​)Fpn​=det(I+ΔtCp​)det(Fpn​)=(1+Δttr(Cpn​))Jpn​​

7.2.4 简单实现弱可压缩流体

Corotated 模型:

Ψ(F)=μ∑i(σi−1)2+λ2(J−1)2P(F)=∂Ψ∂F=2μ(F−R)+λ(J−1)JF−T\begin{aligned} \Psi(\bold{F}) &= \mu \sum_i(\sigma_i - 1)^2 + \cfrac{\lambda}{2}(J - 1)^2 \\ \bold{P(F)} &= \cfrac{\partial \Psi}{\partial \bold{F}} = 2\mu(\bold{F} - \bold{R}) + \lambda (J - 1)J \bold{F}^{-T} \end{aligned} Ψ(F)P(F)​=μi∑​(σi​−1)2+2λ​(J−1)2=∂F∂Ψ​=2μ(F−R)+λ(J−1)JF−T​

Note

  • 设置 μ=0\mu = 0μ=0 ,只保留 λ\lambdaλ ,通过这种方式仅惩罚体积项,通过 Corotated 实现;
  • 为了避免数值不稳定的情况,每次更新 F\bold{F}F 时,将 F\bold{F}F 设置为单位矩阵,仅将第一行第一列项设置为 JJJ 。

8. 奇异值分解(SVD)

8.1 SVD 定义

对于任意矩阵 Mn×m\bold{M}_{n \times m}Mn×m​ 均可以进行奇异值分解:

Mn×m=Un×nΣn×mVm×mT\bold{M}_{n \times m} = \bold{U}_{n \times n} \bold{\Sigma}_{n \times m} \bold{V}^T_{m \times m} Mn×m​=Un×n​Σn×m​Vm×mT​

Note

  • 其中 U\bold{U}U 和 V\bold{V}V 为正交矩阵;
  • Σ\bold{\Sigma}Σ 为对角矩阵(Σij=0,i≠j\bold{\Sigma}_{ij} = 0,i \neq jΣij​=0,i​=j );
  • 对角矩阵的迹 σi=Σii\sigma_i = \Sigma_{ii}σi​=Σii​ 称之为 奇异值

8.2 奇异值分解的唯一性

SVD 的结果不是惟一的,因此需要添加一些限制:

  • det⁡(U)=det⁡(V)=1\det(\bold{U}) = \det(\bold{V}) = 1det(U)=det(V)=1 (仅限制在旋转,不是映射);
  • ∣Σii∣\vert \bold{\Sigma}_{ii} \vert∣Σii​∣ 降序排序;
  • 只有模最小的奇异值才能为负。

taichi 中的实现:

U, sig, V = ti.svd(M)
# sig is an NxN diagonal matrix.

8.3 模拟弹塑性固体

超弹性设置:

Fp=Fp<elastic>Fp<plastic>Ψpn=Ψ(Fp<elastic>)\begin{aligned} \bold{F}_p &= \bold{F}_{p<\bold{elastic}>} \bold{F}_{p<\bold{plastic}>} \\ \Psi^n_p &= \Psi(\bold{F}_{p<\bold{elastic}>}) \end{aligned} Fp​Ψpn​​=Fp<elastic>​Fp<plastic>​=Ψ(Fp<elastic>​)​

Note

  • 势能只会影响弹性形变,塑性形变被 “遗忘” 。

8.3.1 “Box” 屈服准则

先更新弹性形变:

F^pn+1=(I+ΔtCpn)Fp<elastic>n\bold{\hat{F}}^{n+1}_p = (\bold{I} + \Delta t \bold{C}^n_p) \bold{F}^n_{p<\bold{elastic}>}F^pn+1​=(I+ΔtCpn​)Fp<elastic>n​

SVD:

F^pn+1=UΣ^VT\bold{\hat{F}}^{n+1}_p = \bold{U} \bold{\hat{\Sigma}} \bold{V}^T F^pn+1​=UΣ^VT

对缩放倍数做一个 Clamping,限制数值的上下界,对于超出限制的部分舍去,以此实现塑性形变:

Σii=max⁡(min⁡(Σii^,1+θs),1−θc)\bold{\Sigma}_{ii} = \max(\min(\hat{\bold{\Sigma}_{ii}} , 1 + \theta_s), 1 - \theta_c) Σii​=max(min(Σii​^​,1+θs​),1−θc​)

Note

  • θs\theta_sθs​ :拉伸倍数的上限,拉伸超过该数值则不再拉伸;
  • θc\theta_cθc​ :压缩倍数的上限,压缩超过该数值则不再压缩;
  • Σii∈[1−θc,1+θs]\bold{\Sigma}_{ii} \in [1 - \theta_c , 1 + \theta_s]Σii​∈[1−θc​,1+θs​]

舍去塑性形变部分的缩放之后,更新新的弹性形变矩阵:

Fp<elastic>n+1=UΣVT\bold{F}^{n+1}_{p<\bold{elastic}>} = \bold{U} \bold{\Sigma} \bold{V}^T Fp<elastic>n+1​=UΣVT

而在 Clamping 过程中舍去的形变作为塑性形变 Fp<plastic>n+1\bold{F}^{n+1}_{p<\bold{plastic}>}Fp<plastic>n+1​

【GAMES201学习笔记】MLS-MPM公式基础相关推荐

  1. MATLAB学习笔记2:MATLAB基础知识(下)

    阅读前请注意: 1. 该学习笔记是华中师范大学HelloWorld程序设计协会2021年寒假MATLAB培训的学习记录,是基于培训课堂内容的总结归纳.拓展阅读.博客内容由 @K2SO4钾 撰写.编辑, ...

  2. 【Python学习笔记】第一章基础知识:格式化输出,转义字符,变量类型转换,算术运算符,运算符优先级和赋值运算符,逻辑运算符,世界杯案例题目,条件判断if语句,猜拳游戏与三目运算符

    Python学习笔记之[第一章]基础知识 前言: 一.格式化输出 1.基本格式: 2.练习代码: 二.转义字符 1.基本格式: 2.练习代码: 3.输出结果: 三.输入 1.基本格式: 2.练习代码: ...

  3. 强化学习笔记(一)基础篇

    强化学习笔记(一)基础篇 目录 1.强化学习相关概念 2.强化学习与监督学习和非监督学习的区别 3.强化学习分类 4.三对重要概念 目录 写在前面:本文系小编学习邹伟老师等人编著的<强化学习&g ...

  4. J2EE学习笔记三:EJB基础概念和知识 收藏

    J2EE学习笔记三:EJB基础概念和知识 收藏 EJB正是J2EE的旗舰技术,因此俺直接跳到这一章来了,前面的几章都是讲Servlet和JSP以及JDBC的,俺都懂一些.那么EJB和通常我们所说的Ja ...

  5. java学习笔记15--多线程编程基础2

    本文地址:http://www.cnblogs.com/archimedes/p/java-study-note15.html,转载请注明源地址. 线程的生命周期 1.线程的生命周期 线程从产生到消亡 ...

  6. Linux 学习笔记之超详细基础linux命令 Part 3

    Linux学习笔记之超详细基础linux命令 by:授客 QQ:1033553122 ---------------------------------接Part 2----------------- ...

  7. XML学习笔记01【xml_基础、xml_约束】

    Java后端 学习路线 笔记汇总表[黑马程序员] XML学习笔记01[xml_基础.xml_约束][day01] XML学习笔记02[xml_解析][day01] 目录 01 xml_基础 今日内容 ...

  8. 36篇博文带你学完opencv :python3+opencv学习笔记汇总目录(基础版)

    经过几天的学习,opencv基础部分学习完啦.整理出来. OpenCV opencv学习笔记1:图片读入,显示与保存(有代码) opencv学习笔记2:图像处理基础 opencv学习笔记3:像素处理 ...

  9. 《Go语言圣经》学习笔记 第三章 基础数据类型

    <Go语言圣经>学习笔记 第三章 基础数据类型 目录 整型 浮点数 复数 布尔型 字符串 常量 注:学习<Go语言圣经>笔记,PDF点击下载,建议看书. Go语言小白学习笔记, ...

最新文章

  1. 石墨烯新新新应用,MIT大规模生产细胞大小机器人,有感知能存储
  2. 脑电分析系列[MNE-Python-1]| MNE-Python详细安装与使用(更新)
  3. Spring Boot处理静态资源(自定义资源映射)
  4. java读取与写入_Java读取与写入文件
  5. Java项目实例教程详细
  6. LSMW批处理使用方法(06)_步骤4、5
  7. 美开发数据自毁技术适用云计算架构
  8. 排序算法之low B三人组
  9. iPhone/Mac Objective-C内存管理教程和原理剖析(二)口诀与范式转
  10. angularjs 验证用户名是否重复
  11. 2021 ACDU China Tour-上海站暨数据库大咖讲坛(第4期)成功举办!(附视频回放PPT下载)...
  12. 团队开发——冲刺2.g
  13. 将python随机森林模型保存到文件
  14. 2021爱分析·时尚品牌数字化厂商全景报告
  15. [1] UI原型设计工具Pencil Project 学习系列----- 为什么选择
  16. 容斥原理在C语言中的应用,容斥原理在排列问题中的应用实例
  17. linux构建lamp的关键步骤,Linux-LAMP平台搭建详解
  18. 多媒体音箱选购指南--理论篇
  19. 5年码农吐血推荐10款用了就离不开的网站
  20. 【赛后总结】第十三届服务外包创新创业大赛总结——A14

热门文章

  1. Java如何使用直接内存?
  2. 【日常需求】一次使用EasyExcel而引发的问题与思考~
  3. soul从入门到进阶02——soul-admin的数据同步流程
  4. mysql describe什么意思_MySQL中describe命令的使用方法小结_MySQL
  5. pandas中describe函数详解
  6. 审计溯源 | IP-guard终端操作审计,助力高效防控泄密风险
  7. 算法第四版- 3.1
  8. ailx10的hacknet攻略004
  9. shell脚本传递参数的方法
  10. The Recent Ten Years