Hierarchy in wiki:
- Wiki/
- Wiki/Collision/
- Wiki/Collision/%E7%BB%BC%E8%BF%B0/%E7%A2%B0%E6%92%9E%E6%A3%80%E6%B5%8B%E6%80%BB%E7%BB%93/
变形体
90-00初
变形体和三角网格的处理的经典论文是:
- [Bridson02] Robust Treatment of Collisions, Contact and Friction for Cloth Animation
- [Provet97] Collision and self-collision handling in cloth model dedicated to design garments
其中这两篇论文几乎可以说是篇篇论文都在引了。其主要的思想在于
Provet 97
简介
这篇论文之所以重要,是因为其提出了三角网格产生碰撞一个充分必要条件:对于三角网格而言,其产生碰撞,当且仅当,存在
- Vertical - Triangle (原文 Point Triangle collision)碰撞
- Edge - Edge 碰撞
之一(或兼有)
显然的是,两个碰撞都导致了四点共面的情况。根据空间几何的知识,\(\mathbf x_{1}\cdots\mathbf x_4\) 共面,当且仅当:
\[
(\mathbf x_{12}\quad \mathbf x_{13} \quad \mathbf x_{14}) = 0
\]
其中 \((\quad )\)记号为混合积。因此为检测碰撞,转化为求解一个关于 \(t\) 的三次方程,即:
\[
\exists t \in [0, 1]\quad (\mathbf x_{12}\quad \mathbf x_{13} \quad \mathbf x_{14}) = 0
\]
其中的三次方程采用牛顿法求解。
求解出 \(t\) 是不够的,因为方程可能出现 V 不处于 T 内部,或 E 和 E 不交的情况,但考虑到已经共面,下一步的判断是简单的,几乎不需要计算。因此该算法主要的计算量在于三次方程的求解上。
Broad Phase 剔除
- BVH
- 计算曲率:根据显然的事实 — 给定一个曲面局部,如果它是凸的,且有充分低的曲率,则其不可能产生自相交。
Impact Zone
为了消除一个碰撞,可能会引入其他的碰撞,这是因为在处理碰撞的时候,我们只针对当前选出来的碰撞对进行更新,在该更新过程中是不考虑其他点的情况的。
因此,若一个 Impact Zone 在充分大的时候,考虑Frozen,并通过群速度、群角速度进行整体更新。
相关内容
- Fast CCD
- Safe CCD
- Tight CCD
Bridson 02
这篇嘛是一个完整的Workflow介绍了,从文章标题也能看出来主要是为了准确和高鲁棒性来实现的。主要还是处理了自碰撞的问题。
碰撞检测
Broad-Phase:AABB,自下而上构造。
Narrow-Phase:还是基于上面的共面,但是判断是否在内部改进为解线性方程组(分解到现有基底上)
处理
摩擦:库伦定律(摩擦角)用于静摩擦和动摩擦。
Rigid Impact Zone:用于失败的补偿机制