0%
碰撞响应
CCD
- 我们想要在当前时刻将所有的状态都更新为没有碰撞的状态
两种处理方法

- 当前时刻 \(\mathbf{x}^{[0]}\)
不相交,模拟出来得到的下一时刻 \(\mathbf{x}^{[1]}\) 是相交的
- 我们的目标:把 \(\mathbf{x}^{[1]}\)
优化到不相交的地方 \(\bar{\mathbf{x}}^{[0]}\)
- 内点法:从 \(\mathbf{x}^{[0]}\)
出发,找到距离目标 \(\mathbf{x}^{[1]}\)
最近的优化点
- Impact Zone Optimization:从 \(\mathbf{x}^{[1]}\)
出发,是的最终回到安全区域内
评价
- 内点法(Interior Point Methods)
- 计算的慢
- 一开始距离目标结果远
- 需要处理所有的顶点
- 小步长模拟
- 永远都可以找到正确结果
- 过程中的点都是安全的
- 可以找到一个可以接受的解,即使没有计算到收敛
- Impact Zone Optimization
- 计算的很快
- 距离目标结果近
- 只需要处理部分点(碰撞的点占少数)
- 可以使用大步长
- 不一定能够成功
Interior Point Methods
Log-Barrier Interior Point
Methods

- 实现:定义一个优化的目标函数,优化它即可
- 具体的优化方法,可以选择其他的方法(不一定是得梯度下降法)

Impact Zone
Optimization(skip)
- 基于约束的优化
- 试图去将当前点更新到碰撞安全的区域(collision-free zone)
- 可能会因为 tunneling issue 出现问题,但是不常见
- 优化目标:到 \(\mathbf{x}^{[1]}\)
距离最小
- 约束条件:不相交
- 约束一:点在平面上方
- 约束二:一条边在另一条边上方,\(\mathbf{N}\) 对应另一条边的法线

- 利用上面的约束条件一步步更新位置
- 使用迭代方法更新:Jacobi / Gauss-Seidel

Augmented Lagrangian
- 拉格朗日法
- Tang et al. 2018. I-Cloth: Incremental Collision Handling for
GPU-Based Interactive Cloth Simulation. TOG. (SIGGRAPH Asia)
- 主页



Rigid Impact Zone
- 经过前面的碰撞处理之后,发现还是有碰撞,那么就不处理
- 把整个区域当作刚体
- 很简单、很安全,但是会有可见的 artifacts
- 问题很多:现在的论文用的少
一个思路
- 先使用 Impace Zone Optimization,因为很快
- 如果解决不了,要么尝试内点法,要么就什么都不做

DCD
- 不关心碰撞,只是看相交
- 允许处理完后,在这一帧中还有相交存在,希望接下来几帧能够解决
Intersection Elimination

- 思路
- 如果这一帧出现了相交,则试图去解除相交
- 如果解除了,那么就完成了
- 如果解除不了,下一帧继续
- 前面的碰撞处理都失败了,这也可以作为一个后续方案
- 如果有一个是有体积的,则比较简单,将物体推到有体积的物体外部即可(可以定义一个
SDF 实现)
- 例如:volume-volume,cloth-volume
- 示意图

- 布料的相交就没有办法使用上面的方法
- 不是封闭曲面,无法定义 SDF
- 布料没有内外的概念
Untangling Cloth
分段
- Baraff et al. 2003. Untangling Cloth. TOG (SIGGRAPH)
- 利用相交将布料分段,认为小的那一段时产生相交的区域,将其拉回来



- 问题
- 对边界的处理不是很好
- 不容易在 GPU 上实现,分块的时候需要对整个面进行评估
缩小相交曲线长度
- 论文
- Volino and Magnenat-Thalmann et al. 2006. Resolving Surface
Collisions through Intersection Contour Minimization. TOG
(SIGGRAPH).
- 思路
- 两块布料相交的时候会形成一块区域,论文试图去减小围城这块区域的曲线的长度(周长)

- GPU 友好
- 可以处理边界(但是不是都处理得很好)
其他
- 处理摩擦
- 一种方法是简单的先处理完碰撞,然后再处理摩擦,精度低,速度快
- 碰撞和摩擦一起处理,处理复杂
- 刚体、不可形变的、有体积的物体的碰撞处理简单很多