P14

Strain Limiting

原理

Strain limiting aims at using the projection function for correction only.

✅ 投影函数作为模拟过程的后处理,防止模拟后产生大的形变,使模拟结果更稳定。

PBDStrain Limiting
第一步只考虑粒子运动,不考虑约束模拟粒子运动、同时考虑约束
第二步使粒子状态满足约束校正,但约束较宽

P15

例一: Spring Strain Limit

We can set the spring strain, i.e., the stretching ratio σ, to be within a limit.

✅ 这一页以弹簧为例子说明 Strain Limit
✅ Strain:物理上描述形变的量,即本页的\(\sigma \)

$$ \sigma ^\mathrm{{min}}≤\frac{1}{L}||\mathbf{x} _i− \mathbf{x} _j||≤\sigma^\mathrm{{max}} $$

✅ 仅要求弹簧长度满足某不比例,不要求一定到达某个位置。

Constraint

P16

$$ \quad $$

$$ \mathbf{x}^{\mathbf{new}}\longleftarrow \mathrm{Projection} (\mathbf{x} ) $$

$$ \sigma\longleftarrow \frac{1}{L}||\mathbf{x}_i− \mathbf{x}_j|| $$

✅ 计算当前拉伸比

$$ \sigma _0\longleftarrow \mathrm{min} (\mathrm{max} (\sigma,\sigma^{\mathrm{min} }),\sigma^{\mathrm{max} }) $$

✅ 计算期望的拉伸比

$$ \mathbf{x} _i^{\mathrm {new} }⟵\mathbf{x} _i−\frac{m_j}{m_i+m_j}(||\mathbf{x} _i− \mathbf{x} _j||−σ_0L)\frac{\mathbf{x} _i− \mathbf{x} _j}{||\mathbf{x} _i− \mathbf{x} _j||} $$

$$ \mathbf{x} _j^{\mathrm {new} }⟵\mathbf{x} _j+\frac{m_j}{m_i+m_j}(||\mathbf{x} _i− \mathbf{x} _j||−σ_0L)\frac{\mathbf{x} _i− \mathbf{x} _j}{||\mathbf{x} _i− \mathbf{x} _j||} $$

✅ 用\(\sigma _0L\)代替原长\(L\).

\(\mathrm{PBD}: \sigma _0≡1;\quad\quad\)

✅ PBD可以看作是Strain Limit的特例。

No limit: \(\sigma ^{\mathrm{min} } = 0, σ^{\mathrm{max} } = \infty\)

✅ Strain Limit 的应用场景:(1) 模拟布料:“拉伸到一定范围后变得非常 stiff” 的效果 (2) 防止“形变大发生数值不稳定”。

P17

例二:Triangle Area Limit

We can limit the triangle area as well. To do so, we define a scaling factor.

✅这是另一个例子。希望顶点移动尽量少,因此定义约束:三角形面积变化在一定范围内。

{\(\mathbf{x}_i^{\mathrm{new} },\mathbf{x}_i^{\mathrm{new} },\mathbf{x}_k^{\mathrm{new} }\)}  = \(\mathrm{argmin} \frac{1}{2} \){\(m_i||\mathbf{x}_i^{\mathrm{new} }−\mathbf{x}_i||^2+m_j||\mathbf{x}_j^{\mathrm{new} }−\mathbf{x}_j||^2+m_j||\mathbf{x}_k^{\mathrm{new} }−\mathbf{x}_k||^2\)} 

such that the constraint is satisfied.

✅ strain s为面积的缩放量

P18

$$ \quad $$

$$ \mathbf{x} ^{\mathbf{new}} ⟵\mathrm{Projection} (\mathbf{x} ) $$

$$ \mathbf{A}\longleftarrow \frac{1}{2} ||(\mathbf{x} _j− \mathbf{x} _i)\mathbf{×} (\mathbf{x}_k− \mathbf{x} _i)|| $$

✅ 计算当前三角形的面积

$$ \mathbf{s} \longleftarrow \sqrt{\mathrm{\mathrm{min}} (\mathrm{\mathrm{max}} (A,A^{\mathrm{min}}),A^{\mathrm{max}})/A} $$

✅ 计算期望的面积缩放比

$$ \mathbf{c} \longleftarrow \frac{1}{m_i+m_j+m_k} (m_i\mathbf{x} _i+m_j\mathbf{x} _j+m_k\mathbf{x} _k) $$

✅ C为质心,要求缩放前后质心不变。数学上、质心不变,点的移动最少;物理上,质心变了代表物体运动了,scale 不应该导致物理运动。

$$ \mathbf{x} _i^{\mathrm{new}}\longleftarrow \mathbf{c} +s(\mathbf{x} _i−\mathbf{c} ) $$

$$ \mathbf{x} _j^{\mathrm{new}}\longleftarrow \mathbf{c} +s(\mathbf{x} _j−\mathbf{c} ) $$

$$ \mathbf{x} _k^{\mathrm{new}}\longleftarrow \mathbf{c} +s(\mathbf{x} _k−\mathbf{c} ) $$

✅ 通过对顶点到质心的距离的缩放,得到顶点的新的位置

P19

Strain Limiting在Simulation中的作用

  • Strain limiting is widely used in physics- based simulation, typically for avoiding instability and artifacts due to large deformation.

  • Strain limiting is useful for nonlinear effects, in a biphasic way.

✅ 例如布料一般一开始抵抗比较小,拉到一定程度后抵抗迅速变大。对这种非线性的表现,可以把模拟分布两个阶段,前面用普通模拟,后面用strain limiting。

  • Strain limiting also helps address the locking issue.

✅两个阶段有不同的算法,针对两个阶段的不同特点,可以分别解决两个阶段的问题。


本文出自CaterpillarStudyGroup,转载请注明出处。

https://caterpillarstudygroup.github.io/GAMES103_mdbook/