3Dグラフィックスの世界では、オブジェクトの衝突判定や描画の効率化など、さまざまな場面で「バウンディングボックス」という概念が使われています。今回は、このバウンディングボックスの基本と、代表的な2つのタイプ「AABB」と「OBB」について、その違いや使い分けを分かりやすく解説します。
バウンディングボックス(Bounding Box)って何?
バウンディングボックスとは、簡単に言うと「3Dオブジェクトをすっぽりと包み込む、最小限の大きさの箱」のことです。この箱は、オブジェクト自体の複雑な形状を単純な直方体で近似することで、以下のような処理を高速に行うために利用されます。
- 衝突検出(コリジョン検出): 複数のオブジェクトがぶつかったかどうかを判定する際に、まずバウンディングボックス同士の衝突をチェックします。これにより、詳細な形状での計算よりもはるかに高速に判定できます。
- 可視性テスト: 画面に表示されているかどうかを判断する際にも使われます。
- 描画の最適化: 画面外にあるオブジェクトの描画をスキップするなど、レンダリングの効率を高めます。
代表的なバウンディングボックスのタイプ
バウンディングボックスにはいくつかの種類がありますが、ここでは特に頻繁に利用される「AABB」と「OBB」の2つをご紹介します。
1. AABB(Axis-Aligned Bounding Box:軸並行バウンディングボックス)
- 形状と特性: AABBは、その名の通り、座標軸(X、Y、Z軸)に常に平行な辺を持つ直方体です。つまり、どの方向から見ても、箱の辺は常に世界座標系の軸に沿っています。
- 計算と効率: オブジェクトの各座標軸における最大値と最小値を特定するだけで計算できるため、非常にシンプルで高速です。
- 欠点: オブジェクトが回転すると、AABBはオブジェクトを包み込むために大きくなり、余分な空間(スカスカな部分)が多く発生してしまいます。これにより、衝突判定などの精度が低下する可能性があります。オブジェクトがほとんど回転しない、または回転しない場合に適しています。
2. OBB(Oriented Bounding Box:方向付きバウンディングボックス)
- 形状と特性: OBBは、オブジェクトの実際の向きに合わせて回転できる直方体です。AABBとは異なり、その辺は必ずしも座標軸に平行である必要はありません。
- 計算と効率: オブBBの計算はAABBよりも複雑で、オブジェクトの方向や回転状態を考慮する必要があります。しかし、その分、オブジェクトをよりタイトに、無駄なく包み込むことができます。
- 利点: オブジェクトが回転したり、複雑な形状をしている場合でも、高い精度でオブジェクトを包み込むことができます。これにより、衝突判定などの計算精度が向上します。高い精度が求められる動的なシーンに適しています。
OBBが提供する高い精度
特にオブジェクトが回転している場合、AABBとOBBの精度の違いが顕著になります。
例えば、2つの細長いオブジェクトが回転しながら接近している場合を考えてみましょう。
- AABBの場合: オブジェクトが少し回転しただけでも、AABBは大きく広がり、まだ実際のオブジェクト同士はぶつかっていなくても、バウンディングボックス同士は衝突したと判定されてしまうことがあります。これは「誤検出」につながり、精度が低いと言えます。
- OBBの場合: オブジェクトの回転に合わせてOBBも回転するため、常にオブジェクトにぴったりと沿った形で包み込みます。そのため、実際のオブジェクト同士がぶつかる寸前まで、バウンディングボックス同士も衝突しないため、より正確な衝突判定が可能になります。
まとめ
結局のところ、AABBとOBBのどちらを使うべきかは、その用途と求める精度によって変わってきます。
- AABB: 計算速度を最優先したい場合や、静的なオブジェクト、あるいはほとんど回転しないオブジェクトに対してはAABBが適しています。
- OBB: 高い精度が求められる動的なオブジェクトや、複雑な形状を持つオブジェクトに対してはOBBが力を発揮します。
3Dグラフィックス開発において、これらのバウンディングボックスの特性を理解し、適切に使い分けることで、より効率的で高品質なアプリケーションを構築することができます。

