Box3D、衝突検出にSIMD最適化を適用
原題: SIMD for Collision
なぜ重要か
ゲームエンジンや物理シミュレーション向けの衝突検出高速化は、リアルタイム3Dアプリケーション全般の品質向上に直結する重要技術トレンドである。
Box2D/Box3D開発者Erin Cattoは2026年7月18日、3D物理エンジンBox3Dにおける衝突検出へのSIMD最適化の適用について詳述した。32頂点・89辺を持つ凸包同士の衝突では辺-辺テストの組み合わせが7,921通りに達するため、「Wide SIMD」を用いて同時に4辺分の処理を行うことでパフォーマンスを大幅改善したと報告している。
Box3D開発者Erin Cattoは、3Dコンベックスハル(凸包)の衝突検出に「Wide SIMD」を適用した成果を公開した。
Box3Dは衝突検出アルゴリズムとしてSAT(Separating Axis Test)を採用している。SATはGJK+EPA方式と異なり、衝突マージン(見た目上の隙間)が不要で形状を直接接触させられるメリットがある。一方、EPAは数値的に不安定になりやすく、フォールバック処理が複数必要になる場合があるとCattoは説明している。
SATの3D実装では、2つの凸包A・Bの組み合わせに対して「面-頂点」「頂点-面」「辺-辺」の3種類のテストを行う必要がある。箱形(ボックス)の場合は辺-辺の組み合わせが最大144通りだが、32頂点・59面・89辺を持つ「Boulder」(岩)形状では7,921通りに膨れ上がり、計算コストが二乗的に増大する。
これに対処するため、Cattoは「Wide SIMD」アプローチを導入した。これは複数のデータをSIMDレジスタに並べて同時処理する手法で、今回の衝突検出では片方の凸包の辺1本に対し、もう一方の凸包の辺4本を同時にテストする形で実装されている。データはSoA(Structure of Arrays)形式に変換して扱う。辺の数が少ないボックス同士では初期化コストが上回るためSIMDの恩恵は小さいが、89辺を持つBoulder同士では効果が顕著に現れると述べている。
なお、本記事はベンチマーク結果の途中で入力が途切れており、具体的な速度改善数値は現時点では公開原文から確認できない。Box3DのソースコードはBox3D公式リポジトリで参照可能とされている。