P14
Strain Limiting
原理
Strain limiting aims at using the projection function for correction only.
✅ 投影函数作为模拟过程的后处理,防止模拟后产生大的形变,使模拟结果更稳定。
PBD | Strain Limiting | |
---|---|---|
第一步 | 只考虑粒子运动,不考虑约束 | 模拟粒子运动、同时考虑约束 |
第二步 | 使粒子状态满足约束 | 校正,但约束较宽 |
P15
例一: Spring Strain Limit
We can set the spring strain, i.e., the stretching ratio σ, to be within a limit.
✅ 这一页以弹簧为例子说明 Strain Limit
✅ Strain:物理上描述形变的量,即本页的σ
σmin≤1L||xi−xj||≤σmax
✅ 仅要求弹簧长度满足某不比例,不要求一定到达某个位置。
Constraint
P16
xnew⟵Projection(x)
σ⟵1L||xi−xj||
✅ 计算当前拉伸比
σ0⟵min(max(σ,σmin),σmax)
✅ 计算期望的拉伸比
xnewi⟵xi−mjmi+mj(||xi−xj||−σ0L)xi−xj||xi−xj||
xnewj⟵xj+mjmi+mj(||xi−xj||−σ0L)xi−xj||xi−xj||
✅ 用σ0L代替原长L.
PBD:σ0≡1;
✅ PBD可以看作是Strain Limit的特例。
No limit: σmin=0,σmax=∞
✅ 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.
✅这是另一个例子。希望顶点移动尽量少,因此定义约束:三角形面积变化在一定范围内。
{xnewi,xnewi,xnewk} = argmin12{mi||xnewi−xi||2+mj||xnewj−xj||2+mj||xnewk−xk||2}
such that the constraint is satisfied.
✅ strain s为面积的缩放量
P18
xnew⟵Projection(x)
A⟵12||(xj−xi)×(xk−xi)||
✅ 计算当前三角形的面积
s⟵√min(max(A,Amin),Amax)/A
✅ 计算期望的面积缩放比
c⟵1mi+mj+mk(mixi+mjxj+mkxk)
✅ C为质心,要求缩放前后质心不变。数学上、质心不变,点的移动最少;物理上,质心变了代表物体运动了,scale 不应该导致物理运动。
xnewi⟵c+s(xi−c)
xnewj⟵c+s(xj−c)
xnewk⟵c+s(xk−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/