任意のポリゴンモデル同士の衝突判定を、八分木(Octree)による空間分割によって高速化する方法。
ゲームレベルで要求されるローポリゴンモデル同士の衝突判定であれば、一般的に GJK:Gilbert-Johnson-Keerthi distance algorithm を用いることで実装可能である。
* A fast procedure for computing the distance between complex objects in three-dimensional space:Computer Graphics at Stanford University
しかし、原理的にメッシュ上を渡り歩くことで衝突位置を検索するので、CADレベルで要求される大規模なポリゴンモデルに対しては非常に効率が悪い。
[SlidePlayer]
* Ericson:the GJK algorithm - Real-Time Collision Detection:realtimecollisiondetection.net
特に ミンコフスキー差(Minkowski Difference)を利用しているため、凸多面体であることが前提であり、任意の形状を汎用的に扱うためには、予め凹多面体を凸多面体へ分割する前処理が必要となる。
* A simple and efficient approach for 3D mesh approximate convex decomposition:ResearchGate
そこで、実装上の煩雑さを避けつつ、任意の大規模モデルを扱うために、ポリゴンモデルを一旦ボクセル化し、ボクセル同士の衝突判定問題へ還元する。もちろんポリゴン同士の接触を厳密に計算していないので、判定精度はボクセルの空間解像度に依存してしまうが、八分木(Octree)による階層的な空間分割によって検索を効率化できるので、大規模モデルに対しても効率が良い。
なおボクセルは最初、軸平行な立方体として生成されるが、各オブジェクトのローカル座標系に基づいているので、オブジェクトと共に回転やスケーリングの影響を受ける。つまりボクセル同士の衝突判定も、任意の姿勢とサイズの直方体として扱う必要がある。