GAMES103.王华民.09.Collision Handling(1)

碰撞响应

  • 检测到有碰撞之后如何处理?

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

  • 定义一个基于 log 的距离函数的能量
    • 距离为 0 的时候,力是无穷大的
      • 黄线表示截断,限制力的作用范围

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

  • 步长 \(\alpha\),需要保证没有碰撞发生
    • 需要碰撞检测

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)
  • 利用相交将布料分段,认为小的那一段时产生相交的区域,将其拉回来

  • 相交解除

  • 效果(2D 就是面积)

  • 问题
    • 对边界的处理不是很好
    • 不容易在 GPU 上实现,分块的时候需要对整个面进行评估

缩小相交曲线长度

  • 论文
    • Volino and Magnenat-Thalmann et al. 2006. Resolving Surface Collisions through Intersection Contour Minimization. TOG (SIGGRAPH).
  • 思路
    • 两块布料相交的时候会形成一块区域,论文试图去减小围城这块区域的曲线的长度(周长)

  • GPU 友好
  • 可以处理边界(但是不是都处理得很好)

其他

  • 处理摩擦
    • 一种方法是简单的先处理完碰撞,然后再处理摩擦,精度低,速度快
    • 碰撞和摩擦一起处理,处理复杂
  • 刚体、不可形变的、有体积的物体的碰撞处理简单很多