(57)【要約】  コンピュータグラフィックスシステムにおいて動作可能な方法、システム、装置及びコンピュータプログラム製品は、ツリー構造を含む階層状光線追跡加速データ構造を構築することであって、ツリー構造のノードが、場面中の１組のオブジェクトを左オブジェクトと右オブジェクトに分割するための軸平行場面境界ボックス及び２つの並列面定義に基づく境界間隔階層を使用して生成されること、並びに被分裂面をオブジェクト境界ボックスに合致させることを含む。２つの面は、ｘ、ｙ、又はｚ軸のうち選択された１つに垂直である。分裂面を与えられると、左／右選択基準に基づいて、画像中の各オブジェクトが左又は右どちらかに分類され、子ノードの２つの分裂面値が、それぞれ、左及び右オブジェクトの最大及び最小座標によって判定される。【選択図】  図３
2009534759.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータ及び表示要素を備えるコンピュータグラフィックスシステムであって、前記表示要素は、前記コンピュータからの表示制御用電気出力に応答して、人間が知覚可能な画像を表示するように動作可能であり、前記コンピュータは、前記画像中のピクセルに関するピクセル値の算出に基づいて、前記表示制御用電気出力を生成するように動作可能であり、それぞれのピクセル値は、模擬カメラの画像面上に記録される場面中の点を表し、前記コンピュータは、光線追跡方法を用いて画像に対するピクセル値を生成するように動作可能であり、前記光線追跡方法は、光線ツリー及び関連した光線追跡データ構造の使用を含み、前記光線ツリーは、選択された方向に沿って前記ピクセルから場面中に発せられた少なくとも１本の光線を含み、前記光線追跡方法は、前記場面中での光線とオブジェクトの表面との交差の算出をさらに含み、前記光線追跡は、画像中のオブジェクトの処理の結果に応答して判定される、コンピュータグラフィックシステムにおける改良であって、
ツリー構造を含む階層状光線追跡加速データ構造を構築することであって、ツリー構造のノードが、場面中の１組のオブジェクトを左オブジェクトと右オブジェクトに分割するための軸平行場面境界ボックス及び２つの並列面定義に基づく境界間隔階層を使用して生成されること、並びに、
被分裂面をオブジェクト境界ボックスに合致させること
を含み、
前記２つの面が、ｘ、ｙ、又はｚ軸のうち選択された１つに垂直であり、
分裂面が与えられた場合、左／右選択基準に基づいて、画像中の各オブジェクトが左又は右どちらかに分類され、子ノードの２つの分裂面値が、それぞれ、前記左及び右オブジェクトの最大及び最小座標によって判定され、
境界ボックス及び前記選択された軸が与えられた場合、左の子Ｌが、前記選択された軸に沿った左オブジェクトの座標の最大値を第１の面で置き換えることから生じ、右の子Ｒが、右オブジェクトの座標の最小値を第２の面で置き換えることから生じ、結果として生じたどのゼロボリュームも、空の子を示すために用いられ、
分裂面が、
（ａ）中央にある長辺に沿った軸平行場面境界ボックスを階層状に細分することによって候補分裂面を選択することであって、すべての候補分裂面が規則的なグリッドを形成すること、
（ｂ）候補面が、細分するべきボリューム要素の前記境界ボックスの外側にある場合、前記ボリューム要素が存在する半分以降の候補面で継続すること
によって判定され、
さらに、
（ａ）前記境界ボックスをオブジェクト境界ボックスに再帰的に分割すること、
（ｂ）被分裂面候補が重複なしでオブジェクトを分離する場合、結果として生じた被分裂面を左及び右にある前記オブジェクトに合わせ、そうすることによって空き空間を最大化すること、並びに
（ｃ）所定の数を超えるオブジェクトが残っていない場合、前記再帰を終了すること
を含む改良。
【請求項２】
Ａ．前記左／右選択基準は、分裂面を与えられた場合、、画像中の各オブジェクトを、前記面のどちら側が最も伸びているかに応じて左又は右どちらかに分類することを含み、
Ｂ．前記階層状光線追跡加速データ構造の前記構築が、バケットソートに基づき、
（ａ）空間を分割する順序づけられた規則的なグリッドの解像度を判定するために、場面境界ボックス及び平均的オブジェクトサイズを計算すること、或いは、ユーザ指定解像度を用いること、
（ｂ）各グリッドセルごとにカウンタを割り振ること、
（ｃ）各々がそれぞれのグリッドセルに対応するすべてのカウンタをゼロに初期化すること、
（ｄ）各オブジェクトごとに点を選択して、前記選択された点を含む前記グリッドセルに対する前記それぞれのカウンタを増分すること、
（ｅ）各カウンタ値をすべての先行カウンタの値の和で置き換えることによって、カウンタ値をオフセット値に変換すること、
（ｆ）グローバルオブジェクト索引アレイを割り振ること、
（ｇ）それぞれの各オブジェクトごとに、その点を含む前記グリッドセル用の前記カウンタを増分するために選択された前記対応する点を使って、前記オフセット値を用いて、前記オブジェクトをバケットにソートすること、並びに
（ｈ）各バケットごとに、各バケットが含む前記オブジェクトの前記境界ボックスを計算すること
の階層状の実行を含む、請求項１に記載のシステムにおける一層の改良。
【請求項３】
前記ツリー構造の内部ノードが、２つのクリッピング面及び１対の子へのポインタによって記述される、請求項２に記載のシステムにおける一層の改良。
【請求項４】
被分裂面候補が、前記内部ノードの境界ボックスに適合せず、前記場面のグローバル境界ボックスによって判定され、その結果、境界ボックスが前記階層を通して可能な限り立方体として維持される、請求項３に記載のシステムにおける一層の改良。
【請求項５】
前記子ポインタの下位２ビットを、前記軸又はリーフを示すのに使うことができるように、すべてのノードが、選択されたバイトベースの境界上に整列される、請求項２に記載のシステムにおける一層の改良。
【請求項６】
リーフノードは、参照されるオブジェクト及びオブジェクトの全体数への多ビットポインタからなる、請求項５に記載のシステムにおける一層の改良。
【請求項７】
対応する有効光線セグメントが、重ならない２つの子の間にあるとき、光線がどの子とも交差しないことが可能であり、この追加ケースの処理が、空きリーフが格納される必要がないように、空きリーフを暗黙的にスキップする、請求項２に記載のシステムにおける一層の改良。
【請求項８】
交差が判定されるとすぐに、前記階層ツリーの分岐が現在の交差よりさらに離れたボリューム要素を表す場合は分岐を剪定してよい、請求項７に記載のシステムにおける一層の改良。
【請求項９】
光線が横断する場合、又は形状がこの光線に対して可視的である場合のみ、前記階層状加速データ構造の構築を含む、請求項２に記載のシステムにおける一層の改良。
【請求項１０】
オブジェクトソートが適所で行われるので、未だに細分されていないボリューム要素に印をつけるためのフラグのみが要求され、光線を横断するとき、前記フラグがセットされている場合は細分が実施される、請求項９に記載のシステムにおける一層の改良。
【請求項１１】
前記階層状加速データ構造のノードに含まれるすべてのオブジェクトが専用のメモリキャッシュに収まる場合、前記ノードを完全に細分することを含む、請求項１０に記載のシステムにおける一層の改良。
【請求項１２】
光線のアレイの追跡を含む、請求項２に記載のシステムにおける一層の改良。
【請求項１３】
前記境界間隔階層に関連したフラスタム光線カリング技法の使用を含む、請求項１２に記載のシステムにおける一層の改良。
【請求項１４】
上記方法によって処理及びメモリ構造を構築することを含み、前記処理及びメモリ構造は、
画像三角形をバケットにソートし対応するバケット値を記憶装置上に格納することによって前処理すること、
描画のために、ただちに前記三角形に対する前記ツリーを構築する必要なく、前記バケットから最上位境界間隔階層を作成することであって、光線が交差する各バケットが、前記ツリーのオンデマンド作成を使用して独自のツリーを作成すること
を提供するように動作可能であり、
前記バケットの三角形及び前記加速データ構造が、動的又は固定ユーザ定義サイズどちらかのキャッシュに格納され、
最大数の三角形を有する前記バケットが、最大メモリフットプリントを定義する、請求項２に記載のシステムにおける一層の改良。
【請求項１５】
要求されるメモリは、前もって、光線追跡されるべきオブジェクトの数で線形的に境界を定めることができる、請求項２に記載のシステムにおける一層の改良。
【請求項１６】
ただ１つのクリッピング面の使用を含む、請求項２に記載のシステムにおける一層の改良。
【請求項１７】
４つのクリッピング面の使用を含む、請求項２に記載のシステムにおける一層の改良。
【請求項１８】
オンデマンドのみでの前記階層状光線追跡加速データ構造の構築を構築することを含む、請求項２に記載のシステムにおける一層の改良。
【請求項１９】
分裂面の片側にある、又は前記分裂面と交差する光線の束の前記境界ボックスを判定すること、及び
前記ボックスが、前記ツリーの前記内部ノードで識別される前記分裂面の片側にある場合、この分岐を一層の横断に使うこと、
前記光線境界ボックスと交差するリーフノード又は面に遭遇した場合、このノードを、光線の前記束に対する共通エントリノードと識別し、次いで、前記加速データ構造のルートノードから前記光線を横断するのではなく、エントリノードから横断を開始することを含む、請求項９に記載のシステムにおける一層の改良。
【請求項２０】
コンピュータ及び表示要素を備えるコンピュータグラフィックスシステムであって、前記表示要素は、前記コンピュータからの表示制御用電気出力に応答して、人間が知覚可能な画像を表示するように動作可能であり、前記コンピュータは、前記画像中のピクセルに関するピクセル値の算出に基づいて、前記表示制御用電気出力を生成するように動作可能であり、それぞれのピクセル値は、模擬カメラの画像面上に記録される場面中の点を表し、前記コンピュータは、光線追跡方法を用いて画像に対するピクセル値を生成するように動作可能であり、前記光線追跡方法は、光線ツリー及び関連した光線追跡データ構造の使用を含み、前記光線ツリーは、選択された方向に沿って前記ピクセルから場面中に発せられた少なくとも１本の光線を含み、前記光線追跡方法は、前記場面中での光線とオブジェクトの表面との交差の算出をさらに含み、前記光線追跡は、画像中のオブジェクトの処理の結果に応答して判定されるシステムにおけるコンピュータソフトウェア製品であって、
コンピュータ可読な形でコンピュータ可読媒体に格納されたコンピュータ実行可能コードを備え、前記コンピュータソフトウェア製品が、前記コンピュータ可読媒体上に格納され、前記コンピュータが、ツリー構造を含む階層状光線追跡加速データ構造を構築することであって、ツリー構造のノードが、場面中の１組のオブジェクトを左オブジェクトと右オブジェクトに分割するための軸平行場面境界ボックス及び２つの並列面定義に基づく境界間隔階層を使用して生成されること、並びに被分裂面をオブジェクト境界ボックスに合致させることを可能にするように前記コンピュータによって実行可能なコンピュータ実行可能コードをさらに備え、
前記２つの面が、ｘ、ｙ、又はｚ軸のうち選択された１つに垂直であり、
分裂面を与えられた場合、左／右選択基準に基づいて、画像中の各オブジェクトが左又は右どちらかに分類され、子ノードの２つの分裂面値が、それぞれ、前記左及び右オブジェクトの最大及び最小座標によって判定され、
境界ボックス及び前記選択された軸を与えられた場合、左の子Ｌが、前記選択された軸に沿った左オブジェクトの座標の最大値を第１の面で置き換えることから生じ、右の子Ｒが、右オブジェクトの座標の最小値を第２の面で置き換えることから生じ、結果として生じたどのゼロボリュームも、空の子を表すのに使われ、
分裂面が、
（ａ）中央にある長辺に沿った軸平行場面境界ボックスを階層状に細分することによって候補分裂面を選択することであって、すべての候補分裂面が規則的なグリッドを形成すること、
（ｂ）候補面が、細分するべきボリューム要素の前記境界ボックスの外側にある場合、前記ボリューム要素が存在する半分以降の候補面で継続すること
によって判定され、
さらに、
（ａ）前記境界ボックスをオブジェクト境界ボックスに再帰的に分割すること、
（ｂ）被分裂面候補が重複なしでオブジェクトを分離する場合、結果として生じた被分裂面を左及び右にある前記オブジェクトに合わせ、そうすることによって空き空間を最大化すること、並びに
（ｃ）所定の数を超えるオブジェクトが残っていない場合、前記再帰を終了すること
を含む、コンピュータソフトウェア製品。
【請求項２１】
Ａ．前記左／右選択基準は、分裂面を与えられた場合、画像中の各オブジェクトを、前記面のどちら側が最も伸びているかに応じて左又は右どちらかに分類することを含み、
Ｂ．前記階層状光線追跡加速データ構造の前記構築が、バケットソートに基づき、
（ａ）空間を分割する順序づけられた規則的なグリッドの解像度を判定するために、場面境界ボックス及び平均的オブジェクトサイズを計算すること、或いは、ユーザ指定解像度を用いること、
（ｂ）各グリッドセルごとにカウンタを割り振ること、
（ｃ）各々がそれぞれのグリッドセルに対応するすべてのカウンタをゼロに初期化すること、
（ｄ）各オブジェクトごとに点を選択して、前記選択された点を含む前記グリッドセルに対する前記それぞれのカウンタを増分すること、
（ｅ）各カウンタ値をすべての先行カウンタの値の和で置き換えることによって、カウンタ値をオフセット値に変換すること、
（ｆ）グローバルオブジェクト索引アレイを割り振ること、
（ｇ）それぞれの各オブジェクトごとに、その点を含む前記グリッドセル用の前記カウンタを増分するために選択された前記対応する点を使って、前記オフセット値を用いて、前記オブジェクトをバケットにソートすること、並びに
（ｈ）各バケットごとに、各バケットが含む前記オブジェクトの前記境界ボックスを計算すること
の階層状の実行を含む、請求項２０に記載のコンピュータソフトウェア製品。
【請求項２２】
コンピュータ及び表示要素を備えるコンピュータグラフィックスシステムであって、前記表示要素は、前記コンピュータからの表示制御用電気出力に応答して、人間が知覚可能な画像を表示するように動作可能であり、前記コンピュータは、前記画像中のピクセルに関するピクセル値の算出に基づいて、前記表示制御用電気出力を生成するように動作可能であり、それぞれのピクセル値は、模擬カメラの画像面上に記録される場面中の点を表し、前記コンピュータは、光線追跡方法を用いて画像に対するピクセル値を生成するように動作可能であり、前記光線追跡方法は、光線ツリー及び関連した光線追跡データ構造の使用を含み、前記光線ツリーは、選択された方向に沿って前記ピクセルから場面中に発せられた少なくとも１本の光線を含み、前記光線追跡方法は、前記場面中での光線とオブジェクトの表面との交差の算出をさらに含み、前記光線追跡は、画像中のオブジェクトの処理の結果に応答して判定されるシステムにおける方法であって、
ツリー構造を含む階層状光線追跡加速データ構造を構築するステップであって、ツリー構造のノードが、場面中の１組のオブジェクトを左オブジェクトと右オブジェクトに分割するための軸平行場面境界ボックス及び２つの並列面定義に基づく境界間隔階層を使用して生成され、被分裂面をオブジェクト境界ボックスに合致させるステップを含み、
前記２つの面が、ｘ、ｙ、又はｚ軸のうち選択された１つに垂直であり、
分裂面を与えられた場合、左／右選択基準に基づいて、画像中の各オブジェクトが左又は右どちらかに分類され、子ノードの２つの分裂面値が、それぞれ、前記左及び右オブジェクトの最大及び最小座標によって判定され、
境界ボックス及び前記選択された軸を与えられた場合、左の子Ｌが、前記選択された軸に沿った左オブジェクトの座標の最大値を第１の面で置き換えることから生じ、右の子Ｒが、右オブジェクトの座標の最小値を第２の面で置き換えることから生じ、結果として生じたどのゼロボリュームも、空の子を表すのに使われ、
分裂面が、
（ａ）中央にある長辺に沿った軸平行場面境界ボックスを階層状に細分することによって候補分裂面を選択することであって、すべての候補分裂面が規則的なグリッドを形成すること、
（ｂ）候補面が、細分するべきボリューム要素の前記境界ボックスの外側にある場合、前記ボリューム要素が存在する半分以降の候補面で継続すること
によって判定され、
さらに、
（ａ）前記境界ボックスをオブジェクト境界ボックスに再帰的に分割するステップと、
（ｂ）被分裂面候補が重複なしでオブジェクトを分離する場合、結果として生じた被分裂面を左及び右にある前記オブジェクトに合わせ、そうすることによって空き空間を最大化するステップと、
（ｃ）所定の数を超えるオブジェクトが残っていない場合、前記再帰を終了するステップと
を含む方法。
【請求項２３】
Ａ．前記左／右選択基準は、分裂面を与えられた場合、画像中の各オブジェクトを、前記面のどちら側が最も伸びているかに応じて左又は右どちらかに分類することを含み、
Ｂ．前記階層状光線追跡加速データ構造の前記構築が、バケットソートに基づき、
（ａ）空間を分割する順序づけられた規則的なグリッドの解像度を判定するために、場面境界ボックス及び平均的オブジェクトサイズを計算すること、或いは、ユーザ指定解像度を用いること、
（ｂ）各グリッドセルごとにカウンタを割り振ること、
（ｃ）各々がそれぞれのグリッドセルに対応するすべてのカウンタをゼロに初期化すること、
（ｄ）各オブジェクトごとに点を選択して、前記選択された点を含む前記グリッドセルに対する前記それぞれのカウンタを増分すること、
（ｅ）各カウンタ値をすべての先行カウンタの値の和で置き換えることによって、カウンタ値をオフセット値に変換すること、
（ｆ）グローバルオブジェクト索引アレイを割り振ること、
（ｇ）それぞれの各オブジェクトごとに、その点を含む前記グリッドセル用の前記カウンタを増分するために選択された前記対応する点を使って、前記オフセット値を用いて、前記オブジェクトをバケットにソートすること、並びに
（ｈ）各バケットごとに、各バケットが含む前記オブジェクトの前記境界ボックスを計算することの階層状の実行を含む、請求項２２に記載の方法。
【請求項２４】
コンピュータ及び表示要素を備えるコンピュータグラフィックスシステムであって、前記表示要素は、前記コンピュータからの表示制御用電気出力に応答して、人間が知覚可能な画像を表示するように動作可能であり、前記コンピュータは、前記画像中のピクセルに関するピクセル値の算出に基づいて、前記表示制御用電気出力を生成するように動作可能であり、それぞれのピクセル値は、模擬カメラの画像面上に記録される場面中の点を表し、前記コンピュータは、光線追跡方法を用いて画像に対するピクセル値を生成するように動作可能であり、前記光線追跡方法は、光線ツリー及び関連した光線追跡データ構造の使用を含み、前記光線ツリーは、選択された方向に沿って前記ピクセルから場面中に発せられた少なくとも１本の光線を含み、前記光線追跡方法は、前記場面中での光線とオブジェクトの表面との交差の算出をさらに含み、前記光線追跡は、画像中のオブジェクトの処理の結果に応答して判定されるシステムにおけるサブシステムであって、
ツリー構造を含む階層状光線追跡加速データ構造を構築する手段であって、ツリー構造のノードが、場面中の１組のオブジェクトを左オブジェクトと右オブジェクトに分割するための軸平行場面境界ボックス及び２つの並列面定義に基づく境界間隔階層を使用して生成され、被分裂面をオブジェクト境界ボックスに合致させる手段を備え、
前記２つの面が、ｘ、ｙ、又はｚ軸のうち選択された１つに垂直であり、
分裂面を与えられた場合、左／右選択基準に基づいて、画像中の各オブジェクトが左又は右どちらかに分類され、子ノードの２つの分裂面値が、それぞれ、前記左及び右オブジェクトの最大及び最小座標によって判定され、
境界ボックス及び前記選択された軸を与えられた場合、左の子Ｌが、前記選択された軸に沿った左オブジェクトの座標の最大値を第１の面で置き換えることから生じ、右の子Ｒが、右オブジェクトの座標の最小値を第２の面で置き換えることから生じ、結果として生じたどのゼロボリュームも、空の子を表すのに使われ、
分裂面が、
（ａ）中央にある長辺に沿った軸平行場面境界ボックスを階層状に細分することによって候補分裂面を選択することであって、すべての候補分裂面が規則的なグリッドを形成すること、
（ｂ）候補面が、細分するべきボリューム要素の前記境界ボックスの外側にある場合、前記ボリューム要素が存在する半分以降の候補面で継続すること
によって判定され、
さらに、
（ａ）前記境界ボックスをオブジェクト境界ボックスに再帰的に分割すること、
（ｂ）被分裂面候補が重複なしでオブジェクトを分離する場合、結果として生じた被分裂面を左及び右にある前記オブジェクトに合わせ、そうすることによって空き空間を最大化すること、並びに
（ｃ）所定の数を超えるオブジェクトが残っていない場合、前記再帰を終了すること
を含むサブシステム。
【請求項２５】
Ａ．前記左／右選択基準は、分裂面を与えられた場合、画像中の各オブジェクトを、前記面のどちら側が最も伸びているかに応じて左又は右どちらかに分類することを含み、
Ｂ．前記階層状光線追跡加速データ構造の前記構築が、バケットソートに基づき、
（ａ）空間を分割する順序づけられた規則的なグリッドの解像度を判定するために、場面境界ボックス及び平均的オブジェクトサイズを計算すること、或いは、ユーザ指定解像度を用いること、
（ｂ）各グリッドセルごとにカウンタを割り振ること、
（ｃ）各々がそれぞれのグリッドセルに対応するすべてのカウンタをゼロに初期化すること、
（ｄ）各オブジェクトごとに点を選択して、前記選択された点を含む前記グリッドセルに対する前記それぞれのカウンタを増分すること、
（ｅ）各カウンタ値をすべての先行カウンタの値の和で置き換えることによって、カウンタ値をオフセット値に変換すること、
（ｆ）グローバルオブジェクト索引アレイを割り振ること、
（ｇ）それぞれの各オブジェクトごとに、その点を含む前記グリッドセル用の前記カウンタを増分するために選択された前記対応する点を使って、前記オフセット値を用いて、前記オブジェクトをバケットにソートすること、並びに
（ｈ）各バケットごとに、各バケットが含む前記オブジェクトの前記境界ボックスを計算することの階層状の実行を含む、請求項２４に記載のサブシステム。
【発明の詳細な説明】
【関連出願の相互参照】
【０００１】
本特許出願は、２００６年４月１９日に出願した米国特許仮出願第６０／７９３０６３号（整理番号ＭＥＮＴ−２０１−ＰＲ）の優先権の利益を主張し、２００６年６月２３日に出願した米国特許出願第１１／４７４５１７号（整理番号ＭＥＮＴ−１０１−ＵＳ、名称「Ｒｅａｌ−Ｔｉｍｅ  Ｐｒｅｃｉｓｉｏｎ  Ｒａｙ  Ｔｒａｃｉｎｇ」）の一部継続出願である。
【０００２】
米国特許出願第１１／４７４５１７号（整理番号ＭＥＮＴ−１０１−ＵＳ）は、２００５年６月３３日に出願した米国特許仮出願第６０／６９３２３１号（整理番号ＭＥＮＴ−１０１−ＰＲ）の優先権の利益を主張し、２００２年１１月１９日に出願した米国特許出願第１０／２９９５７４号（整理番号ＭＥＮＴ−０７５）の一部継続出願である。
【０００３】
米国特許出願第１０／２９９５７４号（整理番号ＭＥＮＴ−０７５）は、２００１年６月１９日に出願した米国特許第０９／８８４８６１号（整理番号ＭＥＮＴ−０６１）の一部継続出願であり、この米国特許は、２００１年２月１日に出願した米国特許仮出願第６０／２６５９３４号、及び２０００年６月１９日に出願した米国特許仮出願第６０／２１２２８６号の優先権の利益を主張する。仮及び本出願を含むこうした引用特許出願はそれぞれ、参照によって、その全体が記載されるものとして、本明細書に組み込まれている。
【発明の分野】
【０００４】
本発明は概して、動画及び他のアプリケーションのための、デジタルコンピューティングシステムにおける、且つそれによる画像描画のための方法及びシステムに関し、詳細には、ほぼ瞬時に行われる高精度光線追跡のための方法、システム、装置、及びコンピュータソフトウェアに関する。
【発明の背景】
【０００５】
「光線追跡」という用語は、光源をカメラと接続するすべての光路を識別し、こうした寄与率（contribution）を合計することによって、写真のようにリアルな画像を同期させる技法を記述する。シミュレーションは、可視性を判定するために視線に沿って光線を追跡し、照度を判定するために光源からの光線を追跡する。
【０００６】
光線追跡は、動画及び他のアプリケーションにおいて主流になっている。しかし、現在の光線追跡技法は、数値問題、動的場面を処理するための限られた機能、加速データ構造の遅いセットアップ及び巨大なメモリフットプリントを含む、公知のいくつかの制限及び弱点の影響を被っている。したがって、現在の光線追跡技法は、森を吹き抜ける風や人間の髪の毛など、十分にアニメーション化された場面を効率的に取り扱う能力に欠けている。現在の光線追跡システムの制限を克服すると、たとえば、映画製作における、より高品質のモーションブラーの描画も可能になるであろう。
【０００７】
光線追跡システムの性能を向上させるための現在の試みは、いくつかの理由により、不十分である。たとえば、現在のリアルタイム光線追跡システムは概して、その加速構造として、軸平行バイナリ空間区画に基づく３Ｄツリーを用いる。こうしたシステムの主な焦点は、静的場面を描画することにあるので、通常、十分にアニメーション化された場面に関連して要求されるデータ構造を構築するのに要求される大量のセットアップ時間に対処することができない。こうした線に沿って、ある製造元は、効率的な３Ｄツリーを組み立て、ツリーを横断するのに必要とされる時間を短縮できるアルゴリズムを開発することによって、リアルタイム光線追跡を改良している。しかし、システムに対する予想されるメモリ要件は、光線追跡されるべきオブジェクトの数の増加とともに二次的に増すことが分かっている。
【０００８】
別の製造元は、境界ボリューム階層を用いてシステム性能を向上させる光線追跡集積回路を設計している。しかし、あまりに多くの非干渉二次光線が追跡される場合、アーキテクチャの性能が損なわれることが分かっている。
【０００９】
さらに、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）を使った３Ｄツリー横断アルゴリズムを実装することによって、システム性能を向上させる試みが行われている。こうしたシステムにおける処理速度の主な増大は、干渉光線の束を追跡し、迅速な組込み計算を実施するためのＦＰＧＡの能力を利用することによって得られる。加速構造の構築は、ハードウェアでは未だに実装されていない。ＦＰＧＡ実装は通常、低減された精度での浮動小数点技法を用いる。
【発明の概要】
【００１０】
本発明の一態様は、コンピュータ及び表示要素を備えるタイプのコンピュータグラフィックスシステムにおける改良に関し、表示要素は、コンピュータからの表示制御用電気出力に応答して、人間が知覚可能な画像を表示するように動作可能であり、コンピュータは、画像中のピクセルに関するピクセル値の算出に基づいて、表示制御用電気出力を生成するように動作可能であり、それぞれのピクセル値は、模擬カメラの画像面上に記録される場面中の点を表し、コンピュータは、光線追跡方法を用いて画像に対するピクセル値を生成するように動作可能であり、光線追跡方法は、光線ツリー及び関連した光線追跡データ構造の使用を含み、光線ツリーは、選択された方向に沿ってピクセルから場面中に発せられた少なくとも１本の光線を含み、光線追跡方法は、場面中での光線とオブジェクトの表面との交差の算出をさらに含み、光線追跡は、画像中のオブジェクトの処理の結果に応答して判定される。
【００１１】
本発明の本態様において、改良は、ツリー構造を含む階層状光線追跡加速データ構造を構築することであって、ツリー構造のノードが、場面中の１組のオブジェクトを左オブジェクトと右オブジェクトに分割するための軸平行場面境界ボックス及び２つの並列面定義に基づく境界間隔階層を使用して生成されること、並びに被分裂面をオブジェクト境界ボックスに合致させることを含み、
（Ａ）２つの面が、ｘ、ｙ、又はｚ軸のうち選択された１つに垂直であり、
（Ｂ）分裂面を与えられると、左／右選択基準に基づいて、画像中の各オブジェクトが左又は右どちらかに分類され、子ノードの２つの分裂面値が、それぞれ、左及び右オブジェクトの最大及び最小座標によって判定され、
（Ｃ）境界ボックス及び選択された軸を与えられると、左の子Ｌが、選択された軸に沿った左オブジェクトの座標の最大値を第１の面で置き換えることから生じ、右の子Ｒが、右オブジェクトの座標の最小値を第２の面で置き換えることから生じ、結果として生じたどのゼロボリュームも、空の子を表すのに使われ、
（Ｄ）分裂面が、
（１）中央にある長辺に沿った軸平行場面境界ボックスを階層状に細分することによって候補分裂面を選択することであって、すべての候補分裂面が規則的なグリッドを形成すること、
（２）候補面が、細分するべきボリューム要素の境界ボックスの外側にある場合、ボリューム要素が存在する半分以降の候補面で継続すること
によって判定され、
（Ｅ）さらに、
（ａ）境界ボックスをオブジェクト境界ボックスに再帰的に分割すること、
（ｂ）被分裂面候補が重複なしでオブジェクトを分離する場合、結果として生じた被分裂面を左及び右にあるオブジェクトに合わせ、そうすることによって空き空間を最大化すること、並びに
（ｃ）所定の数を超えるオブジェクトが残っていない場合、再帰を終了すること
を含む。
【００１２】
本発明の別の態様において、左／右選択基準は、分裂面を与えられると、画像中の各オブジェクトを、面のどちら側が最も伸びているかに応じて左又は右どちらかに分類することを含み、階層状光線追跡加速データ構造の構築が、バケットソートに基づき、
（Ａ）空間を分割する順序づけられた規則的なグリッドの解像度を判定するために、場面境界ボックス及び平均的オブジェクトサイズを計算すること、或いは、ユーザ指定解像度を用いること、
（Ｂ）各グリッドセルごとにカウンタを割り振ること、
（Ｃ）各々がそれぞれのグリッドセルに対応するすべてのカウンタをゼロに初期化すること、
（Ｄ）各オブジェクトごとに点を選択して、選択された点を含むグリッドセルに対するそれぞれのカウンタを増分すること、
（Ｅ）各カウンタ値をすべての先行カウンタの値の和で置き換えることによって、カウンタ値をオフセット値に変換すること、
（Ｆ）グローバルオブジェクト索引アレイを割り振ること、
（Ｇ）それぞれの各オブジェクトごとに、その点を含むグリッドセル用のカウンタを増分するために選択された対応する点を使って、オフセット値を用いて、オブジェクトをバケットにソートすること、並びに
（Ｈ）各バケットごとに、各バケットが含むオブジェクトの境界ボックスを計算すること
の階層状の実行を含む。
【００１３】
本発明のそれ以外の態様は、光線が横断し、又は形状が光線にとって可視的である場合のみの階層状加速データ構造を含む。
【００１４】
本発明のさらにそれ以外の態様は、上記方法によって処理及びメモリ構造を構築することを含み、処理及びメモリ構造は、
（Ａ）画像三角形をバケットにソートし対応するバケット値を記憶装置上に格納することによって前処理すること、
（Ｂ）描画のために、ただちに三角形に対するツリーを構築する必要なく、バケットから最上位境界間隔階層を作成することであって、光線が交差する各バケットが、ツリーのオンデマンド作成を使用して独自のツリーを作成すること、
（Ｃ）バケットの三角形及び加速データ構造は、動的又は固定ユーザ定義サイズどちらかのキャッシュに格納されること、並びに
（Ｄ）最大数の三角形を有するバケットが、最大メモリフットプリントを定義することを提供するように動作可能である。
【００１５】
本発明のそれ以外の態様では、要求されるメモリの量は、前もって、光線追跡されるべきオブジェクトの数において線形的に境界を定めることができる。
【００１６】
本発明は、コンピュータソフトウェア、ハードウェア、又はソフトウェアとハードウェアの組合せとして実施される方法、このような方法を実施するコンピュータベースの装置又はシステム、コンピュータによって通信することができる磁気ディスク、ＲＡＭカード、ＲＯＭ要素、ＦＰＧＡ、ＡＳＩＣ、又は他の処理及び／若しくは記憶要素上に格納されたコンピュータ実行可能コードを備えるコンピュータソフトウェア製品、コンピュータによって、このような方法を実施するように実行可能なコード、或いはこのような実施形態の何らかの組合せの形をとり得ることが当業者には理解されよう。
【００１７】
本発明は、たとえば表示要素なしで、且つ事前定義されたある特定のコンピューティング機器を使用せずに実施できることも、当業者には理解されよう。たとえば、ピクセル値及び画像データは、後で表示するために作成し格納することができる。
【００１８】
こうした及び他の態様について、本発明の以下の詳細な説明において、添付の図面に関連して、後でより詳細に論じる。
【発明の詳細説明】
【００１９】
発明を実装することができるデジタル処理環境
本発明の特定の例及び実施形態を説明する前に、以下は、本発明を実装し実施することができる基底デジタル処理構造及び環境の図１、２と関連して読むべき考察である。
【００２０】
本発明は、その出力が通常、たとえば、アニメーションの動画、コンピュータ支援設計表現、又は他の典型的なコンピュータグラフィックス出力を含む、人間が知覚可能な（或いはデジタルに格納され、且つ／又は伝送される）１枚の画像又は一連の画像である、コンピュータグラフィックスシステムにおけるより効率的な光線追跡及び他の活動を可能にする方法、システム、装置及びコンピュータプログラム製品を提供することが、当業者には理解されよう。本発明はしたがって、ディスプレイと、キーボード、タブレット及び／又はマウスなどのユーザインタフェース要素と、記憶装置と、他の従来のコンピュータグラフィックスシステム構成要素とともに、コンピュータグラフィックスシステムの一部を形成するコンピュータのコンピュータソフトウェア又はコンピュータハードウェアの一部として実装することができる。このような種類の従来の構成要素は当業者に公知であり、したがって本明細書において詳細に説明する必要はないが、以下の概論は、コンピュータグラフィックスシステムにおいてこのような構成要素とともに本発明をどのようにして実装することができるかを示す。
【００２１】
より具体的には、本発明は、たとえば、動画又は他の動的表示に表示するための画像の生成及び合成において使用できることが、当業者には理解されよう。本明細書において説明する技法は、ピクセル値が画像中のピクセル用に生成されるコンピュータグラフィックスシステムの一部として実施することができる。ピクセル値は、模擬カメラの画像面上に記録されるときの場面中の点を表す。基底コンピュータグラフィックスシステムは、本発明の方法など、選択された方法を用いて画像に対するピクセル値を生成するように構成することができる。
【００２２】
以下の詳細な説明は、こうした技法による方法、構造、システム、及びコンピュータソフトウェア製品の例を示す。記載する方法及びシステムは、スタンドアロン構成でも、ネットワークを介しても、マイクロソフトのウィンドウズ、Ｌｉｎｕｘ、又はＵｎｉｘなど、従来のオペレーティングシステムに従って動作する（又はそれをエミュレートする）パーソナルコンピュータ（ＰＣ）や等価な装置など、従来のコンピュータ機器を使って、ソフトウェア、ハードウェア、又はソフトウェアとハードウェアの組合せで実装できることが、当業者には理解されよう。本明細書において説明する様々な処理態様及び手段はしたがって、適切に構成されたデジタル処理装置又は装置からなるネットワークのソフトウェア及び／又はハードウェア要素で実装することができる。処理は、連続して、又は並列に実施することができ、特殊目的又は再構成可能ハードウェアを使って実装することができる。
【００２３】
一例として、本明細書に添付された図１は、このようなコンピュータグラフィックスプロセスを実施することができる例示的なコンピュータシステム１０を示す。図１を参照すると、一実施形態におけるコンピュータシステム１０は、プロセッサモジュール１１と、キーボード１２Ａ及び／又はマウス１２Ｂ（若しくは、概してオペレータ入力要素（群）１２として識別されるデジタル化タブレットや他の類似要素（群））などのオペレータ入力構成要素及びビデオ表示装置１３などのオペレータ出力要素を備えるオペレータインタフェース要素とを含む。例示的なコンピュータシステム１０は、従来の格納プログラムコンピュータアーキテクチャでよい。プロセッサモジュール１１は、たとえば、１つ又は複数のプロセッサと、与えられたデジタルデータに関連した処理及び格納操作を実施する、ディスク及び／又はテープ記憶要素（別々には図示していない）などのメモリ及び大容量記憶装置とを含み得る。オペレータ入力要素（群）１２は、オペレータに処理用の情報を入力させるために設けられる。ビデオ表示装置１３は、オペレータが処理用に入力することができるデータ、オペレータが処理を制御するために入力することができる情報、並びに処理中に生成された情報を含む、プロセッサモジュール１１によって生成された出力情報をオペレータに対してスクリーン１４上に表示するように設けられる。プロセッサモジュール１１は、様々な「ウィンドウ」を使って様々なアプリケーションプログラム用の情報が表示される、いわゆる「グラフィカルユーザインタフェース」（「ＧＵＩ」）を用いて、ビデオ表示装置１３による表示用の情報を生成することができる。
【００２４】
「メモリ」、「記憶装置」及び「ディスク記憶装置」という用語は、コンピュータハードディスク、コンピュータフロッピーディスク、コンピュータ可読フラッシュドライブ、コンピュータ可読ＲＡＭ又はＲＯＭ要素或いはデジタル情報をエンコードする他のあらゆる公知の手段など、どのコンピュータ可読媒体も包含し得る。「アプリケーションプログラム」、「アプリケーション」、「プログラム」、「コンピュータプログラム製品」又は「コンピュータソフトウェア製品」という用語は、コンピュータ可読媒体にエンコードされ、且つ／又は格納されたコンピュータ可読プログラム命令からなるどのコンピュータプログラム製品も包含してよく、その媒体は、固定又は取外し可能でも、永続的又は消去可能でも、或いはそれ以外でもよい。たとえば、図２Ｂの概略的なブロック図のブロック１２２に記載するように、アプリケーション及びデータは、内部であるか外部であるかに関わらず、ディスク上、ＲＡＭ、ＲＯＭ内、他の取外し可能又は固定記憶装置上に格納することができ、当該分野において公知である実施及び技法に従ってダウンロードすることもアップロードすることもできる。本文書において述べるように、本発明は、コンピュータ可読媒体上に格納されるソフトウェア又はコンピュータプログラム製品の形をとってもよく、アップロードし又はダウンロードすることも、ＦＰＧＡ、ＲＯＭ又は他の電子構造内に固定することもできるコンピュータプログラムコードの形でもよく、方法又はこのような方法を実施するシステムの形をとってもよい。各々のケースにおいて、本発明は、コンピュータ又はコンピュータシステムが画像又は場面中のピクセルに対するピクセル値を算出することを可能にするように動作可能であり、ピクセル値は、グラフィックスカード、表示コントローラ、或いは表示制御用の電気又は電子出力を生成するための、且つ、究極的には、人間が知覚可能な形での画像の表示、及び／又は後で表示し、且つ／又は処理するためにこのような画像（若しくはこのような画像を特定するデータ）の格納を可能にするためのＬＣＤ及び／又はＣＲＴなどの表示要素など、従来の要素でよい、コンピュータグラフィックスシステムの他の要素によって使うことができる。
【００２５】
コンピュータシステム１０は、オペレータから入力情報を受け取るキーボード１２Ａ及びマウス１２Ｂ、並びにオペレータへの出力情報を表示するビデオ表示装置１３など、特定の構成要素を備えるものとして示してあるが、コンピュータシステム１０は、図１に示すものに加えて、又はその代わりに、様々な構成要素を含み得ることが理解されよう。
【００２６】
さらに、プロセッサモジュール１１は、コンピュータネットワーク内でコンピュータシステム１０を接続する通信リンクに接続される、概して参照番号１４で識別される、１つ又は複数のネットワークポートを含み得る。ネットワークポートは、コンピュータシステム１０が、ネットワーク内の他のコンピュータシステム及び他の装置との間で情報を送信し、情報を受信することを可能にする。たとえば、クライアント−サーバの枠組みに従って編成された典型的なネットワークにおいて、ネットワーク内の特定のコンピュータシステムが、他のクライアントコンピュータシステムによる処理のためのデータ及びプログラム（概して、「情報」）を格納するサーバとして指定され、そうすることによって、クライアントコンピュータシステムが情報を好都合に共有することを可能にする。ある特定のサーバによって維持される情報へのアクセスを必要とするクライアントコンピュータシステムは、サーバがネットワークを介してシステム自体に情報をダウンロードすることを可能にする。データを処理した後、クライアントコンピュータシステムは、処理されたデータを、格納のためにサーバに戻すこともできる。コンピュータシステム（上述のサーバ及びクライアントを含む）に加えて、ネットワークは、たとえば、ネットワーク内で接続された様々なコンピュータシステムの間で共有することができる、プリンタ及びファクシミリ装置、デジタルオーディオ又はビデオ記憶装置並びに分散装置なども含み得る。ネットワーク内のコンピュータシステムを相互接続する通信リンクは、従来通り、コンピュータシステムの間で信号を搬送するワイヤ、光ファイバー又は他の媒体を含む、どの好都合な情報搬送媒体も備え得る。コンピュータシステムは、通信リンクを介して転送されるメッセージを用いて、ネットワークを介して情報を転送し、各メッセージは、メッセージを受信する装置を識別する情報及び識別子を含む。
【００２７】
図面に示すコンピュータシステム１０に加えて、本発明による方法、装置又はソフトウェア製品は、従来のＰＣ１０２、ラップトップ１０４、ハンドヘルド又はモバイルコンピュータ１０６を含む、スタンドアロン、ネットワーク接続型、可搬型又は固定、或いはサーバ１１０及び記憶装置１１２を含み得る、インターネット又は他のネットワーク１０８経由に関わらず、図２Ａ、２Ｂに例として示されるもの（たとえば、ネットワークシステム１００）など、広範な従来のコンピューティング装置及びシステムのいずれの上でも動作し得る。
【００２８】
従来のコンピュータソフトウェア及びハードウェアの実施に沿って、本発明に従って構成されたソフトウェアアプリケーションは、たとえば、プログラム命令を、ＲＯＭ又はＣＤ  ＲＯＭ１１６（図２Ｂ）、磁気ディスク又は他の記憶装置１２０から読み出し、ＣＰＵ１１８による実行のためにＲＡＭ１１４にロードすることができる、図１、２Ａ〜Ｂに示すようなＰＣ１０２内で動作し得る。データは、従来のキーボード、スキャナ、マウス、デジタル化タブレット、又は他の要素１０３を含む、公知のどの装置又は手段を介してもシステムに入力することができる。図２Ｂに示すように、図示してある記憶装置１２０は、取外し可能記憶装置を含む。さらに図２Ｂに示すように、アプリケーション及びデータ１２２は、固定又は取外し可能記憶装置又はＲＯＭの一部又は全部に配置しても、ダウンロードしてもよい。
【００２９】
本明細書に記載の本発明の方法態様は、特に本明細書において説明するプロセスを実施するように、ＡＳＩＣ製造元には公知のＡＳＩＣ構築技法を用いて構築されたフィールドプログラマブルゲートアレイ（ＦＰＧＡ）や特定用途集積回路（ＡＳＩＣ）などのハードウェア要素で実行できることが、当業者には理解されよう。様々な形のＡＳＩＣが、多くの製造元から入手可能であるが、現時点で入手可能なＡＳＩＣは、本特許出願に記載する機能を提供しない。このような製造元は、両方ともカリフォルニア州サンタクララにある、インテルコーポレーション及びＮＶＩＤＩＡコーポレーションを含む。従来のＡＳＩＣ又は等価な集積回路の実際の半導体要素は、本発明の一部ではないので、本明細書では詳しく論じない。
【００３０】
ＡＳＩＣ又は他の従来の集積回路或いは半導体要素は、このようにして、本明細書においてより詳細に説明する本発明の教示内容を用いて、たとえば、後でより詳細に論じる、以下で言及する図３に示す本発明の方法を実施するように実装できることも、当業者には理解されよう。
【００３１】
本発明の方法態様は、本発明に従って構成されたワークステーション又はＰＣのオペレーティングシステム及びコンピュータプログラム製品の集団的コマンドの下で動作するワークステーション及びパーソナルコンピュータ（ＰＣ）など、市販されているデジタル処理システムにおいて実施できることも、当業者には理解されよう。「コンピュータプログラム製品」という用語は、コンピュータ可読媒体上にエンコードされたどの１組のコンピュータ可読プログラム命令も包含し得る。コンピュータ可読媒体は、コンピュータハードディスク、コンピュータフロッピーディスク、コンピュータ可読フラッシュドライブ、コンピュータ可読ＲＡＭ又はＲＯＭ要素、或いはワークステーション、ＰＣ又は他のデジタル処理装置若しくはシステムにローカルであるかリモートであるかに関わらず、デジタル情報をエンコードし、格納し、又は提供する他のどの公知の手段も含むが、それに限定されない、どの形のコンピュータ可読要素も包含し得る。様々な形のコンピュータ可読要素及び媒体がコンピューティング分野において公知であり、その選択は実装者に委ねられる。各々のケースにおいて、本発明は、コンピュータシステムがピクセル値を算出することを可能にするように動作可能であり、ピクセル値は、グラフィックスカードや表示コントローラなど、従来の要素でよいコンピュータシステム内のハードウェア要素によって、表示制御用電子出力を生成するのに使うことができる。従来のグラフィックスカード及び表示コントローラがコンピューティング分野において公知であるが、必ずしも本発明の一部ではなく、その選択は実装者に委ねることができる。
【本発明の実施形態】
【００３２】
次に、添付の図面に関連して、以降のページで本発明を詳しく説明する。様々な追加、削減並びに本発明の他の修正形態及び実装形態が実施可能であり、本発明の精神及び範囲内であることが、当業者には理解されよう。
【００３３】
上述したように、ＦＰＧＡやＡＳＩＣなど、公知の形の集積回路又は半導体要素は、このように、本明細書において説明する本発明の教示内容を用いて、たとえば、後でより詳細に論じる図面に示す本発明の方法を実施するように実装することができる。
【００３４】
したがって、以下の説明は、以下の図３を参照して読むべきであり、以下のセクションに編成される。
Ｉ．リアルタイムの高精度光線追跡
１．全体的方法
２．高精度光線追跡アーキテクチャ
２．１．自己交差問題
２．１．１．浮動小数点精度の光線自由曲面交差
２．２．光線−三角形交差
２．３．高性能３Ｄツリー構築
２．３．１．分裂面選択
２．３．２．最小記憶装置構築
２．３．３．左バランスによるツリー剪定
２．３．４．高数値精度の三角形矩形交差
２．４．高性能境界ボリューム階層
２．４．１．構築
２．４．１．１．分裂面の発見
２．４．１．２．非効率軸平行境界ボックス
２．４．２．横断
２．４．３．オンザフライ境界ボリューム構築
２．５．基数ソート処理
２．５．１．オンデマンドでの構築
３．リアルタイムの高精度光線追跡技法の要約
４．追加技法
４Ａ．半空間の切取りによる境界ボリューム階層の構築
４Ｂ．４つの軸平行面による軸平行境界ボックスのクリップ
４Ｃ．加速データ構造の高性能セットアップ
４Ｄ．効率的なツリーエントリノード判定
４Ｅ．束横断
ＩＩ．瞬時光線追跡
１．概論
２．加速光線追跡の原理
２．１．空間の分割に基づく加速光線追跡
２．１．１．規則的なグリッドを使った空間分割
２．１．２．バイナリ空間区画
２．２．オブジェクトリストの分割に基づく加速光線追跡
２．２．１．境界ボリューム階層
２．３．加速光線追跡のための現在の手法の要約
３．境界間隔階層
３．１．データ構造
３．２．光線交差
３．３．階層の構築
３．３．１．分裂面を判定するグローバルヒューリスティック
３．３．２．近似ソート
３．３．３．実装詳細
３．４．オンデマンドでの構築
４．考察
４．１．メモリフットプリント
４．２．数値精度
４．３．光線集団の追跡
４．４．ハードウェア検討事項
４．５．大量データセット
４．６．大型オブジェクト
５．結果
６．結論
【００３５】
Ｉ．リアルタイムの高精度光線追跡
ここで、高精度光線追跡アーキテクチャ及び関連した技法を説明する。記載するアーキテクチャ及び技法は、浮動小数点量子化及び大型メモリ要件、並びにそれ以外に起因する、光線追跡における問題を含むいくつかの問題点に対処する。
【００３６】
１．全体的方法
図３は、本明細書において説明する技法による全体的方法２００を示す図である。この方法は、画像中の各ピクセルごとにピクセル値が生成されるコンピュータグラフィックスシステムのコンテキストにおいて実施される。生成された各ピクセル値は、模擬カメラの画像面上で記録された場面中の点を表す。コンピュータグラフィックスシステムは、選択された光線追跡方法を用いて、画像に対するピクセル値を生成するように構築される。選択された光線追跡方法は、選択された方向に沿ってピクセルから場面中に発せられた少なくとも１つの光線を含む光線ツリーの使用を含み、光線と場面中のオブジェクト（及び／又はオブジェクトの表面）との交差の算出をさらに含む。
【００３７】
図３の方法２００において、境界ボリューム階層が、光線と場面中の曲面との交差を算出するのに使われる。ステップ２０１で、場面の境界ボックスが計算される。ステップ２０２で、所定の終了基準が満たされるかどうか判定される。満たされない場合、ステップ２０３で、軸平行境界ボックスが洗練される。プロセスは、終了基準が満たされるまで、再帰的に継続する。本発明の態様によると、終了基準は、境界ボックス座標が分解の一単位においてのみ光線／曲面交点の浮動小数点表現とは異なる条件として定義される。ただし、本発明の範囲は、他の終了基準にも及ぶ。
【００３８】
加速構造としての境界ボリューム階層の使用は、いくつかの理由で有利である。境界ボリューム階層に対するメモリ要件については、光線追跡されるべきオブジェクトの数において、線形的に境界を定めることができる。また、後で説明するように、境界ボリューム階層は、３Ｄツリーよりはるかに効率的に構築することができるので、境界ボリュームは、十分にアニメーション化された場面用に要求されるならし解析に非常に適している。
【００３９】
２．高精度光線追跡アーキテクチャ
以下の説明では、光線追跡技術における特定の問題点、及びそうした問題点に対処する本発明の特定の態様をより詳細に記述する。
【００４０】
２．１．自己交差問題
図４は、「自己交差」問題を示す図である。図４は、曲面３０２、観察点３０４、及び光源３０６を含む光線追跡手順３００を示す。曲面の画像を合成するために、観察点３０４と曲面３０２との間に伸びる光線を突き止めるための一連の計算が実施される。図４は、このような１本の光線３０８を示す。理想的には、次いで、光線３０８と曲面３０２との間の正確な交差点３１０が算出される。
【００４１】
しかし、コンピュータでの浮動小数点の算術計算により、ときには、算出された光線／曲面の交点３１２が実際の交点３１０とは異なることがあり得る。さらに、図４に示すように、算出された点３１２が曲面３０２の「誤った」側に位置することがあり得る。その場合、算出された光線／曲面交点３１２から光源３０６に伸びる二次光線３１４を突き止めるための計算が実施されると、こうした計算は、二次光線３１４が、光源３０６に直接伸びるのではなく、第２の交点３１６の所で曲面３０２に当たることを示し、結果として結像エラーを生じる。
【００４２】
自己交差問題に対する公知の一解決法は、各二次光線３１４を、曲面３０２からの安全距離の所で開始させることである。この安全距離は通常、グローバル浮動小数点εと表現される。ただし、グローバル浮動小数点εの判定は、画像が合成中である場面、及び場面自体の中の特定の場所に重く依存する。
【００４３】
本発明の態様は、より正確な代案を提供する。算出された光線／曲面交点３１２に届いた後、算出された点３１２及び光線３０８の方向は次いで、実際の交点３１０により近い交点を計算し直すのに使われる。この交点の再計算は、精度を増す対話として、光線追跡技法に組み込まれる。繰返し計算された交点は、曲面３０２の「誤った」側にあるということになった場合、曲面３０２の「正しい」側に移動される。繰返し計算された交点は、グローバル浮動小数点εを用いる代わりに、曲面法線に沿って、又は法線の最長成分で判定される軸に沿って移動してよく、この点は、整数εによって、浮動小数点仮数の最終ビットに移動される。
【００４４】
記載する手順は、倍精度での計算を回避し、その指数で判定される、浮動小数点数の規模に暗黙的に適合するという利点をもつ。したがって、本実装形態では、すべての二次光線は、εオフセットを不必要にするこうした修正点から直接始まる。交差計算の間はしたがって、有効な光線間隔は、ある程度のオフセットではなく０で始まると仮定することができる。
【００４５】
仮数の整数表現を修正すると、どの点がどの側にあるか決定するために三角形と面とを交差させるときの数値問題も回避することになる。
【００４６】
２．１．１．浮動小数点精度の光線自由曲面交差
凸面組合せの凸包プロパティを利用すると、交差の点を含む軸平行境界ボックスを洗練することによって、光線源に最も近い、光線と自由曲面との交差を見つけることができる。この洗練は、浮動小数点数の分解に到達するまで、すなわち、境界ボックス座標が、分解の一単位においてのみ浮動小数点表現とは異なるようになるまで、継続してよい。自己交差問題は次いで、境界ボックスの中心にある曲面法線に最も接近した、境界ボックスの角を選択することによって回避される。この角点は次いで、二次光線を開始させるのに使われる。
【００４７】
２．２．光線−三角形交差
上述の「光線オブジェクト交差検査」は、非常に効率的であり、自己交差問題の回避から恩恵を被る。加速データ構造を構築した後、三角形は、適所で変換される。新しい表現は、縮退三角形を、交差検査が余分な作業なしで縮退三角形を扱うことができるようにエンコードする。図５は、記載する技法を実装するコードリスティング３２０の例を示す。当然ながら、単に縮退三角形がグラフィックスパイプラインに入るのを防止することも可能である。
【００４８】
検査は、最初に、光線と三角形の面との交差を判定し、次いで、光線上の有効間隔］０，ｒｅｓｕｌｔ．ｔｆａｒ］の外側の交差を排除する。これは、ただ一度の整数検査によって達成される。＋０は、有効間隔から排除されることに留意されたい。このことは、非正規化浮動小数点数がサポートされない場合に重要である。この第１の判定が成功した場合、検査は、交差の重心座標を計算することによって進む。やはり、整数検査のみ、すなわち、より具体的には２ビット検査のみが、完全な含有検査を実施するのに要求されることに留意されたい。したがって、分岐の数は最小限である。この効率的な検査を可能にするために、三角形の辺及び法線は、変換ステップにおいて適切にスケーリングされる。
【００４９】
検査の精度は、誤った、又は見落とされた光線交差を回避するのに十分である。ただし、横断中、堅牢な交差検査のために三角形を拡大することが適切な状況が起こり得る。これは、三角形を変換する前に行ってよい。三角形は、その法線の最長成分によって識別される軸に沿って投射されるので、この投射ケースは格納されることになる。これは、加速データ構造のリーフノード中のカウンタによって達成される。すなわち、三角形参照は、投射ケースによってソートされ、リーフは、各クラス中の三角形の数に対するバイトを含む。図６は、本発明の本態様を実装するコードリスティング３４０を示す。
【００５０】
２．３．高性能３Ｄツリー構築
本発明のそれ以外の態様は、光線追跡用の加速データ構造を構築する、改良された手法を提供する。異なるいくつかの最適化に従う従来のソフトウェア実装形態と比較して、本明細書において説明する手法は、優れた光線追跡性能をもつ、著しく平らなツリーをもたらす。
【００５１】
２．３．１．分裂面選択
分裂面の候補は、分割されるべき軸平行境界ボックスの内側にある三角形の頂点の座標で与えられる。これは、境界ボックスの外側に実際にあるが、境界ボックスによって定義される３つの間隔のうち１つの中にある少なくとも１つの座標を有する頂点を含むことに留意されたい。こうした候補から、現在の軸平行境界ボックスの長辺の中央に最も接近した面が選択される。さらに最適化することで、その曲面法線の最長成分が可能な分裂面の法線と合致する三角形の座標のみを選択する。この手順は、三角形の頂点を通って分裂面を配置すると、分裂面によって分裂される三角形の数を暗黙的に削減することになるので、はるかに平らなツリーをもたらす。さらに、曲面は厳しく近似され、空き空間は最大限にされる。三角形の数が、指定された閾値より高く、分裂面の候補がそれ以上ない場合、ボックスは、その長辺に沿って中央で分裂される。こうすることで、たとえば長対角線オブジェクトの使用を含む、他の手法の非効率性を回避する。
【００５２】
２．３．２．最小記憶装置構築
どの三角形が階層中のノードの左及び右の子に属すかを決定する再帰的手順は通常、広範囲な記録づけ及びメモリ割振りを要求していた。例外的なケースにおいてのみ失敗する、はるかに単純な手法がある。光線追跡されるべきオブジェクトへの参照のただ２つのアレイが割り振られる。第１のアレイは、オブジェクト参照で初期化される。再帰的空間分割中に、左にある要素のスタックが、アレイの先頭から増大され、右に分類される要素は、アレイの末尾から中央に向かって増大するスタック上に保たれる。被分裂面と交差している、すなわち、左及び右両方である要素を迅速に復元可能にするために、第２のアレイは、そうした要素のスタックを保つ。したがって、バックトラックは効率的であり単純である。
【００５３】
２．３．３．左バランスによるツリー剪定
表面積ヒューリスティックを用いることによってツリーの分岐を剪定する代わりに、ツリーの深さは、固定深度から始まるバイナリ空間分割の左バランスを近似的にとることによって、剪定される。網羅的実験によって観察されるように、非常に多様な場面に渡るグローバルな固定深度パラメータを指定することができる。これは、一般に一定量のバイナリ空間分割の後に、比較的平らな接続された構成要素が空間内に残ることを観察することによって理解することができよう。
【００５４】
２．３．４．高数値精度の三角形矩形交差
三角形の、分裂面との交差が境界ボックスの左及び／又は右区画に含まれるかどうかを決定するために、三角形−ボックス交差技法の数値的に最適化された２ｄバージョンが開発されている。最初に、分裂面との三角形の交差が計算される。次いで、この線が、分裂面及び境界ボックスの交差によって与えられる矩形に相対してどのように存在するかに関して、検査が実施される。図７Ａ〜Ｄは、記載する技法を実装する例示的なコードリスティング３６０を示す。コードの明らかな複雑さに関わらず、この技法は従来の方法より効率的であり、数値的に安定している。
【００５５】
２．４．高性能境界ボリューム階層
境界ボリューム階層を用いて、光線追跡されるべき各オブジェクトが一度だけ参照される。その結果、３Ｄツリーとは対称的に、階層を横断中の、光線とのオブジェクトの多重交差を防止するためのメールボックス機構は要求されない。これは、システム性能の視点から見ると、大きな利点であり、共有されるメモリシステム上での実装をはるかに単純にする。２番目に重要な帰結は、境界ボリューム階層のツリー中に、光線追跡されるべきオブジェクトの総数より多くの内部ノードがあってはならないことである。したがって、加速データ構造のメモリフットプリントについては、構築前にオブジェクトの数において線形的に境界を定めることができる。このような先験的境界は、メモリの複雑さが、光線追跡されるべきオブジェクトの数とともに二次的に増すと予想される、３Ｄツリーの構築には利用することはできない。
【００５６】
したがって、ここでは、現在の３Ｄツリー光線追跡技法より大幅に速く、メモリ要件が、二次的に予想されるのではなく、光線追跡されるべきオブジェクトの数とともに線形的に増大する境界ボリューム階層の新しい概念を説明する。
【００５７】
２．４．１．構築
境界ボリューム階層が、３Ｄツリーより性能が優れるようにするコア概念は、境界ボリューム自体に注目するのではなく、空間をどのように分けることができるかに注目することである。
【００５８】
３Ｄツリーでは、境界ボックスは、単一の面によって分割される。本発明の本態様によると、２つの並列面が、２つの軸平行境界ボックスを定義するのに使われる。図８は、主要データ構造４００を示す図である。
【００５９】
図８は、軸平行境界ボックス４０２を、正面図で示す。互いに軸平行であり並列であるＬ面４０４及びＲ面４０６が、境界ボックス４０２を左及び右軸平行境界ボックスに分割するのに使われる。左境界ボックスは、元の境界ボックス４０２の左側面４０８からＬ面４０４へ伸びる。右境界ボックスは、Ｒ面４０６から元の境界ボックス４０２の右側面４１０へ伸びる。したがって、左及び右境界ボックスは互いに重なり得る。光線４１２の横断は、光線４１２の有効間隔［Ｎ，Ｆ］４１４に相対した、Ｌ及びＲ面４０４、４０６との交差の位置で判定される。
【００６０】
図８において、データ構造４００、Ｌ及びＲ面４０４、４０６は、境界ボックス４０２内に含まれる空間ではなく、元の境界ボックス４０２内に含まれるオブジェクトの組を分割するように、互いを参照して位置決めされる。３Ｄツリー区画とは対称的に、２つの面をもつと、２つの面の間の空き空間を最大限にする可能性がもたらされる。したがって、場面の境界は、はるかに速く近似することができる。
【００６１】
図９〜１１は、データ構造４００をさらに示す一連の３次元図である。図９は、境界ボックス４０２の図を示す。説明のために、境界ボックス４０２内の仮想オブジェクトが、抽象的な円４１６として示される。図１０、１１に示すように、Ｌ面４０４及びＲ面４０６は次いで、境界ボックス４０２を左境界ボックス４０２ａ及び右境界ボックス４０２ｂに分割する必要がある。Ｌ及びＲ面は、その間の空き空間が最大限にされるように選択される。各仮想オブジェクト４１６は結局、左境界ボックス４０２ａ又は右境界ボックス４０２ｂどちらかに入る。図１１の一番下に示すように、仮想オブジェクト４１６は、「左」オブジェクト４１６ａ及び「右」オブジェクト４１６ｂに分割される。結果として生じた境界ボックス４０２ａ及び４０２ｂはそれぞれ、それ自体が、終了基準が満足されるまで、分割されるなどの処理を受ける。
【００６２】
図１２は、記載する方法５００のフローチャートである。ステップ５０１で、場面の境界ボックスが計算される。ステップ５０２で、並列Ｌ及びＲ面が、軸平行境界ボックスを、重なり得る左及び右軸平行境界ボックスに分割するのに使われる。ステップ５０３で、左及び右境界ボックスは、元の軸平行境界ボックスとともに含まれる仮想オブジェクトの組を１組の左オブジェクト及び１組の右オブジェクトに分割するのに使われる。ステップ５０４で、左及び右オブジェクトは、終了基準が満たされるまで再帰的に処理される。
【００６３】
初期の実装において使われた１つの分裂パラメータの代わりに、２つの分裂パラメータがノード内に格納される。ノードの数は、光線追跡されるべきオブジェクトの数によって線形的に境界を定められるので、すべてのノードからなるアレイは、一度割り振ればよい。したがって、コストのかかる、構築中の３Ｄツリーのメモリ管理は不必要になる。
【００６４】
この構築技法は、３Ｄツリー構築の類似技法よりはるかに単純であり、再帰的なやり方で、又は反復バージョン及びスタックを使うことによって、簡単に実装される。オブジェクトのリスト及び軸平行境界ボックスを与えられると、Ｌ及びＲ面が判定され、それに従ってオブジェクトの組が判定される。左及び右オブジェクトは次いで、何らかの終了基準が満たされるまで再帰的に処理される。内部ノードの数は境界を定められるので、ただ１つのオブジェクトが残っているときの終了に依拠することが安全である。
【００６５】
分割は、ｘ、ｙ、及びｚ軸に垂直な面に沿ったオブジェクトのソートにのみ依拠し、これは非常に効率的であり、数値的に絶対的に安定していることに留意されたい。３Ｄツリーとは対称的に、よりコストがかかるとともに数値的に堅牢なやり方では達成しにくい、分裂面とのオブジェクトの正確な交差は計算される必要がない。見落とされた三角形など、頂点での、且つ辺に沿った３Ｄツリーの数値問題は、境界ボリューム階層の構築の前に三角形を拡大することによって回避することができる。また、３Ｄツリーでは、重なり合うオブジェクトは両方とも、左及び右軸平行境界ボックスにソートされなければならず、そうすることによって、予想されたツリーの二次成長を引き起こす。
【００６６】
２．４．１．１．分裂面の発見
Ｌ及びＲ面、したがって実際のツリーレイアウトを判定するのに、様々な技法を用いることができる。図９〜１１を参照すると、ある技法では、上述した３Ｄツリー構築技法を用いて面Ｍ４１８を判定し、新しい軸平行境界ボックスの、結果として生じたＬ面及びＲ面の重複が、提案された分裂面Ｍ４１８と最小限に重なるようにオブジェクトを分割する。結果として生じたツリーは、対応する３Ｄツリーと非常に類似しているが、空間よりもむしろオブジェクトセットが分割されるので、結果として生じたツリーは、はるかに平らである。別の手法では、可能であれば子ボックスの重複が最小限になるとともに空き空間が最大限になるように、Ｒ面及びＬ面を選択する。
【００６７】
２．４．１．２．非効率軸平行境界ボックス
一部のオブジェクトにとって、軸平行境界ボックスは非効率的であることに留意されたい。このような状況の例は、軸平行境界ボックスの対角線上に小半径をもつ長い円柱である。
【００６８】
図１３は、本発明の本態様による方法６００のフローチャートである。ステップ６０１で、場面の境界ボックスが計算される。ステップ６０２で、分裂面Ｍを判定するために、３Ｄツリー構築が実行される。ステップ６０３で、並列Ｌ及びＲ面が、軸平行境界ボックスを、分裂面Ｍと最小限に重なる左及び右軸平行境界ボックスに分割するのに使われる。ステップ６０４で、左及び右境界ボックスは、元の軸平行境界ボックス内に含まれる仮想オブジェクトの組を、１組の左オブジェクトと１組の右オブジェクトに分割するのに使われる。ステップ６０５で、左及び右オブジェクトは、終了基準が満たされるまで再帰的に処理される。図１３に示される方法６００、並びに図３に示される方法２００は、３Ｄツリー構築、リアルタイム処理、バケットソート、自己交差などに関する技法を含む、本明細書において説明する他の技法と組み合わせてよいことに留意されたい。
【００６９】
３Ｄツリーのケースにおいて、オブジェクトの周りの空間の空き部分を取り除くように、空間細分が継続される。記載する境界ボリューム階層のケースでは、このようなオブジェクトをより小さいものに分割すると、結果として、同様の挙動を生じる。メモリ要件の予測可能性を維持するために、最大境界ボックスサイズが定義される。最大境界ボックスサイズを超える限度をもつすべてのオブジェクトは、要件を満たすようにより小さい部分に分裂される。最大許容サイズは、すべてのオブジェクトの中での極小限度を求めてデータセットを走査することによって見つけることができる。
【００７０】
２．４．２．横断
本明細書において説明するデータ構造は、高速３Ｄツリー横断の原理を、境界ボリューム階層に転嫁させる。横断のケースは類似しており、（１）左の子のみ、（２）右の子のみ、（３）左の子、次いで右の子、（４）右の子、次いで左の子、又は（５）光線は被分裂面の間（すなわち、空き空間）にある。記載する技法における１つのノードは２つの並列面によって分裂されるので、どのようにボックスを横断するかという順序は、光線方向によって判定される。図１４Ａ〜Ｃは、上述した技法を組み込むソースコードリスティング６１０を示す。
【００７１】
従来の境界ボリューム階層技法は、どのように子ノードを横断するかという順序も、ヒープデータ構造のアップデートなど、要求される追加作業も効率的に判定することができなかった。さらに、境界ボリューム全体がロードされ、光線に対して検査されなければならなかったが、本手法は、２つの面距離を要求するのみである。ただし、ソフトウェアでの２つの面と突き合わせた光線の調査は、よりコストがかかると思われる。横断は３Ｄツリーにおけるボトルネックであり、より多くの何らかの計算をここで行うと、メモリアクセスの待ち時間をより一層隠す。さらに、境界ボリューム階層ツリーは、同じ性能の対応する３Ｄツリーよりはるかに小さくなる傾向がある。
【００７２】
本明細書では、新しい境界ボリューム階層を説明するが、３Ｄツリーの横断とは強いつながりがある。すなわち、Ｌ＝Ｒとセットすると、古典的なバイナリ空間分割が得られ、横断アルゴリズムは、３Ｄツリー向けの横断アルゴリズムとなる。
【００７３】
２．４．３．オンザフライ境界ボリューム構築
記載する境界ボリューム階層は、自由曲面を細分することによって、自由曲面交差を効率的に見つけるのにも適用することができる。そうすることにより、凸包プロパティ及び細分アルゴリズムをもつ自由曲面の交差が、実際の浮動小数点算術に応じて、浮動小数点精度まで効率的に計算されるようになる。たとえば、多項式曲面、有理曲面、及び近似細分曲面に対して、細分ステップが実施される。空間中の各軸ごとに、重なる可能性がある境界ボックスが、新しいメッシュの新しい境界ボックスに対するバイナリ細分、Ｌボックスの交差、及びＲボックスの交差のケースにおいて、上述したように判定される。ここで、ボックスの空間順序は既知なので、上述の横断は、効率的に実施することができる。境界ボリュームの階層は、予め計算するのではなく、オンザフライで計算してよい。この手順は、自由曲面に対して効率的であり、加速データ構造用にメモリを節約できるようにし、この構造は、バックトラックによって横断されなければならない境界ボリュームの小スタックで置き換えられる。細分は、光線曲面交差が、浮動小数点精度での点又は小さいサイズの間隔となる境界ボリューム内にあるようになるまで継続される。付表のセクション２．１．１で、本発明の本態様によるコードリスティングを説明する。
【００７４】
２．５．基数ソート処理
規則的なグリッドを光線追跡において加速データ構造として使うことは単純だが、空間適合性がないこと、及び後に続く多くの空きグリッドセルの横断により、効率が落ちる。階層状の規則的グリッドは、こうした状況を改善し得るが、やはり、境界ボリューム階層及び３Ｄツリーに比較して劣っている。階層状の規則的グリッドは、加速データ構造の構築速度を向上するのに使うことができる。加速データ構造を構築する技法は、クイックソートと同様であり、Ｏ（ｎ  ｌｏｇ  ｎ）で稼動すると予想される。線形時間で稼動するバケットソートを適用することによって、改良を得ることができる。したがって、オブジェクトの軸平行境界ボックスは、ｎｘ×ｎｙ×ｎｓ個の軸平行ボックスに分割される。各オブジェクトは次いで、選択された一点によって、こうしたボックスのうちただ１つにソートされ、たとえば、各三角形の重心や第１の頂点を使ってよい。次いで、各グリッドセル中のオブジェクトの実際の軸平行境界ボックスが判定される。こうした軸平行境界ボックスが、ボックスが区画面の１つと交差しない限り、ボックスが含むオブジェクトの代わりに使われる。そのケースでは、ボックスはアンパックされ、代わりに、ボックス内のオブジェクトが直接使われることになる。この手順は、たくさんの比較及びメモリアクセスを節約し、一定した順序の構築技法を著しく向上し、再帰的に適用することもできる。上記技法は、オブジェクトのストリームを処理することによって実現することができるので、特にハードウェア実装向けである。
【００７５】
２．５．１．オンデマンドでの構築
加速データ構造は、オンデマンドで、すなわち、オブジェクトを有する具体的な軸平行境界ボックスを光線が横断しているときに構築することができる。次いで、一方では加速データ構造は、光線には見えない空間の領域内で決して洗練されることはなく、キャッシュは、決して触れられることのないデータによって汚染されない。他方では、洗練の後、光線が交差する可能性があるオブジェクトは、既にキャッシュの中にある。
【００７６】
３．リアルタイムの高精度光線追跡技法の要約
上記考察から、本発明は長く公知であった、光線追跡における問題点に対処し、精度、全体的速度及び加速データ構造のメモリフットプリントが向上した光線追跡のための技法を提供することが分かるであろう。数値精度における向上は、たとえば、ＡＲＴ光線追跡チップのハードウェアにおいて用いられる対数記数法と同様に、他の記数法にも伝わる。プロセッサ又は専用ハードウェア上でのＩＥＥＥ浮動小数点標準の具体的な実装は、性能に深刻に影響し得ることに留意されたい。たとえば、Ｐｅｎｔｉｕｍ４チップ上では、非正規化数は、性能を１００倍以上低下させ得る。上述したように、本発明の実装形態は、こうした例外を回避する。本明細書において説明する境界ボリューム階層のビューにより、階層はリアルタイムの光線追跡に適したものとなる。ならし解析において、記載する技法は、従来の現況技術より性能が優れており、したがって、たとえば、製造時設定などでのように、十分にアニメーション化された場面におけるモーションブラーを計算する、より正確な技法を用いることができるようになる。上記考察から、３Ｄツリー及び他の技法と比較したとき、特にハードウェア実装形態において、且つ巨大な場面にとって、記載する境界ボリューム階層には大きな利点があることが明らかであろう。ならし解析では、記載する境界ボリューム階層は、現在の３Ｄツリーより性能が少なくとも２倍は優れている。さらに、メモリフットプリントは、予め判定することができ、オブジェクトの数が線形である。
【００７７】
４．追加技法
上述の技法に加えて、本発明のそれ以外の態様による他の技法が、光線追跡システムの性能を向上させるのに用いることができる。本発明のこうした態様は、以下を含む。
４Ａ．半空間の切取りによる境界ボリューム階層の構築
４Ｂ．４つの軸平行面による軸平行境界ボックスのクリップ
４Ｃ．加速データ構造の高性能セットアップ
４Ｄ．効率的なツリー空きノード判定
４Ｅ．束横断
【００７８】
本発明の態様をそれぞれ、以降でさらに詳しく説明する。
【００７９】
４Ａ．半空間の切取りによる境界ボリューム階層の構築
半空間を切り取ることによって、境界ボリューム階層を構築することが可能である。軸平行境界ボックスと交差する半空間を用いると、元の境界ボックス及び所与の半空間との交差から生じる新しい境界ボックスによって、境界ボリューム階層が与えられる。
【００８０】
図１５は、記載する技法を例示する図を示す。図１５において、軸平行面６２２が交差する境界ボックス６２０。面６２２は、元のボックス６２０のサブセットである、より小さい軸平行ボックス６２４、すなわち半空間を定義する。クリップされることになる、元のボックスの一部は、クリッピング面６２２の法線によって判定される。光線横断中、３つのケースが判定されなければならない。光線上の有効な間隔［Ｎ，Ｆ］は、（１）元のボックス６２０のみ、（２）最初に元のボックス６２０、次いでクリップされたボックス６２４、又は（３）最初にクリップされたボックス６２４、次いで元のボックス６２０と交差する。
【００８１】
記載する技法は、場面の軸平行境界ボックス及び半空間から構築された境界ボリューム階層を表すために、再帰的に適用することができる。２分木が、階層を表すのに使われる。ツリーの内部ノードは、半空間を表す。
【００８２】
記載する技法は、上述した技法としての利点の多くをもたらす。さらに、ノードのメモリフットプリントは、より小さい。図１６は、記載する技法を実施する例示的なコードリスティング６３０を示す。リーフは、投射軸の第４のケースを用いてエンコードすることもでき、すなわち、コード例では使われていないが、ビット０、１は「１」であることに留意されたい。
【００８３】
境界ボリューム階層との光線の交差は深さ優先で行われ、各ノードでは、上述した３つのケースのみを見分ければよい。光線の有効間隔は、（１）元の境界ボックスのみ、（２）最初にクリップされたボックス、次いで元のボックス、又は（３）最初に元のボックス、次いでクリップされたボックスと交差する。
【００８４】
図１７Ａ〜Ｄは、境界ボリューム階層を通る、１本の光線の追跡を実装するコードリスティング６４０の例を示す。効率性のために、この実装では、空きリーフノードを訪れることを回避する。空きリーフノードを訪れると、効率を犠牲にするが実装は単純になる。
【００８５】
用いられる三角形検査は、高度に最適化される。ただし、他のどの三角形光線交差検査も用いてよい。
【００８６】
４Ｂ．４つの軸平行面による軸平行境界ボックスのクリップ
図１８は、本発明のそれ以外の態様による技法を例示する図を示す。図１８において、軸平行境界ボックス６５０が、４つの軸平行面ＬｅｆｔＢｏｘＬ、ＲｉｇｈｔＢｏｘＬ、ＬｅｆｔＢｏｘＲ及びＲｉｇｈｔＢｏｘＲによってクリップされており、結果として、左の子ボックス及び右の子ボックスを生じる。左の子ボックスの左及び右境界は、面ＬｅｆｔＢｏｘＬ及びＬｅｆｔＢｏｘＲで定義される。右の子ボックスの左及び右境界は、面ＲｉｇｈｔＢｏｘＬ及びＲｉｇｈｔＢｏｘＲで定義される。光線横断中、５つのケースが判定されなければならない。光線上の有効な間隔［Ｎ，Ｆ］は、（１）左の子ボックスのみ、（２）右の子ボックスのみ、（３）最初に左の子ボックス、及び右の子ボックス、（４）最初に右の子ボックス、次いで左の子ボックスと交差し、又は（５）左の子ボックスとも右の子ボックスとも交差しない。
【００８７】
階層は２分木として表され、２分木では、選択された軸に沿った２つの間隔を各ノードが指定する。古典的な境界ボリューム階層実装とは反対に、子ノードの順序づけが可能であり、十分な軸平行境界ボックスを格納する必要はない。先行セクションで説明した技法と比較して、単一のノードが、より多くのメモリを必要とする。ただし、特殊なケースの空きノードが起こることはない。全体として、メモリはほぼ同じままである。
【００８８】
図１９は、記載する技法を実施する例示的なコードリスティング６６０を示す。リーフは、投射軸の第４のケースを用いてもエンコードでき、すなわち、コード例では使われていないが、ビット０、１が「１」であることに留意されたい。
【００８９】
図２０Ａ〜Ｃは、上記データ構造を使って構築されたツリーを用いた横断の実装の例示的なコードリスティング６７０を示す。図示する実装は、特定の最適化を含んでいない。たとえば、ノードによって定義される間隔の１つが、指定された軸に沿った他の間隔を完全に含み得るとき、より効率的な横断では、光線方向が横断するべき第１のノードを選択するだけでなく、間隔自体の相対的な位置によってもそのケースを検討する。この最適化は比較的明快なので、本例には含めていない。
【００９０】
４Ｃ．加速データ構造の高性能セットアップ
ツリー加速データ構造のセットアップ手順は暗黙的に、三角形の数ｎにおいて計算時間がＯ（ｎ  ｌｏｇ  ｎ）だけかかるソートアルゴリズムを呼び出す。基数、バケット、及び関連したソートアルゴリズムのみが、より低次の計算時間量を得る。
【００９１】
下のセクションＩＩでは、迅速なツリーセットアップ手順が開発される瞬時光線追跡技法を説明する。こうしたセットアップ手順は実際には、上述したデータ構造をすべてセットアップするために使われていた。後で説明するように、階層状にも用いることができる、すなわち、規則的なグリッドの階層を用いるバケットソート前処理を説明する。後でさらに説明するように、ローカルなものではなく、グローバル細分基準が用いられる。
【００９２】
このセットアップルーチンは、ｋｄツリー及び境界ボリューム階層にとって迅速である。記載する技法は、上のサブセクション４Ｂ．にある階層のセットアップには特に効率的である。記載する技法では、左オブジェクトから右を分離するだけでなく、実際には右及び左オブジェクトに渡る間隔の境界を定めるので、たくさんの候補分裂面がただちに拒否される。したがって、階層はより平らになり、その上横断するのにより効率的である。こうした最適化は比較的明快なので、ここでのコードリスティング例には含めていない。
【００９３】
セクション４Ｂでのような、軸に沿った間隔の特定は、こうした間隔の外側にある光線の効率的な拒否を認め、さらに、他の軸の上の空きボリュームの効率的な切取りも認める。これは、階層のリーフノード中のクリップボリュームを特定することによって行うことができる。単純なヒューリスティックでは、リーフノードの空きボリュームが一定の閾値を上回る場合、リーフ中に境界ボックス検査を挿入する。或いは、セクション４Ｂで説明した技法のケースでは、最大限に見落とされる２つの軸の検査を挿入してよい。
【００９４】
後でさらに説明するように、加速データ構造はオンデマンドで構築することができ、光線が横断するツリーの一部のみが構築されることを意味する。要求されるデータは、予備リーフノードに簡単に格納される。セクション４Ｂで説明した技法を検討すると、重複を最小限にする代わりに、空き空間を最大限にすることも可能である。
【００９５】
４Ｄ．効率的なツリーエントリノード判定
所与の１組の光線に対して、軸平行境界ボックスは、比較的多くのプロパティが分かっている場合、光線の数において線形時間で判定することも、一定の時間でも判定することもできる。この境界ボックスの場合、分裂面の片側にあるのか、それとも分裂面と交差するのか判定することが、比較的明快であり数値的に堅牢である。この技法は、上述したように加速データ構造を下向きに横断するための再帰的手順で用いることができる。ボックスが、ツリーの内部ノードによって識別される分裂面の片側にある場合、この分岐は、さらに横断するために使われる。リーフノード又は光線境界ボックスと交差する面に遭遇すると、このノードは、光線の束に対する共通エントリノードとして識別される。次いで、加速データ構造のルートノードから光線を横断するのではなく、横断は、エントリノードから始めればよい。
【００９６】
この技法の利点は、すべての光線を分裂面と交差させるのではなく、ただ１つの境界ボックスが、分裂面に対して検査され、したがって、たくさんの算術計算を省く。
【００９７】
記載する技法は、一貫した方向ではなく、ごくわずかの空間をとる光線束に依拠するが、これは、特に二次光線の場合ははるかに達成しにくい。他の技法より、実装するのは単純であり、より一般的である。
【００９８】
４Ｅ．束横断
本発明のそれ以外の態様によると、異なる加速構造を通る光線の束を同時に追跡するのに、命令が使われる光線束交差ルーチンが実装されている。この実装は、３ｄツリー中の横断される光線束に由来する。導入される最適化は、記載する境界ボリューム階層表現とともに用いてもよいことに留意されたい。
【００９９】
ＩＩ．瞬時光線追跡
ここで、加速データ構造を瞬時に構築させる光線追跡技法及びシステムを説明する。記載する技法及びシステムは、ローカル基準に基づく従来の技法を大幅に改良するグローバルヒューリスティックに基づく。速度以外に、記載する技法及びシステムには、従来の技法に比較して、いくつかの利点がある。記載する技法及びシステムは、実装するのがより単純であり、より高い数値精度を呈し、従来の技法によって使われるメモリのごくわずかを使う。記載する技法及びシステムは、大規模且つ動的な場面への広範囲な適用によって証明されている。
【０１００】
本説明は、以下のセクションに編成される。
【０１０１】
１．概論
上述したように、光線追跡は、グローバルな照度シミュレーションによる、写真のようにリアルな画像合成におけるコア技法である。この技法は、他の多くのシミュレーション方法の基礎でもある。最近は、リアルタイムの光線追跡が利用可能になっている。現在の光線追跡アルゴリズムは、場面形状の分析に基づいて前もって構築される追加データ構造に効率性を負っている。追加データ構造の構築は通常、かなりの量の処理時間及びメモリを要求する。したがって、前処理は通常、静的であり又は適度なダイナミクスを含む環境に対してのみ償却している。
【０１０２】
ソフトウェア光線追跡は、大規模形状の場合、ハイエンドのグラフィックス画像合成ハードウェアと競合し得る。さらに、光線追跡の加速データ構造は、ラスター化の性能を高めるのに用いることができる。ただし、ラスタライザで描画する即時モードに比較して、加速データ構造の構築時間及びメモリフットプリントは法外であった。
【０１０３】
ここでは、従来の技法を用いて構築されたデータ構造よりはるかに効率的に構築することができる、光線追跡のための階層状加速データ構造を説明する。この手順は、動的場面の対話型光線追跡をモノプロセッサシステム上でさえも利用可能にさせるのに、十分に迅速であることが証明されている。
【０１０４】
図２１Ａ〜Ｄは、本明細書において説明する光線追跡技法を用いて、単一のプロセッサ上において対話速度で生成されたアニメーション及び対話型アプリケーションからの一連の画像７０１〜７０４を示す。図２１Ｄは、Ｑｕａｋｅ  ＩＩ（Ｉｄソフトウェア、ｗｗｗ．ｉｄｓｏｆｔｗａｒｅ．ｃｏｍ）からの場面を示す。本明細書において説明する技法を適用すると、Ｑｕａｋｅ  ＩＩは、１つの影、反射、及び透明度をもって、デュアルコアプロセッサ上で滑らかに再生できることが分かっている。
【０１０５】
２．加速光線追跡の原理
概して、「場面」とは、３次元空間内でのオブジェクトの配置である。光線追跡における基本的タスクは、場面中でのオブジェクトとの各光線の交差の最接近点をサーチすることである。概して、画像合成のために極めて多数の光線を追跡するとき、場面中のオブジェクトすべてとの各光線の交差を検査することは、効率的でない。したがって、この検査は通常、場面をいくつかの区画に分裂する追加データ構造を構築することに償却する。場面が分割されると、実際の交差検査からの場面中のオブジェクトのほとんどを排除する、しばしばバックトラックサーチである区画レベルのサーチを指揮することができる。
【０１０６】
場面を分割するための２つの基本的手法が、現在使われている。第１の手法は、空間分割に基づき、それによると場面は、同じ場面であってもなくてもよい、１組の互いに素のボリューム要素に分割される。第２の手法は、オブジェクト列挙に基づき、それによると場面は、場面中に含まれるオブジェクトのリストからなる階層に分割される。こうした２つの手法を、以下のサブセクションで手短に述べる。後でさらに論じるように、加速データ構造の構築コストの償却は別にして、単光線の追跡だけでなく光線の集団の追加コストも償却し得る状況がある。
【０１０７】
２．１．空間の分割に基づく加速光線追跡
オブジェクトを含む空間は、互いに素のボリューム要素に分割される。光線が交差するボリューム要素を数え上げ、次いで交差に対する数え上げられたボリューム要素中のオブジェクトを検査することによって、効率が達成される。空間分割の主たる不利な点は、オブジェクトがしばしば、複数のボリューム要素との空でない交差を有し、したがって、一度よりも多く参照されることである。この冗長性は結果として、巨大なメモリフットプリントを生じ、同じ幾何オブジェクトとの単光線の多重検査された交差から起こる性能損失を回避するためのメールボックス機構を要求し得る。
【０１０８】
空間を分割する際、結果として生じたボリューム要素は、規則的なグリッドを形成し得る。或いは、たとえば、バイナリ空間分割方式を用いて、空間を、ボクセル（ボリュームセル）及び下位ボクセルの階層状ツリーに分裂することができる。各手法について順に論じる。
【０１０９】
２．１．１．規則的なグリッドを使った空間分割
規則的なグリッドに基づく分割では、空間は、同一の矩形軸平行ボリュームのラスターに分割される。この規則的な構造により、所与の光線に沿ったボリューム要素を数え上げる単純な技法が可能になる。各ボリューム要素は、それが交差するオブジェクトのリストを含む。したがって、数え上げられたボリューム要素中の、列挙されたオブジェクトのみが、光線との交差に関して検査される。
【０１１０】
加速データ構造のメモリフットプリントは、先験的に（すなわち、前もって）判定することができない。オブジェクトは、グリッド中の多数のボリューム要素と交差してよいので、空間が分割されオブジェクトが列挙されるまで、メモリフットプリントを判定してはならない。したがって、動的メモリ管理が要求される。データ構造は、オブジェクトをラスター化することによって構築される。ラスター化は通常、浮動小数点算術の有限精度により数値的に信頼できない、オブジェクト−ボリューム交差ルーチンの変形を用いて実施される。オブジェクトの境界ボックスのラスター化は数値的に安定しているが、メモリフットプリントを増大させる。
【０１１１】
規則的なグリッド手法の効率は、特に大規模場面中で空きボリューム要素を横断するとき、深刻な影響を被る。この問題に対する一解決策は、空き空間をより速く横断させながら、依然として一ボリューム要素につき適度なオブジェクト数をもつ階層状グリッドを使うことである。ただし、階層のレベルの切換えは、計算コストが高く、他の空間的適合方式でより効率的に達成することができる。
【０１１２】
２．１．２．バイナリ空間区画
バイナリ空間区画は、階層状のデータ構造である。一般的な考え方は、任意の分裂面を用いて場面空間を細分することである。任意の第１の面が、場面空間を２つのセルに分けるのに使われる。任意の追加面が、２つのセルをそれぞれ、サブセルに適合的に分けるのに使われる。このプロセスは、バイナリサーチツリーを生成するために再帰的に繰り返される。生成されたサーチツリーの各リーフセルは、リーフセルと交差するオブジェクトのリストを含むボリューム要素である。
【０１１３】
バイナリ空間分割方式は、空きボリューム要素によって引き起こされる規則的なグリッドの効率の問題点を克服するのを助ける。ポリゴン場面では、分裂面の場所の明らかな選択は、ポリゴン自体によって判定される面を使う。ただし、現時点では、これを最適に行うやり方が公知ではなく、ランダムアルゴリズムが、場面中のオブジェクトの数に基づく二次サイズのツリーをもたらすと予想される。
【０１１４】
「ｋ次元ツリー」、又は「ｋｄツリー」として知られるタイプのツリーは、バイナリ空間分割を、正準軸に垂直な面のみを使うように制限する。細分面のすべての法線は、正準軸のうち１つの軸の単位ベクトルと一致するので、スカラー積及びオブジェクト−ボリューム要素交差検査は、軸平行でないバイナリ空間分割方式を用いて得ることができるより効率的且つ数値的に堅牢になる。細分のためのヒューリスティックとともに、光線追跡を加速するｋｄツリーが使われて成功を収めてきた。ただし、ボリューム要素がオブジェクトとどのように交差するかという判定は、数値問題点を残している。
【０１１５】
すべての空間分割方式でのように、ｋｄツリーベースの方式では、オブジェクトは複数のボリューム要素中に存在してよい。多重参照の数は、オブジェクトの頂点を通る、又は軸平行境界ボックスの辺を通る面の分割のみを認めることによって効果的に削減することができるが、参照の数については、先験的に効率よく境界を定めることができない。したがって、メモリ管理が、階層の構築中の問題点となる。メモリの推定及び割振りのために用いられる公知のヒューリスティックは、一部の場面に関してあまりにも悲観的である場合もあり、さらに悪いことには、メモリフットプリントが構築フェーズ中に増大した場合、結果として、様々な再割振りを生じる場合もある。こうした再割振りは、結果として、大きな性能損失を生じ得る。
【０１１６】
２．２．オブジェクトリストの分割に基づく加速光線追跡
オブジェクトのリストを分割するとき、各オブジェクトは、多くとも一度参照されたままであり、したがって、メモリ要件を先験的に予測することが可能である。さらに、各オブジェクトは、与えられた光線と、多くて一度交差する。したがって、メールボックスは冗長になる。ただし、回避不可能な帰結として、オブジェクトのグループを内包するボリュームはしばしば、互いに素になることはできない。
【０１１７】
２．２．１．境界ボリューム階層
境界ボリューム階層とは、場面中のオブジェクトが軸平行ボリューム要素によって境界を定められるタイプの分割方式である。メモリ要件については、オブジェクトの数に基づいて線形的に、先験的に境界を定めることができるので、境界ボリューム階層は、業界で共通して使われる。境界ボリューム階層の実装は、オブジェクト−面交差ルーチンを要求しない。その結果、階層は、空間分割方式よりも実装するのが容易である。軸平行矩形境界ボリューム要素を使うと、最小限／最大限の操作のみが使われる際の構築中のどの数値安定性問題点も回避される。
【０１１８】
境界ボリューム階層のボトムアップ及びトップダウン構築両方に対するヒューリスティックが存在する。通常のヒューリスティックでは、全体的ボリューム又はすべての境界ボリューム要素の面積を最小にする。こうした線に沿った正確な最適化手順はひどく遅い。現時点では、どの構築技法が最も効率的であるかは明らかでない。
【０１１９】
厳しい性能ペナルティは、空間区画とは対称的に、境界ボリューム要素は空間的に順序づけられないことに起因する。したがって、一般にはすべての子ノードには光線が交差しなければならず、早い段階での剪定は不可能である。
【０１２０】
２．３．加速光線追跡のための現在の手法の要約
容易性、数値堅牢性、及び予測可能なメモリフットプリントにより、境界ボリューム階層は、加速光線追跡にとって魅力的な選択となる。ただし、現在の性能は、ｋｄツリーを用いて得られるものとはほど遠い。加速データ構造の構築中に起こる、概して予測不可能なメモリ要件及び数値問題点を犠牲にして、ｋｄツリーは、静的及び適度に動的な場面に対するリアルタイムの性能を得るのに用いることができる。
【０１２１】
両方の主要手法、すなわち、空間分割又はオブジェクトリストどちらかに基づく手法は、リアルタイムとはほど遠く、貪欲アルゴリズムを用いる構築ルーチンの影響を被る。最も成功した実装、すなわち表面積ヒューリスティックでさえも、極めて時間がかかる。このヒューリスティックは、場面形状及び回転の大量の分析を要求するので、複合メッシュのための加速データ構造の構築は、おそらく数分から数日に及び得る。
【０１２２】
現在の技法を用いると、データ構造構築時間を、静的場面、非常に適度なダイナミクス、又は変形に対して償却する点まで削減することが可能である。ただし、構築時間は、十分に動的な設定では、償却するのがはるかに難しい。十分に動的な場面を扱うための現在の試みは、すべての欠点を合わせて規則的なグリッドに基づく手法を使い、適度な複雑さの場面に対してのみ効率的である。
【０１２３】
３．境界間隔階層
本発明の態様は、「境界間隔階層」に基づく技法を提供し、この技法は、静的及び動的場面両方に対して大幅な速度増加をもたらし、はるかに高い数値精度を特徴とし、メモリフットプリントを先験的に固定させる。記載する技法は、したがって、空間分割及びオブジェクトリストの分割の利点を組み合わせる。十分に最適化された最新の２つのｋｄツリーベースのレイトレーサとの比較は、記載する技法が、ほとんど場面に対して、合計描画時間及び全体的メモリ消費両方において、ｋｄツリーベースの技法より２倍以上性能が優れ得ることを示す。記載する技法を用いて得られる結果の一部が、後で論じる図３７に示すテーブルに記載されている。
【０１２４】
３．１．データ構造
データ構造中の各ノードごとに、境界間隔階層は、ｘ、ｙ、又はｚ軸の１つに対して、その軸に垂直な２つの並列面を格納する。対照的に、古典的な境界ボリューム階層では、十分な軸平行境界ボックスが各子ごとに格納される。
【０１２５】
記載する本技法によると、境界ボックス及び選択された軸を与えられると、選択された軸に沿った最大値をＬ分裂面で置き換えることによって、左の子Ｌが生成される。右の子Ｒは、選択された軸に沿った最小値をＲ分裂面で置き換えることによって生成される。
【０１２６】
したがって、生成されたＬ子の左側は、親境界ボックスの左側から継承されることになり、Ｌ子の右側は、Ｌ分裂面となる。Ｒ子の左側はＲ分裂面となり、Ｒ子の右側は、親境界ボックスの右側から継承されることになる。後でより詳細に説明するように、Ｌ子及びＲ子は、重なっても重ならなくてもよい。分裂面の配置が結果として、ゼロボリュームをもつ子を生じる場合、ゼロボリュームは、空の子を表すのに使われる。後で論じるように、記載する技法は、空きリーフノードの格納を省略する。
【０１２７】
図２２Ａ〜Ｅ、２３Ａ〜Ｄは、バイナリ空間分割技法と境界間隔階層との間の違いを示す一連の図である。図２２Ａは、この場合三角形である６つの幾何基本要素オブジェクト７２１〜７２６を含む境界ボックス７２０を示す。光線７３０が、境界ボックス７２０を横断する。
【０１２８】
図２２Ｂは、バイナリ空間分割技法の使用を示す。中心分裂面７４０が、境界ボックス７２０をＬ子とＲ子に細分するのに使われる。図２２Ｂに示すように、オブジェクト７２１、７２２は全体がＬ子に含まれ、オブジェクト７２５、７２６は全体がＲ子に含まれる。ただし、２つの中央オブジェクト７２３、７２４は分裂面と交差し、したがってＬ子及びＲ子両方と交差することが分かるであろう。中央オブジェクト７２３、７２４はしたがって、Ｌ及びＲ子ボリューム要素両方において参照される。
【０１２９】
図２２Ｃは、本発明による境界間隔階層技法を用いて細分されている図２２Ａの境界ボックスを示す。境界ボックス７２０中の基本要素オブジェクト７２１〜７２６はそれぞれ、候補分裂面に相対した位置に基づいて、左オブジェクト又は右オブジェクトとして分類される。後で論じる本発明のそれ以外の態様によると、候補分裂面の場所は有利には、ローカルにではなくグローバルな場面レベルで判定することができる。オブジェクトに候補分裂面が交差するとき、オブジェクトは、面のどちら側とオブジェクトが最も交差するかに応じて、左又は右として分類される。
【０１３０】
オブジェクトがすべてＬオブジェクト又は右オブジェクトとして分類されると、軸平行Ｌ分裂面が、選択された軸に従って、Ｌオブジェクトの最大、すなわち右端の点に配置される。同様に、軸平行Ｒ分裂面が、選択された軸に従って、Ｒオブジェクトの最小、すなわち左端の点に配置される。図２２Ｄにおいて、Ｌ分裂面は、角括弧７５０で表され、Ｒ分裂面は、角括弧７５２で表される。Ｌ及びＲ分裂面は、境界ボックス７２０を、本例において重なるＬ子とＲ子に分裂する。
【０１３１】
上述したように、Ｌ子の左側は、親境界ボックス７２０の左側から継承され、Ｌ子の右側はＬ分裂面７５０である。同様に、Ｒ子の左側はＲ分裂面７５２であり、Ｒ子の右側は親境界ボックス７２０から継承される。分かりやすくするために、結果として生じるＬ子及びＲ子は、図２２Ｄ、２２Ｅにおいて別々に描いてある。
【０１３２】
図２３Ａ〜Ｄは、バイナリ空間分割方式と境界間隔階層との間の違いを示す第２のケースを例示する。図２３Ａは、いくつかのオブジェクト７６１〜７６６を含んで示される境界ボックス７６０の図を示す。光線７７０が、境界ボックス５００と横断する。
【０１３３】
図２３Ｂは、バイナリ空間分割方式の適用を示す。境界ボックスは、中心分裂面７８０によって、隣接するＬ及びＲ子ボリューム要素に分けられる。この例では、含まれるオブジェクト７６１〜７６６のどれも、分裂面７８０と交差しない。ただし、光線７７０は、Ｌ及びＲセル両方の中の大量の空き空間を横断することが分かるであろう。
【０１３４】
図２３Ｃでは、境界間隔階層手法が適用される。オブジェクトは、候補分裂面に相対した位置に基づいて、Ｌ又はＲオブジェクトとして分類される。ここで、中央に配置された候補分裂面を仮定すると、オブジェクト７６１〜７６３は明らかに中心の左にあり、オブジェクト７６４〜７６６は明らかに中心の右にあるので、分類プロセスは明快である。Ｌ分裂面７９０は、Ｌオブジェクトの最大、すなわち右端の点に配置され、Ｒ分裂面７９２は、Ｒオブジェクトの最小、すなわち左端の点に配置される。
【０１３５】
繰返しになるが、Ｌ子の左側は親境界ボックス７６０の左側から継承され、Ｌ子の右側はＬ分裂面７９０である。同様に、Ｒ子の左側はＲ分裂面７９２であり、Ｒ子の右側は親境界ボックス７６０から継承される。分かりやすくするために、結果として生じたＬ子及びＲ子は、図２３Ｄでは別々に描いてある。
【０１３６】
図２３Ｄに示すように、この例では、２つのセルの間に空き空間７９４がある。図２３Ｂに戻ると、バイナリ空間分割技法では、４つの横断ケースのみ、すなわち左のみ（Ｌ）、右のみ（Ｒ）、左、次いで右（ＬＲ）、及び右、次いで左（ＲＬ）が、説明される必要があることが分かるであろう。ただし、図２３Ｄに示すように、境界ボリューム階層を構築する際、説明される必要がある第５のケース、すなわち「空きボリューム」のケースがある。ただし、境界間隔階層は、個々のセル内で処理される空き空間の量を削減するので、結果として、計算コストの大幅な節約をもたらすことが理解されよう。
【０１３７】
したがって、図２２Ａ〜Ｅ、２３Ａ〜Ｄから、記載する技法は、第１に、オブジェクトと分裂面との間の交差をなくすことによって、第２に、子ボリューム要素中の空き空間の量を大幅に削減することによって、現在使われているバイナリ空間分配技法よりも大幅に向上することが分かるであろう。
【０１３８】
図２４Ａは、上述の技法とともに使用するためのデータ構造を定義する例示的なコードリスティング８００を示し、図２４Ｂは、データ構造の１２バイトのメモリレイアウト８１０を示す。ツリーの内部ノードは、（１）境界間隔を定義する２つの分裂面８１２、８１４及び（２）１対の子へのポインタ８１６によって記述される。これは合計で１２バイトになるので、すべてのノードが、４バイトの境界上に整列され、この整列により、軸（００：ｘ，０１：ｙ，１０：ｚ）又はリーフを示すのに、子ポインタの下位２ビット８１８、８２０を使用できるようになる（ケース１１）。リーフノードは、参照されるオブジェクト８２２及びその全体数８２４への３２ビットポインタを含む。リーフノード中の４バイトのオーバーヘッド８２６は、ノードデータ構造のうち８バイトのみを使用するので、注意深く実装することによって解決することができる。１２バイトのメモリレイアウト及び３２ビットポインタの使用を含む、図示されるコードリスティング及びデータ構造の側面は、本実装例に特有であり、異なるワードサイズをもつ異なるコンピューティング環境に合わせて修正してよいことに留意されたい。
【０１３９】
３．２．光線交差
光線を境界間隔階層２分木と交差させることは、境界ボリューム階層を横断することと同様である。（上述したように、境界ボリューム階層とは、場面の中に含まれるオブジェクトのリストに基づく分割技法である）。ただし、境界ボリューム階層中の子とは異なり、境界間隔階層中の子は、空間的に順序づけられる。したがって、光線方向の合図によって、光線源により近い子に直接アクセスすることが可能なので、境界間隔階層は、境界ボリューム階層よりはるかに効率的に進み得る。したがって、上で論じた図２２Ａ〜Ｅ、２３Ａ〜Ｄに示したように、この横断は、ｋｄツリーベースの空間分割の横断とほとんど同一になる。
【０１４０】
境界ボリューム階層との類似において、図２３Ｄに示すように、有効な光線セグメントが２つの重ならない子の間にある場合、どの子とも全く交差しないことも可能である。この追加的ケースの取扱いは、空き空間を暗黙的にスキップするので、有益である。したがって、空きリーフは、決してアクセスすることはできず、したがって、上述したように格納される必要がない。
【０１４１】
空間分割とは対照的に、境界間隔階層のボリューム要素は重なり得る。したがって、再帰的横断は、交差が見つかってすぐに停止してはならない。概して、より近い交差を求めて、スタック上の残っているすべてのボリューム要素を検査することが必要である。ただし、交差が見つかるとすぐに、階層の分岐が、現在の交差よりさらに離れたボリューム要素を表す場合は、剪定してよい。
【０１４２】
３．３．階層の構築
記載するデータ構造の性能の手掛かりとなるものは、効率的な構築である。所与の候補分裂面を想定すると、記載する本実装において使われる技法は比較的明快である。各オブジェクトは、面のどちら側と最も重なるかに応じて、「左オブジェクト」又は「右オブジェクト」どちらかとして分類される。オブジェクトを左オブジェクト又は右オブジェクトとして分類するのに、他のヒューリスティックを用いることができる。子ノードの２つの分割面値が次いで、選択された軸に沿った、分類される左オブジェクトの最大（すなわち、右端の）座標及び分類される右オブジェクトの最小（すなわち、左端の）座標によって、それぞれ判定される。
【０１４３】
本発明のそれ以外の態様は、境界間隔階層の構築において使用するための候補分裂面の場所を判定する技法を提供する。
【０１４４】
３．３．１．分裂面を判定するグローバルヒューリスティック
ここで、グローバルヒューリスティックを用いて候補分裂面を判定する技法を説明する。従来の手法とは異なり、記載するヒューリスティックは、光線追跡されるべきオブジェクトを明示的には分析しないので、貪欲でなく、評価するコストがかからない。
【０１４５】
記載する本技法によると、この中央にある長辺に沿った軸平行場面境界ボックスの階層状の細分から生じる候補分裂面が使われる。この技法を適用すると、候補面すべてが規則的なグリッドを形成することに留意されたい。
【０１４６】
図２５Ａ〜Ｄは、オブジェクト分析のない、候補分裂面の判定を例示する一連の簡略図を示す。図２５Ａは、「第１世代」候補分裂面８３１によって分裂されている境界ボックス８３０を示す。分裂面８３１は、この面をＬ１領域とＲ１領域に分ける境界ボックス７００の中心を通る。Ｌ１及びＲ１領域は子ではなく、こうした領域内に存在するオブジェクトがどのように分類されるべきかに関する指示を与えることに留意することが重要である。実際、上述したように、子の一方又は両方が分裂面と重なり得る。子の間には空き空間があってもよい。さらに、子の一方は、ゼロボリュームをもち得る。
【０１４７】
図２５Ｂは、第１の分裂面８３１によって、且つ１対の「第２世代」候補分裂面８３２によって分裂された境界ボックス８３０を示す。候補分裂面はすべて、一致するものだとしても、「単一」面である。こうした面は、再帰中に生成される。第２世代面８３２は、第２世代の子に対するＬ２及びＲ２を判定するのに使われる。
【０１４８】
図２５Ｃ、２５Ｄは、第３及び第４世代面８３３、８３４によって分裂された境界ボックス８３０を示す。こうした面８３３、８３４は、第３及び第４世代の子に関するＬ及びＲを判定する（それぞれ、Ｌ３／Ｒ３及びＬ４／Ｒ４）。プロセスは、必要なだけ多くの世代の候補分裂面を生成するために、再帰的に継続する。
【０１４９】
候補分裂面は、境界ボックス８３０に含まれる特定のオブジェクトの分析なしでグローバルに判定されるので、特定の状況では、ある特定の世代に対するグローバルに判定された候補分裂面は、細分されるべき、その世代の親ボリューム要素の境界ボックスの外側にあってよいことが可能であることが分かるであろう。その場合、プロセスは、親ボリューム要素が存在する半分の中にある候補面で継続される。
【０１５０】
ここで、グローバルに判定された候補分裂面の使用について、具体的な例を参照して論じる。図２６は、６つのオブジェクトＡ〜Ｆを含む境界ボックス８４０の図を示す。図２７は、境界ボックス８４０の上に重ねられた４世代の候補分裂面を示し、図２８は、境界ボックス中に含まれるオブジェクトＡ〜Ｆの特定の組に基づく、境界間隔階層の組立てにおいて対象となっている分裂面を示す。図２９は、オブジェクトＡ〜Ｆがそれぞれ、記載する本技法によって判定される様々な世代の子境界ボックスにどのように含まれるかを例示する図を示す。
【０１５１】
ここで、図２９について、一世代ずつ説明する。
【０１５２】
図３０Ａ〜Ｄは、図２６場面８４０から生成された第１世代の子を示す。図３０Ａにおいて、グローバルに判定された第１世代候補分裂面８４１が、オブジェクトＡ〜Ｆを、Ｌオブジェクト又はＲオブジェクトとして分類するのに使われる。明らかに、Ａ〜ＣはＬオブジェクトであり、オブジェクトＤ〜ＦはＲオブジェクトである。図３０Ｂは、第１世代のＬ及びＲ子を示す。Ｌ子の右側は、Ｌオブジェクトの右端の点を通る面であり、Ｒ子の左側は、Ｒオブジェクトの左端の点を通る面である。図３０Ｃは、結果のＬ及びＲ子を示す。
【０１５３】
図３１Ａ〜Ｃは、第２世代の子を示す。図３１Ａにおいて、グローバルに判定された第２世代候補分裂面８４２が、第１世代の子の中のオブジェクトを、Ｌ及びＲオブジェクトに分類するのに使われ、図３１Ｂに示すように、Ｌ及びＲ子が、記載する技法によって生成される。結果として生じた第２世代の子を、図３１Ｃに示す。図の右側で、位置三角形Ｄ、Ｆが、重なり合う子を結果として生じることが分かるであろうが、分かりやすくするために分離してある。
【０１５４】
図３２Ａ〜Ｃは、第３世代の子を示す。候補面はグローバルに生成されているので、本例における候補分裂面８４３は中心からずれており、子ボックスを、等ボリュームのボックスに細分しないことが分かるであろう。図３２Ｂは、Ｌ及びＲ分裂面の配置を示し、図３２Ｃは、結果として生じた子を示す。オブジェクトＡ、Ｂを含む境界ボックスを参照すると、記載する技法は結果として、空きボリュームを有するＲ子を生じることに留意されたい。結果として生じたＬ子は、オブジェクトＡ、Ｂを含むが、空き空間が削減されている。
【０１５５】
図３３Ａ〜Ｅは、オブジェクトＡ、Ｂに対する子の生成を示す。図３３Ａに示すように、グローバルに判定された候補第４世代分裂面８４４は、Ａ、ＢをＬ及びＲオブジェクトに分けない。そうではなく、両方とも、Ｒオブジェクトとして分類される。境界ボックスの左側は、Ｒオブジェクトの左端の点によって判定されるので、結果は、その親からその側をすべて継承する空きボリュームＬ子及びＲ子となる。
【０１５６】
図３３Ｂに示すように、候補分裂面は、ローカルではなくグローバルに生成されているので、第５世代候補分裂面８４５は、境界ボックスを二分するのではなく、境界ボックスの外側にある。図３３Ｂにおいて、境界ボックスは面８４５の左に存在することが分かるであろう。したがって、上述したように、プロセスは、面８４５の左にある候補面で継続する。
【０１５７】
図３３Ｃは、第６世代候補分裂面８４６を示す。今度は、候補分裂面８４６は、ＡがＬオブジェクトとなりＢがＲオブジェクトとなるように、境界ボックスを分ける。図３３Ｄは、Ｌ及びＲ分裂面の配置を示し、図３３Ｅは、結果として生じたＬ及びＲ子を示す。
【０１５８】
先行サブセクションにおいて説明した技法とともに、オブジェクトリストは、再帰的に分割され、境界ボックスは、常にオブジェクト境界ボックスと平行にされる。分裂面候補が、重複なしでオブジェクトを分離する場合、結果として生じた分裂面は暗黙的に、左及び右にあるオブジェクトに厳密に適合し、したがって、図２３Ｃ〜Ｄに示すように、空き空間を最大化する。ただ１つのオブジェクトが残っているときに再帰は終了するが、再帰が依然としてよい結果をもたらすようなオブジェクトの数を定義するのが効率的である。
【０１５９】
分裂面候補は、内部ノードの実際の境界ボックスには適合されず、単に場面のグローバル境界ボックスによって判定されることに留意することが重要である。言い換えると、一度の反復後に子セルが定義された後、続いて使われる候補面は、その新しいセルの中点ではなく、対応する初期グローバル候補面である。
【０１６０】
本技法のこの側面は、従来の手法とは異なり、階層全体を通して、可能な限り境界ボックスを立方体に保つ傾向にある。
【０１６１】
３．３．２．近似ソート
上述のデータ構造を構築するのに要求される時間の量は、平均でＯ（ｎ  ｌｏｇ  ｎ）である。本発明のそれ以外の態様によると、バケットソートプリプロセスが、次定数を減じるのに使われる。
【０１６２】
バケットソートプリプロセスでは、ソートされるべき個々の項目が最初に「バケット」にソートされる、高度なソートが実施される。たとえば、順位及び種別によるトランプ１組のソートは、最初にカードを種別によって４つの山にソートし、次いで、種別の個々の各山を順位によってソートすることによって遂行することができる。種別の各山は、バケットとして機能する。概して、ソート機能をこのように分けると、プロセスに要求される全体的時間量が減る傾向にある。
【０１６３】
同様に、オブジェクトが、最初に、境界ボックスが構築されるべき同じような番号のオブジェクトを含む有意なバケットに事前にソートされる場合、場面中のオブジェクトを、そのオブジェクトを含む、階層状に順序づけられた１組の境界ボックスにソートするのに要求される時間量は、大幅に削減することができる。
【０１６４】
図３４は、本発明の本態様による方法９００のフローチャートを示す。ステップ９０１で、場面境界ボックスのサイズ及びボックスに含まれるオブジェクトの平均サイズが、順序づけられた規則的なグリッドの分解能を判定するために計算される。或いは、分解能は、ユーザによって指定してよい。ステップ９０２に示すように、各グリッドセルは、カウンタを含む。ステップ９０３で、カウンタはすべて、ゼロにセットされる。
【０１６５】
ステップ９０４で、たとえば、その境界ボックスの１つの角など、各オブジェクトごとに一点が、その点を含むグリッドセル中のカウンタを増分するのに使われる。あるオブジェクト「用に」選択された点は、必ずしもそのオブジェクト「上の」点である必要があるわけではないことは、注目に値する。ある特定のグリッドセル中の点の数は、オブジェクトが場面の中でどう分散しているかに応じて広く変わり得ることが分かるであろう。一部のグリッドセルは、一点のみ、又はゼロ点を含むことが可能であり得る。各オブジェクトに対する唯一の点がカウントされるので、すべてのカウンタの和は、オブジェクトの数に等しいことが、さらに分かるであろう。
【０１６６】
オブジェクトは、複数のセル、又はいくつかのグリッドセルとも重なり得ることが、さらに分かるであろう。また、オブジェクトのほとんどは、オブジェクトの選択された点が存在するグリッドセルの外側に存在することが可能である。このような出現は、バケットソートによって節約される時間の全体的量を削減することができるが、最終データ構造の有効性に影響することはないことが分かるであろう。
【０１６７】
ステップ９０５で、カウンタが次いで、グリッド中のセル／ボクセルのボクセル順序で、又はメモリ中にレイアウトされる順序で、すべての先行カウンタの和で各カウンタを置き換えることによって、オフセットに変換される。
【０１６８】
ステップ９０６で、グローバルオブジェクト索引アレイが割り振られる。ステップ９０７で、あらゆるオブジェクトの同じ点を使って、オブジェクトはここで、ステップ９０５でのオフセットを使って、同じようなサイズのバケットにソートすることができる。上述したように、グリッドカウンタの和は、場面中のオブジェクトの数をもたらし、索引アレイのサイズを判定する。バケットサイズは、中でカウントされたオブジェクトの数によって判定される。
【０１６９】
ステップ９０８で、各バケットごとに、上述したように、バケットが含むオブジェクトの境界ボックスが計算される。
【０１７０】
オブジェクトではなく、オブジェクトが含む境界ボックスのソートは、構築を２倍から３倍高速化する。ボリューム要素が、１つのコンテナのみからなる場合、そのコンテナは、その中のオブジェクトで置き換えられる。結果として生じたツリーは、後で論じる図４２に示すように、描画性能及びサイズが非常に類似している。
【０１７１】
この容易なストリーミング技法を用いると、限られた量のメモリを使って、且つ線形時間で場面を分割することが可能である。索引アレイでさえも、まとめて処理することができる。
【０１７２】
３．３．３．実装詳細
境界間隔階層はオブジェクト分割方式なので、すべてのオブジェクトソートは、適所で行うことができ、一時的メモリ管理は要求されない。再帰的構築手順は、クイックソートベースの技法と同様に、索引アレイ中の左及び右オブジェクトへの２つのポインタを必要とするだけである。
【０１７３】
一方、空間分割方式は、ボリューム要素に重なるオブジェクトを扱う必要がある。たとえば再帰的ｋｄツリー構築は、後でバックトラックを用いて継続することができるスタック上に配置されるべき膨大な量の一時的データを必要とする。
【０１７４】
上記方式の変形体は、こうした非効率性を軽減することができ、適所ソートをｋｄツリーに利用可能にする。その手順では、「左及び右両方」（すなわち、ｋｄツリー分裂面と重なる）として分類されるオブジェクトを保つのに使われる、オブジェクト参照の第２のアレイを要求する。第２のアレイのサイズは、デフォルト値によって選ぶことができることを、多数の場面の検査が示している。概して、オブジェクトの数に等しい長さは、要求される、時間の９９パーセントよりもはるかに大きい。ただし、アレイの本当の長さは予測することができるので、メモリを割り当て直す必要はないであろう。
【０１７５】
この手順は、図３５、３６に示される。図３５は、アレイの一連のペア９２０を示し、ここで、上位アレイは、オブジェクト索引の適所ソートを示し、下位アレイは、ツリー構築中の、グローバルスタック上への格納操作を示す。一連のアレイペアは、左から右、上から下に進む。
【０１７６】
第１行、第１列において、上位アレイは、順序づけられていない１組の要素を含む。第２列において、順序づけられていないアレイをソートすることにより、適所に留まる左要素が明らかにされる。第３列において、第２の要素はＲ要素であり、この要素は右に行かなければならず、したがって、上位アレイの右端にあるソートされていない要素で交換される。
【０１７７】
第２行、第１列で、第２の要素は、上位アレイの右端にあるソートされていない要素と交換されている。第２列で、現在第２の位置にある要素は、「両」（すなわち、重なる）要素であることが明らかになり、したがって、グローバルスタック、すなわち下位アレイに移動される。第３列で、右端のソートされていない要素は、アレイ中の空いている位置に移動される。
【０１７８】
第３行、第１列で、右端のソートされていない要素は、アレイ中の空いている第２の位置に移動されている。この要素はここで、「Ｒ」オブジェクトであることが明らかになり、アレイの右側の空いている位置に移動される。第３列は、この動きの後に結果として生じる上位アレイ構成を示す。
【０１７９】
プロセスは、ｎ行に示すように、アレイ中の要素がすべて順序づけられるまで、再帰的に継続する。ｎ行の第１列に示すように、ソート動作により、下位アレイ中の最初の３つの位置に格納される３つの「両」オブジェクトが明らかになる。第２列で、３つの「両」オブジェクトは、Ｌ及びＲオブジェクトの間の空いている位置にある上位アレイに移動される。第３列は、完了したソートを示す。
【０１８０】
図３６は、スタックの「ポップ」動作の後にスタックに積まれたオブジェクト索引の復元を示す一連の３つのアレイペア９３０を示す。
【０１８１】
３．４．オンデマンドでの構築
これまで提示したフレームワークは既に、対話型な光線追跡を可能にしている。ただし、加速データ構造の構築時間及びメモリフットプリントは、光線が横断する場合、すなわち、形状が交差される場合にのみ構築することによって、さらに最適化することができる。境界間隔階層を用いた実装は、比較的明快であり、深度の複雑さが高いことを特徴とする大きな場面の場合に特に有益である。すべてのオブジェクトソートは適所で行われるので、未だに細分されていないボリューム要素に印をつけるのに、フラグのみが要求される。光線を横断すると、フラグがセットされている場合に細分ルーチンがコールされる。単純な最適化では、ノードに含まれるすべてのオブジェクトがキャッシュ（たとえばＬ１又はＬ２キャッシュ）に収まる場合、ノードを完全に細分する。オンデマンド構築は、横断及び構築ルーチンの古典的な分離を廃止する。この単純な拡張を用いると、図２２に示すＢｏｅｉｎｇ７７７メッシュを、シングルコアＯｐｔｅｒｏｎ  ２．２ＧＨｚ  ３２ＧＢ  ＲＡＭマシン上で最初からＨＤＴＶ解像度で３〜９分（カメラ位置に応じる）以内に描画することが可能であった。従来の手法と比較して、わずかなメモリのみが用いられる。
【０１８２】
４．考察
境界間隔階層は、空間分割方式の効率的な横断技法の利益を受けるオブジェクト分割方式である。このセクションでは、この手法の利点の一部について論じる。
【０１８３】
４．１．メモリフットプリント
構築アルゴリズムは、分裂面をオブジェクト境界ボックスに合致させるので、階層中の内部ノードの数は、６倍のオブジェクトの数によって境界を定められる。ポリゴンのケースでは、この数は、直前の境界の最小及び頂点の数の３倍で境界を定められる。オブジェクト参照の数は、場面中のオブジェクトの数と正確に一致する。
【０１８４】
多重オブジェクト参照のせいで、後者の境界は、たとえばｋｄツリーとして、空間分割方式には利用可能でない。オブジェクトが、局所的に多数の重なる境界ボックス又はほとんどランダムな分散を特徴とする場合、問題が明らかになる。ＢＡＲＴミュージアムでは、複製された三角形索引の数は、三角形の数の約４００倍（ピーク値）であり、その結果、境界間隔階層中より４０倍も多い数のノードが生じた。この問題は、第１の最上位レベル分裂が既に、たくさんのオブジェクト推論を再現するので、ｋｄツリーに固有である。この重複効果はしばしば、再帰の間継続される。
【０１８５】
４．２．数値精度
境界間隔階層構築では、正準座標システムにおいて、境界ボックス情報及び最小／最大操作のみを用いる。したがって、手順は数値的には、無条件に堅牢である。空間分割方式は、浮動小数点の不正確さの影響を被る操作に依拠するオブジェクト面交差ルーチンを要求する。方式を安定させるために、耐容性が追加されなければならない。その結果、性能が影響を被る。
【０１８６】
４．３．光線集団の追跡
光線が干渉性である場合、単光線ではなく光線の集団（又はアレイ）の追跡が有効であり得る。一次光線は、干渉性のある組に簡単にグループ化することができるが、点光源から影光線の集団に対して同じ利益を得るのは既に難しくなっている。透明な、反射した、又はランダムウォークシミュレーションによる光線は、十分な干渉性に欠けている。それにも関わらず、干渉光線の集団を与えられると、光線の集団を追跡するための手法は、本明細書において説明するデータ構造の利益を受ける。この利益は、小さいメモリフットプリントから生じたメモリ帯域幅の削減及びキャッシュ干渉の増大に起因する。さらにボリューム要素は、概してｋｄツリーの対応するボリュームより大きく見え、干渉に対する条件が緩和される。単光線から２×２光線束追跡までの加速比は、ｋｄツリーと比較して、境界間隔階層に対して、わずかに高いことが、実験により示されている。フラスタムカリング技法は、境界ボリューム階層に首尾よく変形される。こうした技法は、スタック上の現在のボリューム要素境界ボックスを追うことによって、境界間隔階層に簡単に変形することができる。階層は、他のやり方でもアップデートすることができるが、記載する構築ルーチンは、表面積ヒューリスティックより大幅に速く、変形によってアニメーション化されたメッシュに対する厳しい制限を撤廃する。２×２集団の光線の場合、より一般的な技法によって得られる光線追跡性能は、少なくとも同程度に高速である。最後に、ノードデータ構造ははるかに小さい。完全を期すために、光線の集団は、グリッド加速データ構造を用いて効率的に追跡することもできることに留意されたい。ただし、多数のグリッドセルと重なる大型オブジェクト、並びに二次光線は、厳しい性能損失を引き起こす。概して、シャフトカリング技法は、光線の集団を発散する距離に対して失敗する。
【０１８７】
４．４．ハードウェア検討事項
リアルタイムの光線追跡における最近の発見に基づいて、ＲＰＵ（光線処理ユニット）チップが設計されている。アーキテクチャは、効率的に光線追跡し、光線の束に陰影をつけることができるが、我々の手法によって簡単に改良することができる。境界間隔階層は、はるかに小さいメモリフットプリントをもち、オブジェクト分割方式として、メールボックスユニットを必要としない。ＴＰＵユニットのみが、第２の面交差によって拡張されなければならない。こうした修正は、境界間隔階層横断とｋｄツリー横断との類似により、簡単に組み込むことができる。より重要には、上述のデータ構造構築技法は、単純な操作のみを用い、したがって、ハードウェア実装の非常に優れた候補である。
【０１８８】
４．５．大量データセット
産業用途及びプロダクションレンダリングにおいて使われる現在のデータセットは、一般に数百メガバイトから数ギガバイトの未加工データに渡る大量の形状からなる。上述したように、境界間隔階層の小さいメモリフットプリントにより、大規模場面は単純な手段によって効率的に光線追跡されるようになるが、依然として、データがメインメモリに収まらない状況があり得る。したがって、Ｂｏｅｉｎｇ７７７のピクチャを、５０ＭＢのＲＡＭのみを使って描画することができる極小メモリフットプリントレンダラが実装されている。より多くのＲＡＭが利用可能（測定目的のために１ＧＢが仮定された）である場合、図３８に示したように、標準消費者デスクトップＰＣ上でも、１時間未満でピクチャを最初から描画することが可能である。極小メモリの使用を達成するために、上述の前処理ステップは、オブジェクトをバケットにソートするのに用いられ、バケットは次いで、コンピュータのハードドライブ上に格納される。描画ステップの場合、最上位境界間隔階層がバケットから作成されるが、どのオブジェクトにも触れる必要はない。光線が交差される各バケットは、オンデマンドポリシーを用いて、独自のツリーを作成する。バケットのオブジェクト及び加速データ構造は、動的（すなわち、それ以上のＲＡＭが利用可能でなくなるまで増大し得る）又はユーザが定義した固定サイズどちらかのキャッシュ中に保たれる。最大オブジェクト数をもつバケットは、最大メモリフットプリントを定義する。この結果は、バケットソートプリプロセスから無償で得られることに留意されたい。このシナリオでは、処理速度は、ハードドライブの速度で判定される。ツリー構築アルゴリズムはとても高速なので加速データ構造の一部が押し出されなければならない場合、その一部は、単に捨てられ、オンデマンドに組み立て直される。
【０１８９】
４．６．大型オブジェクト
境界間隔階層性能は、小さい、及び大きな幾何要素の混合物に遭遇すると、影響を被ると提案することができよう。これは部分的に真実であり、空間分割方式に対しても真実である。この状況で、ｋｄツリーが、より多くの分裂面を挿入することによって場面を細分する。この結果、より深いツリー、オブジェクト参照の重複、及び全体的に増大したメモリフットプリントを生じる。より深いツリーは、横断時間を増大させる。このようなシナリオにおける境界間隔階層の性能問題には、図３９に示すＢＡＲＴロボットの例によってスポットを当てることができる。場面は、道路及び家の大きな三角形から作られるが、標識及び歩行ロボットなど、たくさんのより細かい形状も特徴とする。大きな三角形は、階層中に大きな重なるボリュームを引き起こすので、早い段階でのツリー剪定が不可能になり、１光線につき、より多くの三角形が検査されなければならない。描画システムにおける古典的な次善策は、大型オブジェクトを予め細分することである。メモリを適度に増大させるために、オブジェクトは、正準軸に垂直な面によって分けられるべきである。ここで、メモリ消費は、ｋｄツリーと同様に増大するが、依然としてメモリ消費を先験的に判定することが可能である。記載する手法は、置換マッピング及び大量の幾何細部をもつプロダクションシステムを意図しているので、上記考察によって問題が課されることはない。実際、問題は、低ポリゴンカウントのアーキテクチャシナリオに対してのみ持続する。比較的古いゲームでも、通常は、１フレームあたり２００．０００から５００．０００個の可視的三角形を使う。
【０１９０】
５．結果
現在使われている技法と本明細書において説明する改良技法との比較の結果を、図３７〜４２で説明する。
【０１９１】
図３７は、非常に単純なシェーダ及び２×２（ＳＳＥにより加速された）光線束を用いて、記載する本技法と最新のｋｄツリー実装形態を比較するテーブル９４０を示す。性能データは、６４０×４８０の解像度で、Ｐ４ＨＴ  ２．８ＧＨｚ上で測定された。ＩｎＶｉｅｗ列は、業務用のリアルタイムの描画製品（ｉｎＴｒａｃｅ  ＧｍｂＨ、ｗｗｗ．ｉｎｔｒａｃｅ．ｃｏｍ）を指す。ＷＨ０６列は、Ｗａｌｄ及びＨａｖｒａｎ、「Ｏｎ  Ｂｕｉｌｄｉｎｇ  Ｆａｓｔ  ｋＤ−Ｔｒｅｅｓ  ｆｏｒ  Ｒａｙ  Ｔｒａｃｉｎｇ」、Ｔｅｃｈｎｉｃａｌ  Ｒｅｐｏｒｔ、ＳＣＩ  Ｉｎｓｔｉｔｕｔｅ、Ｕｎｉｖｅｒｓｉｔｙ  ｏｆ  Ｕｔａｈ、Ｎｏ．ＵＵＳＣＩ−２００６−００９（刊行のため提出済み）（２００６）において記載される技法を用いて達成されるデータを指す。ＷＨ０６性能データは、より速いＯｐｔｅｒｏｎ  ２．６ＧＨｚ上で測定された。「結像時間」という用語は、１枚のピクチャのための合計描画時間の測定値を指し、したがって、オンデマンドのツリー構築、光線追跡、及びシェーディングを含む。図３７に示すように、境界間隔階層（ＢＩＨ）は、メモリ及び合計結像時間両方において優れた結果を達成した。
【０１９２】
図３８は、単光線のみ（６４０×４８０、Ｐ４ＨＴ  ２．８ＧＨｚ）を追跡する高度な陰影を用いて、記載する本技法と最新のｋｄツリー実装を比較するテーブル９５０を示す。「結像時間」は、１枚のピクチャのための合計描画時間を測定し、したがって、オンデマンドでのツリー構築、光線追跡及びシェーディングを含む。図３８は、グローバル照度計算は、ほとんどツリー全体の構築を要求するので、オンデマンドでの構築のための応力検査を示す。
【０１９３】
図３９は、動的環境（６４０×４８０、Ｐ４ＨＴ  ２．８ＧＨｚ）を用いた比較の結果を説明するテーブル９６０を示す。完全なデータ構造は、フレームごとに最初から組み立て直される。ミュージアムは、１ピクセルにつき４本の光線の平均を使って、（ａ）単純シェーディング及び（ｂ）フルシェーディングを用いて追跡される。両方のケースにおいて、単光線のみが追跡された。残っているＢＡＲＴ場面は、単純なシェーダを使って描画されたが、Ｕｔａｈ  Ｆａｉｒｙ  Ｆｏｒｅｓｔはフルシェーディングを用いた。
【０１９４】
図４０は、巨大なＢｏｅｉｎｇ７７７データセット（１２，５８４，５００，４１６バイトに達する３４９，５６９，４５６個の三角形）のためのオンデマンドツリー構築を含む合計描画時間（１２８０×１０２４、シングルコアＯｐｔｅｒｏｎ  ８７５  ２．２ＧＨｚ  ３２ＧＢ）を説明するテーブル９７０を示す。ハードディスクからの三角形データの読取りは、使われるハードディスクに重く依存するので、省略される。本例では、特定の機器を使って、ローディング時間は４０〜９０秒であった。
【０１９５】
図４１は、低レベルのオンデマンドツリー構築及びディスクからの必要なすべての三角形グループのローディングを含む描画時間（１２８０×１０２４、Ｐ４ＨＴ  ２．８ＧＨｚ  ２ＧＢ  ＲＡＭ）を説明するテーブル９８０を示す。すべてのビューに対して一度行われる最上位バケットソートプリプロセスは、さらに５３分を要したが、最高で７３７ＭＢのＲＡＭを使っただけである。前処理及び描画のためのキャッシュサイズは、少なくとも１ＧＢのＲＡＭを提供するどの消費者マシンに対しても適切になるように選ばれた。より多くのＲＡＭは、先行図でのように、一層速い描画時間を可能にするが、前処理ステップは主に、ハードディスクによって制限され、ハードディスクは本例では比較的遅く安価であった。
【０１９６】
図４２は、上述のバケットソートプリプロセス（６４０×４８０、Ｐ４ＨＴ  ２．８ＧＨｚ）をもつ、及びもたない境界間隔階層（ＢＩＨ）を、Ｗａｌｄ及びＨａｖｒａｎからとった数に比較するテーブル９９０を示し、ここでは、より速いＯｐｔｅｒｏｎ  ２．６ＧＨｚプロセスが使われた。「純粋な」境界間隔階層に相対して、１秒あたりのフレーム数（ＦＰＳ）が与えられ、そのときいくつかのカメラ位置に対するＦＰＳが平均された。境界間隔階層は、特にバケットソートプリプロセスと組み合わされると、優れた結果を示す。
【０１９７】
６．結論
本発明の態様は、特に十分に動的環境において、又は大量データセットのために使われたとき、光線追跡を加速する改良技法を提供する。記載するデータ構造のメモリフットプリント及び構築時間は両方とも、従来の手法と比較して、大幅に小さい。記載する技法は、形状に対する制限なしで、動的内容のリアルタイムの光線追跡を可能にする。こうした技法は、不偏モーションブラーのはるかに効率的な計算も可能にする。グローバルヒューリスティックに伴う本技法の容易性及び予測可能性は、ハードウェア実装のための有望な候補である。自由曲面を有する境界間隔階層を用いた第１の実験は、有望である。新しいグローバルヒューリスティックは、本文書において測定目的のために使われたはるかに複雑なｋｄツリー構築ヒューリスティックと比較された。より単純な方式が、結果としてほとんど同一の性能を生じる。
【０１９８】
図４３は、記載した本発明の態様による全体的技法のフローチャート１０００を示す。上述したように、この技法は有利には、コンピュータ及び表示要素を備えるコンピュータグラフィックスシステムにおいて実装され、表示要素は、コンピュータからの表示制御用電気出力に応答して、人間が知覚可能な画像を表示するように動作可能であり、コンピュータは、画像中のピクセルに関するピクセル値の算出に基づいて、表示制御用電気出力を生成するように動作可能であり、それぞれのピクセル値は、模擬カメラの画像面上に記録される場面中の点を表し、コンピュータは、光線追跡方法を用いて画像に対するピクセル値を生成するように動作可能であり、光線追跡方法は、光線ツリー及び関連した光線追跡データ構造の使用を含み、光線ツリーは、選択された方向に沿ってピクセルから場面中に発せられた少なくとも１本の光線を含み、光線追跡方法は、場面中での光線とオブジェクトの表面との交差の算出をさらに含み、光線追跡は、画像中のオブジェクトの処理の結果に応答して判定される。
【０１９９】
ステップ１００１で、ツリー構造を含む階層状光線追跡加速データ構造が構築される。ツリー構造のノードは、場面中の１組のオブジェクトを左オブジェクト及び右オブジェクトに分割するための軸平行場面境界ボックス及び２つの並列面の定義に基づく境界間隔階層を使用して、且つ被分裂面をオブジェクト境界ボックスに合致させて、生成される。
【０２００】
ステップ１００２で、境界ボックスがオブジェクト境界ボックスに再帰的に分けられる。
【０２０１】
ステップ１００３で、被分裂面候補が重複なくオブジェクトを分離する場合、結果として生じた被分裂面が、左及び右にあるオブジェクトに合わせられ、そうすることによって空き空間を最大化する。
【０２０２】
ステップ１００４で、所定の数を超えるオブジェクトが残っていない場合、再帰が終了される。
【０２０３】
図４４は、図４３に示すステップ１００１で階層状光線追跡加速データ構造を構築するそれ以外の態様を説明するフローチャート１０１０を示す。
【０２０４】
ステップ１０１１で、ｘ、ｙ、又はｚ軸のうち、選択された１つに垂直な２つの面が選択される。
【０２０５】
ステップ１０１２で、分裂面が与えられると、画像中の各オブジェクトが、左／右選択基準に基づいて、左又は右のどちらかとして分類され、それぞれ、左及び右オブジェクトの最大及び最小座標によって子ノードの２つの分裂面値が判定される。
【０２０６】
ステップ１０１３で、境界ボックス及び選択された軸を与えられると、選択された軸に沿った左オブジェクトの座標の最大値を第１の面で置き換えることから、左の子Ｌが生じ、右オブジェクトの座標の最小値を第２の面で置き換えることから、右の子Ｒが生じ、結果として生じたどのゼロボリュームも、空の子を表すのに使われる。
【０２０７】
ステップ１０１４で、中央にある長辺に沿った軸平行場面境界ボックスを階層状に細分することによって、候補分裂面を選択することによって、分裂面が判定され、そうすることによって、すべての候補分裂面が規則的なグリッドを形成する。
【０２０８】
ステップ１０１５で、候補面が、細分するべきボリューム要素の境界ボックスの外側にある場合、ボリューム要素が存在する半分の所から、候補面を用いてプロセスが継続される。
【０２０９】
図４５は、本発明の一プロセスに従う、コンピュータ１０２内の処理モジュール１２２の概略的なブロック図である。図４５に示すように、コンピュータ１０２、又は他の処理装置は、本発明に関連して動作する場合、本発明で示した処理モジュール及び／又は他の構成要素の一部又は全部を含む。こうしたモジュールは、図４３、４４に示す方法態様に対応し、それを実行する。このような方法態様は、当業者によって、公知のコンピュータオペレーティングシステム及びアプリケーションプログラミング技法を用いて実装することができる。
【０２１０】
図４６は、本発明による、コンピュータ又は他の処理装置内のディスク（取外し可能若しくは取外し不可能）又は他の記憶要素１２０内のソフトウェア製品モジュール１２４の概略的なブロック図である。図４６に示すように、ディスク又は他の記憶装置１２０は、取出し可能であっても取外し不可能であっても、従来のコンピューティング装置によって、図４３、４４に示すような、本発明の方法態様を実装するように実行可能なコンピュータプログラムコードを含み得る。
【０２１１】
上記説明は、当業者が本発明を実施することを可能にする詳細を含むが、本説明は、本質的に例示であり、多くの修正形態及び変形形態が、こうした教示の利益を受ける当業者には明らかであることを理解されたい。したがって、本明細書における本発明は、添付の特許請求の範囲によってのみ定義され、特許請求の範囲は、従来技術によって許される限り広く解釈されることを意図している。
【図面の簡単な説明】
【０２１２】
【図１】本発明の態様を展開することができる従来のパーソナルコンピュータ又は同じようなコンピューティング機器を示す概略図である。
【図２Ａ】本発明の態様を展開することができる従来のネットワークベースのコンピューティングシステムを示す概略図である。
【図２Ｂ】本発明の態様を展開することができる従来のネットワーク装置を示す概略図である。
【図３】本発明の第１の態様による全体的方法を示す図である。
【図４】自己交差の問題を示す光線追跡手順を示す図である。
【図５】記載した、縮退三角形をエンコードする技法を実装するコードリスティングの例を示す図である。
【図６】記載した、堅牢な交差検査向けに三角形を拡張する技法を実装するコードリスティングの例を示す図である。
【図７Ａ】記載した三角形−ボックス交差技法を実装するコードリスティングの例を示す図である。
【図７Ｂ】記載した三角形−ボックス交差技法を実装するコードリスティングの例を示す図である。
【図７Ｃ】記載した三角形−ボックス交差技法を実装するコードリスティングの例を示す図である。
【図７Ｄ】記載した三角形−ボックス交差技法を実装するコードリスティングの例を示す図である。
【図８】本発明のそれ以外の態様による加速データ構造として使われる、分割された軸平行境界ボックスを示す正面図である。
【図９】図９〜１１は、Ｌ及びＲ面を有する境界ボックスの分割を示す、図５に示す軸平行境界ボックスを示す一連の等角図である。
【図１０】図９〜１１は、Ｌ及びＲ面を有する境界ボックスの分割を示す、図５に示す軸平行境界ボックスを示す一連の等角図である。
【図１１】図９〜１１は、Ｌ及びＲ面を有する境界ボックスの分割を示す、図５に示す軸平行境界ボックスを示す一連の等角図である。
【図１２】本発明のそれ以外の態様による光線追跡方法を示すフローチャートである。
【図１３】本発明のそれ以外の態様による光線追跡方法を示すフローチャートである。
【図１４Ａ】記載した、境界ボリューム階層を横断する技法を実装するコードリスティングの例を示す図である。
【図１４Ｂ】記載した、境界ボリューム階層を横断する技法を実装するコードリスティングの例を示す図である。
【図１４Ｃ】記載した、境界ボリューム階層を横断する技法を実装するコードリスティングの例を示す図である。
【図１５Ａ】境界ボックスに、半空間を定義するための軸平行面が交差する、本発明のそれ以外の態様による技法を示す一連の図である。
【図１５Ｂ】境界ボックスに、半空間を定義するための軸平行面が交差する、本発明のそれ以外の態様による技法を示す一連の図である。
【図１５Ｃ】境界ボックスに、半空間を定義するための軸平行面が交差する、本発明のそれ以外の態様による技法を示す一連の図である。
【図１６】記載した、リーフノードをエンコードする技法を実装するコードリスティングの例を示す図である。
【図１７Ａ】境界ボリューム階層を通る１本の光線の追跡を実装するコードリスティングの例を示す図である。
【図１７Ｂ】境界ボリューム階層を通る１本の光線の追跡を実装するコードリスティングの例を示す図である。
【図１７Ｃ】境界ボリューム階層を通る１本の光線の追跡を実装するコードリスティングの例を示す図である。
【図１７Ｄ】境界ボリューム階層を通る１本の光線の追跡を実装するコードリスティングの例を示す図である。
【図１８】本発明のそれ以外の態様による、４つの軸平行面によってクリップされた境界ボックスを示す図である。
【図１９】図１８に従ってデータ構造を実装するコードリスティングの例を示す図である。
【図２０Ａ】図１８、１９に示すデータ構造を用いて組み立てられたツリーを用いる、境界ボリューム階層の横断を実装するコードリスティングの例を示す図である。
【図２０Ｂ】図１８、１９に示すデータ構造を用いて組み立てられたツリーを用いる、境界ボリューム階層の横断を実装するコードリスティングの例を示す図である。
【図２０Ｃ】図１８、１９に示すデータ構造を用いて組み立てられたツリーを用いる、境界ボリューム階層の横断を実装するコードリスティングの例を示す図である。
【図２１Ａ】記載した光線追跡技法を用いて生成されたアニメーション及び対話型アプリケーションからの一連の画像を示す図である。
【図２１Ｂ】記載した光線追跡技法を用いて生成されたアニメーション及び対話型アプリケーションからの一連の画像を示す図である。
【図２１Ｃ】記載した光線追跡技法を用いて生成されたアニメーション及び対話型アプリケーションからの一連の画像を示す図である。
【図２１Ｄ】記載した光線追跡技法を用いて生成されたアニメーション及び対話型アプリケーションからの一連の画像を示す図である。
【図２２Ａ】バイナリ空間分割技法と記載した境界間隔階層技法との間の違いを示す一連の図である。
【図２２Ｂ】バイナリ空間分割技法と記載した境界間隔階層技法との間の違いを示す一連の図である。
【図２２Ｃ】バイナリ空間分割技法と記載した境界間隔階層技法との間の違いを示す一連の図である。
【図２２Ｄ】バイナリ空間分割技法と記載した境界間隔階層技法との間の違いを示す一連の図である。
【図２２Ｅ】バイナリ空間分割技法と記載した境界間隔階層技法との間の違いを示す一連の図である。
【図２３Ａ】バイナリ空間分割技法と記載した境界間隔階層技法との間の違いを示す一連の図である。
【図２３Ｂ】バイナリ空間分割技法と記載した境界間隔階層技法との間の違いを示す一連の図である。
【図２３Ｃ】バイナリ空間分割技法と記載した境界間隔階層技法との間の違いを示す一連の図である。
【図２３Ｄ】バイナリ空間分割技法と記載した境界間隔階層技法との間の違いを示す一連の図である。
【図２４Ａ】記載した光線追跡技法とともに使用するためのデータ構造を定義する技法を実装するコードリスティングの例を示す図である。
【図２４Ｂ】データ構造を示すメモリレイアウトである。
【図２５Ａ】記載した、オブジェクト分析なしの候補分裂面を判定する技法を示す一連の簡略図である。
【図２５Ｂ】記載した、オブジェクト分析なしの候補分裂面を判定する技法を示す一連の簡略図である。
【図２５Ｃ】記載した、オブジェクト分析なしの候補分裂面を判定する技法を示す一連の簡略図である。
【図２５Ｄ】記載した、オブジェクト分析なしの候補分裂面を判定する技法を示す一連の簡略図である。
【図２６】６つのオブジェクトＡ〜Ｆを含む例示的な境界ボックスを示す図である。
【図２７】図２６に示す境界ボックスの上に重ねられた４世代の候補分裂面を示す図である。
【図２８】図２７で対象となっている分裂面を示す図である。
【図２９】オブジェクトＡ〜Ｆがそれぞれ、様々な世代の子境界ボックスにどのように含まれるかを示す図である。
【図３０Ａ】図２６に示す場面から生成された子の第１世代を示す図である。
【図３０Ｂ】図２６に示す場面から生成された子の第１世代を示す図である。
【図３０Ｃ】図２６に示す場面から生成された子の第１世代を示す図である。
【図３０Ｄ】図２６に示す場面から生成された子の第１世代を示す図である。
【図３１Ａ】図２６に示す場面から生成された子の第２世代を示す図である。
【図３１Ｂ】図２６に示す場面から生成された子の第２世代を示す図である。
【図３１Ｃ】図２６に示す場面から生成された子の第２世代を示す図である。
【図３２Ａ】図２６に示す場面から生成された子の第３世代を示す図である。
【図３２Ｂ】図２６に示す場面から生成された子の第３世代を示す図である。
【図３２Ｃ】図２６に示す場面から生成された子の第３世代を示す図である。
【図３３Ａ】図２６に示す場面中のオブジェクトＡ、Ｂに対する子の生成を示す図である。
【図３３Ｂ】図２６に示す場面中のオブジェクトＡ、Ｂに対する子の生成を示す図である。
【図３３Ｃ】図２６に示す場面中のオブジェクトＡ、Ｂに対する子の生成を示す図である。
【図３３Ｄ】図２６に示す場面中のオブジェクトＡ、Ｂに対する子の生成を示す図である。
【図３３Ｅ】図２６に示す場面中のオブジェクトＡ、Ｂに対する子の生成を示す図である。
【図３４】本発明のそれ以外の態様による、記載したデータ構造の構築と連動して、バケットソートプリプロセスを実施する方法を示すフローチャートである。
【図３５】本発明のそれ以外の態様による、オブジェクト索引の適所ソートのための技法を示す一連のアレイペアを示す図である。
【図３６】本発明のそれ以外の態様による、オブジェクト索引の適所ソートのための技法を示す一連のアレイペアを示す図である。
【図３７】現在使われている技法と、本発明による改良技法との間の比較の結果を示す一連のテーブルを示す図である。
【図３８】現在使われている技法と、本発明による改良技法との間の比較の結果を示す一連のテーブルを示す図である。
【図３９】現在使われている技法と、本発明による改良技法との間の比較の結果を示す一連のテーブルを示す図である。
【図４０】現在使われている技法と、本発明による改良技法との間の比較の結果を示す一連のテーブルを示す図である。
【図４１】現在使われている技法と、本発明による改良技法との間の比較の結果を示す一連のテーブルを示す図である。
【図４２】現在使われている技法と、本発明による改良技法との間の比較の結果を示す一連のテーブルを示す図である。
【図４３】記載した本発明の態様による全体的技法を示すフローチャートである。
【図４４】記載した本発明の態様による全体的技法を示すフローチャートである。
【図４５】本発明の一プロセスによる、コンピュータ１０２内の処理モジュールを示す概略的なブロック図である。
【図４６】本発明による、コンピュータ又は他の処理装置内のディスク（取外し可能又は取外し不可能）或いは他の記憶要素１２０内部のソフトウェア製品モジュールを示す概略的なブロック図である。
【図１】
2009534759.tif 000003
【図２Ａ】
2009534759.tif 000004
【図２Ｂ】
2009534759.tif 000005
【図３】
2009534759.tif 000006
【図４】
2009534759.tif 000007
【図５】
2009534759.tif 000008
【図６】
2009534759.tif 000009
【図７Ａ】
2009534759.tif 000010
【図７Ｂ】
2009534759.tif 000011
【図７Ｃ】
2009534759.tif 000012
【図７Ｄ】
2009534759.tif 000013
【図８】
2009534759.tif 000014
【図９】
2009534759.tif 000015
【図１０】
2009534759.tif 000016
【図１１】
2009534759.tif 000017
【図１２】
2009534759.tif 000018
【図１３】
2009534759.tif 000019
【図１４Ａ】
2009534759.tif 000020
【図１４Ｂ】
2009534759.tif 000021
【図１４Ｃ】
2009534759.tif 000022
【図１５Ａ】
2009534759.tif 000023
【図１５Ｂ】
2009534759.tif 000024
【図１５Ｃ】
2009534759.tif 000025
【図１６】
2009534759.tif 000026
【図１７Ａ】
2009534759.tif 000027
【図１７Ｂ】
2009534759.tif 000028
【図１７Ｃ】
2009534759.tif 000029
【図１７Ｄ】
2009534759.tif 000030
【図１８】
2009534759.tif 000031
【図１９】
2009534759.tif 000032
【図２０Ａ】
2009534759.tif 000033
【図２０Ｂ】
2009534759.tif 000034
【図２０Ｃ】
2009534759.tif 000035
【図２１Ａ】
2009534759.tif 000036
【図２１Ｂ】
2009534759.tif 000037
【図２１Ｃ】
2009534759.tif 000038
【図２１Ｄ】
2009534759.tif 000039
【図２２Ａ】
2009534759.tif 000040
【図２２Ｂ】
2009534759.tif 000041
【図２２Ｃ】
2009534759.tif 000042
【図２２Ｄ】
2009534759.tif 000043
【図２２Ｅ】
2009534759.tif 000044
【図２３Ａ】
2009534759.tif 000045
【図２３Ｂ】
2009534759.tif 000046
【図２３Ｃ】
2009534759.tif 000047
【図２３Ｄ】
2009534759.tif 000048
【図２４Ａ】
2009534759.tif 000049
【図２４Ｂ】
2009534759.tif 000050
【図２５Ａ】
2009534759.tif 000051
【図２５Ｂ】
2009534759.tif 000052
【図２５Ｃ】
2009534759.tif 000053
【図２５Ｄ】
2009534759.tif 000054
【図２６】
2009534759.tif 000055
【図２７】
2009534759.tif 000056
【図２８】
2009534759.tif 000057
【図２９】
2009534759.tif 000058
【図３０Ａ】
2009534759.tif 000059
【図３０Ｂ】
2009534759.tif 000060
【図３０Ｃ】
2009534759.tif 000061
【図３１Ａ】
2009534759.tif 000062
【図３１Ｂ】
2009534759.tif 000063
【図３１Ｃ】
2009534759.tif 000064
【図３２Ａ】
2009534759.tif 000065
【図３２Ｂ】
2009534759.tif 000066
【図３２Ｃ】
2009534759.tif 000067
【図３３Ａ】
2009534759.tif 000068
【図３３Ｂ】
2009534759.tif 000069
【図３３Ｃ】
2009534759.tif 000070
【図３３Ｄ】
2009534759.tif 000071
【図３３Ｅ】
2009534759.tif 000072
【図３４】
2009534759.tif 000073
【図３５】
2009534759.tif 000074
【図３６】
2009534759.tif 000075
【図３７】
2009534759.tif 000076
【図３８】
2009534759.tif 000077
【図３９】
2009534759.tif 000078
【図４０】
2009534759.tif 000079
【図４１】
2009534759.tif 000080
【図４２】
2009534759.tif 000081
【図４３】
2009534759.tif 000082
【図４４】
2009534759.tif 000083
【図４５】
2009534759.tif 000084
【図４６】
2009534759.tif 000085
【国際調査報告】
2009534759.tif 000086