(57)【要約】【課題】  光線追跡法を実行するためのより効率的な技術及び装置を提供すること。【解決手段】  本発明の実施形態は、空間インデックスを分割するための装置及び技術を提供する。本発明の一実施形態において、画像処理システムは、異なる処理要素が空間インデックスの異なる部分を通る光線のトラバースを担当できるように、空間インデックスを複数の部分に分割することができる。空間インデックスをどこで分割するかの判定は、いずれかの数の要因に基づいて行なうことができる。例えば、本発明の幾つかの実施形態によると、多数の処理要素の間で作業負荷（例えば、実時間の性能メトリクスによって決定される）を均等に配分するように、空間インデックスを分割することができる。作業負荷を配分するように空間インデックスを分割することは、結果として得られる各区画内に含まれるノードの総数、葉ノードの数、又はプリミティブの数に基づくことができる。【選択図】      図５
2010501922.tif 000002
【特許請求の範囲】
【請求項１】
３次元シーンの境界ボリュームを定めるノードを有する空間インデックスを分割する方法であって、
第１の処理要素及び第２の処理要素を準備するステップと、
前記空間インデックスを少なくとも第１の部分及び第２の部分に分割するステップであって、前記第１の処理要素は、前記第１の部分を通る光線をトラバースすることに関連した１つ又は複数のアルゴリズムを実行するように動作可能であり、前記第２の処理要素は、前記第２の部分を通る光線をトラバースすることに関連した１つ又は複数のアルゴリズムを実行するように動作可能である、ステップと
を含む方法。
【請求項２】
前記方法は、
前記空間インデックスを第３の部分に分割するステップであって、前記第１の処理要素及び前記第２の処理要素は前記第３の部分を通る光線をトラバースすることに関連した１つ又は複数のアルゴリズムを実行するように動作可能である、ステップ
をさらに含む、請求項１に記載の方法。
【請求項３】
前記第１の処理要素は第１の処理コア上に配置され、前記第２の処理要素は第２の処理コア上に配置される、請求項１又は請求項２に記載の方法。
【請求項４】
前記空間インデックスを分割するステップは、
前記空間インデックス内のノードの数を求めるステップと、
前記空間インデックス内の前記ノードの数に基づいて、前記空間インデックス内の前記ノードの数が前記第１の処理要素と前記第２の処理要素との間で均等に配分されるように、前記空間インデックスを分割するステップと
を含む、請求項１、請求項２、又は請求項３に記載の方法。
【請求項５】
前記空間インデックスを分割するステップは、
前記第１の処理要素又は前記第２の処理要素の少なくとも一方の作業負荷を判断するステップと、
前記作業負荷が前記第１の処理要素と前記第２の処理要素との間で均等に配分されるように、前記空間インデックスを分割するステップと、
を含む、請求項１、請求項２、又は請求項３に記載の方法。
【請求項６】
前記空間インデックスを分割するステップは、
前記空間インデックスの葉ノード内に含まれるプリミティブの数を求めるステップと、
前記空間インデックスの葉ノード内に含まれる前記プリミティブの数に基づいて、前記プリミティブの数が前記第１の処理要素と前記第２の処理要素との間で均等に配分されるように、前記空間インデックスを分割するステップと
を含む、請求項１、請求項２、又は請求項３に記載の方法。
【請求項７】
前記第１の部分は前記第１の処理要素のメモリ・キャッシュに格納され、前記第２の部分は前記第２の処理要素のメモリ・キャッシュに格納される、請求項１乃至請求項６のいずれかに記載の方法。
【請求項８】
前記空間インデックスを少なくとも前記第１の部分及び前記第２の部分に分割するステップが定期に行なわれる、請求項１乃至請求項７のいずれかに記載の方法。
【請求項９】
３次元シーンの境界ボリュームを定めるノードを有する空間インデックスをトラバースする方法であって、
前記空間インデックスの少なくとも１つの分岐を通る少なくとも１つの分割境界を生成することによって、前記空間インデックスを少なくとも第１の区画及び第２の区画に分割するステップと、
前記シーン内に光線を生成するステップと、
葉ノードに到達するまで内部ノードから分岐を行なうことによって前記空間インデックスをトラバースするステップであって、前記光線が前記ノードによって定められた境界ボリュームと交差するか否かに基づいて分岐が行なわれる、ステップと、
前記分割境界を含む前記分岐が行われたとき、前記光線を定める情報を第１の処理要素から第２の処理要素に送るステップと
を含む方法。
【請求項１０】
前記空間インデックスを分割するステップは、
前記空間インデックス内のノードの数を求めるステップと、
前記空間インデックス内の前記ノードの数が前記第１の区画と前記第２の区画との間で均等に配分されるように、前記分割境界を生成するステップと
を含む、請求項９に記載の方法。
【請求項１１】
前記空間インデックスを分割するステップは、
前記第１の処理要素又は前記第２の処理要素のうちの少なくとも一方の作業負荷を求めるステップと、
前記作業負荷が前記第１の処理要素と前記第２の処理要素との間で均等に配分されるように、前記分割境界を生成するステップと、
を含む、請求項９に記載の方法。
【請求項１２】
前記第１の処理要素は第１の処理コア上に配置され、前記第２の処理要素は第２の処理コア上に配置される、請求項９乃至請求項１１のいずれかに記載の方法。
【請求項１３】
前記第１の部分は前記第１の処理要素のメモリ・キャッシュ内に格納され、前記第２の部分は前記第２の処理要素のメモリ・キャッシュ内に格納される、請求項９乃至請求項１２のいずれかに記載の方法。
【請求項１４】
３次元シーンの境界ボリュームを定めるノードを有する空間インデックスと、
第１の処理要素と、
第２の処理要素と、
前記空間インデックスを少なくとも第１の部分及び第２の部分に分割するように構成された画像処理システムであって、前記第１の処理要素は、前記第１の部分を通る光線をトラバースすることに関連したアルゴリズムを実行するように動作可能であり、前記第２の処理要素は、前記第２の部分を通る光線をトラバースすることに関連した１つ又は複数のアルゴリズムを実行するように動作可能である、画像処理システムと
を備えるシステム。
【請求項１５】
前記画像処理システムは、前記空間インデックスを第３の部分に分割するようにさらに構成され、前記第１の処理要素及び前記第２の処理要素は、前記第３の部分を通る光線をトラバースすることに関連したアルゴリズムを実行するように動作可能である、請求項１４に記載のシステム。
【請求項１６】
第１の処理コアと、
第２の処理コアと、
をさらに備え、
前記第１の処理要素は第１の処理コア上に配置され、前記第２の処理要素は第２の処理コア上に配置される、請求項１４又は請求項１５に記載のシステム。
【請求項１７】
前記画像処理システムは、
前記空間インデックス内のノードの数を求め、
前記空間インデックス内の前記ノードの数に基づいて、前記空間インデックス内の前記ノードの数が前記第１の処理要素と前記第２の処理要素との間で均等に配分されるように、前記空間インデックスを分割する、
ようにさらに構成される、請求項１４、請求項１５、又は請求項１６に記載のシステム。
【請求項１８】
前記画像処理システムは、
前記第１の処理要素又は前記第２の処理要素の少なくとも１つの作業負荷を求め、
前記作業負荷が前記第１の処理要素と前記第２の処理要素との間で均等に配分されるように、前記空間インデックスを分割する、
ようにさらに構成される、請求項１４、請求項１５、又は請求項１６に記載のシステム。
【請求項１９】
前記画像処理システムは、
前記空間インデックスの葉ノード内に含まれるプリミティブの数を求め、
前記空間インデックスの葉ノード内に含まれる前記プリミティブの数に基づいて、前記プリミティブの数が前記第１の処理要素と前記第２の処理要素との間で均等に配分されるように、前記空間インデックスを分割する、
ようにさらに構成される、請求項１４、請求項１５、又は請求項１６に記載のシステム。
【請求項２０】
前記第１の処理要素のためのキャッシュ・メモリと、
前記第２の処理要素のためのキャッシュ・メモリと
をさらに備え、
前記第１の部分は前記第１の処理要素のためのメモリ・キャッシュに格納され、前記第２の部分は前記第２の処理要素のためのメモリ・キャッシュに格納される、請求項１４乃至請求項１９のいずれかに記載のシステム。
【請求項２１】
３次元シーンの境界ボリュームを定めるノードを有する空間インデックスを分割するためのコンピュータ・プログラムであって、前記コンピュータ・プログラムは、前記空間インデックスを少なくとも第１の部分及び第２の部分に分割するステップを実行するように適合されたプログラム・コード手段を含み、第１の処理要素は前記第１の部分を通る光線をトラバースすることに関連した１つ又は複数のアルゴリズムを実行するように作動可能であり、第２の処理要素は前記第２の部分を通る光線をトラバースすることに関連した１つ又は複数のアルゴリズムを実行するように作動可能であり、前記ステップは、プログラムがコンピュータ上で実行されるときに行なわれる、コンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、一般に、コンピュータ処理の分野に関する。
【背景技術】
【０００２】
３次元シーンから２次元画像をレンダリングするプロセスは、一般に、画像処理と呼ばれる。現代のコンピュータ産業が発展するに従い、画像処理もまた発展してきた。画像処理の発展における１つの特定の目標は、３次元シーンの２次元シミュレーション又は表現（rendition）を、できる限り現実的なものにすることである。現実的な画像をレンダリングする際の１つの制限は、現代のモニタがピクセルの使用を通して画像を表示するということである。ピクセルは、モニタ上で照射することができる最小の領域である。最新のコンピュータ・モニタは、ディスプレイ全体又はレンダリングされたシーンを構成するために、何十万又は何百万ものピクセルの組み合わせを使用する。個々のピクセルは、グリッド・パターン状に配列されており、モニタの表示領域全体を集合的に覆う。個々のピクセルを照射して、表示用の最終的なピクチャをレンダリングすることができる。
【０００３】
ピクセルを用いて２次元モニタ上に実世界の３次元シーンをレンダリングするための１つの技術は、ラスタ化（rasterization）と呼ばれる。ラスタ化とは、ベクトル形式（シーン内の幾何学的物体の数学的表現）で表される２次元画像を取得し、モニタ上に表示するために、その画像を個々のピクセルに変換するプロセスである。ラスタ化は、グラフィックスを速くレンダリングし、比較的少量の計算能力しか使用しないという点で有効であるが、このラスタ化は幾つかの欠点を抱えている。例えば、ラスタ化は、光の物理的性質に基づくものではなく、寧ろ、２次元平面上に投影されるシーンにおける３次元の幾何学的物体の形状に基づいているので、現実感が不足することが多い。さらに、ラスタ化を用いてシーンをレンダリングするのに必要な計算能力は、レンダリングされるシーンの複雑さが増すのに応じて直接的に拡張する。画像処理がより現実的になるに従い、レンダリングされるシーンもより複雑になる。従って、複雑さに伴ってラスタ化が直接的に拡張するので、画像処理が発展すると共に、ラスタ化は困難を抱える。
【０００４】
ピクセルを用いて２次元モニタ上に実世界の３次元シーンをレンダリングするための別の技術は、光線追跡法（ray tracing）と呼ばれる。光線追跡技術は、コンピュータ・スクリーン上にレンダリングされる３次元シーンへの、通常の光線と同様に振る舞う想像上の光線の伝搬を追跡する。これらの光線は、コンピュータ・スクリーンの後ろに位置する観察者の目から発し、コンピュータ・スクリーンを構成するピクセルを通過し、３次元シーンの方向に向かう。追跡される各光線はシーンに進入し、シーン内の物体と交差することがある。光線がシーン内の物体と交差した場合には、その物体の性質及び他の幾つかの他の寄与要因を用いて、光線が曝される色及び光の量、又はそれらの欠如を算出する。次いで、これらの計算を用いて、追跡される光線が通過したピクセルの最終的な色を決定する。
【０００５】
光線を追跡するプロセスは、単一の３次元シーンについて何度も行なわれる。例えば、ディスプレイ内の各ピクセルごとに単一の光線を追跡することができる。コンピュータ・スクリーンの２次元表示を構成する全てのピクセルの色を決定するのに十分な数の光線が追跡されると、観察者に対して、３次元シーンの２次元合成をコンピュータ・スクリーン上に表示することができる。
【０００６】
光線追跡法は、一般的に、ラスタ化よりも多くの現実感を伴って、実世界の３次元シーンをレンダリングする。これは、特に、光線追跡法が、ラスタ化を用いてなされるように単に３次元的形状を２次元平面上に投影するのではなく、実世界の環境において光がどのように進み、振る舞うかをシミュレートするためである。従って、光線追跡法を用いてレンダリングされるグラフィックスは、我々の目が実世界で見慣れているものを、より正確にモニタ上に描写する。
【０００７】
さらに、光線追跡法はまた、シーンがより複雑になるにつれて、ラスタ化よりも良好にシーンの複雑さの増大に対応する。光線追跡法は、シーンの複雑さに応じて対数的に拡張する。これは、シーンがより複雑になったとしても、同じ数の光線をシーンに投射することができるためである。従って、光線追跡法は、シーンがより複雑になっても、ラスタ化のように計算能力の要件に関して問題を抱えることはない。
【０００８】
光線追跡法の１つの主要な欠点は、シーンのレンダリングに大量の計算、よって、大量の処理能力を必要とすることである。このことは、速いレンダリングを必要とするときに問題をもたらす。例えば、画像処理システムが、ゲーム機などにおけるように、アニメーション用のグラフィックスをレンダリングする場合である。光線追跡法に関する計算要件の増大に起因して、現実的に見えるのに十分な程アニメーションを速くレンダリングするのは困難である（現実的なアニメーションは、毎秒約２０〜２４フレームである）。
【発明の開示】
【発明が解決しようとする課題】
【０００９】
従って、光線追跡法を実行するためのより効率的な技術及び装置に対する必要性が存在する。
【課題を解決するための手段】
【００１０】
本発明の実施形態は、一般に、光線追跡法を実施するための方法及び装置を提供する。
【００１１】
本発明の第１の態様によると、３次元シーンの境界ボリュームを定めるノードを有する空間インデックスを分割する方法が提供される。この方法は、一般に、第１の処理要素及び第２の処理要素を準備するステップと、空間インデックスを少なくとも第１の部分及び第２の部分に分割するステップであって、第１の処理要素は第１の部分を通る光線をトラバースすることに関連した１つ又は複数のアルゴリズムを実行するように動作可能であり、第２の処理要素は第２の部分を通る光線をトラバースすることに関連した１つ又は複数のアルゴリズムを実行するように動作可能である、ステップとを含む。
【００１２】
本発明の第２の態様によると、３次元シーンの境界ボリュームを定めるノードを有する空間インデックスをトラバースする方法が提供される。この方法は、一般に、空間インデックスの少なくとも１つの分岐を通る少なくとも１つの分割境界を生成することによって、空間インデックスを少なくとも第１の区画及び第２の区画に分割するステップと、シーン内に光線を生成するステップと、葉ノードに到達するまで内部ノードから分岐を行なうことによって空間インデックスをトラバースするステップであって、光線がノードによって定められた境界ボリュームと交差するか否かに基づいて分岐が行なわれる、ステップと、分割境界を含む分岐が行なわれたとき、光線を定める情報を第１の処理要素から第２の処理要素に送るステップとを含む。
【００１３】
本発明の第３の態様によると、システムが提供される。このシステムは、一般に、３次元シーンの境界ボリュームを定めるノードを有する空間インデックスと、第１の処理要素と、第２の処理要素と、画像処理システムとを含む。画像処理システムは、一般に、空間インデックスを少なくとも第１の部分及び第２の部分に分割するように構成され、第１の処理要素は、第１の部分を通る光線をトラバースすることに関連した１つ又は複数のアルゴリズムを実行するように動作可能であり、第２の処理要素は第２の部分を通る光線をトラバースすることに関連した１つ又は複数のアルゴリズムを実行するように動作可能である。
【００１４】
本発明の第４の態様によると、３次元シーンの境界ボリュームを定めるノードを有する空間インデックスを分割するためのコンピュータ・プログラムであって、このコンピュータ・プログラムは、空間インデックスを少なくとも第１の部分及び第２の部分に分割するステップを実行するように適合されたプログラム・コード手段を含み、第１の処理要素は前記第１の部分を通る光線をトラバースすることに関連した１つ又は複数のアルゴリズムを実行するように作動可能であり、第２の処理要素は第２の部分を通る光線をトラバースすることに関連した１つ又は複数のアルゴリズムを実行するように作動可能であり、ステップは、プログラムがコンピュータ上で実行されるときに実行される。
【発明を実施するための最良の形態】
【００１５】
ここで、本発明の好ましい実施形態が、ほんの一例として添付の図面を参照して説明される。
【００１６】
本発明の実施形態は、空間インデックスを分割するための装置及び技術を提供する。本発明の一実施形態において、画像処理システムは、異なる処理要素が空間インデックスの異なる部分を通る光線のトラバースを担当できるように、空間インデックスを複数の部分に分割することができる。空間インデックスをどこで分割するかの判定は、いずれかの数の要因に基づいて行なうことができる。例えば、本発明の幾つかの実施形態によると、多数の処理要素の間で作業負荷を均等に配分するように、空間インデックスを分割することができる。作業負荷を均等に配分するように空間インデックスを分割することは、結果として得られる各区画内に含まれる内部ノードの数、結果として得られる各区画内に含まれる葉ノードの数、又は結果として得られる各区画内に含まれるプリミティブの数に基づくことができる。
【００１７】
以下において、本発明の実施形態を参照する。しかしながら、本発明は、説明される特定の実施形態に制限されるものではないことを理解すべきである。代わりに、異なる実施形態に関連しようとしまいと、以下の特徴及び要素のいずれの組み合わせも、本発明を実装し、実行するものと考えられる。さらに、種々の実施形態において、本発明は、従来技術に優る多数の利点を提供する。しかしながら、本発明の実施形態は、他の可能な解決法及び／又は従来技術に優る利点を達成できるが、所定の実施形態によって特定の利点が達成されるかどうかは、本発明の制限ではない。従って、以下の側面、特徴、実施形態及び利点は、単なる例証にすぎず、特許請求の範囲において明示的に列挙される場合を除いて、添付の特許請求の範囲の要素又は制限と考えられるものではない。同様に、「本発明」への言及は、ここに開示される本発明の何らかの主題の一般化として解釈されるものではなく、特許請求の範囲において明示的に列挙される場合を除いて、添付の特許請求の範囲の要素又は制限と考えられるものではない。
【００１８】
例示的なプロセッサ・レイアウト及び通信ネットワーク
図１は、本発明の一実施形態によるマルチコア処理要素１００を示す。マルチコア処理要素１００は、複数の基本的スループット・エンジン１０５（ＢＴＥ）を含む。ＢＴＥ１０５は、複数の処理スレッドと、コア・キャッシュ（例えば、Ｌ１キャッシュ）とを含むことができる。各々のＢＴＥ内に配置された処理スレッドは、共有されるマルチコア処理要素キャッシュ１１０（例えば、Ｌ２キャッシュ）にアクセスすることができる。
【００１９】
ＢＴＥ１０５はまた、複数のインボックス１１５にもアクセスすることができる。インボックス１１５は、メモリマッピングされたアドレス空間とすることができる。各ＢＴＥ１０５内に配置された処理スレッドにインボックス１１５をマッピングすることができる。ＢＴＥ内に配置された各スレッドは、メモリマッピングされたインボックスを有することができ、かつ、他の全てのメモリマッピングされたインボックス１１５にアクセスすることができる。インボックス１１５は、ＢＴＥ１０５が使用する低遅延、高帯域幅の通信ネットワークを構成する。
【００２０】
ＢＴＥは、互いに通信し、データ処理作業をＢＴＥ間で再配分するためのネットワークとして、インボックス１１５を用いることができる。幾つかの実施形態については、例えば、ＢＴＥ１０５による処理の結果を受信するために、通信ネットワーク内で別個のアウトボックスを使用することができる。他の実施形態については、インボックス１１５は、アウトボックスとして働くこともでき、例えば、１つのＢＴＥ１０５が処理機能の結果を別のＢＴＥ１０５のインボックスに直接的に書き込んだ場合、別のＢＴＥ１０５がその結果を使用することになる。
【００２１】
画像処理システムの総合性能は、ＢＴＥ１０５がどれくらい良好に作業を分割し、再配分できるかに関係し得る。インボックス１１５のネットワークを用いて、フレーム間コヒーレンシを有さないＢＴＥ通信情報パケットにより共有のマルチコア処理要素キャッシュ１１０を破損することなく、作業を収集し、これを他のＢＴＥ１０５に配分することができる。１フレーム当たり何百万もの三角形をレンダリングすることができる画像処理システムは、このように接続された多数のＢＴＥ１０５を含むことができる。
【００２２】
本発明の一実施形態においては、１つのＢＴＥ１０５のスレッドを、作業負荷マネージャ（workload manager）に割り当てることができる。画像処理システムは、種々のソフトウェア及びハードウェア・コンポーネントを用いて、３次元シーンから２次元画像をレンダリングすることができる。本発明の一実施形態によると、画像処理システムは、作業負荷マネージャを用いて、この画像処理システムにより出された光線を用いて空間インデックスをトラバース(traverse)することができる。図４に関して以下に更に説明されるように、比較的大きな３次元シーンをより小さな境界ボリューム（bounding volume）に分割するために、空間インデックスが使用される、ツリー型（tree  type）データ構造として実装することができる。画像処理のために光線追跡法を用いる画像処理システムは、空間インデックスを用いて、光線−境界ボリューム交差を速やかに判定することができる。本発明の一実施形態においては、作業負荷マネージャは、空間インデックスを用いて、光線−境界ボリューム交差テストを行なうことができる。
【００２３】
本発明の一実施形態においては、マルチコア処理要素１００上のマルチコア処理要素ＢＴＥ１０５の他のスレッドは、ベクトル・スループット・エンジンとすることができる。作業負荷マネージャは、光線−境界ボリューム交差を判定した後、インボックス１１５を介して複数のベクトル・スループット・エンジンのうちの１つに光線を出す（送る）ことができる。次いで、ベクトル・スループット・エンジンは、光線が境界ボリューム内に含まれるプリミティブと交差するか否かを判定することができる。ベクトル・スループット・エンジンはまた、光線が通過したピクセルの色の決定に関係する操作を行なうこともできる。
【００２４】
図２は、本発明の一実施形態によるマルチコア処理要素のネットワーク２００を示す。図２はまた、マルチコア処理要素１００のＢＴＥ１０５の１つのスレッドが作業負荷マネージャ２０５である、本発明の一実施形態も示す。本発明の一実施形態によると、マルチコア処理要素のネットワーク２００内の各マルチコア処理要素２２０１−Ｎは、１つの作業負荷マネージャ２０５１−Ｎを含むことができる。本発明の一実施形態によると、マルチコア処理要素のネットワーク２００内の各マルチコア処理要素２２０１−Ｎはまた、複数のベクトル・スループット・エンジン２１０を含むこともできる。
【００２５】
本発明の一実施形態によると、作業負荷マネージャ２０５１−Ｎは、他の作業負荷マネージャ２０５１−Ｎ及び／又は他のマルチコア処理要素２２０のベクトル・スループット・エンジン２１０と通信するために、高速バス２２５を用いることができる。各ベクトル・スループット・エンジン２１０は、高速バス２２５を用いて、他のベクトル・スループット・エンジン２１０又は作業負荷マネージャ２０５と通信することができる。作業負荷マネージャ・プロセッサ２０５は、高速バス２２５を用いて、画像処理に関連するタスクを収集し、これを他の作業負荷マネージャ・プロセッサ２０５に配分し、及び／又はタスクを他のベクトル・スループット・エンジン２１０に配分することができる。高速バス２２５を用いることにより、作業負荷マネージャ２０５１−Ｎは、作業負荷マネージャ２０５の通信と関連したデータ・パケットでキャッシュ２３０に影響を与えることなく、通信することが可能になる。
【００２６】
例示的な３次元シーン
図３は、画像処理システムによってレンダリングされる例示的な３次元シーン３０５である。３次元シーン３０５内には、物体３２０が存在し得る。図３の物体３２０は、異なる幾何学的形状を有する。図３には４つの物体３２０だけ示されているが、典型的な３次元シーンにおける物体の数は、これより多いことも少ないこともある。一般に、３次元シーンは、図３に示されるよりもずっと多くの物体を有する。
【００２７】
図３に見られるように、物体は、様々な幾何学的形状及びサイズを有する。例えば、図３の１つの物体は、角錐３２０Ａである。図３の他の物体は、箱形３２０Ｂ−Ｄである。最近の多くの画像処理システムにおいては、物体は、より小さな幾何学的形状（例えば、正方形、円、三角形等）に分割されることが多い。次いで、多数のより小さく単純な幾何学的形状によって、より大きな物体が表される。これらのより小さな幾何学的形状は、多くの場合、プリミティブ（primitive）と呼ばれる。
【００２８】
シーン３０５内には、光源３２５Ａ−Ｂも示されている。これらの光源は、シーン３０５内に配置された物体３２０を照射することができる。さらに、シーン３０５内の光源３２５及び物体３２０の位置によって、これらの光源は、シーン３０５内の物体上に影を落とすことがある。
【００２９】
画像処理システムによって、３次元シーン３０５を２次元ピクチャにレンダリングすることができる。画像処理システムはまた、２次元ピクチャをモニタ３１０上に表示させることもできる。モニタ３１０は、最終的な２次元ピクチャをレンダリングするために、異なる色の多数のピクセル３３０を用いることができる。
【００３０】
３次元シーン３０５を２次元ピクチャにレンダリングするために画像処理システムによって用いられる１つの方法は、光線追跡法と呼ばれる。光線追跡法は、観察者の視点３１５から３次元シーン３０５に向けて光線を「出す(issuing)」又は「発射する（shooting）」画像処理システムによって達成される。これらの光線は、通常の光線と類似した特性及び振る舞いを有する。
【００３１】
図３において、観察者３１５の位置から発し、３次元シーン３０５を通過する１つの光線３４０を見ることができる。光線３４０が観察者３１５から３次元シーン３０５に進むとき、この光線３４０は、画像処理システムが最終的な２次元ピクチャをレンダリングする平面を通過する。図３では、この平面はモニタ３１０で表される。光線３４０がこの平面、即ちモニタ３１０を通過する点は、ピクセル３３５で表される。
【００３２】
上記に簡単に説明したように、大部分の画像処理システムは、モニタ３１０上に最終的なシーンをレンダリングするために、何十万（何百万でないとしても）ものピクセルのグリッド３３０を使用する。それぞれのピクセルは、モニタ３１０上に最終的な合成の２次元ピクチャをレンダリングするために、異なる色を表示することができる。３次元シーンから２次元ピクチャをレンダリングするために光線追跡による画像処理方法を用いる画像処理システムは、出された光線が３次元シーンにおいて遭遇する色を計算する。次いで、画像処理システムは、光線が観察者から３次元シーンに向かう途中で通過したピクセルに、光線が遭遇した色を割り当てる。
【００３３】
１ピクセル当たりに出される光線の数は、変化し得る。幾つかのピクセルは、レンダリングされる特定のシーンに対して出される多数の光線を有することができる。その場合、そのピクセルの最終的な色は、該ピクセルに対して出された光線の全てからの各色の寄与によって決定される。他のピクセルは、２次元ピクチャ内のピクセルの、結果的に得られる色を決定するために出された単一の光線だけを有することがある。幾つかのピクセルは、画像処理システムによって出された如何なる光線も有さず、その場合、画像処理システム内のアルゴリズムによって、それらのピクセルの色を決定し、近似させ、又は割り当てることができる。
【００３４】
２次元ピクチャ内のピクセル３３５の最終的な色を決定するために、画像処理システムは、光線３４０がシーン内の物体と交差するか否かを判定する必要がある。光線がシーン内の物体と交差しない場合には、それにはデフォルトの背景色（例えば、日中の空又は夜空を表す、青又は黒）を割り当てることができる。逆に、光線３４０が３次元シーンを通過する際に、光線３４０が物体に当たることがある。光線がシーン内の物体に当たる際、光線が通過するピクセルに対して、その物体の色を割り当てることができる。しかしながら、ピクセルに割り当てる前に、その物体の色を決定しなければならない。
【００３５】
元の光線３４０が当たった物体の色には、多くの要因が寄与し得る。例えば、３次元シーン内の光源が物体を照射することがある。さらに、物体の物理的性質が、その物体の色に寄与することがある。例えば、物体が反射性又は透明である場合には、他の非光源物体がその物体の色に寄与することもある。
【００３６】
３次元シーン内の他の物体からの効果を判定するために、元の光線３４０が物体と交差した点から２次光線を出すことができる。例えば、１つのタイプの２次光線は、影光線（shadow ray）とすることができる。影光線を用いて、元の光線３４０が物体と交差した点への光の寄与を判定することができる。別のタイプの２次光線は、透過光線（transmitted ray）とすることができる。透過光線を用いて、どの色又は光が物体の本体を透過できるのかを判定することができる。さらに、第３のタイプの２次光線は、反射光線（reflected ray）とすることができる。反射光線を用いて、どの色又は光が物体上で反射されるのかを判定するのに用いることができる。
【００３７】
上述されたように、１つのタイプの２次光線は、影光線とすることができる。各影光線は、元の光線と物体の交点から３次元シーン３０５内の光源まで追跡することができる。影光線が光源に到達する前に別の物体に遭遇することなく、光線が光源に到達する場合には、光源は、元の光線が物体に当たった点で、元の光線が当たった物体を照射するであろう。
【００３８】
例えば、影光線３４１Ａは、元の光線３４０が物体３２０Ａと交差した点から出て、光源３２５Ａに向かう方向に進むことができる。影光線３４１Ａは、シーン３０５内の他のいずれの物体にも遭遇せずに、光源３２５Ａに到達する。従って、光源３２５Ａは、元の光線３４０が物体３２０Ａと交差した点において物体３２０Ａを照射することになる。
【００３９】
他の影光線は、元の光線が物体に当たった点と、３次元シーン内の他の物体によって遮蔽される光源との間に、それらの経路を有することができる。元の光線が当たった物体上の点と光源との間の経路を妨げる物体が不透明である場合には、光源は、元の光線が物体に当たった点において物体を照射しない。従って、光源は、元の光線の色に寄与せず、その結果、２次元ピクチャ内のレンダリングされるピクセルの色にも寄与し得ない。しかしながら、物体が半透明又は透明である場合には、光源は、元の光線が物体に当たった点において物体を照射することができる。
【００４０】
例えば、影光線３４１Ｂは、元の光線３４０が物体３２０Ａと交差した点から出て、光源３２５Ｂに向かう方向に進むことができる。この例では、影光線３４１Ｂの経路は、物体３２０Ｄによって遮断される。物体３２０Ｄが不透明である場合には、光源３２５Ｂは、元の光線３４０が物体３２０Ａと交差した点において物体３２０Ａを照射することはない。しかしながら、物体３２０Ｄが半透明又は透明である場合には、光源３２５Ｂは、元の光線３４０が物体３２０Ａと交差した点において物体３２０Ａを照射することができる。
【００４１】
別のタイプの２次光線は、透過光線である。元の光線３４０と交差した物体が透明又は半透明の特性を有する（例えば、ガラス）場合、画像処理システムによって、透過光線を出すことができる。透過光線は、元の光線が物体に当たった角度に対してある角度で物体を通過する。例えば、透過光線３４４は、元の光線３４０が交差した物体３２０Ａを通過するように見える。
【００４２】
別のタイプの２次光線は、反射光線である。元の光線と交差した物体が反射特性を有する場合には（例えば、金属仕上げ）、どの色又は光が物体に反射し得るかを判定するために、画像処理システムによって反射光線が出される。反射光線は、元の光線が物体と交差した角度に対してある角度で、物体から遠ざかるように進む。例えば、どの色又は光が、元の光線３４０が交差した物体３２０Ａに反射され得るかを判定するために、画像処理システムによって反射光線３４３を出すことができる。
【００４３】
全ての２次光線（例えば、影光線、透過光線、反射光線など）の色及び光の寄与全体により、元の光線が通過したピクセルの最終的な色がもたらされることになる。
【００４４】
例示的なｋｄ木
光線追跡法を実施する際に遭遇する１つの問題は、出された光線がレンダリングされるシーン内のいずれかの物体と交差するか否かを、速やかに且つ効率的に判定することである。光線の交差をより効率的に判定するための当業者には周知の１つの方法は、空間インデックスを使用するものである。空間インデックスは、３次元シーン又は世界を、プリミティブを含んでいることも含んでいないこともある、より小さなボリューム（３次元シーン全体に比べて小さな）に分ける。次いで、画像処理システムは、これらの小さなボリュームの既知の境界を用いて、光線が、これらの小さなボリューム内に含まれるプリミティブと交差するか否かを判定することができる。光線がプリミティブを含むボリュームと交差する場合には、そのボリューム内に含まれるプリミティブの既知の位置及び寸法に対して、光線の軌跡を用いて光線交差テストを行なうことができる。光線が特定のボリュームと交差しない場合には、そのボリューム内に含まれるプリミティブに対して光線−プリミティブ交差テストを行なう必要はない。さらに、光線が、プリミティブを含まない境界ボリュームと交差する場合には、その境界ボリュームに対して光線−プリミティブ交差テストを行う必要はない。従って、必要となり得る光線−プリミティブ交差テスト数を低減させることで、空間インデックスを用いることにより、光線追跡法を用いる画像処理システムの性能が大きく向上する。異なる空間インデックス加速データ構造の幾つかの例は、八分木（octree）、ｋ次元木（kd-Tree、ｋｄ木）及び二分空間分割木（binary space partioning tree、ＢＳＰ木）である。幾つかの異なる空間インデックス構造が存在するが、本発明の実施形態を説明する便宜上、以下の例においてはｋｄ木が用いられる。しかしながら、当業者であれば、本発明の実施形態は、異なるタイプの空間インデックスの任意のものにも適用し得ることを容易に理解するであろう。
【００４５】
ｋｄ木は、シーン全体又は空間をより小さなボリュームに分割するために、軸平行の（axis aligned）境界ボリュームを使用する。つまり、ｋｄ木は、既知の軸線と平行な分割用平面を用いて、シーンが含む３次元空間を分けることができる。分割用平面は、１つのより大きな空間をより小さな境界ボリュームに分割する。より小さな境界ボリュームは、協働してシーン内の空間全体を構成する。ｋｄ木構築アルゴリズムを用いて、画像処理システムにより、１つのより大きな境界ボリュームを２つのより小さな境界ボリュームに分割する（分ける）という決定を行なうことができる。
【００４６】
１つの境界ボリュームをより小さなボリュームにいつ分割するかを決定するための１つの基準は、境界ボリューム内に含まれるプリミティブの数とすることができる。つまり、１つの境界ボリュームが所定の閾値よりも多くのプリミティブを含む限り、木構築アルゴリズムは、より多くの分割用平面を引くことによってボリュームの分割を続行することができる。１つの境界ボリュームをより小さなボリュームにいつ分割するかを決定するための別の基準は、１つの境界ボリューム内に含まれる空間の量とすることができる。さらに、境界ボリュームの分割を続行するという決定はまた、境界ボリュームを生成する平面と交差することができるプリミティブの数に基づいてもよい。
【００４７】
シーンの分割は、ノード、岐及び葉から構成される２分木（binary tree）構造で表すことができる。この木の中の各内部ノードは、１つの比較的大きな境界ボリュームを表すことができ、ノードは、サブノードへの分岐を含むことができ、これは、比較的大きな境界ボリュームを分割用平面によって分割した後に結果として得られる２つの比較的小さな分割済みボリュームを表すことができる。軸平行のｋｄ木において、各内部ノードは、２つの他のノードへの分岐だけを含むことができる。内部ノードは、１つ又は２つの葉ノードへの分岐（即ち、ポインタ）を含むことができる。葉ノードとは、それ以上小さなボリュームに細分されないノードであり、プリミティブへのポインタを含む。内部ノードはまた、さらに細分される他の内部ノードへの分岐を含むこともできる。内部ノードはまた、どの軸線に沿って分割用平面が引かれたのか、及び軸線上のどの点において分割用平面が引かれたかを決定するのに必要な情報を含むことができる。
【００４８】
例示的な境界ボリューム
図４（Ａ）−図４（Ｃ）は、画像処理システムによってレンダリングされる２次元空間と、対応するｋｄ木とを示す。簡単にするために、ｋｄ木の構築を示すために、２次元シーンが用いられるが、ｋｄ木は、３次元シーンを表すのに用いることもできる。図４（Ａ）−図４（Ｃ）の２次元表示においては、３次元構造で用いられる分割用平面の代わりに分割線が用いられ、境界ボリュームの代わりに境界領域が示される。しかしながら、当業者であれば、この概念は、物体を含む３次元シーンにも容易に適用できることを容易に理解するであろう。
【００４９】
図４（Ａ）は、モニタ３１０上に表示される最終的なピクチャ内でレンダリングされるプリミティブ４１０を含む２次元シーン４０５を示す。シーン全体量を表す最大のボリュームは、境界ボリューム１（ＢＶ１）に包含される。対応するｋｄ木において、これは、根ノード（root node）又はワールド・ノード（world node）とも呼ばれる最上位のノード４５０で表すことができる。画像処理システムの一実施形態においては、境界ボリュームが、例えば２つより多くのプリミティブを含む場合、画像処理システムは、境界ボリュームをより小さな境界ボリュームに分割し続けることができる。前述のように、境界ボリュームをより小さな境界ボリュームに分割し続けるという決定は多くの要因に基づき得るがが、この例においては説明を簡単にするために、境界ボリュームを分割し続けるという決定は、プリミティブの数だけに基づくものとする。図４（Ａ）に見られるように、ＢＶ１は６つのプリミティブを含み、よって、ｋｄ木構築アルゴリズムは、ＢＶ１をより小さな境界ボリュームに分割することができる。
【００５０】
図４（Ｂ）は、図４（Ａ）に示されたものと同じ２次元シーン４０５を示す。しかしながら、図４（Ｂ）では、木構築アルゴリズムは、ＢＶ１を２つのより小さな境界ボリュームＢＶ２及びＢＶ３に分割している。ＢＶ１の分割は、ｘ軸上の点ｘ１において分割用平面ＳＰ１４１５を引くことによって行なわれた。このＢＶ１の分割はまた、内部ノード即ち親ノードＢＶ１４５０の下にある、それぞれＢＶ２及びＢＶ３に対応する２つのノード４５５及び４６０として、ｋｄ木内にも反映されている。ここで、ＢＶ１を表す内部ノードは、これらに限定されるものではないが、ＢＶ１の下にある２つのノード（例えば、ＢＶ２及びＢＶ３）へのポインタ、どの軸線に沿って分割平面が引かれたのか（例えば、ｘ軸）、及び軸線上のどの点において分割用平面が引かれたのか（例えば、点ｘ１において）といった情報を格納することができる。
【００５１】
ｋｄ木構築アルゴリズムは、境界ボリュームＢＶ３が所定の閾値より多いプリミティブ（例えば、２つより多いプリミティブ）を含むという理由で、境界ボリュームＢＶ３の分割を続けることができる。しかしながら、ｋｄ木構築アルゴリズムは、境界ボリュームＢＶ２が、ある数以下のプリミティブ（例えば、２つのプリミティブ４１０Ａだけ）を含んでいるという理由で、境界ボリュームＢＶ２の分割を続けることができない。ＢＶ２のように、それ以上分割又は細分されないノードは、葉ノードと呼ばれる。
【００５２】
図４（Ｃ）は、図４（Ｂ）に示されたものと同じ２次元シーン４０５を示す。しかしながら、図４（Ｃ）では、ｋｄ木構築アルゴリズムは、ＢＶ３を２つの小さな境界ボリュームＢＶ４及びＢＶ５に分割している。ｋｄ木構築アルゴリズムは、ｙ軸上の点ｙ１において分割用平面を用いてＢＶ３を分割した。ＢＶ３は２つのサブノードに分割されたので、今やＢＶ３を内部ノードと呼ぶことができる。ＢＶ３の分割はまた、それぞれＢＶ４及びＢＶ５に対応する、２つの葉ノード４６５及び４７０として、ｋｄ木内にも反映されている。ＢＶ４及びＢＶ５が表すボリュームは、これ以上小さな境界ボリュームに分割されないので、これらは、葉ノードである。２つの葉ノードＢＶ４及びＢＶ５は、ｋｄ木内で分割された境界ボリュームを表す内部ノードＢＶ３の下に位置する。
【００５３】
ＢＶ３を表す内部ノードは、これらに限定されるものではないが、２つのノード（即ち、ＢＶ４及びＢＶ５）へのポインタ、どの軸線に沿って分割用平面が引かれたのか（即ち、ｙ軸）、及び軸線上のどの点において分割用平面が引かれたのか（即ち、点ｙ１において）といった情報を格納することができる。
【００５４】
ｋｄ木構築アルゴリズムは、今やシーン内に位置する全ての境界ボリュームが、境界ボリューム内に含み得る最大の所定数以下のプリミティブを含むという理由で、境界ボリュームの分割を停止することができる。葉ノードは、各葉が表す境界ボリューム内に含まれるプリミティブへのポインタを含むことができる。例えば、葉ノードＢＶ２はプリミティブ４１０Ａへのポインタを含み、葉ノードＢＶ４はプリミティブ４１０Ｂへのポインタを含み、葉ノードＢＶ５は、プリミティブ４１０Ｃへのポインタを含むことができる。
【００５５】
光線追跡を用いる画像処理システムは、空間インデックス（ｋｄ木）をトラバースするために、作業負荷マネージャ２０５を用いることができる。ｋｄ木のトラバースは、行なうべき又は進むべきｋｄ木の下位レベルのノード（サブノード）への分岐を選択し、光線が、サブノード内に含まれるいずれかのプリミティブと交差するか否かを判定することを含むことができる。作業負荷マネージャ２０５は、出された光線の座標及び軌跡を使用して、ｋｄ木をトラバース又はナビゲートすることができる。作業負荷マネージャ２０５は、光線−境界ボリューム交差テストを実行することによって、光線がｋｄ木構造内のノードで表される境界ボリュームの１つの平面と交差するか否かを判定することができる。光線がプリミティブだけを含む境界ボリューム（即ち、葉ノード）と交差する場合には、作業負荷マネージャ２０５は、光線−プリミティブ交差テストのために、光線及び関連する情報をベクトル・スループット・エンジン（ＶＴＥ）２１０に送ることができる。光線がその境界ボリューム内のプリミティブと交差するか否かを判定するために、光線−プリミティブ交差テストを実行することができる。この方法は、シーン内に含まれるプリミティブの各々について光線−プリミティブ交差テストを実行するのに比べると、光線がシーン内の物体と交差するか否かを判定するのに必要な光線−プリミティブ交差テストの数が少なくなる。
【００５６】
結果として得られるｋｄ木構造又は他の空間インデックス構造は、プロセッサ・キャッシュ２３０内に格納することができる。プロセッサ・キャッシュ２３０内に格納するために、ｋｄ木、及びｋｄ木を含む対応するデータのサイズを最適化することができる。ｋｄ木をプロセッサ・キャッシュ２３０内に格納することにより、作業負荷マネージャ２０５は、画像処理システムが光線を出す度にメモリからｋｄ木を取り出す必要なしに、画像処理システムが出した光線を用いてｋｄ木をトラバースすることが可能になる。
【００５７】
例示的な空間インデックスの分割
図５は、本発明の一実施形態による、例示的な分割された空間インデックス５００（即ち、ｋｄ木）を示す。空間インデックスのトラバースに関する操作を多数の処理要素間で均等に配分するように、空間インデックスを分割することができる。図５に示されるｋｄ木５００は、レンダリングされる３次元シーンを表すことができる。図４に関して上述されたように、作業負荷マネージャは、光線を定める情報を用いて、ｋｄ木をトラバースすることができる。さらに、作業負荷マネージャは、複数の処理スレッドと、メモリ・キャッシュ（例えば、Ｌ１キャッシュ又はＬ２キャッシュ）とを含むことができる。作業負荷マネージャは、最初に、光線−境界ボリューム交差テストを実行することによって、ｋｄ木５００をトラバースすることができる。光線がノードに対応する境界ボリュームと交差するとき、作業負荷マネージャは、光線と交差したノードへの分岐をとることによって、ｋｄ木５００をトラバースすることができる。本発明の一実施形態によると、作業負荷マネージャは、該作業負荷マネージャが葉ノードへの分岐をとるまで、光線−境界ボリューム交差テストを実行し、交差したノードへの分岐を続行することができる。作業負荷マネージャが葉ノードへの分岐をとると、作業負荷マネージャは、光線−プリミティブ交差テストのために、例えば、インボックス１１５及び／又は高速バス２２５を介して、光線をベクトル・スループット・エンジンに送ることができる。
【００５８】
本発明の一実施形態によると、ｋｄ木５００をトラバースするために、別個の処理コア上にある複数の作業負荷マネージャの各々を用いることができる。図６は、別個の処理コア上にある複数の作業負荷マネージャの各々の一実施形態を示す。図６は、４つの異なる処理コア６０５Ａ−Ｄ上にある４つの作業負荷マネージャＷＭ１−４を示す。各々の処理コア上には、複数のベクトル・スループット・エンジンＶＴＥ１Ａ−ＶＴＥ４Ｃ、共有のキャッシュ（例えば、Ｌ２キャッシュ）及び複数のメモリマッピングされたインボックスもある。作業負荷マネージャ及びベクトル・スループット・エンジンは、インボックス及び高速バス６２５を介して通信することができる。
【００５９】
本発明の一実施形態によると、空間インデックスをトラバースする作業負荷マネージャが空間インデックスの所定の区分（division）又は区画（partition）に到達したとき、作業負荷マネージャは、異なる（例えば、第２の）作業負荷マネージャに、光線を送る（例えば、インボックスを介して、光線を定める情報ヘのポインタを送る）ことができる。次いで、第２の作業負荷マネージャは、第１の作業負荷マネージャが停止した空間インデックス内の点で空間インデックスのトラバースを開始し、かつ、第２の作業負荷マネージャが空間インデックスの葉ノード又は別の区画に到達するまで、空間インデックスのトラバースを続行することができる（即ち、光線−境界ボリューム交差テストを実行し、他のノードへの分岐をとることによって）。従って、異なる作業負荷マネージャが空間インデックスの異なる部分のトラバースを担当することができるように、空間インデックスを分割することができる。
【００６０】
例えば、図５に示されるように、作業負荷マネージャ１（ＷＭ１）がトラバースを担当することができる区画を識別するために、ｋｄ木５００内に破線の分割線が引かれる。この線は、ｋｄ木５００をトラバースするいずれかの作業負荷マネージャ（例えば、ＷＭ２、ＷＭ３、ＷＭ４など）が光線を定める情報をＷＭ１に送ることができる点を表すことができる。作業負荷マネージャが光線を定める情報をＷＭ１に送った後、ＷＭ１は、ＷＭ１が担当するｋｄ木の部分を通してｋｄ木５００をトラバースすることに関連するタスクの実行を続行することができる。同様に、第２の破線分割線が、ＷＭ２がトラバースを担当できるｋｄ木５００の始まりとして示され、２つの破線分割線が、ＷＭ３がトラバースを担当できるｋｄ木５００の始まりを示し、１つの破線分割線が、ＷＭ４がトラバースを担当できるｋｄ木の部分の始まりを示す。
【００６１】
本発明の一実施形態によると、幾つかの作業負荷マネージャは、空間インデックスの共通部分を担当することができる。さらに、これらの作業負荷マネージャの各々はまた、他の作業負荷マネージャがトラバースを担当していない空間インデックスの部分のトラバースを担当することもできる。例えば、図５に破線で示されるように、ｋｄ木５００を多数の部分に分けることができる。各々の作業負荷マネージャは、対応する破線分割線より下のｋｄ木５００の部分のトラバースを担当することができる。さらに、各々の作業負荷マネージャは、全ての破線分割線より上のｋｄ木５００の部分（即ち、ワールド・ノードを含むｋｄ木５００の部分）のトラバースを担当することができる。従って、画像処理システムが、ｋｄ木５００を通るトラバースのために光線を作業負荷マネージャに出したとき、各々の作業負荷マネージャは、ワールド・ノードにおいて光線のトラバースを開始し、葉ノードに到達するまで又は別の作業負荷マネージャがｋｄ木５００のその部分を担当することを示す境界に到達するまで、空間インデックスのトラバースを続行することができる。
【００６２】
ワールド・ノードを含む空間インデックスの共通部分を担当する各作業負荷マネージャを有することにより、画像処理システムは、３次元シーン内に複数の光線を同時に出すことができる。このことは、複数の作業負荷マネージャにおいて、空間インデックスを通る複数の光線のトラバースを（ワールド・ノードにおいて）同時に始めることによって達成することができる。このような高度に並列処理可能なシステムは、画像処理システムが３次元シーンから最終的な２次元画像をレンダリングするのに必要な時間を減らすことができる。
【００６３】
例えば、図５を参照すると、ＷＭ１は、ワールド・ノードにおいて光線による空間インデックスのトラバースを開始することができる。ワールド・ノードの後、ＷＭ１は、別の作業負荷マネージャがＷＭ１がトラバースしようとする空間インデックスのその部分を担当することを示す境界を通過するまで、空間インデックスのトラバースを続行することができる（即ち、光線−境界ボリューム交差テストを実行し、ノードに分岐することによって）。例えば、ＷＭ１は、ＷＭ２についての破線分割線を通過する分岐を行なうことがある。この時点で、ＷＭ１は、空間インデックスのトラバースを中止し、光線を定める情報と、ＷＭ１が光線を用いて空間インデックスをトラバースしたことを示す情報とを、（例えば、インボックス又は高速バスを介して）ＷＭ１がＷＭ２についての分割線を通過した地点まで送ることができる。ＷＭ１は、インボックス６１５及び通信ネットワーク６２５を介して、光線を定める情報をＷＭ２に送ることができる。次に、ＷＭ２は、ＷＭ２が葉ノードに到達するまで、ＷＭ１が停止した点から、光線によるｋｄ木のトラバースを続行することができる。
【００６４】
本発明の一実施形態によると、画像処理システムは、空間インデックスをどのように又はどこで分割するかを決定することができる。空間インデックスをどのように又はどこで分割するかの決定は、単一の要因に基づいてもよく、又は複数の要因に基づいてもよい。本発明の一実施形態によると、空間インデックスをどこで分割するかの決定は、これらに限られるものではないが、各作業負荷マネージャに割り当てられるノードの数、各作業負荷マネージャに割り当てられる葉ノード内に含まれるプリミティブの数、又は空間インデックスを分割できる他のいずれかの適切な区分を含む、いずれかの数の要因に基づいて行なうことができる。
【００６５】
さらに、本発明の一実施形態によると、空間インデックスの使用（例えば、空間インデックスの実際の使用）に関連する性能メトリクスに基づいて、空間インデックスを分割してもよい。例えば、性能メトリクスは、空間インデックスの異なる部分を通過する光線の量を定めることができる。性能メトリクスを定期的に計算することができ、定期的に収集された性能メトリクスに基づいて、空間インデックスを再分割することもできる。性能メトリクスに基づいた空間インデックスの分割により、同じ数ではないノードが各作業負荷マネージャに割り当てられることがある。
【００６６】
例えば、図５に示されるように、ｋｄ木の分割された部分は、各作業負荷マネージャが担当することになる葉ノードの数に基づいて決定された。図５の曲線状の斜線部分で示されるように、各作業負荷マネージャは、７〜１０個の葉ノードを担当する。従って、ｋｄ木をどこで分割するかの決定により、各作業負荷マネージャが、ほぼ同数の葉ノードを担当することになる。このような方法でノードの数を各作業負荷マネージャの間に均等に配分することによって、各々の作業負荷マネージャに与えられる作業負荷（即ち、空間インデックスのトラバースに関連する計算）の量を減少させることができる。
【００６７】
本発明の一実施形態によると、図５に示されるｋｄ木は７１個のノードを有するが、全体の空間インデックスは、ずっと多くのノード（例えば、何十万又は何百万のノード）を有することができる。さらに、各ノードは、データを定めるために幾つかのバイト（例えば、８バイト）を必要とすることがある。従って、全体の空間インデックスは、大量の記憶空間を必要することがある。
【００６８】
光線追跡による画像処理システムを用いて最終的な画像をレンダリングするのに必要な時間を減少させるために、空間インデックスは、オフチップ・メモリではなく、オンチップ・キャッシュ・メモリ（例えば、マルチコア処理要素６０５ＡのＬ２キャッシュ）にキャッシュすることが望ましいことがある。しかしながら、多くのノードを含む複雑な空間インデックスは、大量の記憶空間を必要とし得るので、空間インデックスをオンチップ・キャッシュに格納することは、実現可能でないか又は効率的でないことがある。
【００６９】
空間インデックスを分割することにより、空間インデックスをトラバースするのに作業負荷マネージャが必要とするキャッシュ・メモリの量を減らすことが可能である。上述したように、分割された空間インデックスをトラバースする作業負荷マネージャは、空間インデックスのある部分のトラバースを担当することができ、結果的に、空間インデックスの他の部分のトラバースを担当することはできない。従って、作業負荷マネージャ（例えば、６０５Ａ）は、それらのオンチップ・キャッシュ・メモリ（例えば、作業負荷マネージャ６０５ＡのＬ２キャッシュ・メモリ）に、作業負荷マネージャがトラバースを担当する空間インデックスの部分の格納を必要とするだけである。従って、空間インデックスの一部分だけを格納することによって、空間インデックスをトラバースするのに作業負荷マネージャが格納する必要がある情報の量が減少し、空間インデックスを格納するのに必要なキャッシュ・メモリ空間の量が減少する。
【００７０】
結論
結論として、画像処理システムが、空間インデックスを異なる部分に分割することができる。空間インデックスを分割することにより、空間インデックスの異なる部分のトラバースに関する操作の実行を、異なる作業負荷マネージャが担当することができる。特定の作業負荷マネージャは、全体の空間インデックスの一部分のトラバースだけを担当することができる。結果として、作業負荷マネージャは、その作業負荷マネージャがトラバースを担当する空間インデックスの部分を定める情報だけを必要とする。このことにより、作業負荷マネージャが担当する空間インデックスを定める情報を格納するのに必要とされるキャッシュ・メモリ空間の量が減少され得る。
【００７１】
上記は本発明の実施形態に向けられるが、その基本的な範囲を逸脱することなく、本発明の他の及び更なる実施形態を考え出すことができ、その範囲は、上記の特許請求の範囲によって決定される。
【図面の簡単な説明】
【００７２】
【図１】本発明の一実施形態によるマルチコア処理要素の図である。
【図２】本発明の一実施形態によるマルチコア処理要素のネットワークの図である。
【図３】本発明の一実施形態による画像処理システムによりレンダリングされる例示的な３次元シーンの図である。
【図４】（Ａ）本発明の一実施形態による画像処理システムによりレンダリングされる２次元空間、及び、画像処理システムにより作成される対応する空間インデックスの図である。（Ｂ）本発明の一実施形態による画像処理システムによりレンダリングされる２次元空間、及び、画像処理システムにより作成される対応する空間インデックスの図である。（Ｃ）本発明の一実施形態による画像処理システムによりレンダリングされる２次元空間、及び、画像処理システムにより作成される対応する空間インデックスの図である。
【図５】本発明の一実施形態による、例示的な分割された空間インデックスを示す。
【図６】本発明の一実施形態によるマルチコア処理要素のネットワークの図である。
【図１】
2010501922.tif 000003
【図２】
2010501922.tif 000004
【図３】
2010501922.tif 000005
【図４】
2010501922.tif 000006
【図５】
2010501922.tif 000007
【図６】
2010501922.tif 000008
【手続補正書】
【提出日】平成21年3月19日(2009.3.19)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
３次元シーンの境界ボリュームを定めるノードを有する空間インデックスを分割する方法であって、
第１の処理要素及び第２の処理要素を準備するステップと、
前記空間インデックスを少なくとも第１の部分及び第２の部分に分割するステップであって、前記第１の処理要素は、前記第１の部分を通る光線をトラバースすることに関連した１つ又は複数のアルゴリズムを実行するように動作可能であり、前記第２の処理要素は、前記第２の部分を通る光線をトラバースすることに関連した１つ又は複数のアルゴリズムを実行するように動作可能である、前記分割するステップと
を含む方法。
【請求項２】
前記方法は、
前記空間インデックスを第３の部分に分割するステップであって、前記第１の処理要素及び前記第２の処理要素は前記第３の部分を通る光線をトラバースすることに関連した１つ又は複数のアルゴリズムを実行するように動作可能である、前記分割するステップ
をさらに含む、請求項１に記載の方法。
【請求項３】
前記第１の処理要素は第１の処理コア上に配置され、前記第２の処理要素は第２の処理コア上に配置される、請求項１又は請求項２に記載の方法。
【請求項４】
前記空間インデックスを分割するステップは、
前記空間インデックス内のノードの数を求めるステップと、
前記空間インデックス内の前記ノードの数に基づいて、前記空間インデックス内の前記ノードの数が前記第１の処理要素と前記第２の処理要素との間で均等に配分されるように、前記空間インデックスを分割するステップと
を含む、請求項１、請求項２、又は請求項３のいずれかに記載の方法。
【請求項５】
前記空間インデックスを分割するステップは、
前記第１の処理要素又は前記第２の処理要素の少なくとも一方の作業負荷を判断するステップと、
前記作業負荷が前記第１の処理要素と前記第２の処理要素との間で均等に配分されるように、前記空間インデックスを分割するステップと、
を含む、請求項１、請求項２、又は請求項３のいずれかに記載の方法。
【請求項６】
前記空間インデックスを分割するステップは、
前記空間インデックスの葉ノード内に含まれるプリミティブの数を求めるステップと、
前記空間インデックスの葉ノード内に含まれる前記プリミティブの数に基づいて、前記プリミティブの数が前記第１の処理要素と前記第２の処理要素との間で均等に配分されるように、前記空間インデックスを分割するステップと
を含む、請求項１、請求項２、又は請求項３のいずれかに記載の方法。
【請求項７】
前記第１の部分は前記第１の処理要素のメモリ・キャッシュに格納され、前記第２の部分は前記第２の処理要素のメモリ・キャッシュに格納される、請求項１乃至請求項６のいずれかに記載の方法。
【請求項８】
前記空間インデックスを少なくとも前記第１の部分及び前記第２の部分に分割するステップが定期に行なわれる、請求項１乃至請求項７のいずれかに記載の方法。
【請求項９】
３次元シーンの境界ボリュームを定めるノードを有する空間インデックスをトラバースする方法であって、
前記空間インデックスの少なくとも１つの分岐を通る少なくとも１つの分割境界を生成することによって、前記空間インデックスを少なくとも第１の区画及び第２の区画に分割するステップと、
前記シーン内に光線を生成するステップと、
葉ノードに到達するまで内部ノードから分岐を行なうことによって前記空間インデックスをトラバースするステップであって、前記光線が前記ノードによって定められた境界ボリュームと交差するか否かに基づいて分岐が行なわれる、前記トラバースするステップと、
前記分割境界を含む前記分岐が行われたとき、前記光線を定める情報を第１の処理要素から第２の処理要素に送るステップと
を含む方法。
【請求項１０】
前記空間インデックスを分割するステップは、
前記空間インデックス内のノードの数を求めるステップと、
前記空間インデックス内の前記ノードの数が前記第１の区画と前記第２の区画との間で均等に配分されるように、前記分割境界を生成するステップと
を含む、請求項９に記載の方法。
【請求項１１】
前記空間インデックスを分割するステップは、
前記第１の処理要素又は前記第２の処理要素のうちの少なくとも一方の作業負荷を求めるステップと、
前記作業負荷が前記第１の処理要素と前記第２の処理要素との間で均等に配分されるように、前記分割境界を生成するステップと、
を含む、請求項９に記載の方法。
【請求項１２】
前記第１の処理要素は第１の処理コア上に配置され、前記第２の処理要素は第２の処理コア上に配置される、請求項９乃至請求項１１のいずれかに記載の方法。
【請求項１３】
前記第１の部分は前記第１の処理要素のメモリ・キャッシュ内に格納され、前記第２の部分は前記第２の処理要素のメモリ・キャッシュ内に格納される、請求項９乃至請求項１２のいずれかに記載の方法。
【請求項１４】
３次元シーンの境界ボリュームを定めるノードを有する空間インデックスと、
第１の処理要素と、
第２の処理要素と、
前記空間インデックスを少なくとも第１の部分及び第２の部分に分割するように構成された画像処理システムであって、前記第１の処理要素は、前記第１の部分を通る光線をトラバースすることに関連したアルゴリズムを実行するように動作可能であり、前記第２の処理要素は、前記第２の部分を通る光線をトラバースすることに関連した１つ又は複数のアルゴリズムを実行するように動作可能である、画像処理システムと
を備えるシステム。
【請求項１５】
前記画像処理システムは、前記空間インデックスを第３の部分に分割するようにさらに構成され、前記第１の処理要素及び前記第２の処理要素は、前記第３の部分を通る光線をトラバースすることに関連したアルゴリズムを実行するように動作可能である、請求項１４に記載のシステム。
【請求項１６】
第１の処理コアと、
第２の処理コアと、
をさらに備え、
前記第１の処理要素は第１の処理コア上に配置され、前記第２の処理要素は第２の処理コア上に配置される、請求項１４又は請求項１５に記載のシステム。
【請求項１７】
前記画像処理システムは、
前記空間インデックス内のノードの数を求め、
前記空間インデックス内の前記ノードの数に基づいて、前記空間インデックス内の前記ノードの数が前記第１の処理要素と前記第２の処理要素との間で均等に配分されるように、前記空間インデックスを分割する、
ようにさらに構成される、請求項１４、請求項１５、又は請求項１６のいずれかに記載のシステム。
【請求項１８】
前記画像処理システムは、
前記第１の処理要素又は前記第２の処理要素の少なくとも１つの作業負荷を求め、
前記作業負荷が前記第１の処理要素と前記第２の処理要素との間で均等に配分されるように、前記空間インデックスを分割する、
ようにさらに構成される、請求項１４、請求項１５、又は請求項１６のいずれかに記載のシステム。
【請求項１９】
前記画像処理システムは、
前記空間インデックスの葉ノード内に含まれるプリミティブの数を求め、
前記空間インデックスの葉ノード内に含まれる前記プリミティブの数に基づいて、前記プリミティブの数が前記第１の処理要素と前記第２の処理要素との間で均等に配分されるように、前記空間インデックスを分割する、
ようにさらに構成される、請求項１４、請求項１５、又は請求項１６のいずれかに記載のシステム。
【請求項２０】
前記第１の処理要素のためのキャッシュ・メモリと、
前記第２の処理要素のためのキャッシュ・メモリと
をさらに備え、
前記第１の部分は前記第１の処理要素のためのメモリ・キャッシュに格納され、前記第２の部分は前記第２の処理要素のためのメモリ・キャッシュに格納される、請求項１４乃至請求項１９のいずれかに記載のシステム。
【請求項２１】
３次元シーンの境界ボリュームを定めるノードを有する空間インデックスを分割するためのコンピュータ・プログラムであって、前記コンピュータ・プログラムは、前記空間インデックスを少なくとも第１の部分及び第２の部分に分割するステップを実行するように適合されたプログラム・コード手段を含み、第１の処理要素は前記第１の部分を通る光線をトラバースすることに関連した１つ又は複数のアルゴリズムを実行するように作動可能であり、第２の処理要素は前記第２の部分を通る光線をトラバースすることに関連した１つ又は複数のアルゴリズムを実行するように作動可能であり、コンピュータ上で実行される、コンピュータ・プログラム。
【国際調査報告】
2010501922.tif 000009
2010501922.tif 000010