4.Rigid Contacts_冲突文件_zkx_20240828215918

刚体碰撞

  • 基于物理

  • 基于 shape matching

Topic

  • Particle Collision Detection and Response

    • Penalty methods

    • Impulse methods

  • Rigid Collision Detection and Response by Impulse

  • Shape Matching

Signed Distance Function

计算一个点在某个区域的内侧外侧,以及到区域边缘的距离

image.png

常用的 3D SDF Example

image.png

复杂的 SDF

扇形,布尔操作,三个距离函数相交,与操作

image.png
  • 内侧只需要知道 max

  • 外侧不需要知道值

或操作

image.png

Penalty 的方法

Quadratic Penalty Method 二次碰撞方法

image.png

穿透产生了才产生碰撞和反向力,可能会导致 Artifact 穿模

预先加上一层外部偏移

image.png

可能会产生

  • k 太小,还是穿模

  • k 太大,overshooting

使用 Log-Barrier Penalty Method 来定义 k 的大小

image.png

可以保证粒子永远不会穿透表面

Impulse Method 脉冲法

假定点是立刻更新的,利用方向和距离得到点的更新

image.png

速度也要更新

image.png

u 弹性系数,a 摩擦系数 a 的计算遵循库仑定律,另外希望 a 足够小

算 a 是算动摩擦和静摩擦,取较大值 静摩擦看作无穷大的摩擦力能让物体停下来

可以比较精确的控制反弹的位置

对每个点检测

image.png
image.png

只需要修改整个刚体的速度和角速度

碰撞点对刚体的速度和角速度做出贡献,然后再反推回每个点当前的速度

image.png

叉乘可以写作矩阵形式,要先把左边的向量写成叉乘矩阵

image.png

点 i 的速度对于冲量的变化

image.png

速度更新算法

image.png

细节

  • 多点碰撞,用多点的平均值

  • 重力导致物体反复震荡 (oscillation),用衰减 u 的方式来 hack 避免抖动问题

  • 不更新位置,因为是一个非线性问题

Shape Matching

假设每个点没有互相的约束,也就没有力矩角速度这些。 模拟完再重新组合成原本的约束,

image.png
image.png

c 是质心,argmin 是取得函数中的最小值 希望所有的 xi 与 yi 足够接近

优化问题本质上是一阶导 = 0,假设质心是 0 点,那么所有点的向量的求和为 0

刚体是没有本地形变,本地缩放的,所以可以省掉一些矩阵运算

image.png
image.png
  • 容易和多种模拟相结合

  • 难以实现多种约束

  • 对模拟精度要求不高

image.png

最后更新于

这有帮助吗?