3D シーンの可視性計算用の空間データ構造——空間を再帰的に二分割。リアルタイムレンダリングの古典的手法。
バイナリ空間分割 (BSP)
VFX やインタラクティブ レンダリングのために複雑な 3D シーンを構築する際、すぐにボトルネックに遭遇します。どのジオメトリがどの位置から見えるのか、そしてそれをリアルタイムでどのように計算するのか?ここでバイナリ空間分割(BSP)が登場します。これは 3D 空間を再帰的に半分に分割し、ツリー状の構造を構築するアルゴリズムです。各パーティションは空間を横切る平面によって定義されます。オブジェクトは片方の側、もう片方の側、または分割されたオブジェクト自体に配置されます。結果として、非常に高速な可視性チェックとカリング処理が可能になります。
実際には、これは次のように機能します。多くの部屋と壁がある複雑な屋内シーンがあるとします。どんな GPU も、巨大な壁の後ろにあるすべてのポリゴンをレンダリングしたくはありません。BSP 構造により、現在のビューポイントからどのジオメトリ クラスタが関連しているかを数回の走査で決定できます。ツリー構造をたどるだけで、個々のプリミティブをすべてチェックするのではなく、トラバーサル オーバーヘッドは最小限です。これが、BSP が Quake や Unreal Tournament のようなゲーム エンジンで標準的だった理由であり、今日でも Volumetric Rendering やプロシージャルな破壊シーンの可視性情報の事前計算など、特定のリアルタイム VFX パイプラインで応用されている理由です。
理解すべき重要な点:BSP は主にレンダリング構造ではありません。これは空間的な整理方法であり、高度に最適化された空間インデックスに似ています。現代では、BSP は古典的なポリゴン レンダリングにはあまり使用されませんが(BVH ツリーの方が効率的です)、衝突検出、レイキャスティング、静的ジオメトリの前処理においては依然として役割を果たしています。VFX パイプラインでは、BSP に似た概念が暗黙的に使用されることがよくあります。粒子が複雑な障害物に対してカリングされる場合、Constructive Solid Geometry (CSG) ワークフロー、またはエフェクトがどの体積領域にあるかを迅速にクエリする必要がある場合です。
良好な BSP を構築する上での主な問題は、カット平面をどこに配置するかです。不適切に選択された平面は、不均衡なツリーにつながり、パフォーマンスの低下を引き起こします。そのため、現代のプロフェッショナルは、ヒューリスティックな手法を使用するか、ツールに最適なカットを自動的に計算させます。メモリ効率も考慮事項です。非常に細かく解像度された BSP ツリーはメモリを大量に消費する可能性があるため、プロダクション パイプラインでは、ツリーの深さとメモリ フットプリントのバランスを取る必要があることがよくあります。