SIMD 加速碰撞检测:Box3D 中的宽 SIMD 优化策略
来源:box2d.org — 2026-07-18
📋 概述
Box2D 作者 Erin Catto 在 Box3D 物理引擎中采用了一种"宽 SIMD"策略来加速碰撞检测。与传统的将单个 3D 向量放入 SIMD 寄存器的"窄 SIMD"不同,宽 SIMD 同时处理多个工作单元(如四个接触点)。在 32 顶点凸包的碰撞测试中,边缘-边缘组合从 144 增长到 7921,呈现二次复杂度,而利用 Gauss Map 等技巧可显著减少测试量。
🔑 核心要点
- "宽 SIMD" 同时处理多个工作单元,比"窄 SIMD"(单向量放入寄存器)收益更明显
- 3D 碰撞检测使用分离轴定理(SAT),相比 GJK/EPA 不需要碰撞余量,形状可以直接贴合
- 两个 32 顶点凸包的碰撞:顶点-面 59 种 × 2 + 边-边 7921 种组合,呈二次增长
- Gauss Map 等优化技巧可将边-边测试量大幅减少
- 宽 SIMD 策略也应用于接触求解器,同时求解四个接触点,性能提升显著
💡 金句
我是 SAT 的铁杆粉丝,因为凸包碰撞不需要碰撞余量。形状可以直接安放在彼此之上。GJK 和 EPA 的组合通常试图将形状稍微分开以避免性能下降——这会导致视觉上的缝隙。
👍 0
👎 0
← 返回 Lobsters 首页