歴史1969年、Schumackerら[ 1 ] は、仮想環境内で慎重に配置された平面を使用してポリゴンの順序付けを高速化する方法を説明するレポートを発表した。この技術は、平面の反対側にあるポリゴンが、より近いポリゴンをいかなる形でも遮ることができないという深度コヒーレンスを利用した。これは、GEやEvans and Sutherlandが作成したフライトシミュレーターで使用された。ただし、ポリゴンデータの編成はシーンデザイナーによって手動で行われた。 1980年、Fuchs ら[ 2 ] は、Schumackerのアイデアを拡張し、ポリゴンと一致する平面を使用して3D空間を再帰的に分割することで、仮想環境における3Dオブジェクトの表現を実現しました。これにより、バイナリ空間分割ツリー(BSPツリー)として知られる階層的なポリゴンデータ構造の完全自動化されたアルゴリズムによる生成が可能になりました。このプロセスは、環境/オブジェクトごとに1回実行されるオフラインの前処理ステップとして行われました。実行時には、ツリーを走査することで、ビューに依存する可視性の順序が生成されました。 1981年のネイラーの博士論文[ 5 ] では、BSPツリーと、可視性を事前計算するための強連結成分を用いたグラフ理論的手法の両方の完全な開発、および2つの手法間の関連性が示されました。次元に依存しない空間探索構造としてのBSPツリーが強調され、可視表面の決定への応用が示されました。この論文には、ツリーのサイズと新しいポリゴンの数が妥当であることを示す最初の実証データも含まれていました(スペースシャトルのモデルを使用)。 1983年、Fuchs ら[ 6 ] は、Ikonasフレームバッファ システム上でBSPツリーアルゴリズムのマイクロコード実装について説明した。これは、BSPツリーを使用したリアルタイム可視面決定の最初の実証であった。 1987年、ThibaultとNaylor [ 3 ] は、従来のb-rep(境界表現 )とは対照的に、BSPツリーを使用して任意の多面体を表現する方法について説明しました。これにより、表面ベースの表現ではなく、ソリッド表現が実現しました。ツールを使用して多面体に対する集合演算が記述され、リアルタイムで構成的ソリッドジオメトリ(CSG)が可能になりました。これは、Quakeエディタで導入され、Unrealエディタにも採用された「 ブラシ 」を使用したBSPレベルデザインの先駆けとなりました。 1990年、Naylor、Amanatides、およびThibault [ 7 ] は、2つのBSPツリーをマージして、元の2つのツリーから新しいBSPツリーを形成するアルゴリズムを提供しました。これにより、BSPツリーで表現される移動オブジェクトと静的環境(これもBSPツリーで表現される)の組み合わせ、多面体に対する非常に効率的なCSG操作、O(log n * log n)での正確な衝突検出、相互貫入する2つのオブジェクトに含まれる透明な表面の適切な順序付け(X線視覚効果に使用されている)など、多くの利点が得られます。 1991年、Teller とSéquin [ 8 ] は、直交2D環境における可視表面決定を加速するために、潜在的に可視なセットのオフライン生成を提案した。 1991年、ゴードンとチェン[ 9 ] は、従来のバック・トゥ・フロント方式ではなく、BSPツリーからフロント・トゥ・バックのレンダリングを実行する効率的な方法を説明した。彼らは、描画済みの画面部分とまだレンダリングされていない画面部分を効率的に記録するために、特別なデータ構造を利用した。このアルゴリズムは、当時の標準的なコンピュータグラフィックスの教科書(Computer Graphics: Principles and Practice )におけるBSPツリーの説明とともに、ジョン・カーマックが Doom の制作に使用した。 1992年のテラー の博士論文[ 10 ] では、任意の3Dポリゴン環境におけるリアルタイムの可視面判定を高速化するための前処理ステップとして、潜在的に可視なセットを効率的に生成する方法が記述されている。これはQuake で使用され、そのゲームのパフォーマンスに大きく貢献した。 1993年、ネイラー[ 11 ] は、優れたBSPツリーの特徴とは何かという問いに答えた。彼は、最悪ケース分析ではなく期待ケースモデルを使用して、ツリーを探索する期待コストを数学的に測定し、この尺度を使用して優れたBSPツリーを構築した。直感的には、ツリーはオブジェクトを多重解像度方式(より正確には、近似ツリーとして)で表現する。ハフマン符号と確率的二分探索 木との類似点が指摘されている。 1993年にHayder Radhaが発表した博士論文[ 12 ] では、BSPツリーを用いた(自然)画像表現手法が記述されている。これには、任意の入力画像に対する最適なBSPツリー構築フレームワークの開発が含まれる。このフレームワークは、最小二乗誤差(LSE)分割線(LPE)変換として知られる新しい画像変換に基づいている。Radhaの論文では、BSPツリーを用いた最適なレート歪み(RD)画像圧縮 フレームワークと画像操作手法も開発されている。
概要 2Dインデックスに対する再帰的バイナリ空間分割クワッドツリー の例 バイナリ空間分割は、ハイパープレーン [ 13 ] を使用してシーンを再帰的 に2つに分割し、分割が1つ以上の要件を満たすまで繰り返す一般的なプロセスです。これは、 k -dツリー やクワッドツリーなどの他の空間ツリー構造の一般化と見なすことができ、空間を分割するハイパープレーンは、 k -dツリーやクワッドツリーのように座標軸に沿って配置されるのではなく、任意の方向を持つことができます。コンピュータグラフィックスで平面ポリゴン で構成されるシーンをレンダリングする場合、分割平面は、シーン内のポリゴンによって定義される平面と一致するように選択されることがよくあります。
分割平面の具体的な選択と分割処理の終了基準は、BSPツリーの目的に応じて異なります。たとえば、コンピュータグラフィックスのレンダリングでは、BSPツリーの各ノードに任意の順序でレンダリング可能なポリゴンのみが含まれるまでシーンを分割します。背面カリングを 使用する場合、各ノードには凸多角形の集合が含まれますが、両面多角形をレンダリングする場合は、BSPツリーの各ノードには単一平面上の多角形のみが含まれます。衝突検出やレイトレーシングでは、シーンを衝突判定やレイ交差判定が容易なプリミティブに分割することができます。
バイナリ空間分割は、ポリゴンで構成される 3 次元シーンを高速に描画する必要があったコンピュータグラフィックスから生まれました。このようなシーンを描画する簡単な方法は、ペインターアルゴリズム です。これは、ビューアからの距離の順に、奥から手前にポリゴンを生成し、背景と前のポリゴンを、より近いオブジェクトごとに塗りつぶします。このアプローチには 2 つの欠点があります。ポリゴンを奥から手前の順にソートするのに時間がかかることと、ポリゴンが重なり合う場合にエラーが発生する可能性があることです。Fuchs と共著者[ 2 ] は、BSP ツリーを構築することで、指定された視点に関してポリゴンを高速にソートする方法 (シーン内のポリゴンの数に比例) と、重なり合うポリゴンを分割してペインターアルゴリズムで発生する可能性のあるエラーを回避することにより、これらの問題の両方が解決されることを示しました。バイナリ空間分割の欠点は、BSP ツリーの生成に時間がかかることです。そのため、通常は、レンダリングやシーンに対するその他のリアルタイム操作の前に、前処理ステップとして静的ジオメトリに対して 1 回実行されます。 BSPツリーの構築にはコストがかかるため、オブジェクトをツリーに直接移動させる機能を実装するのは困難で非効率的です。
世代 BSP ツリーの標準的な用途は、ペインターのアルゴリズムを使用してポリゴン (両面ポリゴン、つまり背面カリングなし) をレンダリングすることです。各ポリゴンには、前面と背面が指定されますが、これらは任意に選択でき、ツリーの構造にのみ影響し、必要な結果には影響しません。 [ 2 ] このようなツリーは、シーン内のすべてのポリゴンのソートされていないリストから構築されます。そのポリゴンのリストから BSP ツリーを構築するための再帰アルゴリズムは次のとおりです。 [ 2 ]
リストから多角形Pを選択してください。 BSPツリーにノードN を作成し、そのノードのポリゴンリストにPを追加します。 リスト内の他の各ポリゴンについて: その多角形がP を含む平面の手前にある場合、その多角形をP の手前にあるノードのリストに移動します。その多角形がP を含む平面の背後に完全に位置する場合、その多角形をPの 背後にあるノードのリストに移動します。その多角形が点P を含む平面と交差する場合、それを 2 つの多角形に分割し、それぞれを点P の後ろと前の多角形のリストに移動します。その多角形が点P を含む平面上にある場合、それをノードN の多角形のリストに追加します。 このアルゴリズムをP の前の多角形のリストに適用します。このアルゴリズムをP の後ろにある多角形のリストに適用します。次の図は、このアルゴリズムを使用して線またはポリゴンのリストをBSPツリーに変換する方法を示しています。8つのステップ(i.~viii.)それぞれにおいて、上記のアルゴリズムが線のリストに適用され、ツリーに新しいノードが1つ追加されます。
分割平面を横切る線や多角形は2つに分割する必要があるため、ツリー内の最終的な多角形または線の数は、元のリストよりも大きくなることがよくあります(場合によってははるかに 大きくなります[2 ] )。この増加を最小限に抑えつつ、最終的なツリーで適切なバランス を維持することが望ましいです。したがって、効率的なBSPツリーを作成するためには、どの多角形または線を分割平面として使用するか(アルゴリズムのステップ1)の選択が重要になります。
トラバーサル BSP ツリーは、ツリーの特定の機能によって決定される順序で、線形時間で走査されます。ペインターのアルゴリズムを使用して両面多角形をレンダリングする例を再び使用すると、多角形 P を 正しく描画するには、まず平面P の後ろにあるすべての多角形を描画し、次に多角形 Pを描画し、最後に P の前の多角形を描画する必要があります。シーン内のすべての多角形に対してこの描画順序が満たされると、シーン全体が正しい順序でレンダリングされます。この手順は、次のアルゴリズムを使用して BSP ツリーを再帰的に走査することによって実装できます。[ 2 ] 指定されたビュー位置V から、BSP ツリーをレンダリングするには、
現在のノードがリーフノードである場合、現在のノードにポリゴンを描画します。 それ以外の場合、表示位置V が現在のノードの手前にある場合: 現在のノードの背後にポリゴンを含む子BSPツリーをレンダリングする 現在のノードでポリゴンをレンダリングする 現在のノードの前にポリゴンを含む子BSPツリーをレンダリングする それ以外の場合、表示位置V が現在のノードの後ろにある場合: 現在のノードの前にポリゴンを含む子BSPツリーをレンダリングする 現在のノードでポリゴンをレンダリングする 現在のノードの背後にポリゴンを含む子BSPツリーをレンダリングする そうでなければ、視点位置Vは 現在のノードに関連付けられた平面上に正確に存在しなければならない。すると: 現在のノードの前にポリゴンを含む子BSPツリーをレンダリングする 現在のノードの背後にポリゴンを含む子BSPツリーをレンダリングする 上記で生成されたBSPツリーにこのアルゴリズムを再帰的に適用すると、以下の手順が実行されます。
このアルゴリズムは、まずツリーのルートノードであるノードA に適用されます。Vはノード A の前にあるため、まずA の後ろにあるポリゴンを含む子BSPツリーにアルゴリズムを適用します。このツリーのルートノードはB1 です。Vは B1の 後ろにあるため、まず、 B1 の前にポリゴンを含む子BSPツリーにアルゴリズムを適用します。 この木は葉ノードD1 のみなので、ポリゴンD1 がレンダリングされます。 次に、ポリゴンB1 をレンダリングします。 次に、 B1の 背後にあるポリゴンを含む子BSPツリーにアルゴリズムを適用します。 この木は葉ノードC1 のみなので、ポリゴンC1 がレンダリングされます。 次に、 A の多角形を描きます。次に、 A の前にポリゴンを含む子BSPツリーにアルゴリズムを適用します。このツリーのルートノードはB2 です。Vは B2の 後ろにあるため、まず、 B2 の前にポリゴンを含む子BSPツリーにアルゴリズムを適用します。 この木は葉ノードD2 のみなので、ポリゴンD2 がレンダリングされます。 次に、ポリゴンB2 をレンダリングします。 次に、 B2の 背後にあるポリゴンを含む子BSPツリーにアルゴリズムを適用します。 このツリーのルートノードはC2 です。Vは C2 の前にあるので、まず、 C2の 後ろにあるポリゴンを含む子BSPツリーにアルゴリズムを適用します。しかし、そのようなツリーは存在しないので、処理を続行します。 ポリゴンC2 をレンダリングします。 C2 の前にポリゴンを含む子BSPツリーにアルゴリズムを適用します。この木は葉ノードD3 のみなので、ポリゴンD3 がレンダリングされます。 ツリーは線形時間で走査され、ペインターのアルゴリズムに適した遠近順 ( D1 、B1 、C1 、A 、D2 、B2 、C2 、D3 ) でポリゴンをレンダリングします。
参考文献 1 2 Schumacker, RA; Brand, B.; Gilliland, MG; Sharp, WH (1969).コンピュータ生成画像を視覚シミュレーションに適用するための研究(報告書)。米国空軍人材研究所。AFHRL-TR-69-14。 1 2 3 4 5 6 7 Fuchs, Henry; Kedem, Zvi. M; Naylor, Bruce F. (1980). "On Visible Surface Generation by A Priori Tree Structures" (PDF) . SIGGRAPH '80 Proceedings of the 7th annual conference on Computer graphics and interactive techniques . ACM. pp. 124– 133. doi : 10.1145/965105.807481 . 1 2 Thibault, William C.; Naylor, Bruce F. (1987). "バイナリ空間分割木を使用した多面体上の集合演算". SIGGRAPH '87 Proceedings of the 14th annual conference on Computer graphics and interactive techniques . ACM. pp. 153– 162. doi : 10.1145/37402.37421 . ↑ Etherington, Thomas R.; Morgan, Fraser J.; O'Sullivan, David (2022). "二値空間分割により、人間が支配する景観に適した階層的かつ直線的な中立景観モデルが生成される" . Landscape Ecology . 37 (7): 1761– 1769. Bibcode : 2022LaEco..37.1761E . doi : 10.1007/s10980-022-01452-6 . ↑ ネイラー、ブルース(1981年5月)。3D シーンの可視性優先順位を決定するための事前情報に基づく手法 (博士論文)。テキサス大学ダラス校。 2025年 6月5日 取得 。 ↑ Fuchs, Henry; Abram, Gregory D.; Grant, Eric D. (1983). "Near real-time shaded display of rigid objects". Proceedings of the 10th annual conference on Computer graphics and interactive techniques . ACM. pp. 65–72 . doi : 10.1145/800059.801134 . ISBN 978-0-89791-109-2 。↑ Naylor, Bruce; Amanatides, John; Thibault, William ( 1990 年 8 月)。 「 BSP ツリーのマージにより多面体集合演算が実現」 。ACM SIGGRAPH Computer Graphics。24 ( 4)。Association of Computing Machinery: 115–124。CiteSeerX 10.1.1.69.292。doi : 10.1145/97880.97892。2025 年 6 月 5 日 取得 。 ↑ Teller, Seth J.; Séquin, Carlo H. (1991年7月1日). "インタラクティブウォークスルーのための可視性前処理" . ACM SIGGRAPH Computer Graphics . 25 (4). Association of Computing Machinery: 61–70 . 2025年 6月5日 取得 . ↑ Chen, S.; Gordon, D. (1991 年 10 月). "BSP ツリーの前面から背面への表示" . IEEE Computer Graphics and Applications . 11 (5): 79– 85. doi : 10.1109/38.90569 . S2CID 19056967 . ↑ Teller, Seth (1992). 密集した多面体環境における可視性計算 (博士論文)。カリフォルニア大学バークレー校 。 2025年 6月5日 取得。 ↑ Naylor, Bruce (1993). "Constructing good partitioning trees" (PDF) . Graphics Interface . Canadian Information Processing Society: 181– 191 . 2025年 6月5日 取得 . ↑ Radha, Hayder (1993). バイナリ空間分割木を用いた効率的な画像表現 (博士論文)。コロンビア大学。 2025年 6月5日 取得 。 ↑ Naylor, Bruce (2005 年 1 月). "バイナリ空間分割ツリーに関するチュートリアル" . ResearchGate . 2025 年 7 月 1 日 取得 。 ↑ Radha, H.; Vetterli, M.; Leonardi, R. (1996). "Image compression using binary space partitioning trees" (PDF) . IEEE Transactions on Image Processing . 5 (12): 1610– 1624. Bibcode : 1996ITIP....5.1610R . doi : 10.1109/83.544569 . PMID 18290079 .
その他の参考文献 Naylor, B. (1993 年 5 月). 「優れたパーティショニング ツリーの構築」 . Graphics Interface . CiteSeerX 10.1.1.16.4432 . Radha, H.; Leoonardi, R.; Vetterli, M.; Naylor, B. (1991). "画像のバイナリ空間分割ツリー表現" . Journal of Visual Communications and Image Processing . 2 (3): 201– 221. doi : 10.1016/1047-3203(91)90023-9 . Radha, HMS (1993).バイナリ空間分割木を用いた効率的な画像表現 (博士論文). コロンビア大学. OCLC 30775044 . Radha, HMS (1994). "バイナリ空間分割木を用いた効率的な画像表現". Signal Processing . 35 (2): 174– 181. Bibcode : 1994SigPr..35..174R . doi : 10.1016/0165-1684(94)90047-7 . Radha, H.; Vetterli, M.; Leoonardi, R. (1996 年 12 月). "バイナリ空間分割木を用いた画像圧縮" . IEEE Transactions on Image Processing . 5 (12): 1610–24 . Bibcode : 1996ITIP....5.1610R . doi : 10.1109/83.544569 . PMID 18290079 . https://ui.adsabs.harvard.edu/abs/1996ITIP....5.1610R/abstractWinter, AS (1999年4月). 「bspツリーを使用したリアルタイム3Dポリゴンレンダリングの調査」. CiteSeerX 10.1.1.11.9725 . ランダム化された画家アルゴリズムについて説明します。エリクソン、クリスター(2005)。「8. BSPツリー階層」。リアルタイム衝突検出。モーガン ・ カウフマン・シリーズ・イン・インタラクティブ3Dテクノロジー。モーガン・カウフマン。pp. 349–382。ISBN 1-55860-732-3 。
外部リンク Naylor, BF (2005). "バイナリ空間分割木に関するチュートリアル" . BSPツリーのプレゼンテーション 別のBSPツリーのプレゼンテーション ツリー生成のプロセスをデモンストレーションするJavaアプレット BSP生成に関する修士論文 BSPツリー:理論と実装 3D空間におけるBSP Graphics Gems V: BSPツリーを巡る旅