宽相 / 窄相碰撞检测
Broad-phase / Narrow-phase Collision Detection进阶碰撞检测分两步:先用包围盒粗筛可能相撞的对,再精确算接触。
物理引擎每一步都要找出哪些物体接触了。n 个几何体两两组合有 n(n-1)/2 对,全部精确检查太慢,所以分阶段做。宽相只用简单包围体(如轴对齐包围盒 AABB)做保守判断,快速排除明显不相交的对,只报告「可能碰撞」;常用算法是扫掠剪枝(sweep-and-prune,按坐标轴排序后找区间重叠)。窄相再对剩下的候选对调用按几何类型定制的精确算法(如凸体之间的 GJK/EPA),算出是否接触、接触点、法向和穿透深度,交给约束求解器。MuJoCo 在两者之间还有一层中相,用包围盒层次树继续筛选;PhysX 提供 SAP、MBP、GPU 等多种宽相算法。碰撞过滤一般插在宽相和窄相之间。
例子MuJoCo 的宽相用改进的 sweep-and-prune,排序轴取所有几何体中心的协方差矩阵主特征向量;窄相里,非凸网格会被替换成它的凸包再检测。
- 也叫
- 宽阶段 / 窄阶段、粗检测 / 精检测、近相(near-phase)
- 相关
- 碰撞检测(物理引擎)、包围盒、GJK 算法、碰撞过滤(碰撞组)、碰撞体、物理引擎
- 来源
- MuJoCo Documentation: Computation - Collision detection
NVIDIA PhysX 5 SDK Documentation: Rigid Body Collision
Wikipedia: Collision detection