P111

Contacts

✅ 如何处理与地面的接触,让人站在地面上。

✅ 要解决的问题:(1) 地面接触检测 (2) 如何对碰撞点施加力,使物体出来。

P114

Penalty-based Contact Model

Baseline

$$ f_n=-k_pd-k_dv_{c,\perp } $$

✅ \(d>0\) 时公式才生效。类似弹簧形式,陷入越深,力越大。
✅ 第二项:为了防止落地弹飞,增加阻尼项。
✅ 效果:会有一些陷入,但不会陷入太多
❗ 支持力竟然不是 \(-mg\)。

P115

考虑摩擦力

✅ 受力分析:支持力,动摩擦力。
✅ 动摩擦力,大小=支持力 x 摩擦系数,方向与运动方向相反

$$ \begin{align*} f_t&=-\mu f_n\frac{v_{c,\parallel }}{||v_{c,\parallel }||} \end{align*} $$

✅ 一般不模拟静摩擦力

P116

存在的问题

✅ 存在的问题:\(K_p\) 必须很大,否则脚陷地明显。\(K_d\) 必须非常大,否则地面像蹦床。步长必须非常小,否则不稳定。

P118

Contact as a Constraint

✅ 另一种方法,把接触建模为约束。

接触点状态分析

接触点 \(x_c\) 的位置表示:
$$ x_c =x+r_c \quad\quad\quad\quad\quad\quad $$

接触点 \(x_c\) 的速度表示:

$$ v_c =v+\omega \times r_c=J_c \begin{bmatrix} v\\ w \end{bmatrix} $$

$$ v_{c,\perp } =v+\omega \times r_c=J_{c,\perp }\begin{bmatrix} v \\ \omega \end{bmatrix} $$

P120

接触点约束分析

✅ 约束 1:点在竖直方向的速度必须大于 0,即只能向上移动。

✅ 约束 2:力的大小也大于 0.只能推,不能拉。\(\lambda\) 是力与速度的大小比例系数。\(\lambda>0\) 代表同方向。

✅ 约束 3:力和速度只能有一个不为零,否则会做功。

$$ v_c\perp \lambda =0 $$

✅ 合在一起称为线性互补方程,是通常碰撞建模方式。
✅ 这个方程比较难解,例如 ODE

这类问题被称为:(Mixed) Linear Complementary Problem (LCP)
解LCP的方法有:
e.g. Lemke's algorithm – a simplex algorithm

P122

考虑摩擦力的约束问题

How to deal the friction?

🔎 Fast contact force computation for nonpenetrating rigid bodies.
David Baraff. SIGGRAPH ’94
✅ 快速实现静摩擦约束的建模。

P123

Simulation of a Rigid Body System

✅ 把人简化为分段刚体。整体过程为:
✅ (1) 黄:计算当前状态。
✅ (2) 绿:计算约束,求解,解出下一时刻的速度。
✅ (3) 蓝:更新下一时刻的量(积分)。
✅ 缺少部分:主动力 \(f\) 推动角色产生运动。


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

https://caterpillarstudygroup.github.io/GAMES105_mdbook/