(57)【要約】【課題】レイトレーシングを利用する３次元のグラフィックをレンダリングすることに関する。【解決手段】各々のセルが階層的なＧＡ構造体においてレイを移動させる移動動作及びレイと物体の表面を定義する幾何プリミティブとの間のプリミティブテスト動作を実行する計算セルのセットと、各レイと共に実行される続きの処理を示すデータを格納するように動作し、計算セルのセットにおいて同時に実行され得るよりも多くのレイのデータを維持することができる一時レイバッファと、各々の次の処理に応じて、一時レイバッファからレイを選択して、選択されたレイを、計算セルのセットからの各セルに割り当てる計算セルのセットに対する制御部であって、割り当てられたレイのデータは、レイが割り当てられた各テストセルに提供される制御部と、入力を用いてシェーダコードの各部分を実行することができる、プロセッサとを含む。【選択図】図１０Ａ
2014081972.tif 000002
【特許請求の範囲】
【請求項１】
レイトレーシングを利用する３次元のグラフィックをレンダリングするシステムであって、
各々のセルが、階層的なジオメトリ・アクセラレイション構造体においてレイを移動させる移動動作及び、レイと物体の表面を定義する幾何プリミティブとの間のプリミティブテスト動作を実行するように構成されることができる計算セルのセットと、
前記計算セルのセットに結合し、レイを識別し、各レイと共に実行される続きの処理を示すデータを格納するように動作し、前記計算セルのセットにおいて同時に実行され得るよりも多くのレイのデータを維持することができる一時レイバッファと、
移動動作の実行と、プリミティブテスト動作の実行との間に前記計算セルのセットからセルを割り当て、前記レイに実行される、各々の次の処理に応じて、前記一時レイバッファからレイを選択して、選択された前記レイを、前記計算セルのセットからの各セルに割り当てる前記計算セルのセットに対する制御部であって、割り当てられた前記レイのデータは、前記一時レイバッファから検索され、前記レイが割り当てられた前記各テストセルに提供される制御部と、
前記計算セルのセットに結合され、前記計算セルのセットから受け取られた入力を用いてシェーダコードの各部分を実行することができる、一又は複数のプロセッサと、
を含むグラフィックをレンダリングするシステム。
【請求項２】
前記制御部は、前記一又は複数のプロセッサに接続し、前記シェーダコードの部分によって放出されたレイを受け取り、受け取られた前記レイを、前記階層的なアクセラレイション構造体を通して移動を始めるために前記計算セルのセット間で割り当てることによって、受け取られた前記レイの処理を開始する入力バッファを備える、
ことを特徴とする請求項１に記載のグラフィックをレンダリングするシステム。
【請求項３】
前記プロセッサは、シェーダレイのグループの各レイに対してそれぞれ始点及び方向をプログラムで定義するシングルトークンを用いて前記シェーダレイのグループを表現するように構成される、
ことを特徴とする請求項１に記載のグラフィックをレンダリングするシステム。
【請求項４】
前記計算セルのセットの各計算セルは、レジスタのセットを備え、前記移動動作及び交差テストセルの前記プリミティブテスト動作を実行するためのハードウェアは、メモリ及び交差テストを実行するプログラム可能なハードウェアを備えるユニットを構成することによって実現される、
ことを特徴とする請求項１に記載のグラフィックをレンダリングするシステム。
【請求項５】
前記制御管理処理が、前記グループの内のレイを前記交差テストセルの異なるものに割り当て、前記グループの内の各レイを、前記アクセラレイション構造体のルートノードで交差について、テストすることによって一群のレイの処理を開始するように動作し、当該グループの内のレイの移動中に、各レイは、処理が開始されたときにレイの前記グループに属さないレイと並列にテストされる、
ことを特徴とする請求項４に記載の装置。
【請求項６】
装置によって実行されるレイトレーシングの方法であって、
３次元シーンにおいて配置されるジオメトリの少なくとも一部を境界とする要素を備える階層的アクセラレイション構造体を提供する工程と、
前記階層的なアクセラレイション構造体を通して、グループでレイを移動させる工程であって、グループ内のレイの最大数は、前記移動させる工程を実行する計算セルのセットによって並列に処理され得るレイの数によって制限されており、各レイは、レイのグループのメンバとして移動を最初に開始し、前記レイのグループのメンバではなかったレイと並列に、移動を完了することが可能である、移動させる工程と、
一緒に移動させることが可能なレイのグループを定めて、レイのグループの各々をスケジューリングして、スケジューリングされたレイのグループの各々からのレイとの交差テストがなされる前記階層的なアクセラレイション構造体の要素を格納するメモリへの読み取りアクセスをスケジューリングして、前記階層的なアクセラレイション構造体の該要素をそれぞれ計算セルに提供する工程と、
を備える方法。
【請求項７】
前記一又は複数のプロセッサから、前記シェーダコードの各部分の実行に由来するレイを受け取るように動作する入力バッファをさらに備え、
前記制御部は、交差テストセルを当該レイに割り当てて、前記階層的なアクセラレイション構造体のルートノードで始めることによって前記入力バッファからレイの処理を開始するように動作する、
ことを特徴とする請求項１に記載の装置。
【請求項８】
前記装置は、処理中の前記レイの各々に対して現在最も近接する交差を格納するように動作し、移動は、前記現在最も近接する交差に対してテストし、前記現在最も近接する交差に対して交差するジオメトリよりも近いジオメトリのピースを含む可能性を持たない前記階層的なアクセラレイション構造体の要素の移動を回避することにより、調整される、
ことを特徴とする請求項１に記載の装置。
【請求項９】
前記複数のレイの内のレイに関して処理される必要がある、前記アクセラレイション構造体の要素のリストをさらに備え、
前記移動動作は、前記レイと交差する前記リストの前記要素をテストすることによって前記レイを移動させることを含む、
ことを特徴とする請求項１に記載の装置。
【請求項１０】
各計算セルは、前記計算セルによって実行されるプリミティブのテスト動作の結果として、レイと当該レイによって交差されると判断されたプリミティブとの間のヒットに関する情報が格納され得るキャッシュを備える、
ことを特徴とする請求項１に記載の装置。
【請求項１１】
前記一時レイバッファは、前記階層的なジオメトリ・アクセラレイション構造体の要素との交差についてテストされるレイの識別子に関連させて前記階層的なジオメトリ・アクセラレイション構造体の要素の識別子を格納する、
ことを特徴とする請求項１に記載の装置。
【請求項１２】
各計算セルは、処理中のレイの起点及び方向を格納するレジスタのセットを備える、
ことを特徴とする請求項１に記載の装置。
【請求項１３】
前記制御部は、レイの処理を遅延させて、続いて、前記レイの処理を再開するように動作し、
前記レイは、処理が遅延された際に、前記レイと同時に処理されたレイとは異なるレイと同時に処理される、
ことを特徴とする請求項１に記載の装置。
【請求項１４】
前記制御部は、前記計算セルのセットのあるサブセットを前記移動動作の実行に、前記計算セルのセットの別のサブセットをプリミティブテストの動作の実行に割り当てるように動作する、
ことを特徴とする請求項１に記載の装置。
【請求項１５】
レイトレーシングによりレンダリングする装置であって、
レイの入力部と、
３次元シーンにあるオブジェクトを構成するプリミティブ及び、前記プリミティブのサブセットの境界を定める要素を備えるアクセラレイション構造体を格納するメモリと、
複数の計算セルに結合し、移動を開始したが、完了していないレイのデータを格納するように動作する一時レイバッファと、
データ路によって結合されて、前記メモリから前記プリミティブ及び前記アクセラレイション構造体の要素の選択を受け取り、レイとプリミティブとの間の検出された交差を備える交差テストの結果を生成する、現在の最も近接する交差が、前記一時レイバッファの位置に書きこむことによって維持される複数の計算セルと、
前記入力部からレイにアクセスし、前記階層的なアクセラレイション構造体を介してアクセスされたレイの移動を開始し、前記一時レイバッファに格納されるレイのデータにアクセスし、グループとして移動を継続する前記一時レイバッファに格納される前記レイのサブセットを判断し、前記複数の計算セルの少なくとも一部を当該サブセットのレイに対する移動動作の実行に割り当てることによって、前記レイのサブセットの移動を継続するように構成される制御部と、
を備えるレイトレーシングによりレンダリングする装置。
【請求項１６】
前記計算セルの各々は、該計算セルによって処理される、制御部により割り当てられたレイの定義データを格納するためのレジスタのセットを備える、
ことを特徴とする請求項１５に記載のレイトレーシングによりレンダリングする装置。
【請求項１７】
前記制御部は、一又は複数のプリミティブに対するテストに関してレイをグループ化することによって、前記レイのサブセットを判断し、前記複数の計算セルの各計算セルを、前記一又は複数のプリミティブの異なるものに対して前記グループの内の異なるレイをテストすることに割り当てる、
ことを特徴とする請求項１５に記載のレイトレーシングによりレンダリングする装置。
【請求項１８】
シェーダコードのモジュールとインターフェースして、前記シェーダコードのモジュールからの処理されるレイを受け取り、前記レイの入力部に対してレイを生成し、識別子を前記レイに割り当て、各レイを放出して前記シェーダコードの各モジュールに、レイの処理の結果を戻すように動作するドライバをさらに備える、
ことを特徴とする請求項１５に記載のレイトレーシングによりレンダリングする装置。
【請求項１９】
前記制御部は、同時に処理され得るレイをグループ化し、処理可能な、グループにおけるレイの数に応じて、処理されるべきレイのグループを選択する、
ことを特徴とする請求項１５に記載のレイトレーシングによりレンダリングする装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本願は、２００７年１１月１９日付けで出願された米国特許出願第１１／９４２，３３６号に対して優先権を主張し、その全体はこの参照により本明細書に組み込まれるものである。
【０００２】
本発明は、３次元シーン（ｓｃｅｎｅｓ）からの２次元表現のレンダリングに関し、特に、シーンのフォトリアリスティック（ｐｈｏｔｏ−ｒｅａｌｉｓｔｉｃ）な２次元表現の高速化レンダリングのためのレイトレーシングの使用に関する。
【背景技術】
【０００３】
レイトレーシングによるフォトリアリスティックな画像のレンダリングはコンピュータ・グラフィックス・アートにおいて周知である。レイトレーシング（ｒａｙ  ｔｒａｃｉｎｇ）は、シーンの要素と相互に作用する光の物理的な挙動をモデル化するので、写実的な影および照明効果を含むフォトリアリスティックな画像を生成することが知られている。しかし、レイトレーシングは計算集約的であることでも知られ、現在のところ、アート・グラフィックス・ワークステーションの状況であってもレイトレーシングを使用して複雑なシーンをレンダリングするためかなりの時間を要する。
【０００４】
レイトレーシングは、通常、シーンの中の光線を追跡することにより、シーンの中の構造体の表面を記述する三角形のような幾何学的プリミティブ（ｇｅｏｍｅｔｒｉｃ  ｐｒｉｍｉｔｉｖｅ）で構成されたシーン記述を取得することと、どのようにして光がシーンの中のプリミティブと相互に作用するかをモデル化することとを含む。レイは３次元空間の中に始点および方向をもつ仮想的な光のベクトルである。
【０００５】
例えば、シーンは両側に建物がある街路上の車を含むことができる。このような車は、連続的な表面を近似する多数の三角形（例えば、１００万の三角形）によって定義されることができる。シーンを観察するカメラ位置が定義される。カメラから放たれたレイ（光線）は、多くの場合に１次レイと呼ばれ、例えば、反射を可能にするため一方の物体から別の物体へ放たれたレイは、多くの場合に２次的レイと呼ばれる。選択された解像度（例えば、ＳＶＧＡディスプレイの場合に１０２４×７６８）をもつ画像平面がカメラとシーンとの間の選択された位置に配置される。
【０００６】
レイトレーシングの主な目的は、画像がその後に、例えば、モニタに表示できるように、画像平面の各画素の色および強度を決定することである。現実の世界では、カメラ視点からこのようなシーンを観察すると、存在が拡散光源および有向光源を含む１若しくはそれ以上の光源に起因し、カメラに達する光線を生じる結果になる。現実の世界では、これらの光源は光エネルギーをシーンに投射し、この光エネルギーは、光が光源からカメラまで移動する間に、光が接触する物質のタイプ、および物質に接触する順序に応じて透過され、回折され、反射され、および／または、吸収される。レイトレーシングはこの過程を再現しようとするものである。
【０００７】
現実の世界は、光源によって発生した光のほんの一部だけがカメラに到達するので、光エネルギーが光源からカメラまで追跡されることによって機能するが、殆どの環境では、カメラからレイを逆追跡して光源との交差を決定するべきであると認識されている。
【０００８】
最も簡単なレイ・トレーシング・アルゴリズムは、カメラから画像の各画素を介してシーンの中へ１若しくはそれ以上のレイを放つことを含む。各レイは、その後に、シーンを構成する各プリミティブに対してテストされてレイが交差するプリミティブの特定が行われ、次に、プリミティブがレイに及ぼす影響、例えば、レイを反射および／または屈折させるかどうかが決定される。このような反射および／または屈折は、レイを異なる方向へ伝播させ、および／または、レイを異なる経路をとる可能性がある複数の２次的レイに分割させる。これらの２次的レイのすべては、その後に、交差するプリミティブを決定するため、シーンプリミティブに対しテストされ、この過程は、２次（そして、３次、以下同様に続く）レイが、例えば、シーンを離れることによって、または、光源に達することによって終端するまで再帰的に続く。これらのレイ／プリミティブ交差のすべてが決定されている間に、交差をマップするツリーが作成される。レイが終端した後、光源の寄与度が前記ツリーを介してトレースバックされ、シーンの画素対する光源の影響が決定される。容易に理解されるように、何百万もの三角形との交差に関して、例えば、１０２４×７６８のレイをテストするという複雑な計算は計算集約的であり、しかも、このようなレイの数は、交差するレイとの物質の相互作用の結果として生じる付加的なレイの全部を算入していない。レイ・トレーシング・システムは、レイを表すデータと比較すると、帯域幅の大部分を使用してプリミティブ情報をロードする。
【０００９】
シーンを通じてレイを追跡することは、実際には、非常に大量のシーンジオメトリへのランダムアクセスを必要とする可能性があることがわかっている。理解されるように、典型的な計算パラダイムは、レイテンシ（遅延時間）と帯域幅とメモリサイズとの間に逆相関がある様々なメモリ層を規定する。例えば、多くの計算システムは、主ダイナミックメモリへのメモリアクセスに介在する数層のキャッシュを提供し、さらに、主ダイナミックメモリは不揮発性記憶装置へのアクセスに介在する。主ダイナミックメモリへのアクセスは、オンチップキャッシュへのアクセスと比べると大幅に帯域幅が狭くレイテンシが長い可能性があり、不揮発性メモリへのアクセスは主メモリへのアクセスより一層レイテンシが長く帯域幅が狭い可能性がある。いくつかの用途に関して、既存のプロセッサアーキテクチャにおいては、現在主メモリまたは不揮発性メモリにあるデータがいつ必要になるかを予測することによって、レイテンシの差をかなり巧く隠すことができる。このような予測は、レイトレーシングのため階層キャッシュコンピュータを使用するとき、キャッシュが大量にスラッシングする可能性があるので、レイトレーシングでは難しいことがわかった。また、複雑なシーン全体を構成するすべてのプリミティブへのランダムアクセスを可能にするために十分に高速なメモリを設けることは、非常に費用がかかり、殆どの従来システムの能力を超える。今後シーン解像度および複雑性は増加し続け、よって、コンピュータがさらに強力になり、より大量のメモリと、より高いメモリ帯域幅とを備えるとしても、前述の問題は存続するものと予想される。
【００１０】
この種の問題を対象にするいくつかのアルゴリズム的アプローチが提案されている。１つのこのようなアプローチは、Ｍａｔｔ  Ｐｈａｒｒ，ｅｔ  ａｌ．により「Ｒｅｎｄｅｒｉｎｇ  Ｃｏｍｐｌｅｘ  Ｓｃｅｎｅｓ  ｗｉｔｈ  Ｍｅｍｏｒｙ−Ｃｏｈｅｒｅｎｔ  Ｒａｙ  Ｔｒａｃｉｎｇ」Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  ＳｉｇＧｒａｐｈ（１９９７）（本明細書では、「文献Ｐｈａｒｒ」と称する）に開示されている。文献Ｐｈａｒｒは、各幾何学的ボクセルがシーンプリミティブ（例えば、三角形）を内包する立方体であるとして、レイトレーシングされるべきシーンを幾何学的ボクセルに分割することを開示する。文献Ｐｈａｒｒは、スケジューリンググリッドの各要素が幾何学的ボクセルのいくらかの部分に重なる可能性があるスケジューリングボクセルであるとして（すなわち、スケジューリングボクセルが、幾何学的ボクセルの立方体とは異なるサイズにされる可能性があるシーンの中の体積をもつ立方体でもあるとして）、スケジューリンググリッドを重畳することをさらに開示する。各スケジューリングボクセルは、現在のところ内側にあるレイ、すなわち、そのスケジューリングボクセルの内部に内包されたレイを含む関連付けられたレイキューと、どちらの幾何学的ボクセルがそのスケジューリングボクセルに重なるかに関する情報とを有する。
【００１１】
文献Ｐｈａｒｒは、スケジューリングボクセルが処理されるとき、関連付けられたキューの中のレイがスケジューリングボクセルによって内包された幾何学的ボクセルの中のプリミティブとの交差に関してテストされることを開示している。レイとプリミティブとの間の交差が見出された場合、シェーディング（陰影付け）計算が実行され、その結果レイキューに追加されるレイが生じる可能性がある。そのスケジューリングボクセルの中に交差が見出されなかった場合、レイは次の空でないスケジューリングボクセルへ進み、そのスケジューリングボクセルのレイキューの中に収容される。
【００１２】
文献Ｐｈａｒｒは、このアプローチによる利点は、シーンジオメトリを通常の汎用プロセッサに提供されるキャッシュ内に収めることに役立つことであり、各スケジューリングボクセルの中のシーンジオメトリがキャッシュ内に収まる場合、シーンジオメトリとのレイの交差テスト中にキャッシュがトラッシングをあまり起こさないことを開示している。
【００１３】
さらに、文献Ｐｈａｒｒは、テストのためのレイをスケジューリングボクセルの中にキュー入れすることによって、プリミティブがジオメトリキャッシュにフェッチされたとき、それ以上の作業がプリミティブに関して実行できることを開示している。複数のスケジューリングボクセルが次に処理できる状況では、スケジューリングアルゴリズムは、ジオメトリキャッシュにロードされるべきジオメトリの量を最小限に抑えることになるスケジューリングボクセルを選定可能である。
【００１４】
文献Ｐｈａｒｒは、特定のシーンが一様でない複雑性を有する場合、すなわち、シーンのいくつかの部分でプリミティブの密度が高い場合、提案された規則的なスケジューリンググリッドが十分に機能しないことがあることを認めている。文献Ｐｈａｒｒは、オクツリー（ｏｃｔｒｅｅ）のような適応的データ構造が規則的なスケジューリンググリッドの代わりに使用できると仮定している。オクツリーは、階層の各レベルで、オクツリー分割が８より小さいサブボリュームを生じ、その８より小さいボリュームが８のさらに小さいサブボリュームに分割可能であり、以下同様に続くような、シーンの各主軸（すなわち、ｘ、ｙ、およびｚ軸）に沿った分割を引き起こすことにより、３次元シーンの中に空間分割を導入する。各サブボリュームにおいて、そのサブボリュームがさらに分割されることになるかどうかを決定する分割／非分割フラグがセットされる。このようなサブボリュームは、そのサブボリュームの中のプリミティブの数がテストのため十分に少なくなるまで、分割のため指示される。このように、オクツリーに関して、分割の量は、シーンの特定の部分に存在するプリミティブの数に応じて制御可能である。したがって、オクツリーはレンダリングされるべきボリュームの種々の程度の分割を可能にする。
【００１５】
類似したアプローチがＰｆｉｓｔｅｒの米国特許第６，５５６，２００号（「文献Ｐｆｉｓｔｅｒ」）に開示されている。文献Ｐｆｉｓｔｅｒもまた複数のスケジューリングブロックへのシーンの区分化を開示している。レイキューが各ブロックに設けられ、各キューの中のレイが依存グラフを使用して時空間的に順序付けられる。レイは依存グラフに定義された順序に従って各スケジューリングブロックの中で追跡される。文献Ｐｆｉｓｔｅｒは、文献Ｐｈａｒｒ論文を参照し、文献Ｐｆｉｓｔｅｒが２若しくはそれ以上（例えば、三角形だけでない）のグラフィカルプリミティブをレンダリングすることと、スケジューリングブロックのためのより複雑なスケジューリングアルゴリズムを工夫することとを要望することを補足している。文献Ｐｆｉｓｔｅｒはメモリ階層における複数のキャッシュレベルでシーンジオメトリの中間サブポーションをさらに検討している。
【００１６】
さらに別のアプローチは、パケットトレーシングと呼ばれ、このようなパケットトレーシングの一般的な参考文献は、Ｉｎｇｏ  Ｗａｌｄ，Ｐｈｉｌｌｉｐ  Ｓｌｕｓａｌｌｅｋ，Ｃａｒｓｔｅｎ  Ｂｅｎｔｈｉｎ，ｅｔ  ａｌ．による「Ｉｎｔｅｒａｃｔｉｖｅ  Ｒｅｎｄｅｒｉｎｇ  ｔｈｒｏｕｇｈ  Ｃｏｈｅｒｅｎｔ  Ｒａｙ  Ｔｒａｃｉｎｇ」，Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  ＥＵＲＯＧＲＡＰＨＩＣＳ  ２００１，ｐｐ  １５３−１６４，２０（３），Ｍａｎｃｈｅｔｅｒ，Ｕｎｉｔｅｄ  Ｋｉｎｇｄｏｍ（Ｓｅｐ．２００１）である。パケットトレーシングは、グリッドを通るコヒーレントレイのグループの追跡を含む。レイは、殆どのレイが共通のグリッドロケーションを通過するように、実質的に共通のグリッドロケーションから発し、実質的に類似した方向に進行する。このように、パケットトレーシングは、類似した始点から、類似した方向に進行するレイを特定することが必要である。別の変形実施形態においては、錐台レイが交差したボクセルを決定するため使用され、所定のレイパケットのための計算の回数の削減に役立つ（すなわち、すべてのレイが交差に関してテストされるのではなく、パケットの外側エッジにあるレイだけがテストされる）ように、レイのパケットのエッジの境界を定めるために錐台レイを使用する。パケットトレーシングは、類似したロケーションから発し、類似した方向に進むレイの特定を依然として必要とする。このようなレイは、レイがレイトレーシング中に反射され、屈折させられ、および／または、発生するとき、特定することが益々難しくなる可能性がある。
【発明の概要】
【課題を解決するための手段】
【００１７】
以下のシステムおよび方法の観点は、レイトレーシングを使用するシーンのレンダリングの高速化に関し、システムおよび方法は、交差テストを高速化し、送信および格納のため多量のレイをより効率的に示す方式を含み、さらにレンダリング目標を満たすようにレイトレーシングを適応させる態様と、これらの態様の一部とを含む。レイは、ドライバおよびその他の処理のためのホストコンピュータから提供され、一方、交差テストは専用資源で実現される。レイとプリミティブとの間の交差の指標はシェーディングおよび／またはその他の処理のためホストへ提供され、シーンのレンダリングされた画像が最終的に表示される。
【００１８】
特定の観点の実施例においては、プリミティブから構成される３次元シーンの２次元表現をレンダリングするレイ・トレーシング・システムを含む。システムは、プリミティブから構成される３次元シーンの２次元表現の複数のサンプルに関する累積データのサンプルバッファを維持するように構成されたコンピューティング資源を有する。コンピューティング資源は、さらに、交差テストのためにレイのグループを出力するように構成され、少なくともいくつかのグループの中のレイは共有属性および個別レイデータによって特定され、グループの中のレイはそれぞれの重みと関連付けられる。また、コンピューティング資源は、レイとプリミティブとの間の特定された交差を処理するように構成され、この処理により少なくともいくつかのレイのグループが出力され、これらのグループのうちの少なくとも一部のレイの数は交差しているとして特定されたレイのそれぞれの重みによって少なくとも部分的に決定される。前記システムは、さらに、前記共有属性および前記個別レイデータを受信し、各レイのそれぞれの始点およびそれぞれの方向を生成し、且つ３次元シーンを構成するプリミティブとの交差に関して前記グループ中のレイをテストするように構成された交差テスト資源を有する。前記交差テスト資源は、さらに、任意の特定されたレイ／プリミティブ交差の指標をコンピューティング資源に提供するように構成されている。
【００１９】
その他の観点は、プリミティブから構成される３次元シーンの２次元表現をレンダリングする方法を含む。この方法は、レンダリングされる３次元シーンのプリミティブ情報および表面情報にアクセスする工程と、前記シーン中の交差テストのためにカメラレイのグループを決定する工程とを有する。各カメラレイは、それぞれの重みと関連付けられ、グループの中で共有されるデータおよび当該レイに関する個別データによって示される。この方法は、さらに、シーンの中の交差テストのためのシェーダレイのグループを決定する工程を有し、各シェーダレイはそれぞれの重みと関連付けられ、グループの中で共有されるデータおよび当該レイに関する個別データによって示される。この方法は、さらに、入力を介して交差テスト資源にカメラレイのグループおよびシェーダレイのグループを提供する工程を有する。前記交差テスト資源において、この方法は、各グループの各レイの始点および方向をそれぞれの共有データおよび個別データに基づいて決定する工程と、シーンの中の前記レイを交差テストする工程と、任意のレイとシーンを構成するプリミティブとの間で検出された交差の指標を出力する工程とを有する。このような指標は、交差に関与したレイおよびプリミティブを特定する情報を含む。この方法では、シェーダレイのグループを決定する工程は、検出された交差の指標に応答して実行されることができ、グループの中のシェーダレイの数は、前記指標の中で特定されたレイと関連付けられた重みによって少なくとも部分的に決定される。
【００２０】
さらなる観点は、プリミティブから構成される３次元シーンの２次元表現をレンダリングする方法を含み、この方法は、３次元シーンを構成するプリミティブとの交差に関してテストされるレイのグループを定義する工程と、ジオメトリ・アクセラレイション・データ（ＧＡＤ：ｇｅｏｍｅｔｒｙ  ａｃｃｅｌｅｒａｔｉｏｎ  ｄａｔａ）要素およびプリミティブとの交差に関するレイの並列化されたテストのために設定された交差テスト資源中に前記レイのグループを受け取る工程とを有する。前記ＧＡＤ要素との交差に関するレイの各グループのテストによりレイの各グループは複数のコレクションに分散され、各コレクションは前記プリミティブの選択群と境界を接するＧＡＤの要素と関連付けられている。この方法は、さらに、さらなる交差テストのために前記レイのコレクションの準備状況を追跡する工程と、さらなる交差テストの準備ができているコレクションに対するテストのスケジューリングをする工程とを有する。前記レイの各グループは、カメラレイとシェーダレイとのうちの１つを含み、レイコレクションは１若しくはそれ以上のカメラレイとシェーダレイを含む。
【００２１】
利用可能であるならば、前記方法は、さらに、交差テストのためさらなるレイのグループのスケジューリングする工程を含み、このテストにより、テストされたレイは前記プリミティブのより小さい選択群と境界を接するＧＡＤの要素と関連付けられたコレクションに分散される。介在するＧＡＤ要素が存在しない状態の所定のＧＡＤの要素と境界を接するプリミティブが特定されたとき、当該所定のＧＡＤ要素と関連付けられたレイのコレクションとの交差に関するこれらのプリミティブのテストが達成可能であり、特定された交差の指標がさらに出力される。
【００２２】
この方法は、さらに、出力された指標によって特定された交差をシェーディングし、それによって、さらなる交差テストのためのシェーダレイを生成する工程を有する。
【００２３】
さらなる観点は、プリミティブから構成される３次元シーンの２次元表現をレンダリングする際に用いられる方法を含み、この方法は、３次元シーンを構成するプリミティブとの交差テストを必要とする複数のレイを決定する工程を有し、当該複数のレイは、カメラレイと、レイとプリミティブとの間の特定された交差をシェーディングする間に生成されたレイとを含む。この方法は、さらに、プリミティブのサブセットとの交差に関してテストされるレイのサブセットを特定する工程を有し、前記レイのサブセットは、当該サブセット中の各レイが前記プリミティブのサブセットの境界を定める幾何学的形状と交差するという決定に基づいて特定される。この方法は、さらに、特定された交差の指標を出力する工程であって、各指標は、前記レイのうちの１つと、当該レイが交差するプリミティブとを特定する情報を含むものである、前記出力する工程と、前記特定された交差をシェーディングする工程とを有する。前記シェーディングはさらなる交差テストのためのレイを生成し、前記特定された交差のそれぞれに対し生成されたそれぞれのレイの数は、レンダリングされる３次元シーンの２次元表現への交差指標によって特定されたレイの重要度の指標に少なくとも部分的に基づいている。
【００２４】
このような方法は、さらに、レンダリング進行に関係している尺度と、シェーディングされているレイの重要性の指標とに基づいて、レイトレーシングをシーンレンダリングに適応させる工程を有する。
【００２５】
さらなる観点は、プリミティブから構成される３次元シーンの２次元表現をレンダリングするシステムを含む。このシステムは、３次元シーンを構成するプリミティブとの交差に関してテストされるカメラレイを定義し、特定された交差に関するシェーディングプロセスを実行するよう構成されているコンピューティング資源を有する。前記シェーディングプロセスにより、交差に関してテストされるシェーダレイが生成される。前記コンピュータ資源は、さらに、前記カメラレイおよび前記シェーダレイを出力し、出力されたレイの状態を追跡するように構成されている。前記システムは、さらに、コレクション単位で、ジオメトリ・アクセラレイション・データ（ＧＡＤ）の１若しくはそれ以上の要素およびプリミティブとの交差に関してレイをテストするように構成された交差テスト資源を含む。前記交差テスト資源は、さらに、出力されたレイを受け取り、受け取ったレイを格納するメモリ資源を管理するように構成されている。前記交差テスト資源は、さらに、当該交差テスト資源において交差テストに利用可能なレイのコレクションのリストを維持するように構成され、前記レイのコレクションはＧＡＤのそれぞれの要素と関連付けられている。レイは、レイが所定のコレクションと関連付けられたＧＡＤ要素と交差するという決定に応じて、当該所定のコレクションに追加される。前記交差テスト資源は、さらなる交差テストのためリストされたコレクションの準備状況を追跡し、さらなる交差テストの準備ができているコレクションに関するテストのスケジューリングをし、スケジューリングされたコレクションの中のレイのテストを開始するように構成されている。このようなレイがテストされるＧＡＤの要素またはプリミティブの選択は、スケジュールリングされたコレクションと関連付けられたＧＡＤの要素と相互に関係するＧＡＤの要素の特定に基づいている。
【発明の効果】
【００２６】
このようなシステムはいずれも交差テスト資源が進行中の少なくとも１００００のレイを格納するために十分なサイズのメモリ資源へアクセスできるようにすることも可能である。前記交差テスト資源は、主記憶装置からプリミティブを定義する情報を中間キャッシュに格納することなく受信するように構成可能である。
【００２７】
このようなシステムは、レイが自然にシーンを横切る順序とは異なる順序で各レイがプリミティブに対してテストされるように提供することもでき、前記交差テスト資源は現在の最も近い検出された交差に関する情報を維持するためさらに構成される。
本明細書中に開示された態様および実施例のより十分な理解のため、以下の記載において添付図面が参照される。
【図面の簡単な説明】
【００２８】
【図１】図１は、レンダリングされるシーンの簡単な実施例を図示する。
【図２】図２は、図１のシーンを抽出するために使用されるジオメトリ・アクセラレイション・データのグラフの簡略化された実施例を示している。
【図３】図３は、レンダリングシステムにおける交差テスト機能を提供する交差テストユニットの態様を図示する。
【図４】図４は、ＩＴＵで用いられるテストセルの実施例の態様を図示している。
【図５】図５は、交差テストユニットのさらなる態様を図示している。
【図６】図６は、ＩＴＵで実行される典型的な方法の態様を図示している。
【図７】図７は、ＩＴＵで実行されるさらなる典型的な方法の態様を図示している。
【図８】図８は、記載されたテスト態様による交差テストのプロセッサ指向実施を図示している。
【図９】図９は、これらの態様によるＩＴＵとインターフェイスをとるホストシステムを図示している。
【図１０Ａ】図１０Ａは、ホストシステムのさらなる態様および典型的なＩＴＵのさらなる態様を図示している。
【図１０Ｂ】図１０Ｂは、図１０ＡのＩＴＵのコンポーネントのさらなる変形例を図示している。
【図１１】図１１は、図１５および１６に関して記載された態様の実施を通じてより効率的に表現できるレイの実施例を図示している。
【図１２】図１２は、図１５および１６に関して記載された態様の実施を通じてより効率的に表現できるレイの実施例を図示している。
【図１３】図１３は、図１５および１６に関して記載された態様の実施を通じてより効率的に表現できるレイの実施例を図示している。
【図１４】図１４は、図１５および１６に関して記載された態様の実施を通じてより効率的に表現できるレイの実施例を図示している。
【図１５】図１５は、交差テストのためホストからＩＴＵへ送信されるべきレイの効率的な表現に関係する方法の態様を図示している。
【図１６】図１６は、交差テストのためホストからＩＴＵへ送信されるべきレイの効率的な表現に関係する方法の態様を図示している。
【図１７】図１７は、本明細書中のいくつかの態様によるレイのデータ構造を図示している。
【図１８】図１８は、本明細書中に記載されたシステムで使用されるレイシェーディングおよびレイ放出の適応性の態様を説明する際に使用される。
【図１９】図１９は、本明細書中に記載されたシステムで使用されるレイシェーディングおよびレイ放出の適応性の態様を説明する際に使用される。
【図２０】図２０は、本明細書中に記載されたシステムで使用されるレイシェーディングおよびレイ放出の適応性の態様を説明する際に使用される。
【図２１】図２１は、図１８〜２０に関して記載されたレイトレーシング適応性の態様を組み込む方法の実施例を図示している。
【図２２】図２２は、本明細書中に記載された態様によるシステムを使用するレンダリングファームを図示している。
【発明を実施するための形態】
【００２９】
以下の説明は、当業者が発明の様々な態様を構成し、使用することを可能にさせるため提示されている。具体的な技術、実施、および用途の説明は単に実施例として与えられている。本明細書中に記載された実施例に対する種々の変更は当業者に明白であり、本明細書中に記載された一般的な原理は、発明の範囲から逸脱することなく他の実施例および用途に適用される。
【００３０】
本説明は、図２の実施例のように、ジオメトリ・アクセラレイション・データを使って抽出できる３次元（３−Ｄ）シーン（図１）の実施例に関係する態様を紹介することにより進む。このような３次元シーンは、図示され説明された実施例によるシステムおよび方法を使って２次元表現としてレンダリングできる。システムは、レイとプリミティブとの間の交差の特定を高速化する交差テスト資源と、レンダリングサービスを必要とするアプリケーションおよび交差テスト資源とインターフェイスをとり、交差テスト資源によって特定された交差をシェーディングするプロセスをさらに含むプロセスのためのホストコンピューティング資源とを有する。
【００３１】
このような交差のシェーディングは、交差テストのためのそれ以上のレイの作成をもたらすことができ、他のシステムおよび方法の態様は、レンダリング品質の低下を最小限に抑えたまま目標またはその他の基準を達成するためこのようなレイを適応的に定める方式を含む。多数のレイが並列に追跡され、そして、交差テスト資源のスループットが高いほど、システムおよび方法は、レイを交差テスト資源へ送信するための帯域幅が縮小されるように、交差に関してテストされるべき多数のタイプのレイを記述する効率を高める対策をさらに含む。
【００３２】
以下の段落は、後述されるシステムおよび方法の態様を理解するのに役立つ概念の概要を与える。
【００３３】
背景技術の欄に記載されているように、３次元シーンのレンダリングは、表示のため３次元シーンの２次元表現を作成することを含む。このような変換は、シーンが観察されるカメラ位置を選択することを必要とする。カメラ位置は、シーンの観察者（例えば、ゲームをする人、動画を見る人など）の位置を示すことがよくある。２次元表現は、通常は、２次元表現が所望の解像度で画素のアレイを含むように、カメラとシーンとの間の平面位置にある。各画素の色はレンダリングを通じて決定される。レイトレーシング中に、レイは、所望の点で２次元表現の平面と交差するように、最初にカメラ位置から放たれる可能性があり、その後に３次元シーンに続く。本明細書中で、レイが２次元表現と交差する位置は保持され、例えば、そのレイと関連付けられたデータ構造体の中に格納される。
【００３４】
カメラ位置（すなわち、交差テストされるべきレイの初期放出の点）は、必ずしも空間内に定義された単一の点でなくてもよく、その代わりに、カメラ位置は、レイがカメラ位置の範囲内であるとみなされる数の点から放たれるように、拡散してもよい。各レイは、サンプルと呼ばれることもある画素の範囲内で２次元表現と交差する。いくつかの実施では、レイが画素と交差するロケーションのより正確な位置が記録され、隣接画素の間で色のより正確な補間および混合を可能にする。
【００３５】
３次元シーンの中の現実的、かつ、精細な物体の輪郭の表現は、通常は、物体の表面を近似する多数の小さい幾何学的プリミティブ（例えば、三角形）を設けることによって行われる（例えば、ワイヤ・フレーム・モデル）。したがって、より複雑な物体は、より単純な物体より多くのプリミティブおよび小さいプリミティブを使って表現されることが必要である。より高い解像度という利点を与えるが、特に、複雑なシーンは多数のオブジェクトを有することがあるので、レイと多数のプリミティブとの間で交差テストを実行することは計算集約的である。したがって、ジオメトリ・アクセラレイション・データ（以下、ＧＡＤと称する）は、このようなテストを高速化するためシーンの中の１若しくはそれ以上のプリミティブの境界を近似するため使用可能である。ＧＡＤの実施例はさらに後述される。
【００３６】
説明を明確にするため、ある一定のタイプの物体のデータ、例えば、三角形プリミティブの座標は、物体のデータを参照するのではなく、物体自体として簡単に記載されている。例えば、「プリミティブをフェッチする」というとき、そのプリミティブを表すデータがフェッチされると理解されるべきである。
【００３７】
ジオメトリ・アクセラレイション・データ
ジオメトリ・アクセラレイション・データ（ＧＡＤ：Ｇｅｏｍｅｔｒｙ  Ａｃｃｅｌｅｒａｔｉｏｎ  Ｄａｔａ）は、交差テストを高速化するため他の物体またはプリミティブの境界を近似する（抽出する）手段として上で紹介された。ＧＡＤは、それぞれがシーンの中のプリミティブのコレクションの境界を定める、要素を含むことができる。境界付けは、幾何学的形状の表面がレイと交差できないことが、そのレイがその形状によって境界を定められたプリミティブと同様に交差しないことを示すように、３次元空間の中にプリミティブのそれぞれのコレクションを内包する幾何学的形状を与えることを含むことができる。ＧＡＤは主としてレイとプリミティブとの間の交差をより高速に特定するためプリミティブを抽出するのに役立つので、ＧＡＤ要素は、好ましくは、レイとの交差に関して容易にテストできる形状である。例えば、レイとの交差に関して球体をテストすることは、通常は、ＫＤツリーの中で３次元ボックスをテストするより少ない計算を必要とする。ＧＡＤ形状に関する他の考察は、境界が近似されているプリミティブの形状、ＧＡＤ形状がプリミティブまたはプリミティブのコレクションをより巧く嵌め込むために回転されるべきであるかどうか、または、形状がシーンの内部で非回転性であるべきかどうかを含むことができる。ＧＡＤとして使用できる構造の実施例は、球体、正方形、長方形、スプラインのグループなどを含むことができる。
【００３８】
ＧＡＤは、互いに相互に関係付けられる数の別個の要素を含むことができる。例えば、ＧＡＤの要素は複数の球体であることができ、各球体はレンダリングされるべきシーンの側面または一部を記述するジオメトリの一部の境界を定める。複数のＧＡＤ要素（例えば、球体）はグラフの中で互いに相互に関係付けられることができる。
【００３９】
ＧＡＤの要素のグラフでは、要素はグラフノードとして特定され、要素のペアはエッジによって接続されることができる。要素のペアがエッジによって接続される場合、エッジは、ノードのうちの一方がもう一方とは異なる相対粒度を有することを示すことができ、すなわち、エッジによって接続されたノードのうちの一方がもう一方のノードより多数または少数のプリミティブの境界を定めることを意味することができる。したがって、このようなＧＡＤの配置では、交差テスト中にグラフのエッジに沿ってグラフをトラバースすることにより、交差に関してテストされているレイは、様々な量および／または配置のプリミティブの境界を定めるＧＡＤ要素に対してテストされることができる。
【００４０】
上で紹介されたように、球体はＧＡＤ要素として使用できる形状の１つのタイプである。球体をＧＡＤ要素として使用することは、ＧＡＤグラフの一部の移植性／互換性を高めることがある。球体ＧＡＤのグラフは、空間的に、または、そうでなければ、ＫＤツリーの場合によく見られるように、バランスのとれた状態を維持するという明示的な目標に従う必要がない。例えば、このようなグラフの一部をそのまま任意に移動することができる。このような移植性は、２若しくはそれ以上のフレームに対してレンダリングシステムの中にとどまることになるＧＡＤグラフの最適化を可能にする。専門家が、プリミティブおよびジオメトリの他のピースの中で、より大きいシーンのビルディングブロックを含むもの、または、シーンの中のレイのうちの不均衡に大きい部分が交差することがあるものはどれであるかに関してシステムにヒントを与えることも可能にすることになる。
【００４１】
いくつかの態様では、ＧＡＤの要素は、ＧＡＤのグラフが、シーンを記述するプリミティブを集団で境界付ける１若しくはそれ以上のルートノードを含み、そして、各ルートノードがこれらのプリミティブのサブセットの境界を定めるように、グラフの中に階層的に配置可能である。ＧＡＤのグラフのうちの（複数の）ルートノードは、シーンが、一般に、所定の範囲を有し（すなわち、シーンは有限であり）、ルートノードがシーン全体を包含するように定義されることができるので、簡単に示唆されることもできる。例えば、シーンはバウンディングボックスまたは球体の内部に定義されることがあり、ルートノードは暗黙的にそのバウンディングボックスまたは球体と機能的に同じ広がりをもつことがある。
【００４２】
各ルートノードは、１つずつがそれぞれのルートノードによって境界を定められたプリミティブのサブセットの境界を定める１若しくはそれ以上の子ノードを有することができる。次に、これらの子ノードがそれぞれの親ノードによって境界を定められたプリミティブのサブセットの境界を定める１若しくはそれ以上の子要素に対する親ノードとして機能することができる。特定の親ノードの子ノードによって境界を定められたプリミティブのサブセットは、子ノードのうちのある１の子ノードによって境界を定められたプリミティブが子ノードのうちの他の子ノードによっても境界を定められることがないように、互いに素であることができる。様々な子ノードは、境界を定められたプリミティブのそれぞれの集合の間に非零である和集合を有することができるが、同様にサブセット関係をもたない。
【００４３】
ＧＡＤの特定の要素によって境界を定められたプリミティブのさらなる分割は、このようなＧＡＤ要素の範囲内で境界を定められたプリミティブの数がさらなる分割を必要としないために十分に少ないとみなされるまで行われることができる。ＧＡＤの要素間でのこのようなプリミティブの分割は、プリミティブのグループを参照する枠組みに所望の程度の粒度を与えるために役立つことができる。例えば、図１に示されたリーフは、最初にリーフ全体の境界を定める球体（すなわち、ＧＡＤの要素）を使って抽出することができ、次に、リーフのより小さい部分がより小さい球体または他の形状を使って抽出することができる。例えば、ベインは１若しくはそれ以上の球体を使って抽出されることができる。リーフ全体の境界を定める（抽出する）球体は、リーフの一部分だけの境界を定める球体の全体の境界を定める必要がなく、多くの場合、境界付けなくてもよい。換言すると、シーンの中のプリミティブは、複数のＧＡＤ要素によって境界付けられることができるが、そのプリミティブの境界を定める各ＧＡＤ要素はそのプリミティブを同様に境界付ける他のＧＡＤ要素によって同様に境界付けられる必要がない。
【００４４】
本明細書中の典型的な態様では、十分な分割は、交差テストを実行することを目的としたハードウェアユニットまたは他の資源の特性に基づくことができる。例えば、交差テストユニット（後述されるような実施例）が３２のテストユニットを含む場合、以下で詳述されるようにＧＡＤの１の要素によって境界付けられたプリミティブ全部のテストが並列に行われることを可能にするため、分割は、３３以上のプリミティブがＧＡＤの特定の要素によって境界付けられなくなるまで継続することができる。
【００４５】
上記実施例は、主としてグラフに配置された要素の球体境界付けの実施例を重点的に取り扱っているが、ＫＤツリー、オクツリー、ＢＳＰツリー、およびボクセルグリッドを含むその他のタイプのジオメトリアクセラレイション構造体がノードのグラフとして配置可能である。例えば、グラフのノードは、ｋｄツリーに基づく場合、ｋｄツリーのノードを含むことになる。グラフのエッジは所定の空間の概念上のさらなる分割を含むことになり、換言すると、所定のノードは、所定のノードをそれぞれが所定のノードの境界の内部で見つけられる立方体である最大８の他のノードに接続する最大８のエッジを有することになる。類似した状況が前述の他のジオメトリアクセラレイション構造体の実施例に当てはまる。
【００４６】
本明細書中のＧＡＤのいくつかの典型的な態様を要約すると、ＧＡＤは他のノードへのそれぞれのエッジによって接続されることがあるノードのグラフを含むことがある。
【００４７】
いくつかの態様では、各ノードは唯一の他のノードに接続される。いくつかの態様では、第１のノードを第２のノードに接続するエッジは第１のノードと第２のノードとの間の粒度の方向性を示す。例えば、より高い粒度は、エッジによって接続された第１ノードと第２のノードとのうちのいずれがより少ないＧＡＤ要素、または、ジオメトリの個別のピース、または、それらの組み合わせの境界を定めるかを示すことができる。逆の実施例では、より低い粒度は、ノードの一方が、異なるノードによって境界付けられたノードに加えて、別のエッジによってより低い粒度のノードに接続されることができるより高い粒度のノードによって同様に境界付けられたプリミティブの全部の境界を定めることを示すことができる。
【００４８】
この粒度の方向性はグラフの中で明示的または暗黙的に定義されることができ、すなわち、明示的に定義される場合、意図的に方向付けられた探索は、交差に関してテストするため徐々に量が少なくなるプリミティブが特定できるように、一般により大きいＧＡＤ要素からより小さい要素への方向に行われる。方向性が暗黙的である場合、方向付けられた探索が同時に現れることができ、または、境界付けるボリュームを定義する情報がグラフの中の方向性を取り出すため使用されることができる。例えば、ＧＡＤ要素の相対的なサイズを決定するためテストを実施可能であり、より小さい要素が選択される可能性がある。
【００４９】
広く考えると、ＧＡＤの要素は、ＧＡＤの他の要素と、より小さいＧＡＤ要素によって少なくとも部分的に境界付けられた別のＧＡＤ要素によって境界付けられていないプリミティブとの両方を不均一に境界付けることができる。例えば、より大きい球体は図１に図示されたリーフ全体の境界を定めることができる一方で、それぞれのより小さい球体は１つずつがリーフの先端を定義するプリミティブの境界を定めることがあるが、リーフの一部は、リーフ全体の境界を定める球体より小さいいかなる球体によっても境界付けられていないプリミティブによって定義されることができる。逆に言えば、ＧＡＤ配置は、ＧＡＤのいずれか１の要素がプリミティブまたは他のＧＡＤ要素だけの境界を定め、このような配置のリーフノードに達するまでプリミティブが交差に関してテストされることがないように定義されることができる。
【００５０】
いくつかの特定の実施例のさらなる説明では、階層的に配置されたＧＡＤは、３次元シーンのジオメトリを示すため使用することができる。階層的に配置されたＧＡＤの（複数の）ルートノードは３次元シーン全体を示すことができる。階層的に配置されたジオメトリ・アクセラレイション・データの中間ノードは、異なるサイズの、または、異なるグループに分けられた、３次元シーンのジオメトリの小部分を示すことができる。階層的に配置されたジオメトリ・アクセラレイション・データのリーフノードは、３次元シーンの幾何学的プリミティブの境界を定めすることができる。同様に、ＧＡＤのいずれかのグラフは、グラフのノードとして、トラバース可能であるノードの完全なサブグラフを含むことができる。そして、階層グラフの特定の実施例では、各ノードは階層的なサブグラフを含むことができる。
【００５１】
プリミティブ内階層を生成するとき、簡単な状態機械が十分な結果をもたらすことができる（非常に最適化された階層と同じ程度に十分な結果に接近する）。その理由は、殆どの物体がある程度球体に類似し、シーンの中の物体は多くの場合に物体間の空間と比較して大きいからである。ジオメトリ・アクセラレイション・データの生成は、ソフトウェアドライバがシーン記述を受信し、シーン記述から幾何学的プリミティブデータとジオメトリ・アクセラレイション・データの両方を生成することができるように、非同期式に行うことができる。
【００５２】
より具体的な実施例の説明では、図１は、リーフを構成するプリミティブの選択の境界を定めるジオメトリ・アクセラレイション・データのノードと共に、リーフ１００の平面図を図示し、ＧＡＤのノードは図２のグラフ２００の配置実施例に表示されている。リーフ１００は、２の大きい三角形、すなわち、三角形１３０および三角形１２５で構成された背景の上にあるものとして図示されている。各円およびボックスは、それぞれ、３次元球体およびボックスを表現している。ボックスは、長方形でも立方体でもあることができ、または、実施において望まれるならば、平行六面体のようなその他の形状でもあることができる。
【００５３】
図示されているように、ＧＡＤの要素は、球体以外の形状、例えば、長方形２５１、２５２、２５３、および２５４を含むことができる。このような境界付けの他の態様は、球体２２０がリーフ全体の境界を定めるルートノードとして機能することである。球体２２１は、リーフ１００の背景およびリーフ１００を構成する大きい三角形１３０および１２５の境界を定める。球体２２０は球体２２１および球体２４１の両方の境界を定め、球体２４１が今度は球体２４０の境界を定める。球体２４０および球体２４１の両方は、リーフ１００を構成するプリミティブの境界を定める。球体２２０、２２１、２４０、および２４１の配置は、１の球体が複数の「子」球体の境界を定める必要がないことを示している。同様に、２２０および２２１の配置（図２を参照）は、２個の球体が同じジオメトリの境界を定めるとしても、２個の球体はシーンの中のプリミティブのサブセットの境界を定めるノードへの接続性を有する必要がないことを示している。
【００５４】
球体２１５はリーフ１００の先端４分の１の境界を定める。球体２１５は、球体２４０が球体２１５によって境界付けられたプリミティブの境界を定めるとしても、球体２４０によって完全には境界付けられていない。図２の球体２１５を参照すると、ノード２１０〜２１４が球体２１５の子であるが、関心のある検討事項はプリミティブが境界付けられることであるので、各球体２１０〜２１４の全面的な広がりは球体２１５によって境界付けられる必要がないことが図示されている。球体２４２および２４３はリーフ１００の中央ベインの一部の境界を定める。ボックス２３０は、リーフのプリミティブの選択の境界を定め、グラフ２００に図示されているように子ノード２５０〜２５４をさらに含む。ボックス２５０は、直接的にプリミティブと、子ノードとの両方の境界を定める。ボックス２５１および２５２はプリミティブを直接的に境界付けるが、ボックス２５３および２５４はそれぞれが１個のプリミティブの境界を定める。ボックスおよび球体の両方の使用は、ＧＡＤのための異なる形状が同時に使用できることを示している。同様に、ＧＡＤ要素は１個または２個以上のプリミティブの境界を定めることができる。
【００５５】
図２は、図１のシーンを抽出するため使用可能であるＧＡＤの要素のグラフ２００を図示している。特に、シーンプリミティブは、レンダリングされるべき平均的なシーンのサイズと比べると非常に小さいので（図１が小さいシーンを図示しているとしても）、実際のＧＡＤのグラフは、通常は、グラフ２００より遙かに大きいことが理解できるであろう。グラフ２００は、それぞれがシーンを構成するプリミティブの一部の境界を定めるＧＡＤの要素を示すノードだけを含む。理解されるように、本実施例は、グラフの中のＧＡＤの要素のおおむね階層的な配置である。一例として、レイがノード２３０にあるＧＡＤの要素との交差に関してテストされ、ノード２３０と交差しない場合、テストはＧＡＤ要素２４０〜２４４に対し、または、これらの要素の内部のプリミティブに対し行われなくてもよい。プリミティブが、偶然またはそうではなく、複数のＧＡＤ要素によって境界付けられる場合、これらの要素の間の空間に少なくとも部分的な重なりが存在し、その重なりの内部のプリミティブは交差テストが省略され、その後、別のＧＡＤ要素の処理中に後で交差テストが実行されることができる。
【００５６】
交差テスト
図３は、交差テスト資源の実施例であり、３次元シーンの２次元表現をレイトレーシングするレンダリングシステムで使用可能である、交差テストユニット（以下、「ＩＴＵ」という）の実施例のブロック図を含む。ＩＴＵ  ３５０は、ＩＴＵ  ３５０にレイと、レイが交差に関してテストされることになるシーンの要素とを与える制御プロセスまたはドライバを通じて呼び出すことができる関数またはユーティリティであるとみなすことができる。このようなプロセスおよびドライバの実施例は以降の図に関して説明されている。
【００５７】
レイトレーシングを高速化するため、ＩＴＵ  ３５０は、シーンの一部の境界を定め、ＩＴＵがレイの交差テストを高速化するため使用可能であるＧＡＤがさらに提供される。ＧＡＤは、ＩＴＵ  ３５０によって役に立つフォーマットで提供されることになり、ハンドシェイク手順、パラメータ選択、事前に決められた編成などの対象でもよい。
【００５８】
ＩＴＵ  ３５０は、典型的に、ＩＴＵ  ３５０がレイおよびレイが交差することが所定の精度で決定されたプリミティブを特定するために十分な情報を提供することを含む、特定された交差の指標を返す。
【００５９】
例えば、ＩＴＵ  ３５０は、ＩＴＵ  ３５０をシェーディングのような他のレンダリングプロセスおよび初期レイ生成関数とインターフェイス接続するドライバを介して情報を提供される可能性がある。ＩＴＵ  ３５０の観点から、ＩＴＵ  ３５０は、提供されるか、または、提供された他の情報に基づいて取得されたレイ、ＧＡＤ、およびプリミティブ（または、より一般的にはシーンジオメトリ）を使用して交差テストを実行できるので、ＩＴＵ  ３５０は、ＩＴＵ  ３５０に提供された情報の基点に「気付く」必要がない。このように、ＩＴＵ  ３５０が交差テスト機能をシステムに提供することにより、システムは全体としてシーンの２次元表現をレンダリング可能である。
【００６０】
ＩＴＵ  ３５０は、ＩＴＵ  ３５０が受動的でないように、どのように、いつ、そして、どのようなデータがＩＴＵ  ３５０に提供されるかを制御し、そして、例えば、交差テストのため必要に応じて、レイ、または、ジオメトリデータ、または、アクセラレイションデータをフェッチすることができる。例えば、ＩＴＵ  ３５０は、レイがテストされるべきシーンを特定するために十分な情報と共に、交差テストのための多数のレイを提供されることができる。ＩＴＵ  ３５０は、従って、処理の間にレイの一時的格納を制御し、処理中に必要に応じてプリミティブおよびＧＡＤの要素のフェッチを開始することができる。いくつかの実施例では、ＩＴＵ  ３５０は、所定の時点に交差テストのため１００００より多くのレイを提供されることができる。例えば、ＩＴＵ  ３５０は、初期始動時に１００００より多くのレイを提供されることがあり、そして、レイのテストが終了するとき、新しいレイがＩＴＵ  ３５０の中で処理されているレイの数をおおよそ初期数に保つために提供されることができる。
【００６１】
さらに、ＩＴＵ  ３５０は、入力データをＩＴＵへ提供するか、または、ＩＴＵから出力を受信するユニットに関して非同期式に動作することができる。ここで、「非同期」は、交差テストが前に受信されたレイに対して継続している間に、ＩＴＵが付加的なレイを受信し、付加的なレイの交差テストを開始することを含むことがある。さらに、「非同期」は、ＩＴＵ  ３５０がレイを受信した順序にレイが交差テストを終了しなくてもよいことを含むことができる。非同期は、ＩＴＵ  ３５０の中の交差テスト資源が、３次元シーンの中のレイの位置、シーンに重畳されたスケジューリンググリッド、または、親レイおよび少数の親レイから生み出された子レイのような世代間関係を有するテスト専用レイ、または、特殊な世代のレイ、例えば、カメラレイ若しくは２次的レイだけを考慮することなく、交差テストの割り当てまたはスケジューリングのため利用できることをさらに含む。
【００６２】
本実施例のＩＴＵ  ３５０の詳細に関して、ＩＴＵ  ３５０は、例えば、ホストプロセッサ上で動くドライバでもあることができ、シェーディングコード若しくはシェーディングプロセッサであることができ、または、これらの組み合わせであることができる光線源３０５からレイを受信するメモリ３４０を含む。メモリ３４０は、レイデータ３３３として特定された、レイデータを格納する論理および／または物理パーティションと、レイ・コレクション・バッファ３３１とを含み、どちらもがそれらの用法および機能と共に本明細書中でさらに説明されている。
【００６３】
ＩＴＵ  ３５０は、複数のテストセル３１０ａ〜３１０ｎおよびテストセル３４０ａ〜３４０ｎを含む。テストセル３１０ａ〜３１０ｎは、本実施例では、ＧＡＤデータ記憶装置３１６から提供されたＧＳＤの要素をテストするのに使われ、テストセル３４０ａ〜３４０ｎはプリミティブデータ記憶装置３１７から提供されたプリミティブをテストするのに使われる。論理的に、ＧＡＤデータ記憶装置３１６およびプリミティブデータ記憶装置３１７は別個に特定されるが、同一の物理的メモリ資源でもよく、または、部分的に共有され、部分的に区別されることもできる。
【００６４】
ＩＴＵ  ３５０は、プリミティブおよびプリミティブと交差したレイの特定された交差の指標を受信する出力バッファ３７５をさらに含む。実施例では、指標は、プリミティブと交差したレイを特定するために十分な情報とペアにされたプリミティブの特定情報を含む。レイの特定情報は、ホストプロセッサが利用できる資源の中に維持されているレイのリストの中の特定のレイを特定するインデックスのような参照情報を含むことができる。例えば、リストは、ホストプロセッサ上で動くドライバによって維持されることができる。レイ特定情報は、レイを再構成するために十分な、レイの始点および方向のような情報を含むことができる。通常の場合には、より少数のビットが参照情報に合格することが必要とされることになり、有利である。
【００６５】
ＩＴＵ  ３５０は、本明細書中で後述されるように、メモリ３４０に格納されたレイコレクションの状態を追跡し、処理の準備ができているコレクションを決定するコレクション・マネージメント・ロジック３８０をさらに含む。コレクション・マネージメント・ロジック３８０は、メモリ３４０に接続するように図３に図示され、接続されたテストセルのそれぞれへのテスト用のレイの配信を開始する。ＩＴＵ  ３５０が、他のＧＡＤ要素またはプリミティブのいくつかの組み合わせではなく、いずれかの境界を定めるＧＡＤ要素と共に動作する場合、コレクション・マネージメント・ロジック３８０は、特定のコレクションがプリミティブまたは他のＣＡＤ要素の境界を定めるＧＡＤ要素と関連付けられているかどうかに依存して、レイをテストセル３４０ａ〜３４０ｎ、または、テストセル３１０ａ〜３１０ｎのいずれかに割り当てる。
【００６６】
特定のＧＡＤ要素が他のＧＡＤ要素とプリミティブとの両方の境界を定める実施例では、ＩＴＵ  ３５０は、ＧＡＤ要素とプリミティブとの両方をレイと共に各テストセルに提供するデータ経路を有することになり、コレクション・マネージメント・ロジック３８０は、テスト資源の間でコレクションのテスト用レイを準備することになる。このような実施例では、ＧＡＤ要素とプリミティブとの間の形状の典型的な差（例えば、球体対三角形）のため、テストロジックを切り替えるか、または、テストされる形状のため最適化された交差テストアルゴリズムをロードする指標がコレクション・マネージメント・ロジック３８０から提供されることがある。
【００６７】
コレクション・マネージメント・ロジック３８０は、付加的または代替的に、テストセル３１０ａ〜３１０ｎおよびテストセル３４０ａ〜３４０ｎとインターフェイスをとることがある。このような変形例では、コレクション・マネージメント・ロジック３８０は、各テストセルがテストのためのレイデータをメモリ３４０からフェッチし始めるように、情報を各テストセルに提供する。テストロジック３８０はメモリ３４０から分離して図示されているが、テストロジック３８０によって実行されるマネージメント機能がメモリ３４０に格納されたデータに大きく関係するので、実施されるテストロジック３８０は、相互に関係付けられ、メモリ３４０の回路の内部で実施されることができる。
【００６８】
交差テスト資源によるメモリ３４０へのアクセスの並列化を高める能力は、本明細書中に記載されている発明の態様の利点である。したがって、好ましくは、テストセル１つ当たりに少なくとも１つまでメモリ３４０へのアクセスポートの数を増加することは有利である。このような編成の実施例と、その利点とは、図５に関してさらに記載される。ＩＴＵ  ３５０の動作の実施例は、図６および７の方法６００および７００に関して与えられる。
【００６９】
図４は、ワーキングメモリ４００およびテストロジック４２０を含むテストセル３１０ａの実施例を図示している。ワーキングメモリ４１０は、表面との交差に関して線分をテストするために十分な情報を収容する数個のレジスタであることができ、または、他の実施ではより複雑であることができる。例えば、ワーキングメモリ４１０は、交差に関して受信された特定の形状をテストするためテストロジック４２０を構成する命令を格納することができ、そして、どのような形状が受信されたかを受信されたデータに基づいて検出することができる。例えば、球体は点と点の周りの半径とによって指定可能であり、球体はこのデータが推定可能であることを考慮してＧＡＤとして使用されている。テストロジック４２０は利用可能または選択可能な解像度で交差テストを実行し、交差が検出されたかどうかを示すバイナリ値を返すことができる。バイナリ値は読み出しのためワーキングメモリの中に格納可能であり、リードサイクルの間にメモリ３４０にラッチするため出力することができる。
【００７０】
図５は、メモリ編成の実施例により詳細に重点を置いて、交差テストユニット５００の実施の態様を図示している。ＩＴＵ  ５００において、テストセル３１０ａ〜３１０ｎおよび３４０ａ〜３４０ｎが再び現れる。これは、テストセルの数に関する何らかの要件を意味するものではない。本実施例では、セル３１０ａ〜３１０ｎはＧＡＤ要素の交差テストを目的とし、テストセル３４０ａ〜３４０ｎはプリミティブの交差テストを目的とする。よって、ＩＴＵ  ５００において、プリミティブとＧＡＤ要素の両方が並列にテストされることができる。しかし、１種類または別の種類のそれ以上のテストセルが必要であると決定された場合、どのようなテストセルでも必要に応じて再構成可能である。トランジスタ密度が増加し続けると共に、それ以上のこのようなセルを収容することができる。記載されるように、テストセルの一部は、共通形状（すなわち、プリミティブまたはＧＡＤ要素）に対してレイをテストするので、オペレーショナル・グループとして取り扱うことができる。テストセル３４０ａ〜３４０ｎは、指定された精度レベル（例えば、１６ビット）でプリミティブとの交差を示すバイナリ値を返すことができ、より大きいプリミティブの場合に役立つことができる、レイが交差したプリミティブ上のロケーションのより正確な指標を返すこともできる。
【００７１】
ＩＴＵ  ５００において、メモリ５４０は、それぞれが２ポートを有する複数の独立した演算バンク５１０〜５１５を含む。一方のポートはＧＡＤテストロジック５０５を介してアクセスされ、もう一方はプリミティブ・テスト・ロジック５３０を介してアクセスされる。ＧＡＤテストロジック５０５およびプリミティブ・テスト・ロジック５３０のそれぞれは、それぞれのワーキングバッファ５６０〜５６５と５７０〜５７５との間でデータのフローを管理し、それぞれにＧＡＤ記憶装置３１６およびプリミティブ記憶装置３１７からテストのためのＧＡＤ要素を取得するため動作する。バンク５１０〜５１５は、大部分は、ＧＡＤテストロジック５０５およびプリミティブ・テスト・ロジック５３０によるレイデータへの非競合アクセスをできるようにするため動作するように意図され、その結果、各テストセル３１０ａ〜３１０ｎおよびテストセル３４０ａ〜３４０ｎは別個のバンク５１０〜５１５からレイが提供され得る。競合はテストされるべき２つのレイが同じバンクに存在する場合に発生し、このような場合に、アクセスはテストロジック５０５および５３０によって順次に取り扱うことが可能である。いくつかの場合に、ワーキングバッファ５６０〜５６５および５７０〜５７５は、他の処理が完了している間に次の処理のためロードされる。
【００７２】
一貫した仕組みでレイをテストすることにより、どのレイがどのテストセルに割り当てられるかの追跡は軽減することができる。例えば、各コレクションは３２つのレイを有することができ、３２つのテストセル３１０ａ〜３１０ｎが存在することができる。例えば、コレクションの中の４番目のレイを常にテストセル３１０ｄに提供することにより、テストセル３１０ｄは、そのテストセルにどのレイが提供されたかに関する情報を維持する必要がなく、交差の指標を返すだけでよい。
【００７３】
レイ・コレクション・データの記憶装置は、ＩＴＵ  ３５０および５００のそれぞれに関して、レイ・コレクション・バッファ３３１およびレイ・コレクション・バッファ５２０として実施することができる。レイコレクション記憶装置は、どのような所定のレイコレクションでもレイ・コレクション・バッファ３３１または５２０のｎ個の部分のうちの１つに格納されるように、レイコレクションのためのｎ−ウェイ・インターリーブ・キャッシュとして実施されることができる。レイ・コレクション・バッファ３３１または５２０は、その後、バッファのｎ個の部分の１つずつに格納されたレイコレクションのリストを維持することがある。レイ・コレクション・バッファ３３１または５２０の実施は、レイコレクションと関連付けられたＧＡＤの要素の特定特徴、例えば、シーンのレンダリングで使用されるＧＡＤの要素の間で一意である英数文字列を使用することを含むことができる。英数文字列は数字であることができる。文字列は、レイ・コレクション・バッファ３３１および５２０のｎ個の部分のうちの１個への参照値を取得するためハッシュされることができる。他の実施では、ＧＡＤの要素は、例えば、使用される英数字列のセグメントをこのようなバッファの（複数の）部分にマッピングすることにより、レイ・コレクション・バッファ３３１および５２０の所定の部分の中への格納が予定されることができる。プリミティブ／レイ交差出力５８０は、プリミティブ／レイ交差候補を特定する出力を表現し、出力５８０は直列でも並列でもあることができる。例えば、３２のプリミティブ・テスト・セル５４０ａ−５４０ｎが存在する場合、出力５８０は、レイ毎にちょうどテストされたプリミティブとの交差の有無を示す３２ビットを含むことができる。当然ながら、他の実施では、出力はテストセルから直接到来することができる。
【００７４】
ＩＴＵ  ３５０および５００の動作的な態様は、図６および７に関してさらに後述される。プリミティブから構成されるシーンにおける交差に関してレイをテストする方法の以下の実施例は、１つずつがプリミティブの選択の境界を定めるＧＡＤ要素のグラフをトラバースするＩＴＵ動作を含む。このようなトラバースの間に、レイのコレクションはＧＡＤ要素との交差に関してテストされる。レイのコレクションは、所定のＧＡＤ要素との交差に関してレイをテストすることにより形成されることができ、その後、その要素と交差するレイに対し、コレクションが形成されることができる。レイは、このレイのコレクションが十分な数のレイを有するまで、所定のＧＡＤ要素との交差に関してテストされ続ける。その後、そのコレクションの中のレイは、そのＧＡＤ要素に接続されたＧＡＤ要素のノードとの交差に関してテストされることができる。これらの態様は、図６および７に関して、以下で詳述される。
【００７５】
以下の説明は、図６に図示された交差テストの方法６００に関係する。この方法は、簡単にするため、ＩＴＵ  ３５０に関連して説明される。６０５において、シーンを構成するプリミティブの選択の境界を定めるＧＡＤの要素を含むシーン抽出の少なくとも一部がＧＡＤ記憶装置３１６の中に受信される。シーン抽出は、ＧＡＤ要素に関係する情報を含み、実施例では、このような情報は、ＧＡＤ要素をグラフのノードと、ノードのペアの間のエッジにマッピングするグラフを含む。レイデータは、光線源３０５からメモリ３４０にさらに受信される（６０６）。コレクション・マネージメント・ロジック３８０は、最初にレイをコレクションに割り当てるため動作し、ここで、各コレクションはＧＡＤの要素と関連付けられる。例えば、ＧＡＤの要素は、グラフのルートノードであることができ、受信されたすべてのレイは、ルートノードと関連付けられた１若しくはそれ以上のコレクションに最初に割り当てられる。レイの受信は、グループとしてコレクション全体になるようにサイズを定められることができ、このようなコレクションは１つずつが、例えば、レイ・コレクション・バッファ３３１において特定されたコレクションのように取り扱える。
【００７６】
６０７において、レイは最初にコレクション（例えば、ルートノード、または、カメラ始点の境界を定める球体のコレクション）に割り当てられる。６０８において、テストの準備ができた（複数の）コレクションは、例えば、所定の数より多いレイを有するコレクションを準備完了として合図することにより特定される。６０９において、いずれかのコレクションが準備完了であるかどうかが決定され、準備完了でなければ、それ以上のレイデータが受信され（６０６）、コレクションが準備完了であるならば、準備完了コレクションの選択が行われ（６１０）、これらのコレクションと関連付けられたノードがテストノードとして特定される。
【００７７】
ある程度の数のコレクションが並列にテストされるという了解の下で、１つのコレクションの処理に重点を置くと、メモリ３４０からのテストノードと関連付けられたレイのコレクションの取り出し（６１５）は、例えば、コレクションの中のデータとして格納されたこのようなレイのアドレスを、レイデータを複数の出力ポートに提供するメモリ３４０に与えることによって、コレクション・マネージメント・ロジック３８０によって初期化される。レイデータは、テストセル３１０ａ〜３１０ｎおよびテストセル３４０ａ〜３４０ｎのうちの１若しくはそれ以上に向かうことにすることができる。
【００７８】
特に、テストセル３１０ａ〜３１０ｎの実施例は、交差に関してＧＡＤ要素をテストすることを目的としているが、テストセル３４０ａ〜３４０ｎは交差に関してプリミティブをテストすることを目的としている。６２５で、テストの準備ができたプリミティブは、テストセル３４０ａ〜３４０ｎにおいて交差に関してテストされ、ここで、６２５は、例えば、そのプリミティブの境界を定めるＧＡＤのより粒度が高いノードが存在するかどうかを決定することにより、プリミティブがテストの準備ができているかどうかの決定を含むことができる。このような決定は、テスト対象のコレクションと関連付けられたノードに接続されているすべての幾何学的形状を単に特定することを含むこともでき、接続されたプリミティブはテストのためテストセル３４０ａ〜３４０ｎへ提供できる。
【００７９】
プリミティブがテストの準備ができているかどうかの決定は、与えられたシーン抽出の実施に基づいて（すなわち、ＧＡＤの性質に基づいて）変化する。例えば、ＧＡＤは、１つずつがプリミティブの選択の境界を定め、グラフのノードとして配置されたＧＡＤ要素のグラフを含み、ノードのペアはエッジによって接続されている。各ＧＡＤ要素によって境界付けられたプリミティブの選択と、ノードのどのペアが接続されているかとは、実施によって変化可能である。例えば、ＧＡＤの第１の要素は、ボリュームが小さいか、または、第１の要素によって境界付けられたプリミティブの選択のサブセットだけの境界を定める（より粒度の高い）別のＧＡＤ要素によって境界付けられていない第１のプリミティブの境界を定めることができる。しかし、第１の要素によって境界付けられた他のプリミティブは、プリミティブのサブセットの境界を定めるか、または、ボリュームの小さい１若しくはそれ以上の他の（より粒度の高い）ＧＡＤ要素によって境界付けられることができる。よって、工程６２５において、第１のプリミティブは、より粒度の高いＧＡＤ要素によって境界付けられていないので、テストの準備ができることになる。
【００８０】
このようなテストの準備ができているプリミティブは、テストされているノードと関連付けられたレイのコレクションと共に、テストセル３４０ａ〜３４０ｎに提供されることになる。多くの場合にそうであるように、このようなプリミティブが２若しくはそれ以上存在する場合、レイのコレクションはテストセル３４０ａ〜３４０ｎにロード可能であり、各プリミティブは、各プリミティブがおおよそ並列にすべてのレイとテストされるように、テストセルを介して順次に提供できる。６３０において、いずれかの交差の指標が出力される。所定のレイに対する最近接交差が一般に着目されるので、６４５で、最近接交差が決定される。前の最近接交差はレイデータと共に維持可能であり、コレクション・マネージメント・ロジック３８０は、検出された交差が格納された交差より近接しているかどうかを決定可能であり、必要に応じてレイデータを更新する。
【００８１】
テストのため選択されたノードによって境界付けられたＧＡＤ要素のテストに関して（すなわち、選択されたノードと関連付けられたＧＡＤ要素は他のＧＡＤ要素の境界を定める）、コレクションからテストセル３１０ａ〜３１０ｎへのレイの分配が行われ、その後、境界付けられたＧＡＤ要素のフェッチが６３２で開始され、すなわち、コレクション・マネージメント・ロジック３８０はアドレス指定情報をＧＡＤ記憶装置３１６へ入力し、ＧＡＤ記憶装置はアドレス指定されたＧＡＤ要素をテストセル３１０ａ〜３１０ｎへ出力する。通常の場合のように、多数のＧＡＤ要素が境界付けられる場合、多数のＧＡＤ要素のブロック読み出しが行われるならば、要素はバッファを直列化することによりテストセル３１０ａ〜３１０ｎへ直列にストリーム化されるように配置できる。
【００８２】
テストセル３１０ａ〜３１０ｎにおいて、コレクションの各レイは、直列に提供されたＧＡＤ要素との交差に関してテストされ、レイが交差すると決定された場合（６５０）、交差したＧＡＤ要素のコレクションが存在するかどうかが決定され（６５５）、存在するならば、レイが余地を許すそのコレクションに追加され、存在しないならば、コレクションが作成され６６０、レイが追加される。既存のコレクションに余地がない場合、新しいコレクションが作成される。
【００８３】
いくつかの実施では、コレクションのすべてのレイが所定のＧＡＤ要素に対し並列にテストできるように、コレクションの中のレイの最大数対テストセル３１０ａ〜３１０ｎの数の１：１の対応関係が与えられる。しかし、それ以上のレイがコレクションの中に与えられた場合、コレクションのそれ以上のレイがテストされるかどうかという決定（６６５）が実行され、そうであるならば、この方法は６３５から継続する。
【００８４】
そうでなければ、テストのため選択されたノードは、その関連付けられたコレクションのすべてのレイが境界付けられたプリミティブ、および／または、境界付けられたＧＡＤ要素に対してテストされていることになり、それによって、処理を完了しているか、または、他のＧＡＤ要素と関連付けられた他のコレクションへ分配されていることになるので、テストノードで除外できる（６７５）。したがって、工程６８０が実行され、この関連付けられたレイのコレクションのテストがこの時点でさらに続行されることなく、むしろ、他のコレクションが処理されるとき、無期限に亘って延期されることがある。方法６００は、その後、６０８へ戻り、コレクション準備状況がコレクション・マネージメント・ロジック３８０によって決定される。コレクション準備状況の決定は、ある程度の計算および決定を含むことができる。簡単に説明すると、コレクション準備状況の決定は、各コレクションの充足レベルの決定または検査と、最も充足しているコレクションの選択とを必然的に伴うことができる。コレクションはＧＡＤの要素に対応するので、他の決定は、ＧＡＤの所定の要素または複数の要素に関するテストの完了の決定と、テストの準備ができているこれらの要素と関連付けられたコレクションの選択とを含むことができる。代替的に、コレクション準備状況は、所定のコレクションがＧＡＤ要素のグラフの他の部分を通じてすでに完全にテストされた（複数の）レイを保持すると決定されることができ、そのレイの終了は所定のコレクションの処理に依存する。レイコレクションのための格納ロケーションが固定サイズの領域に割り付けられる場合、コレクション・マネージメント・ロジック３８０は、少数のレイだけを含み、ある時間に亘ってレイが追加されていないコレクションが他のより豊富なコレクションのためそのコレクションによって使用される空間を開放するためにテストの準備ができているとして選択されるべきであるとさらに決定することができる。同様に、多数のレイが利用可能な量のレイコレクション格納空間が満たされ得るように最初に受信されることができる。レイコレクションが完全であるが、コレクション準備状況を決定する他のメカニズムが十分に準備完了したコレクションを始動させない場合、さらなる処理のためのコレクションのランダムな選択またはヒューリスティックな選択が実施されることができる。他の方策および選択基準が実施されることができる。
【００８５】
ＩＴＵ  ３５０および方法６００に関して、テストセル３１０ａ〜３１０ｎおよび３４０ａ〜３４０ｎは、それぞれ、ＧＡＤ要素とプリミティブとのうちの一方だけをテストしたと仮定された。しかし、ある意味では、プリミティブおよびＧＡＤはどちらも幾何学的形状、例えば、三角形および球体である。したがって、これらのタイプの形状のうちの一方またはもう一方が、ＧＡＤの特定のノードによって、境界付けられているか、そうでなければ、内包されているかどうかを先験的に決定しなくてもよい。むしろ、ＧＡＤの特定のノードによって境界付けられている幾何学的形状への参照情報が維持されることができ、その参照情報と関連付けられたデータがフェッチされることができる。いくつかの態様では、形状のタイプはその形状を記述するデータのサイズから推定できる。テストセル３１０ａ〜３１０ｎおよび３４０ａ〜３４０ｎは、これらのテストセルに提供されたタイプの形状を交差テストするために再構成可能である。このような状況では、ＧＡＤ記憶装置３１６およびプリミティブ記憶装置３１７は、それぞれが、各テストセル３１０ａ〜３１０ｎおよび３４０ａ〜３４０ｎへ接続することになる。しかし、各テストセルにおける幾何学的形状テストの完全な構成可能性および選択可能性を可能にするために実施されることがあるように、データ経路複雑性の観点から、各メモリと各テストセルとの間で独立した接続を行う必要がないことが依然として得策である可能性がある。
【００８６】
以下の説明は、図７に図示され、特定のシーンのためのＧＡＤが階層グラフの中に配置されている実施態様を記述する交差テストの方法７００に関係する。本実施例では、ＧＡＤはＧＡＤの要素またはプリミティブの境界を定めるように限定され、両方の組み合わせの可能性がない。このような実施例は、ＧＡＤグラフのリーフノードだけがプリミティブを直接的に境界付けることになる（すなわち、リーフノードだけが別の、より粒度の高い、ＧＡＤの要素によって境界付けられていないプリミティブの選択の境界を定めることになる）。
【００８７】
交差テストの方法７００において、作用の原因が特定の構造によるものとされることができ、データは特定のメモリ資源に格納されていると特定されることができる。しかし、これらは実施の例であり、方法の態様はこのような実施例に限定されない。方法７００は、シーンの中の交差テストのためのレイを受信することから始まる（７０５）。レイはグラフの中のＧＡＤのノードに関連付けられているレイコレクションに最初に割り当てられる（７１７）。例えば、レイは、グラフのルートノード、または、レイが放射されたカメラ位置を取り囲むノードと交差すると仮定できる。このような初期割り当ての後、レイコレクションがテストの準備ができているかどうかが決定される（７１５）。多数のレイが通常最初に送信されるので、１若しくはそれ以上のレイコレクションが殆ど確実にテストの準備ができていて、（複数の）準備完了コレクションの選択が行われる（７１７）ことができる。最初に送信されたレイは、完全なコレクションとして受信され、既にＩＴＵ  ３５０またはＩＴＵ  ５００の中に格納されているコレクションのように入力キューの中で取り扱われることができる。実施例では、１つの準備完了コレクションが選択され、所定のコレクションのすべてのレイが並列にテスト可能であるように、準備完了コレクションはＩＴＵ  ３５０またはＩＴＵ  ５００の各テストセルのための２若しくはそれ以上のレイを含むことがない。コレクション・マネージメント・ロジック３８０またはＧＡＤテストロジック５０５は、例えば、準備完了コレクションのリストを維持し、そのリストの１番目のエントリ、または、別のエントリを選ぶことにより、テストの準備が完了したコレクションを選択することがある。ノードの準備状況を示すフラグをセットし、検査することもできる。
【００８８】
（複数の）準備完了コレクションの選択後（７１７）、ＧＡＤグラフのノードが、コレクション・マネージメント・ロジック３８０またはＧＡＤテストロジック５０５によって、選択されたコレクション毎に特定され（７２０）、各ロジックは、このようなノードがプリミティブまたは他のＧＡＤ要素（すなわち、他のノード）のどちらの境界を定めるかを決定する。ノード／コレクションの関連性は、コレクション・マネージメント・ロジック３８０およびＧＡＤテストロジック５０５の中で管理されることがある。境界付けるプリミティブまたは他のＧＡＤ要素間の区別は、ビット指標に基づいて、または、コレクションが収容する基準の種類の決定に基づいて、または、その他の許容可能な手段に基づいて行うことができる。
【００８９】
まずプリミティブ境界付けに関して、ＧＡＤ要素がプリミティブの境界を定める場合、コレクション・マネージメント・ロジック３８０またはプリミティブ・テスト・ロジック３５０は、メモリ３４０／５４０からのレイデータのフェッチ（７２６）と、テストセル３４０ａ〜３４０ｎおよび５４０ａ〜５４０ｎのそれぞれの間でのレイの分配（７２６）とを開始する。
【００９０】
同様に、各ロジック３８０および５３０は、境界付けられたプリミティブデータ記憶装置３１７からのフェッチ（７２７）を開始する。このようなフェッチは、ブロックとして、または、ストリームとして実行可能であるが、本実施例では、各プリミティブは、プリミティブデータ記憶装置３１７からのブロック読み出しが行われるならば、プリミティブのストリームがバッファまたは他の適当な装置によって作成できるように、テストセル３４０ａ〜３４０ｎおよび５４０ａ〜５４０ｎのそれぞれに共通に提供される。これらのＩＴＵの実施例では、プリミティブデータはプリミティブデータ記憶装置３１７から各テストセル３４０ａ〜３４０ｎへ直接的に提供されると考えられているが、その理由は、これらの実施例では、後述されるように、コレクションの中の異なるレイが共通プリミティブに対しテストを行うテストセルの間で分配されるからである。このようなバッファは、プリミティブおよび／またはＧＡＤ要素が繰り返される処理のためバッファの中に格納されるのではなく、一般にレイの（複数の）コレクションに対するテスト後にＩＴＵメモリから廃棄されるという意味でキャッシュではない。
【００９１】
ＩＴＵ  ３５０において、レイ分配はロジック３８０によって開始され、レイデータはメモリ３４０から各テストセル３４０ａ〜３４０ｎへ直接的に提供される。ＩＴＵ  ５００の場合、レイデータはテストロジック５３０によってメモリから取得でき、バッファ５７０〜５７５へ提供できる。テストロジック５３０は、所定のコレクションの中の２若しくはそれ以上のレイが同じバンクに格納されるという状況に関して、各メモリバンク５１０〜５１５のための要求のキューを維持することができる。どちらの場合も、レイは、レイのデータの開始を特定するメモリロケーション参照情報のような参照情報によって所定のコレクションの中で特定でき、レイは所定のサイズを持つことができる。
【００９２】
その後、レイはテストセルに提供されたプリミティブとの交差に関してテスト７３０される（すなわち、本実施例では、各テストセルは異なるレイを有し、そのレイを共通プリミティブとテストする）。交差に関するレイのテスト（７３０）の後、各テストセル３４０ａ〜３４０ｎ、５４０ａ〜５４０ｎは検出された交差を示す。これらの交差はプリミティブとレイの交差であり、典型的に問題となる交差は１番目の交差だけである。ＩＴＵ  ３５０において、レイは、不規則な順序で交差に関してテストされることができ（すなわち、最初にレイ始点から最も遠いプリミティブに対するテストから行われる可能性があり）、したがって、最近接交差を追跡するためのメカニズムが提供される。例えば、レイと共に格納されたデータはその点に関して特定されたレイに対する最近接交差を示す。この最近接交差データはテストロジック３８０および５３０によってフェッチできるが、テストセルに提供されなくてもよい。その代わり、テストロジックはそのデータを保持し、テストセルから返された検出済みの交差の距離を前に特定された最近接交差の距離と比較し、より近接する交差が特定された場合、そのより近接する交差を使って適切なレイデータを更新する。それ以上の格納空間を必要とするが、すべての交差はレイデータに格納でき、完全な交差テスト後に決定された最近接交差、または、そのようなデータが最適化および解析のため使用できる。
【００９３】
最近接交差の解決７３６の後、ＧＡＤのノードによって境界付けられたさらなるプリミティブが引き続きテストされるべきであるかどうかが決定され（７３８）、もしテストされるべきであるならば、プロセスは７２７から繰り返し、これらのプリミティブがフェッチされる。実施中に、この工程７３８は、所定の数のプリミティブのためのループとして実施である。引き続きテストされるべきプリミティブが無い場合、プロセスはテストの準備ができている別のコレクションを特定するために戻る（７１５）。
【００９４】
いくつかの実施例では、１：１の対応関係がコレクションの中のレイの数とテストセル３４０ａ〜３４０ｎおよび５４０ａ〜５４０ｎの数との間で維持されるので、コレクションのすべてのレイが同時にプリミティブに対してテストでき、プリミティブがテストセルへストリームされるので、レイはテストセルの中で静止している。しかし、テストセルより多くのレイがコレクションの中に存在するか、または、すべてのレイがテストされていない場合、方法７００は、これらの付加的なレイがフェッチ７２６されるさらなるループ点７３９を含むことができ、プロセスはその後に７２６から繰り返す。そうでなければ、方法７００は、コレクションがテストの準備ができているかどうかを決定される７１５から継続する。
【００９５】
他のＧＡＤ要素の境界を定めるノードと関連付けられたコレクションに関して、方法７００は、ＧＡＤテストロジック５０５およびコレクション・マネージメント・ロジック３８０がレイのコレクションを取得し、テストセル５４０ａ〜５４０ｎおよび３４０ａ〜３４０ｎにそれぞれ分配すること（７２４）を含む。プリミティブフェッチと同様に、ロジック５０５および３８０のそれぞれは、テストセルによる受信のためＧＡＤ要素の生成（７２５）を開始し、実施例では、ＧＡＤのテストセルによる受信は直列ストリームと類似している。ここで取得（７２５）されるＧＡＤ要素は、コレクションと関連付けられたノードに接続されたＧＡＤ要素である（例えば、図２のノード２２０と関連付けられたコレクションが選択された場合、ノード２１５、２４１、２２１および２３０のためのＧＡＤ要素がフェッチされることになる。
【００９６】
コレクションの各アレイは、テストセルに提供されたＧＡＤ要素との交差に関してそのテストセルにおいてテスト（７３３）される。交差の指標は、テストセルからロジック３８０および５０５へ出力（７４０）される。ＧＡＤの要素がテストセルの間で共通してテストされるロジック３８０および５０５は、その後に、そのＧＡＤ要素に対してテストされたレイの検出された各交差を記録する。本実施例におけるテストはＧＡＤ要素の中を直列に進むので、ロジック３８０および５０５は、交差する可能性があるレイをノードによって収集するため（７４３）、ＧＡＤ要素と関連付けられたコレクションの中の交差レイへの参照情報を記録できる。他のレイがＧＡＤ要素との交差に関して既にラベル付けされている場合、（すなわち、レイのコレクションは準備ができるまで格納され保留されているので、いくつかのレイは前のテスト中に交差していることが特定されている可能性があり、これらのレイのテストは、コレクションが後で処理のための準備ができていると決定されたときに行われることになる。）
接続されたノードに対しそれ以上のＧＡＤ要素が引き続きテストされるべきかどうかが決定（７６０）され、もし、そうであるならば、このようなノードがテストセルに取得（またはロード）される。接続されたノードに対しすべてのＧＡＤ要素がテストされた場合、７６１で、コレクションの中のそれ以上の引き続きテストされるべきかどうか決定される（ここでは、レイ対テストセルの１：１の対応関係は実施されてない）。すべてのレイがテストされた場合、処理は、現在存在しているコレクションの準備状態を引き続き決定し（７４５）、その後、７１５で、準備状況は、それ以上のレイを取得するか（７０５）、または、さらなるコレクションテストを進めるかを決定するため使用される。それ以上のレイがテストされるべきである場合（７６１）、処理は７２４から継続する。
【００９７】
当然ながら、それ以上のプリミティブ、ＧＡＤ要素、または、レイがテストされるべき場合、このようなデータのフェッチはテストと並行に行うことができ、説明の直列的な性質はプロセスの直列的な性能を意味しないことが理解されるべきである。
【００９８】
同様に、テスト資源（すなわち、テストセル３４０ａ〜３４０ｎおよびテスト５４０ａ〜５４０ｎのそれぞれ）がＩＴＵ  ３５０およびＩＴＵ  ５００においてプリミティブおよびＧＡＤ要素の両方のため存在するので、テストの準備ができているコレクションを特定する工程は、（１）プリミティブの境界を定めるＧＡＤ要素と関連付けられたコレクションと、（２）他のＧＡＤ要素の境界を定めるＧＡＤ要素（すなわち、他の接続されたノードの境界を定めるグラフのノード）と関連付けられ境界付けをするコレクションとに関して並列に行うことができる。したがって、複数のコレクションが所定の時点で処理進行できる。
【００９９】
ＧＡＤ要素との交差に関するレイのテストからの出力はプリミティブ交差に関して同じレイをテストする場合に異なるので（すなわち、ＧＡＤ要素との交差はそのＧＡＤ要素のためのコレクションの中への収集を生じるが、プリミティブとの交差はそのプリミティブとの最近接交差の決定と、このような交差の出力とを生じるので）、特定のレイが偶然に並行してテストされている２つのコレクションの中に存在するとしても、コレクションデータまたは出力された交差についてのライトバックへの競合が通常は起こるべきではない。さらなる並列化が、例えば、テストセル３４０ａ〜３４０ｎの複数のインスタンス化においてプリミティブ交差に関してレイの複数のコレクションをテストすることにより実施されるならば、このようなテスト、このようなテスト、このような複数の交差またはロックビットの格納などを強制的に順番に終了するように特徴が実施されることもできる。
【０１００】
つまり、方法７００は、レイを受信する工程と、レイをコレクションに割り当てる工程と、準備状況がアルゴリズム的に決定可能である場合にテストの準備ができているコレクションを選択する工程と、選択されたレイのコレクションを適切なテストセルに割り当てる工程と、交差テストのため適切なジオメトリをテストセルの中でストリーム化する工程とを含む。出力は、ジオメトリがシーンプリミティブであるか、または、ＧＡＤ要素であるかに依存する。ＧＡＤ要素に対してテストされたレイの場合、ＧＡＤ要素はテスト中のコレクションと関連付けられたノードとのグラフ接続に基づいて特定され、レイはテスト中のＧＡＤ要素と関連付けられたコレクションに追加される。コレクションは準備状況に関して見直され、テストの準備ができたとき選択される。プリミティブとのレイ交差に関して、最近接交差がレイを用いて追跡される。レイは準備完了コレクションと関連付けられたときにテストされるので、特定のレイのための交差テストは、特定のレイが関連付けられたコレクションがテストの準備ができていると決定されるまで延期される。レイは、このようなレイがシーンジオメトリの異なる部分に対しテストされることを可能にする複数のコレクションへ同時に収集可能である（すなわち、レイはトラバースの順序にテストされなくてもよい）。
【０１０１】
上述されているように、いくつかの実施では、ＧＡＤ要素は、特定のＧＡＤ要素が別のＧＡＤ要素とプリミティブとを共に直接的に境界付けることがなく、その代わりに、プリミティブが別個のＧＡＤ要素によって直接的に境界付けられるように、選択でき、互いに相互に関係付けができる（本実施は、ＧＡＤ要素およびプリミティブが所定のＧＡＤの要素の内部で「混合」されていないので、同質の実施と呼ばれることができる）。このＧＡＤ配置は、最適化されるか、そうでなければ、特定のタイプの形状を交差に関してテストするため構成されたテストセルにおけるＧＡＤ要素およびプリミティブのテストを実現し易くするので、役立つことがある。本実施の選定は、テストセルがＧＡＤ要素またはプリミティブをテストするため最適化される場合、可能であるならば、各タイプの形状を最適化されたテスト装置へ割り付けることが好ましいので、レイのテストセルへの割り付けに影響を与えることができる。方法７００は、本明細書中に記載された説明に基づいて、同質であるか、それ以外であるかとは無関係に、どのようなＧＡＤの構成に対しても適応させることができる。
【０１０２】
上記の方法６００および７００では、レイのコレクションに与えられた情報に基づいてレイはメモリからロードされた。したがって、このようなローディングは、各レイを表すデータが格納されているそれぞれのメモリロケーションを決定することを含むことができる。このようなデータは、レイコレクションがコレクションの中のレイのためのレイデータが格納されているメモリロケーションまたは格納すべきその他の参照情報のリストを含むことができるので、レイコレクションの中に構成されることができる。例えば、レイコレクションは、メモリ３８５の中のロケーションへの参照情報を含むことができ、これらの参照情報は、絶対値であることができ、ベースからのオフセットであることができ、このようなデータを参照するための別の適切な方式であることができる。
【０１０３】
同様に、方法６００および７００は、プリミティブまたはＧＡＤ要素のいずれかがテストサイクルの中を循環させられていたので、レイデータがテストセルの中で「静止」しているという観点から説明された。しかし、実施は、プリミティブまたはＧＡＤ要素のいずれかをテストセルの中に固定し、レイをそれらの中で循環させることもできる。このような状況は、同じＧＡＤ要素と関連付けられたある程度の数のレイコレクションがテストの準備ができていた場合に有利である。ＩＴＵ  ３５０およびＩＴＵ  ５００の動作は、このような変形または機会が現れるときにそれらを受け入れるように変更できる。各テストセルが交差に関してＧＡＤの要素の一部をテストするように、複数のテストセルにおけるレイの重複を含むその他の実施が提供されることができる。
【０１０４】
レイのリストとアクセラレイションデータのリストとの両方を循環させることができるより複雑なテストセルが提供されることができる。このような実施では、各テストセルは、ＧＡＤのすべての適切な要素との交差に関してレイのコレクションをテスト可能である。しかし、このような実施は、本テクノロジの限界を考慮して複雑なシーンに対するレイおよびＧＡＤの要素がすべてのテストセルに提供される状態を保つため、より大きいメモリ４４０およびより高い帯域幅インターフェイスを必要とする可能性がある。テクノロジの進歩につれて、レイまたはＧＡＤの特定の要素をテストセルの中に静止した状態に保つことは、各テストセルがより小さいワーキングメモリを必要とすることになり、このことは、何ダース、何百、または、場合によっては何千ものテストセルを有する実施においては、実用上の利点ことを含めて、優位性をもち続けることになるので、このような実施はより望ましくなることができ、ある意味で、ＩＴＵ  ３５０を複数回に亘って複製していると見なすこともできる。
【０１０５】
方法および装置の実施例は、レイ間の利用できる潜在的な並列化を特定できる。図４に関して上記されているように、ＩＴＵ  ３５０またはＩＴＵ  ５００のようなＩＴＵの中のメモリは所定の最大量のレイを格納することが可能になる。このようなＩＴＵの中に格納できるレイの最大数は、シーンを完全にレンダリングするためテストされることになるレイの数未満であることが予想される。したがって、レイは、ＩＴＵによるシーンのレンダリング中に条件付きで許容されることができる。レイ入力から新しいレイを許容する条件は、メモリが新しい例を表すデータを格納するため利用可能な空間を有することである。レイは完全なコレクションを何回にも分けて近似して許容することができ、デフォルトの形状のグループ（例えば、ＧＡＤ要素のグラフのルートノード）に対する処理の準備ができているとして特定することができる。
【０１０６】
多数の実施例において既に挙げているように、ＩＴＵは、レイ入力から前に受信されたレイを表す情報をメモリに格納する（例えば、格納させる）。ＩＴＵは、これらのレイに対し、複数のコレクションの１若しくはそれ以上のレイコレクションとの各レイの関連性を維持する。ＩＴＵは、メモリに格納された複数のコレクションに対しコレクション完全の指標をさらに維持する。これらの指標は、完全コレクションを示すそれぞれのフラグでもよく、所定のコレクションと関連付けられたレイの数を表す数でもよい。
【０１０７】
ＩＴＵは、（上述のように）コレクション毎に基づいて交差テストのためのレイを選択し、ここでは、ＩＴＵ選択は複数のコレクションの中から完全コレクションを選択するためバイアスをかけられる。完全コレクションが利用可能でない場合、新しいレイがテストのため選択される。完全コレクションおよび新しいレイが利用できない場合（例えば、それらを格納するために利用可能なメモリが存在せず、したがって、それらが容認されないので）、複数のコレクションの中からの（複数の）部分完全コレクションがＩＴＵによって選択される。ＩＴＵは、レイコレクションンの（前の実施例では、例えば、ＧＡＤ要素のグラフとして特定された、それぞれの形状のグループ、または、ＧＡＤの要素によって境界付けられたプリミティブのグループへの関連性にアクセスする。ＩＴＵは、交差を示し、上述されるように交差を大部分は処理するように動作する。部分完全レイコレクションの選択は、並列化可能なレイコレクションが特定される利用可能なレイを増加させる２次的レイの生成を促進する。ここで、２次的レイは、特定されたレイ／プリミティブ交差の結果として生成されたレイを含むものとして考えられ、交差に関連したレイはカメラレイでなくてもよく、したがって、「２次的レイ」はカメラレイから削除されるレイ／プリミティブ交差の数はいくつでもあることができる。別のレイがレイ／プリミティブ交差をシェーディングする結果として放射されるたびに、新しいレイは、便宜的に新しい「世代」として考えられる。よって、本明細書中に記載された多数の発明の態様において、利点はこれらの態様がテストのためあらゆる世代から一括してレイを収集するため機能することであり、いくつかの動作モードでは、レイ交差テストのより多くの並列化を可能にするという意味で、レイの優れた分配を行うためそれぞれの世代とは無関係に、多数のレイの生成を促進することである。
【０１０８】
さらに、各ＩＴＵ  ３５０またはＩＴＵ  ５００は、有限数のテストセルを含み、所定のレイが形状と交差するかどうかを決定するため、ある有限時間を必要とするので、ＩＴＵは最大スループットを有する。これらの実施形態では、これらの開示に従って、実際のスループットをＩＴＵの最大スループットのより近くに維持することは、テスト資源の効率的な用法を示す。記載された方法および装置は、レイの完全コレクションを大部分テストすることにより効率的な交差テストを行う。さらに、レイコレクションのシーケンスがＩＴＵ  ３５０または５００でテスト可能であり、プリミティブのグループがレイコレクション毎に循環させられ得ることは上述されている（例えば、３２つのレイコレクションはそれぞれが３２つのＧＡＤ要素に対してテストできる）。したがって、次にテストされるレイのコレクションを指定する入力はレイコレクションのシーケンスであると考えることができる。好ましくは、このシーケンスは、前に入力されたレイ、または、新しいレイのいずれかである完全コレクションで満たされる。しかし、時には、例えば、ラウンドロビン方式で部分完全コレクションを選択することにより、潜在的に種々の始点および方向からの広範囲の２次的レイの生成を促すことが望ましいことが判明した。
【０１０９】
上記ＩＴＵは、ハードウェア制御により重点を置き、専用アクセラレータとしての実施のためより適した実施の実施例である。しかし、発明の態様は、専用命令を使用することがあるよりソフトウェア指向の実施で実施することもできる。このような実施の態様は、図８に関して提示されている。特に、プロセッサ８０５は、メモリインターフェイス８２５に連結されたフェッチユニット８２０と、命令キャッシュ８３０と、命令デコーダ８４５と、データキャッシュ８５０とを含む。データキャッシュ８５０はテストセル８１０ａ〜８１０ｎをフィードする。命令デコーダ８４５は入力をテストセル８１０ａ〜８１０ｎにさらに提供する。命令生成器８６５は命令デコーダ８４５へ入力される命令を提供する。テストセルは検出された交差の指標をライト・バック・ユニット８６０へ出力し、次にライト・バック・ユニットはデータをデータキャッシュ８５０に格納することができる。ライト・バック・ユニット８６０からの出力は、命令を生成するとき命令生成器８６５への入力としてさらに使用される。このようなプロセッサ８０５で使用される命令は単一命令複数データの系統であることができ、ここで、テストセルの中で処理された命令は定義された表面とレイとの間の交差テストであると考えられる。
【０１１０】
実施例では、「命令」は、プリミティブ、または、ＧＡＤの要素のうちの一方を含むことがあり、複数のデータ要素は、「命令」として提供されたプリミティブまたはＧＡＤの要素に対するテストを行う別個のレイを含むことができる。命令を含む付加的な情報は、複雑であることができ、単純であることができる。例えば、プロセッサ８０５が複雑なフル機能プロセッサである場合、プロセッサは大規模命令セットも含むことがあり、交差テスト命令を他の命令から区別するためにある程度のビット数が必要とされることがある。同様に、必要に応じて、異なるプリミティブ形状および異なるＧＡＤ要素形状のための命令、または、さらには異なるテストアルゴリズムのための命令を含む種々の交差テスト命令が与えられることがある。
【０１１１】
典型的な実施例では、各交差テスト命令は、ＧＡＤの要素またはプリミティブへの参照情報のいずれかであるジオメトリ要素への参照情報と、ジオメトリ要素との交差に関してテストされるレイの数への参照情報とを格納することができる。デコーダ８４５は、ジオメトリ要素への参照情報を決定するため命令を解釈し、フェッチ８２０およびメモリインターフェイス８２５を介して要素のフェッチを開始する。いくつかの実施では、デコーダ８４５は、将来に必要とされるジオメトリ要素のフェッチを開始するためにある程度の数の命令に備えることができる。ジオメトリ要素はフェッチ８２０によってデコーダ８４５へ提供でき、デコーダ８４５はジオメトリ要素をテストセル８１０ａ〜８１０ｎへ提供する。デコーダ８４５は、複数テストが可能である場合、所望のテストを実行するためテストセル８１０ａ〜８１０ｎに適した命令情報をさらに提供する。
【０１１２】
デコーダ８４５は、関数アドレスとして命令からのレイ参照情報をデータキャッシュ８５０へさらに提供し、データキャッシュは、各レイの交差テストのため十分なそれぞれのデータをテストセル８１０ａ〜８１０ｎのそれぞれに提供する。交差テストのため必要でされないレイと関連付けられたデータは提供される必要がない。
【０１１３】
ジオメトリ要素は、各テストセル８１０ａ〜８１０ｎにおいてそれぞれのレイとの交差に関してテストされ、交差の指標がライトバック８６０による受信のため各テストセル８１０ａ〜８１０ｎから出力される。テストされるジオメトリ要素の性質に依存して、ライトバック８６０は、２つの異なる機能のうちの一方を実行する。テストセル８１０ａ〜８１０ｎが交差のためのプリミティブをテストしている場合、ライトバック８６０はテストされているプリミティブと交差した各レイの指標を出力する。テストセル８１０ａ〜８１０ｎがＧＡＤの要素をテストしている場合、ライトバックはテストセル８１０ａ〜８１０ｎの出力を命令ユニット８６５へ提供する。
【０１１４】
命令ユニット８６５は、さらなる交差テスト中にテストセルに指令することになる将来の命令を組み立てるため動作する。命令ユニット８６５は、以下の通り、ＧＡＤの所定の要素と交差したレイを指定するテストセル８１０ａ〜８１０ｎの入力と、命令キャッシュ８３０と、ＧＡＤ入力８７０からの入力を使って動作する。テストセル８１０ａ〜８１０ｎからの入力を使って、命令ユニット８６５は、ＧＡＤ入力に基づいて、テストセル８１０ａ〜８１０ｎからの入力の中で指定されたＧＡＤの要素に接続されたＧＡＤの要素を決定する。命令ユニット８６５は、命令キャッシュ８３０に格納された命令が接続しているとして特定されたＧＡＤの要素毎に既に存在するかどうかと、命令がさらなるレイ参照情報を許容するかどうか（すなわち、命令のすべてのデータスロットが満たされているか）とを決定する。命令ユニット８６５は、テストセル入力の中で交差しているとして特定されたレイと同数をその命令に加え、残りのレイ参照情報を受信するため十分な他の命令を作成する。命令ユニット８６５は、テストセル入力の中で特定された要素と接続しているとして特定されたＧＡＤの要素毎にこれを実行する。このように、テストセル入力を処理した後、交差しているとして特定されたレイはそれぞれが、ＧＡＤの接続された要素に対するレイのテストを指定する命令に加えられる。命令は命令キャッシュ８３０に格納されることができる。命令は、ＧＡＤ入力８７０から受信されたＧＡＤの要素の編成に基づいて命令キャッシュ８３０の中に編成されることができる。
【０１１５】
例えば、ＧＡＤ入力８７０はＧＡＤのグラフを提供することができ、グラフのノードはＧＡＤの要素を表現し、ノードのペアはエッジによって接続されている。エッジは、どのノードが他のどのノードに接続されているかを特定し、命令ユニット８６５は、ＧＡＤの所定の要素のためキャッシュの中に既に存在する命令と、新しいレイが追加されるロケーションとを特定するために、ノードを接続するエッジを辿ることにより命令キャッシュ８３０を探索する。複数の命令が所定のＧＡＤ要素に対し存在する場合、複数の命令はリストの中でリンクされることができる。関連した命令が見出されることがある命令キャッシュ８３０の中の潜在的なロケーションを特定するためのＧＡＤ要素ＩＤのハッシングのようなその他の方法が同様に実施できる。命令は、発行され復号化された命令に応答して、命令がＧＡＤの接続されたノードのフェッチを引き起こすように、テスト中のＧＡＤのノードをさらに参照できる。このような接続された要素のそれぞれは、各テストセルの中に維持されているそれぞれのレイとのテストのためテストセル８１０ａ〜８１０ｎの中へストリーム可能である。
【０１１６】
よって、これらの実施例にしたがって実施されたプロセッサは、接続されたノードに対する交差テストのための第１のノードとの交差に関して特定されたレイを収集する命令を取得するか、そうでなければ作成するために機能を提供することになる。上述された実施例と同様に、プロセッサ８０５に提供されたＧＡＤが階層的である場合、ＧＡＤのグラフは階層的な順序でトラバースされることがある。ＩＴＵ  ３５０および５００に関して上述された世代間のレイコレクションの態様は、図８に関して説明されたシステムにも適用できる。
【０１１７】
ＧＡＤの接続および提供源の実施例は典型的であり、他の配置も考えられる。例えば、メモリ８１５はＧＡＤ要素のための提供源であることができる。
【０１１８】
実際的なＩＴＵ実施では、交差テストは選択された精度レベル（例えば、８ビット、１６ビット、２４ビットの精度など）で実行されるべきである。いくつかの実施では、実施されたＩＴＵは、所望の精度でのレイとＧＡＤ要素またはプリミティブとの間の交差のロケーションがさらなるテスト無しに決定できるように、高精度で交差テストを実行できる。
【０１１９】
他の態様では、実施されたＩＴＵは、レイとＧＡＤ要素／プリミティブとの間の交差のためより低精度の予備テストを実行でき、この低精度の予備テストは高精度テストより可能性が高いが誤った交差の検出をもたらすことができる（すなわち、疑陽性交差）。これらの予備交差の検出後、高解像度交差テストがこれらのプリミティブのうち所定のレイが最初に交差するプリミティブを決定するため実行できる。殆どの共通シェーディングアルゴリズムでは、最初の交差したプリミティブはレイシェーディング計算で使用されるプリミティブである。最初に低精度テストの実行は、交差していることが明らかではないレイおよびプリミティブに対するより高精度、より計算集約的である交差テストの実行を回避できる。交差ロケーションについてのより高精度の指標は、その情報のジオメトリ中心的な表現で示されることができる。例えば、交差ロケーションは、三角形プリミティブを記述する１若しくはそれ以上の頂点と相対的に示すことができる。
【０１２０】
方法およびシステムを実施する上述された方法およびシステムは、シーンの要素に関する交差テストのためのレイを許容可能であるプロセスを実施するものとして考えられ、プロセスは、各レイが各ＧＡＤ要素と交差するかどうかに基づいてレイのコレクションを形成するためＧＡＤの要素に対しレイをテストするように動作する。したがって、このようなテストの結果は、１つずつがＧＡＤ要素と関連付けられたある程度の数のコレクションが形成できることである。これらの実施例では、ＧＡＤ要素は、エッジがノードのペアを接続するグラフに配列されているので、レイの所定のコレクションをテストする次の工程は、エッジによってそのコレクションが関連付けられたノードへ接続されたＧＡＤ要素（すなわち、グラフのノード）との交差に関してレイのコレクションをテストする。しかし、この次の工程は、交差に関する他のレイのテストの続行を優先して、レイのコレクションがテストの準備ができるまで延期される。第１に、プロセスは、レイの別のコレクションがテストの準備ができるかどうかを決定でき、準備ができているならば、そのコレクションはテストのためスケジュールに入れることができる。他のコレクションがテストの準備ができていない場合、交差テストのためのそれ以上のレイを許容する利用可能なメモリ空間が存在するならば、それ以上のレイが許容されテストされる。しかし、利用可能なメモリ空間が十分に存在しないならば、レイのコレクションは、潜在的には擬似ランダム的に、または、経験則を利用して、テストのため選択できる。このようなヒューリスティックな選択は、メモリ空間が利用可能にされるか、または、例えば、完全性指標を参照して、コレクションが準備完了であると決定されるまで継続できる。次に、コレクションが準備完了である場合、コレクションはテストされ、メモリ空間が利用可能である場合、新しいレイが許容されテストされる。
【０１２１】
ヒューリスティックな選択方法は、交差テスト資源の利用率または利用量をテスト、または、そうでなければ、監視することによって、特定でき、経験則がより優れた長期利用または平均利用を提供する場合、経験則が使用されることがある。
【０１２２】
このように実施されるプロセスは、主として、完全レイコレクションの交差テストを続行し、補助的に、利用可能なメモリ空間を処理されているレイで満たそうとする。完全コレクションが存在せず、利用可能なメモリ空間が不十分である場合、コレクションは、擬似ランダム的またはヒューリスティックな選択からテストされる。プロセスは、このようにして、可能であるとき、メモリ記憶装置が提供された場合に実際的にできる限り多数のレイをテストする間に、十分な空間コヒーレンスをもつレイのテストを進行させ、不十分な数のレイがより効率的な交差テストのための空間コヒーレンスを有する場合、異なる始点および方向のからのレイの生成は、十分な数のレイの集計が交差テストの効率を高めることを可能にするように促進される。これらの態様は、実施の実施例においてエレガントに実現される。しかし、他の実施は、このような態様の開示内容をさらに利用することができ、発明と発明の均等物の範囲内であると考えられる。これらの態様は、ＩＴＵ  ３５０またはＩＴＵ  ５００の内部、ドライバプロセスのようなホストに常駐している（複数の）プロセスの内部などで実施でき、または、交差テスト資源と交差テスト資源のためのドライバとの間で協働的に実施できる。ホストプロセッサ相互作用は以降の図に関してさらに説明される。
【０１２３】
上記開示から認識され得るさらに別の態様は、適当な量のレイが収集され、定義された物体の集合に対するテストの準備ができるまで、交差に関するレイのテストを延期する間に、これらの態様が交差に関してテストされるべきプリミティブの反復的な排他または狭小化を行う。いすれかのレイのコレクションは、カメラレイ、または、シェーディング計算若しくは光或いは影をサンプリングするその他の演算から生じたいずれかの他のタイプのレイを含む可能性があり、その結果、この方法は、交差に関してある程度の数のレイをテストするとき、これらのレイが非類似の始点および方向を有する場合でも、シーン・アクセラレイション・データおよびシーンプリミティブへのより構造化され、予測可能なアクセスを可能にする効果がある。換言すると、このような典型的な方法は、異なる始点、方向、および目的を有するが、アクセラレイションデータの共通要素またはプリミティブと並列に交差に関して依然としてテストできるレイの特定を可能にする。
【０１２４】
このようなレイの特定は、他のレイおよび他のアクセラレイションデータまたはプリミティブがテストされている間に、長時間に亘って分散させられる。実際上、これらの態様は、並列にテストするため異なる世代のレイを収集することになり、すなわち、例えば、１次カメラレイがシーンの完全に異なる部分の中で完全に異なる物体の鏡面反射をテストするため生成された２次的レイと並列にＧＡＤ要素に対し交差に関してテストされることがあり、２次的レイは完全に異なるカメラレイに関係付けられることがある。要約すると、これらの方法およびシステムは、いくつかの異なる始点および方向を有するシーンの中を移動するレイの大きいグループから潜在的なレイ干渉性を抽出し、シーンプリミティブまたはＧＡＤ要素の中間キャッシュを用いることなく、より大規模、安価なメモリへの直接的なアクセスを許可するように、並列化された交差テストおよびメモリ帯域幅の保存を可能にするためにその抽出されたレイテンシを使用するため動作する。この方法は、関係しているカメラレイ、または、それらの始点および方向とは無関係に、２次アレイ（すなわち、カメラレイではないレイ）の広範囲に亘る散乱および利用可能性を具体的に許可し、場合によっては、促進することと、長時間に亘って、ＧＡＤ要素との交差に関してレイをテストすることによってこのようなレイおよび潜在的に他のレイとを収集することとを含む可能性もある。したがって、このような方法の実施は、ＧＡＤ要素との交差に基づくレンダリング時間を通じて多世代レイのコレクションを収集し精緻化するため動作可能である上述された専用ハードウェアアプローチの実施例およびＳＩＭＤアプローチの実施例に関する変形を含むものとして考えられることがある。
【０１２５】
上記態様の大半は別個のレイデータおよびレイ・コレクション・データが維持されるという観点から説明された。しかし、いくつかの実施では、その分離は、レイ・コレクション・データおよびレイデータが、例えば、コンテンツ連想データベースとして維持可能であるので、それほど明示的または明白ではなく、コレクションとレイとの間の関連性、および、コレクションとＧＡＤの要素との間の関連性が維持され、テストのためのコレクションと関連付けられたレイ、および、さらにこのコレクションと関連付けられたＧＡＤの要素を特定するため使用される。
【０１２６】
上記説明は交差テスト資源の内部の機能と機能の実施とに主に関係する。このような交差テスト資源は、一般に、より大規模のシステム、または、レンダリングサービスを必要とする（複数の）アプリケーションとインターフェイスをとるシステムのグループの中で使用されることになる。システムは、レンダリングされるべきシーンのデータを受信し、レンダリングの交差テスト部を実現するために交差テスト資源とインターフェイスをとるドライバおよび他のプロセスを実行することができる。
【０１２７】
以下の説明はこのようなシステムおよびシステムのグループの概要を与え、続いて、どのような種類のプロセスおよび機能がこのようなシステムで実行できるかについての実施例が説明される。コンピュータシステム９００は、メモリ９２５とインターフェイスをとるＣＰＵ９０５と、例えば、キーボード９２０、マウス９２１、および、ジョイスティック９２２から入力を受信し、ディスプレイ９４０に出力を提供するユーザインターフェイス９１５とを含むホストシステム９０３を含む。ホストシステム９０３は、オンチップメモリ９１２（例えば、ＳＲＡＭ）およびオフチップメモリ９３０（例えば、ＤＲＡＭ）とインターフェイスをとるロジック９１１を使って実施可能である交差テスト資源９１０とインターフェイスをとる。ロジック９１１およびメモリ９１２の組み合わせは、上述されたＩＴＵ  ３５０またはＩＴＵ  ５００を実施することがある。テスト資源９１０のためのドライバを含むソフトウェアはＣＰＵ  ９０５で動く。ドライバはレイをロジック９１１に共有することになり、シェーディング計算、および、表示するためのレンダリングされたシーンの生成のため必要である他の計算で使用されるべき特定されたレイ／プリミティブ交差を受信することになる。
【０１２８】
図１０Ａは、ＣＰＵ  ９０５がレイトレーシングによるシーンのレンダリングを必要とすることがあるアプリケーションコード１０２５のための処理資源を提供するレンダリングシステム１０００の実施例を図示している。例えば、このようなアプリケーションは、ビデオゲーム、３次元モデリング、および、設計ツールと、可視化ツールとを含むことがある。ＣＰＵ９０５は、このようにして、このようなアプリケーションコードからレンダリングするためシーンを記述する情報を処理し、例えば、アプリケーション・プログラミング・インターフェイス、関数呼び出し、または、その他の適当な実施を通じて、このような情報をジオメトリプロセス１０２０、サンプルプロセス１０１０、および、シェーダプロセス１０１５に提供可能である。情報はジオメトリを含むことがあり、ジオメトリは、シーンのためのワイヤフレームを示すプリミティブ、または、ワイヤフレームを構築することができる画素のアレイ、または、レンダリングされるべきシーンの中の（広義に考えて）物体の表面を示す別の適当な手段を含むことがある。図１０Ａは、ＣＰＵ  ９０５が交差テストされるべきレイを記述する情報を格納するバッファ１０４０を介して交差テスト資源と通信することをさらに図示している。交差テスト資源９１０で実施されたレシーバ１０５０が、レイを記述する情報を受信する。以下では、交差テストのための多数のレイを効率的に通信するため、このようなレイ情報が構造化され得る方法の実施例を説明する。
【０１２９】
格納および／または送信のためのレイの表現
任意のレイは３次元空間の中の３次元始点および方向ベクトルによって表現される。この表現は、「ワールド空間」を示すために適切な精度で、６つの数値を必要とする（すなわち、相対的な参照情報なしに、シーンの中のレイに対する絶対位置および方向を提供する。このような表現は、所定の時点でトレースされるレイの数に対する帯域幅および格納の要件がこのようなシステムにおけるシステム帯域幅および格納へのその他の要望と比べると合理的に小さいので、殆どのレイ・トレーシング・アプリケーションのため適切であることがわかった。しかし、ホストプロセッサがドライバによって作成されたレイのためのハードウェア高速化された交差テスタとインターフェイスをとるソフトウェアドライバを動かし、そのテスタがシーンプリミティブおよび／またはグラフィカル・アクセラレイション・データ要素に対して非常に多数のレイを並列にテストするレイトレーシング・システム・アーキテクチャの場合、ハードウェアアクセラレータへのレイデータ転送のための帯域幅および格納の要件は制限因子であることがわかった。
【０１３０】
レンダリングシステム１０００は、本明細書中に開示されたレイデータ送信／受信効率の態様を利用することがある。サンプルプロセス１２０は、表示されることになる（そして、画素の色がレイトレーシングによって決定される）シーンを表す画素の２次元平面を維持するため動作する。サンプルプロセス１２０は、シーンバッファ１０１１の中に格納された画素光エネルギーのためのバッファを維持することができる。（実際上、このような光エネルギーのためのバッファの数は維持され、この概念はこの実施の細部の一般化を表す）。シーンバッファ１０１１の画素は、所定のシーンに対するレンダリングの終了後に出力されることができる。サンプルプロセス１２０は、シーンを構成するプリミティブに対する交差テスト資源１０４５における交差テストのためカメラレイをさらに放射する。これらの放射されたカメラレイは最初にバッファ１０４０へ出力できる。
【０１３１】
ジオメトリプロセス１０２０は、アプリケーション１０２５によって提供された頂点のリストからシーンプリミティブおよびジオメトリ・アクセラレイション・データを生成することができる。プリミティブおよびアクセラレイションデータはＩＴＵ  ９１０に提供されることができる。様々なインターフェイスコンポーネントは、必要に応じて、および／または、要望通りに、この通信および後続の格納を仲介することができる。
【０１３２】
シェーダ１０３５は、カラー計算およびシーンプリミティブとレイとの間で特定された交差に対し行われるべきその他のタスクを実行するため、異なるコード部分、プロセス、およびその他の実施をいくつでも示す。このようなタスクは、後述されるように、シャドーレイおよび反射レイのような２次的レイの生成を含むことができる。シェーダ１０３５は、このような２次的レイをバッファ１０４０へさらに出力する。より詳細に後述されるように、シェーダ１０３５は、ＩＴＵ  ９１０から特定されたレイ／プリミティブ交差の指標をさらに受信可能である。
【０１３３】
バッファ１０４０は、サンプルプロセス１２０およびシェーダ１０３５のそれぞれのための専用ポートを含むことがある。バッファ１０４０は、ＩＴＵ  ９１０への出力ポートをさらに有する。バッファ１０４０は、ホスト１０３若しくはＩＴＵ  ９１０、または、バッファ１０４０の内部にある回路若しくはソフトウェアのいずれかによって、管理されることがある。バッファ１０４０は、単にＦＩＦＯキューでもよく、または、不規則な順序のレイ選択またはレイの並べ替えを実施可能であるようにより複雑でもよい。バッファ１０４０はＩＴＵ  ９１０の一部でもよい。
【０１３４】
サンプルプロセス１０１０、シェーダ１０３５、およびレシーバ１０５０の動作をより詳細に説明する前に、シーンの中で交差に関してテストされることがあるレイのタイプの実施例が、上記プロセスおよびコンポーネントの動作に関連して、各レイを定義するために十分なデータのような特性と共に与えられる。
【０１３５】
レイタイプ
カメラレイ
カメラレイの態様は図１２に関して検討される。カメラレイは、モーションピクチャに都合のよい類似であり、シーンが観察されることになるロケーションを示すカメラ１２０５から放射される。カメラ１２０５は、物理的な実体ではなく、むしろ、３次元空間の中の点または複数の点である。カメラレイは、ピンホール・カメラ・レイ（すなわち、すべてのレイが同じ始点を共有し）と、非ピンホール・カメラレイ（すなわち、レイは、正確に同じ始点ではないが、類似した始点を有する）とを含む。ピンホールカメラからのレイは、画像平面に位置しているｘ位置およびｙ位置から外れる可能性がある。図１２には、レイ１２１０ａ〜１２１０ｆは図示されている。各レイが画像平面１２５０と交差するロケーションはそれぞれ１２１５ａ〜１２１５ｆとして特定される。
【０１３６】
非ピンホールカメラの場合、プログラム的定義のような定義された関係は、そのカメラから放射されたレイの間で共有されるカメラ属性を参照することにより、画像平面上でのｘ位置およびｙ位置を完全なレイ始点および方向へ平行移動させる。カメラレイは、したがって、実施されることが望ましいオーバサンプリングおよび／またはマルチサンプリングを明らかにする画像平面上の位置を示すために適切な精度で、共有カメラ属性と併せて、２つの数値として表現可能である。
【０１３７】
フレーム全体または画像平面の領域のカメラレイを放射することが望ましい場合、シングルトークンがこれらのレイを表現でき、トークンは、関係若しくはサンプリング技術のパラメータによって定義されるか、または、そうでなければ、関係若しくはサンプリング技術のパラメータから導出可能であるロケーションにある画像平面との交差に対しレイをカメラから放射させるレイ放射の間隔を指定するプログラム的関係、または、サンプリング技術を提供する。これらのレイ放射および関連した計算のすべてがサンプルプロセッサ１０１０によって実行できる。
【０１３８】
反射レイ
反射レイの態様は図１１に関して記載されている。反射レイは、レイとプリミティブとの間の交差から生じ、シェーディング計算は、反射レイがシーンの中のさらなる交差テストのため放射されるべきことを決定する。特定の実施例によって、カメラレイ１１０６はカメラ１１０５から放射され、カメラレイ１１０６は点１１１５でプリミティブ１１１０と交差する。このプリミティブ／レイ交差ペアはＩＴＵからシェーダ１０３５へ出力される。シェーダ１０３５は、今度は、反射レイ１１２０ａ〜１１２０ｆが点１１１５に始点を有するプリミティブ１１１０から放射されるべきことを決定する。
【０１３９】
理解されるように、シェーディング動作は、多くの場合に、単一の始点から多数の子レイを作成することを必要とする。これらのレイを交差テストユニットへ効率的に送信するため、始点は子レイのための共有データとして同時に送信可能であり、子レイ毎に、方向ベクトルだけが送信される。選択的に、３次元空間の中の単位ベクトルの代わりに、各レイ方向は角度のペアとして送信されることがある。
【０１４０】
モンテカルロ始点／オクルージョンレイ
モンテカルロ始点／オクルージョンレイは図１４に関して記載されている。モンテカルロサンプリング技術、周囲オクルージョン、およびその他の技術のようないくつかの照明技術は、半球上の複数の点をサンプリングする。これらの技術のため放射されたレイは、上述された反射レイのため使用された技術と類似した技術を使用してより効率的に送信および／または格納することがさらに可能である。しかし、各レイに対して固定した共通始点を提供するのではなく、レイ始点は、規則的、ランダム、パラメトリック、および／または、プログラム的に導出できるように記載されている。したがって、このようなレイの始点は、独立に指定される必要はなく、レイ転送効率はレイのそれぞれに対し始点および方向を構築するために十分な情報を送信することによって増大可能である。例えば、すべてのレイは半球面上の点の接線に垂直な方向へ放射されるべきであることに注意を要する。面上のこれらの点は密度関数によって記述できる。
【０１４１】
図１４は、様々なレイ、例えば、レイ１４１０ａ〜１４１０ｆ、およびレイ１４１５ａ〜１４１５ｃが放射され得る半球面５０５を図示している。レイ１４１０ａおよび１４１０ｂに関して、これらは、局所的な面接線ベクトルに関して測定された角度１４２５ａおよび１４２５ｂによって部分的にパラメータ化されているとして図示されている。図１４の特定の実施例では、レイ１４１０ａ〜１４１０ｆは、角度１４２５ａおよび１４２５ｂのような角度によって記述可能である。各レイの始点は他のレイ始点からの相対距離、例えば、距離１４３５によって決定可能である。始点は、基準点１４３０のような、そして、例えば、それぞれのレイ１４１０ｄおよび１４１０ｅまでの距離１４４０および１４４５によって図示されているように、基準点に関してさらに表現可能であるか、または、そうでなければ決定可能である。存在する可能性がある別の実施例のパラメータの状況は、共通始点から放射されたレイ、例えば、レイ１４１５ａ〜１４１５ｃの角度を含み、このような角度は角度１４２０ａおよび１４２０ｂとして特定される。他の状況では、レイは、図１４に図示されている他のレイに対しレイ１４１０ｃの始点によって図示されているように表面１４０５からランダムまたは擬似ランダムの間隔で放射可能である。このようなレイは統計的方法によって記述できる。
【０１４２】
したがって、このようなレイの始点は、規則正しい間隔である、ランダムまたは擬似ランダムに分散している、または、そうでなければ、パラメトリック若しくはプログラム的に導出されるとして記述できる。したがって、レイ毎に始点および方向を明示的に与えるのではなく、パラメータまたはプログラム的な定義は送信され、ＩＴＵで、各レイの始点および方向を決定するため使用される。
【０１４３】
瞬間的な大域照明／シャドーレイ
図１３は、既知の光源を交差したプリミティブまたはその他の始点から発するシャドーレイを使ってサンプリングする瞬間的な大域照明のような照明技術に関係する態様を記述するため使用される。シャドーレイの放射は、光源が存在することがわかっている空間内の始点から定義された点へレイを送信することを必要とする。これらのレイの送信は、ＩＴＵにすべての可能な光ロケーションの表を提供することによって、より効率的に行うことができる。光ロケーションのこのテーブルを用いて、放射されるべきレイの方向ベクトルは、インデックスから光ロケーションのための表の中へ導出できる。同様に、多数のシャドーレイのための始点は、多数のシャドーレイが単一の交差したプリミティブのため放射される必要があるので、１度だけ送信できる。
【０１４４】
さらなる説明のため、カメラ１３０５は、点１３２０ａおよび１３２０ｄでプリミティブ１３１５ａおよび１３１５ｄとそれぞれに交差するカメラレイ１３１０ａおよび１３１０ｂを生成する。これらの交点の１つずつはシェーダ１０３５に示されることがある。シェーダ１０３５は、レイ１３３５ａ、１３３５ｃ、および１３３０ｂを１３２０ａにおける交差のため放射されることになる。レイ１３３５ａは光源１３４０ａに向かうことになり、レイ１３３５ｃは光源１３４０ｃに向かうことになり、このような各レイは、これらの光への経路上に障害物が存在しないものとして図示され、したがって、点１３２０ａはこれらの光源のための別の影の中に存在しない。レイ１３３０ｂは光１３４０ｂへ向かって放たれるが、レイがその交差後に破線によって表現されるように、点１３２０ｂにおいて物体１３１５ｂと交差するように図示されている。
【０１４５】
図示されているように、レイ１３３５ａ、１３３５、および１３３０ａのそれぞれは共通始点を共有し、その始点から異なる既知の光源への方向を有する。したがって、それらの方向は、３次元空間内の光源のロケーションを指定するのではなく、光源のロケーションの表、または、他の編集物を索引付けすることにより指定できる。同様に、シャドーレイは共通始点から放射するので、共通始点は共有レイデータとして提供される可能性もある。類似した状況が点１３２０ｄで物体１３１５ｄと交差するカメラレイ１３１０ｂに対し図示されている。レイ１３３５ｂおよび１３３５ｄは、光１３４０ｂおよび１３４０ｃへ向けて放たれ、別の物体と交差せず、点１３２０ｄがこれらの光のための影の中に存在しないという決定を可能にする。しかし、レイ１３３０ａは光１３４０ａに向かうことになるが、１３２０ｃで物体１３１５ｃと交差し、点１３２０ｄが物体１３２０ｂの影の中に存在するという決定を可能にする。この場合も同様に、これらのシャドーレイは、それぞれの光へ向けられることになり、共通始点から発し、共通始点が共有レイデータとして表現されることを可能にし、各レイ方向は、光源と光源のそれぞれのロケーションとのリストへのインデックスによって示される。
【０１４６】
レイ対応の送信および格納の効率を高めるための上記実施例のレイタイプおよび方法は、例えば、レシーバ１０５０の固定機能回路で実施可能である。このような回路は、バッファ１０４０を介してサンプルプロセッサ１０１０およびシェーダ１０３５からのデータを解釈することができる。例えば、レシーバ１０５０で受信されたヘッダは、上記指定されたタイプのうちの１つのタイプの複数のレイとして他のデータを解釈するフォーマットを指定する情報を含むことができる。このようなヘッダは、レイタイプを特定する情報を含むことができ、この情報はサポートされているレイタイプを説明するために適切なビット数であることができる。他の情報は、データが送信されることが予定されているレイの数であることができる。送信されるさらに他の情報は、共有されるか、さもなければ、複数のレイの間で共通であるレイデータとして受信されるべきデータの一部分と、各レイに個別であるレイデータとして受信されるべきデータの別の部分とを特定する情報を含むことができる。例えば、反射レイの場合と同様に、レイが共通始点から放射される場合、ヘッダの中の特定されたデータの一部分は共通始点のためのデータであることができ、ヘッダの中の特定されたデータの別の部分はグループの中の各反射レイのためのデータであることができ、あるいは、その他の場合に、レイ方向のための定式および／またはパラメトリック定義であることができる。よって、ヘッダ、または、その他の送信されたコンフィギュレーション情報を使用することは、これらの実施では、例えば、レイ方向を指定する数の異なる精度を与えることによって、レイデータ指定のためのフレキシビリティを与える。
【０１４７】
シャドーレイの実施例に関する関連した変形および一般性は、レイが放射され、共通ロケーションへ向けられることになるが、種々の始点を有する状況を含む。この第１の実施例は、プリミティブ／レイ交差の数が特定され、それぞれが特定の光源のオクルージョンに関してテストされる必要がある状況を含むことになる。複数のレイは、各レイ／プリミティブ交差でその光源のオクルージョンをテストするためシャドーレイを表現可能である。別の実施例は、不規則若しくは可変（または両方）である表面の複数の点が既知の光源へ向かう方向に放射されたレイを有することになる状況である。このような実施例は、太陽光で照明された水が観察される場合に提示される。水の多数の部分からのレイは太陽の方向に放射されることになる。よって、このようなレイの始点は、変化することになるが、レイの行き先は実質的に類似することになる。始点は、例えば、表面上の風の影響を反映させて、パラメトリックに、および／または、（擬似）ランダム性をもつ要素を用いて、指定されることもできる。これらの実施例の他の変形が可能であり、１つの一般化は、物体の表面が所定の光源からの照明に当てられるが、光と表面との交差が表面全域での位置と共に変化することになり、したがって、複数のレイがその光源へ向けられることになるグループとして表現でき、さらにパラメトリックまたはランダム化されて始点を有することができる。
【０１４８】
さらなる態様は、光源以外の物体が多数の異なるレイの行き先である状況を含む。例えば、レンズは、視野からのレイを集中させ、その視野内のレイ交差に関与するプリミティブはレンズの表面上で行き先を共用するレイを生成させることができる。より一般的には、これらは、少なくとも複数のレイの間で行き先が共有され、したがって、その複数のレイの間で共有されたレイデータを使って表現できる状況の実施例である。これらの開示内容からこれらの事情に従う他の状況が想定されることができる。
【０１４９】
他の実施では、ヘッダの中で指定されることがある情報は、複数のレイを指定する情報の様々なタイプの共通位置および共有位置のためその後にビット位置を予め配置することが可能である開始ビットシーケンスがレイデータの先頭を特定可能であるように、ハードコード化できる。いくつかの実施では、所定のヘッダに対し指定されたレイの数は、一定であることができ、または、そうでなければ、暗黙的であることができる。
【０１５０】
上記実施の実施例は、ヘッダデータを解釈するようなデータ解釈を通じてあるフレキシビリティを提供でき、より効率的に表現される交差のためのレイのタイプが事前に決定されるシステムに適切であることになる（他のレイタイプは共有レイデータを使用することなく各レイの始点および方向を完全に定義することによって表現可能である）。しかし、それ以上のプログラム可能でフレキシブルな実施が行われることができる。それ以上のプログラマブルな実施は、例えば、異なるカメラ挙動、オクルージョンレイおよびモンテカルロレイのためのサンプリングおよび分配技術の変動の追加を可能にする構成をサポートすることができる。完全に異なるタイプのレイもまたサポートされることができる。同様に、他のタイプの共通および別個のレイデータがプログラマブルに構成することもできる。
【０１５１】
例えば、別個のレイデータが、光の完全精度の３次元空間座標ではなく、光源へのインデックスを含むことができるように、オクルージョンレイが、既知の光源の表を使用できることを上述した。別の実施は、レシーバ１０５０がその後に特定された交差からオクルージョンに関してサンプリングされる光源ロケーションを生成するために分配関数を使用することになるように分配関数を提供することができた。そして、このような実施例では、分配関数は別個のレイデータを送信する情報の一部分の一部であったことになる。このような実施例は、開示された技術が与えられた実施例、または、与えられたレイタイプの実施例に限定されることがなく、どのようなタイプおよび形式が望まれているとしても、レイデータの効率的な送信および指定のためよりに適用され、適応可能である。このような適応およびアプリケーションは、レシーバ１０５０の中にプログラマブル資源を設けることによって助けることができる。
【０１５２】
バッファ１０４０を介してレイ情報を受信するプロセッサ１８０を提供し、レイ再構成中にデータを格納するためメモリ資源１８１（例えば、スタック、または、より大規模な完全な機能メモリ資源）とさらに通信するこのようなプログラマブルな態様が図１Ｃに関して図示されている。再構成されたレイはレイ出力１９０を介して出力される。
【０１５３】
上記説明は主として、サンプルユニットまたはシェーダコードのようなレイの提供源からのレイの送信に関する。しかし、レイの格納の効率の増加がさらに提供できる。例えば、レイ送信に関して、レシーバ１０５０がサンプルプロセス１２０およびシェーダ１０３５から入力を受信し、完全に指定された始点および方向としてレイを、接続１０５１を介して、メモリ９１２へ、または、交差テスト資源１０４５へ出力するように、図１０Ａに図示されている。いくつかの実施では、メモリ９１２は、接続１０５３を介して交差テスト資源１０４５へ直接的にレイ情報を提供することもできる。
【０１５４】
ある一定の交差テストユニット実施は、交差テストユニットにおいて、レイメモリを節約することによる恩恵を受けることができる。この場合、レイは圧縮形式で格納可能であり（例えば、共有データ表現および個別のデータ表現として格納され）、交差テストを実行する前に圧縮解除される。これは、コンピューティング資源のある余分な費用と交換にメモリ節約をもたらす。例えば、図１０Ａは、このようなレイ記憶装置の実施例において、レシーバ１０５０が接続１０５２を介してメモリ９１２からのデータの読み出しと、メモリ９１２へのデータの書き込みの両方を行うことを図示している。よって、レシーバは、最初にレイを受信し次第、変更することなくレイをメモリ９１２に格納し、後にレイを取り出し、レイに再構成演算を実行し、レイ出力１０５１を介してレイを出力する。レイ出力１０５１は、交差テストのためのレイデータを交差テスト資源１０４５に提供するため交差テスト資源と連結する。レシーバ１０５０は、受信された通りのレイのうちのいくつかをさらに格納し、交差テストで用いるため直接的に受信されたレイデータからレイの始点および方向を決定することにより他のレイを再構成することができる。
【０１５５】
図１５は、上述のレイタイプ実施例によるレイのグループのようなレイのグループを効率的に示すデータを生成し、そのデータを、例えば、交差テスト資源１０４５へ送信するためホスト９０５（図１０Ａ）において実施可能である方法を図示している。方法１５００は、放射される複数のレイを決定する工程１５０５を含む。例えば、サンプルプロセス１０１０は、カメラレイのグループを放射することを決定することができる。方法は、複数のレイの共有属性を特定する特定する工程１５１０をさらに含む。例えば、カメラレイのグループの場合、共有属性はカメラの位置でもあることができる。次に、方法は、送信されるべきデータとして共有属性を示す工程を含む。この方法は、共有属性を表すデータと、レイのグループのうちのそれぞれの始点および方向を決定するために十分な他のデータとを送信することで終了する。
【０１５６】
決定する工程１５０５および特定する工程１５１０は、説明を簡単にするため別個に特定された。しかし、多数の実施では、これらの工程は、このようなレイを放射することを決定するプロセスの外部にある観点から「観察可能」でないことがある。シェーダまたはサンプルプロセスがレイのグループを放射することを決定することができ、このような決定において、シェーダまたはサンプルプロセスは共有属性の中のレイのグループと別個のレイデータ形式とを示すことができるので、共有属性を特定する工程は暗黙的であることができる。したがって、レイのグループを表す送信されたデータは、多くの付加的な処理無しに、このようなレイのグループを決定するプロセスから出力されることができる。多くの場合、このような実施は、レイのグループ毎に別個の始点および方向を出力し、次に、そのグループの間で共有属性を特定するより好ましいことになる。
【０１５７】
図１６は、交差テストユニット９１０（例えば、レシーバ１０５０）で実施可能であり、レイのグループを表すデータを受信する方法を図示している。この方法は、（例えば、レシーバ１０５０へのバッファ１３８を介して）レイデータ入力からデータを受信１６０５する工程を含む。データは、図１５に関して上述されたように、共有レイデータおよび他のレイデータを含む。この方法は、共有レイデータおよび他のレイデータを特定するためデータを解釈１６１０する工程と、受信されたデータの中に記述されたレイのグループの中の各レイに対し始点および方向を決定１６１５する工程とをさらに含む。解釈１６１０および決定１６１５は、レシーバ１０５０の中で行われることができ、このような解釈および決定のためレシーバ１０５０によって講じられる措置は、受信されたデータの内容と上記態様の実施とに基づいて変化することができる。例えば、受信されたデータが内容を記述するヘッダを含む場合、レシーバは共有レイデータを特定し、例えば、レイのグループのタイプを解釈し、決定１６１５中にそのレイタイプを使用することができる。それ以上のプログラム的な実施が行われる場合、受信されたデータは、レシーバが受信されたデータを解釈する方法に関して、レシーバ１０５０の一部分をプログラミングする命令を含むことができる。決定は、レイタイプと、光源インデックスと、このようなレイのグループをより効率的に示すため使用される種々の他の情報のいずれかとのような、態様に基づいているので、解釈が最終的に決定する工程に影響を与える。この方法は、交差テストにおいて各レイのグループに対し決定された始点および方向を使用１６２０する工程をさらに含む。
【０１５８】
レンダリング進行の追跡および制御に関するプロセスおよびシステム
シェーダ１０３５は図１０Ａにおいて単一の実体として図示されているが、シェーダは、一般に、皮膚、紙、水などのような材料に固有である。シェーダは、レイによってシーンの中で交差されたプリミティブの色を決定するため実行された何らかの手続きをより一般的に参照できる。シェーダは、材料と関連付けられ、同様に材料に基づいて変化することになるテクスチャデータにアクセスすることもできる。このようにして、シェーダ１０３５は、異なるレイが交差した異なるプリミティブの色を決定する際にそれぞれが使用される、ある程度の数の異なるプロセスが所定の時点にホストプロセッサ９０５で動くことができる一般的な場合を示す。
【０１５９】
同様に、シェーダは、「拡散照明取得」のようないくつもの標準化された手続きを呼び出すようにプログラムされることができる。これらの標準化された手続きは、シェーダによって、シェーダ独自の計算およびプロセスにおいて手続きから返された結果を使用する可能性があるユーティリティのように使用されることができる。後述されるように、シェーダによって使用されるこれらの標準化された手続きまたは他のユーティリティは、本明細書中に記載された適応レイトレーシングの態様を実施するため修正されることができる。
【０１６０】
サンプルプロセス１０１０は、交差テスト資源１０４５のための入力としてレイを放射する。これらのレイは、シーンの中のカメラ位置または任意の始点から始まる可能性がある。サンプルプロセス１０１０は、現在のシーン品質またはある照明効果の解決策を決定するためサンプルプロセスが実行する演算のような種々の演算または計算に基づいてある特定のレイを発生させることを決定することができる。サンプルプロセス１０１０は、これに限定されるものではないが、近傍サンプルに関するサンプル値の標準偏差と、近傍サンプルに関するサンプルデータのフィルタリングと、サンプル値および種々の２次元信号処理演算の調整及びスケーリングとを含む可能性がある他の演算をさらに実行することができる。最終的に、サンプルプロセス１０１０は、レイトレーシング計算の結果を表示、格納、および／または他の処理のための最終的な画素色値に変換するように構成される。上述のように、交差テストは、１若しくはそれ以上のＧＡＤ要素およびシーンプリミティブに対して並列にレイのコレクションをテストすることにより本システムにおいて進行する。ここで、公差テストを実行する（複数の）装置またはシステムは、この装置またはシステムが現在テストしているレイの祖先に「気付く」必要がなく、実際に、コレクションの各レイは、祖先、始点、および方向の点でコレクション内の他のあらゆる祖先に関係しないことができる。このテスト方法は、後述されるように、トレーシングが典型的にどのように管理されるか、および、中間シェーディング結果が画素の最終的な色値にどのように考慮されるかについての変形および適応によって促進される。
【０１６１】
交差テスト資源１０４５は、サンプルプロセス１０１０および／またはシェーダ１０３５からレイデータを受信し、ジオメトリプロセス１０２０からプリミティブデータ（および、選択的にジオメトリ・アクセラレイション・データ）を受信する。交差テスト資源１０４５は、どのレイがどのプリミティブと交差するかを特定し、このようなレイ／プリミティブ交差の指標をシェーダ１０３５へ送信する。当然ながら、図１は、議論の目的のための抽象概念を表現し、実際の実施は異なる挙動を与えることができる。例えば、このような指標は、指標の中で特定されたプリミティブの色を決定するため、プロセスをインスタンス化するドライバ（シェーダと呼ばれることもある）に提供されることができる。
【０１６２】
ホストプロセッサ９０５は、上記態様によるレイトレーシング適応の実施の中で使用される可能性がある管理工程１０１８を動かすものとしてさらに図示されている。いくつかの実施では、管理工程１０１８は、以下の説明から明らかにされるように、その機能がシェーダプロセス、または、他のプロセスに組み込まれることがあるので、設けられないことがある。ホストプロセッサ９０５は、管理工程１０１８または別の適当なプロセス若しくは実施において、どのレイが交差テスト資源１０４５へ提供されるべきであるか、または、少なくともこのようなレイの順序付けを決定するように動作し、ホストプロセッサ９０５と交差テスト資源１０４５との間の帯域幅がすべてのこのようなレイを同時に送信するため不十分である。特に、サンプルプロセス１０１０およびシェーダ１０３５は、それぞれが交差テスト資源１０４５へ送信するためのレイを生成することができる。管理工程１０１８は、シェーダ１０３５からのレイを交差テスト資源１０４５への送信のため、したがって、交差テスト資源１０４５におけるテストのため優先させることができる。例えば、シェーダ１０３５はレイのグループを生成することができ、サンプルプロセス１０１０はカメラレイのグループをさらに生成することがあり、シェーダレイのグループは管理工程（または別の実施）によってカメラレイより優先されることになる。この優遇は、シーンの中を進行する２次的レイ（すなわち、カメラレイ以外のレイ）の生成およびテストを高めるために役立つ。本明細書中に開示された態様による広範囲の２次的レイの生成は、助長および促進される。他の態様では、カメラレイより優先されるシェーダレイのグループのこのような処理は、交差テスト資源のためのレシーバの中のようなどこか他の所で実施されることができる。
【０１６３】
殆どのレイ・トレーシング・システムがどのように動作するかに関する状況は、以下の説明を理解するため役立つことができる。従来、レイトレーシングのための交差テストおよびシェーディングは、レイとシーンプリミティブとの間の特定された交差のツリーを構築することにより進行し、ここで、ツリーは、交差の点でのプリミティブの色を決定するために生じさせられた子レイのチェインを示す。例えば、レイは、レンダリングされている２次元表現の画素を通して発散させられる。レイは、プリミティブとの最近接交差が特定されるまで、シーンの中の交差に関してテストされる。その後、子レイは、サンプル拡散および鏡面照明条件のため、および／または、既知の光源が別の物体によって遮られているかどうかを決定するために生成され、交差点がその物体の影の中に存在するようにされる。拡散および鏡面照明子レイのようなこれらのレイのうちのいくつかは、それ自体が他の物体と交差し、次に、さらなる子レイを生じることができる。
【０１６４】
換言すると、多くの場合、プリミティブのためのシェーダは、シーンの中の他のプリミティブまたは光源についての付加的なシェーディング計算の結果から取得されなければならない情報なしには交差したプリミティブの色を決定できず、プリミティブと光源とを特定するためにさらなる交差テストが含まれる。
【０１６５】
このようなプロセスは、通常、生成されたレイ毎に、そのレイがシーンを離れるか、または、光源に衝突するまで継続する。光源に衝突したこれらのレイに対し、その光源は、その後に光源からの光の色を決定するためにサンプル可能であり、次に光源からの光の色がレイの色を決定する。その後、各接合点で、現在のレイの色が、次のプリミティブのシェーディングからの結果と共に、チェインの中の次のレイの色を決定するように、最初に画素から発したレイに達するまで中間交差のチェインが繰り返され、次に、画素の色へのそのレイの寄与度が決定できる。各シェーディング工程で、入射光の色を記述するベクトルは、ツリーの中の次の交差で使用される出射光の色を決定するために、シェーディングからの結果によって乗算されることができる。
【０１６６】
このような方法は、ツリーの中のレイの各チェインに含まれるすべての中間交差を格納することを必要とするので、ツリーは、ツリーの中の各ノードのシェーディング計算の解決の間に繰り返すことができる。例えば、交差したプリミティブと関連付けられたデータは、プリミティブが粗い、赤みを帯びた表面を有することを示すことができ、シェーダ１０３５（または、インスタンス化され、これらのシェーダの間で考慮されたシェーダプロセス）はそのデータにアクセスできる。しかし、シェーダ１０３５は、何色の光がそのプリミティブに入射したかに関する情報をもたないことになり、シェーダ１０３５は、例えば、拡散光および鏡面光を決定するためにさらなる交差が行われるまで、プリミティブと交差したレイに関して、プリミティブが何色であるべきかを決定できないことになる。
【０１６７】
異なるアプローチは、各交差においてシェーディング計算の結果が乗法的ではなく加法的であると考えられる場合、各交差が他の交差から独立に解決できることである。典型的な態様では、中間シェーディング結果を加法的にすることを実現する方法は、サンプルプロセス１０１０またはシェーダ１０３５のいずれかによって放射された各レイと共に色減衰ベクトルを運ぶことを必要とする。この減衰ベクトルは、交差したプリミティブの１つずつがレイおよびプリミティブの交差点に落ちる１若しくはそれ以上の光源からの光に影響を与える程度を追跡する。
【０１６８】
このように、レイが寄与することになるサンプル始点と色減衰ベクトルとをさらに含むデータ構造体がレイ毎に設けられる。この情報を用いると、交差テスト中の中間点で、レイがどの画素に寄与するかと、前の交差がそのレイの色にどのような影響を与えたか（光が実際にシーンの中を伝搬する順序の逆順であり、レイ／プリミティブ交差がこのような光にどのように影響を与えるか）とを決定することができる。
【０１６９】
このようなシステムでは、サンプルプロセス１０１０は、現在累積されているような画素の色を示すサンプルバッファ１０１１（または、複数のサンプルバッファ）を維持することができる（すなわち、各子レイが終了するとき、子レイの寄与度が、ツリーを遡ることなく、サンプルバッファの中で個別に反映される）。同様に、サンプルプロセス１０１０は、移動中のレイの状態と、画素色に関するどのような情報がシーンのレンダリング中にシェーダ１０３５から所定の時点で受信されたかとを維持することができる。
【０１７０】
図１７は、レイを示すデータ構造体１７００の実施例を図示し、データ構造体のコンポーネント１７０５、１７１０、１７１５、１７２０は、サンプル特定情報１７０５とレイ方向１７１０とレイ始点１７１５と色減衰ベクトル１７２０と重み１７２５とを含む。
【０１７１】
都合のよい実施例では、色減衰ベクトルは、数がカメラから現在のレイまでの経路がこの経路に沿って進む光の色にどのように影響を与えるかを決定するために使用できる関係を有する限りは、レイシェーディングの間に色を示すため使用されている色基準の中で純白色からの減衰として示すことができる。このような色基準は、ＲＧＢ、または、有用若しくは望ましいことがわかったその他の基準を使用することになる。例えば、都合のよいＲＧＢの実施例を考慮すると、純白は［１１１］として表現可能であり、使用される計算スキームの精度を反映するある程度の数の零を含むことができる。ＲＧＢは周知の色基準であるので、いくつかの実施例および態様を記述する際に使用されるが、態様はＲＧＢの使用に限定されることはなく、加法的色基準および減法的色基準を含む他の色基準が使用することができる。
【０１７２】
図１８はこのような色ベクトルがレイトレーシング中にどのように使用されるかについての態様を説明するため使用される。図１８の要素は、カメラ１８０５と、色フィルタ１８２０と、ライト１８４０および１８３０とを含む。現実の世界では、ライト１８４０および１８３０から放射された光は、色フィルタ１８２０によってフィルタ処理され、その後、フィルタ処理された光のうちの一部がカメラ１８０５に衝突し続ける（カメラ１８０５とプリミティブ１８２０との間の画像平面は簡単にするため本実施例において放射されている）。レイトレーシングは、カメラ１８０５が交差テストのためのレイ１８１０を放射するように、逆に動作する。レイ１８１０はプリミティブ１８１５で色フィルタ１８２０と交差する。殆どの従来的なレイトレーシングは、この交差を交差のツリーのノードとしてラベル付けすることによって動作する。次に、プログラムコード（例えば、シェーダ）は、光源１８４０および１８３０の色をテストするため、子レイ１８２５および１８３５を放射させ、これらの光源が遮られているかどうかを決定する（本実施例は単純であるので、通常現れることになる多数の介在するレイ／プリミティブ交差は削除されている）。例えば、ＲＧＢ色基準では、子レイ１８２５および１８３５はそれぞれの光源１８３０および１８４０に衝突し、次に、各光の色（例えば、光１８４０は青であり、光１８３０は赤である）は、レイ１８１０とプリミティブ１８１５との交差を示すノードまでツリーを上に伝搬する。その後、各ライト１８４０および１８３０の光に及ぶレイ１８１０／プリミティブ１８１５の影響が決定され、次に、カメラ１８０５まで遡らせる光の色を決定する。色フィルタ１８２０はシアンであり、色フィルタ１８２０は、赤色光を除去し、可能性のある削減された強度の青色光を許可することになると仮定する。
【０１７３】
本態様では、カメラ１８０５はレイ１８１０を放射し、レイ１８１０と関連付けられているのは、色減衰ベクトルであり、色減衰ベクトルは、カメラ１８０５からの放射時に、純白、例えば、［１１１］として初期化されることがある。レイ１８１０はプリミティブ１８１５に衝突する。この場合も、色フィルタ１８２０はシアンであり、色フィルタ１８２０は従来通りの方式で物理的に挙動することになる。しかし、本態様では、（プリミティブ１８１５で）色フィルタ１８２０がプリミティブ１８１５に達する光の色に与える影響が事前に決定され、その影響は、他の前のレイ／プリミティブ交差の影響と共に、このレイと共に「運ばれる」色減衰ベクトルに表現されている。特に、本実施例では、色フィルタ１８２０はシアンであり、一方、レイ１８１０の色減衰ベクトルは白色であり、レイ１８１０への色フィルタ１８２０の影響は赤色光を除去することになる。この影響は赤色成分を減少させることによって減衰ベクトルに記録される。例えば、ＲＧＢ基準（赤緑青）色基準において、レイ１８１０の減衰ベクトルは［１１１］として開始することになる。このようなベクトルへのプリミティブ１８１５の影響は、赤色光の除去を反映して、［０１１］として表現されることができる。
【０１７４】
この更新された色減衰ベクトルは、次に、子レイ１８２５および１８３５と関連付けられる。この場合も、子レイ１８２５および１８３５は、それぞれ、ライト１８３０および１８４０に衝突する。ライト１８３０および１８４０に色は、それぞれ、赤色および青色であると仮定された。子レイ１８２５および１８３５の減衰ベクトルは、赤色が除去されるように、子レイの祖先（すなわち、カメラレイから現在までの経路）がカメラライトにどのように影響を与えるかを表現している。よって、ライト１８３０は、カメラ１８０５における光の色に寄与度がないことが決定され、光は青色であり、よって、カメラ１８０５に到達する光の色は青色になる。この決定は、決定された色をサンプルバッファ、例えば、スクリーンバッファ１１１へ直接的に書き込むことによって実施可能である。言い方を変えると、これらの態様において、レイは、異なる割合で光の異なる色の差動減衰を示すチャネルと見なすことが可能である。
【０１７５】
異なる実施例では、両方のライト１８４０および１８３０は白色であり、子レイ１８２５および１８３５は、それらの祖先からの経路が赤色光のフィルタリングを引き起こすという情報（減衰ベクトル［０１１］）と共に、それぞれのライトに「到達」することになると仮定されている。シーン（すなわち、画素）光エネルギーへの寄与度は、両方のライト１８４０および１８３０に関して、シアンであり、このような寄与度はサンプルバッファ２２１へライトバックされる（各子レイ１８２５および１８３５と共に、各レイが寄与するスクリーン画素を指定する情報も存在することによって支援されている）。
【０１７６】
より複雑かつ現実的な環境では、交差に関与する１つずつのレイの色減衰ベクトルに影響を与えるある程度の数の中間レイ／プリミティブ交差が存在することができる。しかし、各レイの色減衰ベクトルは、レイの経路がその経路を進む光の色にどのような影響を与えたかについての履歴を維持する。
【０１７７】
上記開示内容による種々の実施例適応およびレイトレーシング変形は、この形式の光エネルギアカウンティングを使用する。これらの実施例および実施はいずれも複数のサンプルバッファを使用し、レイは別個にそれぞれのこのようなサンプルバッファに収集され、サンプルバッファの間で移動することがある。上述されているように、いずれの色基準も、特定のタイプのレイトレーシングまたはその他の環境のため有用であるか、または、望ましいことがわかった。
【０１７８】
光エネルギーがこれらの態様においてどのように計算されるかを記述する第１の実施例では、シアン色フィルタが、一方が赤色およびもう一方が青色の２つのライトをもつシーンの中でカメラレイと交差した実施例が存在した。シアン色フィルタは色フィルタに衝突した赤色を除去することになることが事前に知られ得るので、シーンの中のライトの色に関する情報を有するプロセスは、（色フィルタ１８２０の）プリミティブ１８１５の影響と同様に、プリミティブ１８１５が赤色光の影の中にあるように赤色が中間物体によって遮られているかどうかを決定するため子レイを生成しないことを決定可能であり、その理由は、赤色がいずれにしても大部分が除去され、プリミティブ１８１５が遮られているかどうかを無関係にするからである。よって、シーンの中で交差テストのため生成されたレイの量は、最終的な寄与度がスレッショルドより低いと決定できるレイを発生しないことによって削減可能である。このような状況のための環境は、単純な光オクルージョン状況に最も当てはまることができる。
【０１７９】
当然ながら、より複雑な材料では、一部の赤色光をプリミティブ１８１５によってもたらされるようにするある程度の屈折および反射が存在することになり、その結果、オクルージョンが多少の関心事であることができる。このような状況の存在は、プリミティブ１８１５のためのシェーダによって決定され、シェーダは、これらの典型的な態様では、示された状況毎（例えば、反射および屈折）に子レイを生成し、このような状況の１つずつの強度または重要度をそれぞれの子レイの重みとしてさらに記録する。例えば、色フィルタ１８２０からの反射が非常に僅かであるならば、反射のための子レイは、レイ１８１０と関連付けられた重みより遙かに低い重みで放射されることができる（鏡面対拡散のような態様が同様に取り扱い可能である）。重みは、したがって、特定のプリミティブのシェーディングに対する、および、最終的にその存在を負っているカメラレイに対する（そして、基準を維持するサンプルに対する）所定のレイの相対重要度を示す。よって、レイトレーシングの知的リアルタイム適応が重みを使用して実施可能である。
【０１８０】
図２の文脈において、交差テスト資源２５０は、レイ１８１０とプリミティブ１８１５との間の特定された交差を返し、プリミティブ１８１５のためのシェーダは子レイを生成し、プリミティブに衝突することになる光へのプリミティブの影響に対する各子レイの相対的な寄与度を記述する。これらの相対的な寄与度は、レイ１８１０の重みに基づいて各子レイに重みを与えることによって示すことができる。同様に、典型的な態様では、各子レイの親の影響は、各子の重みに表現されることがある。例えば、レイ１８１０の重みは、子レイの重みの合計がレイ１８１０の重みにほぼ等しくなるように、子レイの間に割り付けることができる。その後、各子レイは、交差テストされることがさらに可能であり、シェーディング／重み付けプロセスが繰り返される。
【０１８１】
図１９はプリミティブ１９１５で物体１９２０と交差するレイ１９１０を放射するカメラ１９０５の単純な実施例を示している。レイが選別されるべきであるかどうかに関する決定は、後述される実施例の態様と共にスケーラブルおよび一般的な手法で取り扱うことができる。
【０１８２】
プリミティブ１９１５と関連付けられたシェーダは、子レイ１９３０ａ〜１９３０ｅを放射することを決定する。プリミティブ１９１５のためのシェーダは、子レイ１９３０ａ〜１９３０ｅのそれぞれに対する相対的な寄与度を少なくとも含むことになる。さらに、各子レイ子レイ１９３０ａ〜１９３０ｅの相対的な寄与度を効率的に説明し、さらに、サンプルに寄与がある固定エネルギー比を維持するために、レイ１９１０と関連付けられた重みが各子レイ子レイ１９３０ａ〜１９３０ｅのためのそれぞれの重みを決定する際に使用される。本実施例で放射されるレイの数はフレネル項として計算可能である。重み分布の実施例では、レイ１９１０の重みは、子レイ子レイ１９３０ａ〜１９３０ｅの重みの合計がおよそレイ１９１０の重みに等しくなるように保存される。このような付加的な重み変形は、シェーダの一部、または、シェーダから入力を受信するプロセスであると見なされる。このような重みを加算することは必要ではなく、シェードされているレイの重みが反映されないように、または、そうでなければ、子レイへ完全に伝搬されるように、および／または、サンプルへのエネルギーとして寄与するように、シェーダは多様な方法のうちのいずれかで重みを割り当てることができる。
【０１８３】
特定のサンプルから放射されたレイの重みは、サンプル自体と関連付けられた重みに一致させ、合計を一致させ、または、そうでなければ、関係することになる。サンプルと関連付けられた重みは、特定のサンプル／画素のため累積されるように残された光エネルギーの量を追跡するため使用されることができる。例えば、１０のカメラレイがサンプルのため最初に放射された場合、光エネルギーの６０％を占める放射性のプリミティブまたはライトに関するカラー情報を受信し次第、残りのサンプル重みは同等に削減されることができる。カメラレイの重みは、その祖先が複雑なシーンの中でレイトレースされるので、最初に放射されたカメラレイの数より多くの多数のレイが最終的にサンプルに寄与するように、分散させられる可能性がある。
【０１８４】
交差テスト交差のための子レイを交差テスト資源１０４５に提供する前に、すべての子レイ１９３０ａ〜１９３０ｅが交差テストされるべきであるかどうかに関する決定が行われることができる。
【０１８５】
実施例の態様では、各レイと関連付けられた重みは、そのレイが交差に関してテストされるべきであるかどうかを決定する際に使用される。例えば、上記態様によるレンダリングシステムは、シーン品質のような目標優先度、または、例えば、所望のフレームレートのようなレンダリング速度の選択を可能にする。レイ／プリミティブ交差処理のための重みスレッショルド値は、優先された目標の促進の際にセットされ、定期的に修正されることができる。スレッショルド値は、所定の子レイが交差テストされるべきであるかどうかを決定するため使用されることができる。
【０１８６】
例えば、レンダリング速度が優先される場合、所望のフレームレートの維持は、フレームレート維持のパラメータの範囲内で、できる限り良い品質シーンを達成することより重要であるが、フレームレート維持のパラメータの範囲内で、できる限り高い品質を保つことは依然として望ましい。このような状況では、レイを処理するため準備する所定の時間フレームの中で処理すべきそれ以上のレイが存在するので、シーンレンダリングに関して比較的重要性が低いレイに関する処理資源を使用することを避けることが望ましいことがあり、いくつかの実施例では、この重要性は各レイと関連付けられたそれぞれの重みによって測定される。
【０１８７】
図１９の実施例に戻り、レイ１９３０ａ〜１９３０ｅを表す矢印のそれぞれの長さがレイと関連付けられた重みの値の相対的なサイズを表していると仮定すると、レイ１９３０ｅは、さらなる処理に価値を与えるには非常に小さい重みを有することが決定され、そのレイは交差テストのため処理されるのではなく、放棄できると決定されることができる。この実施例は、プリミティブ１９１５のためのシェーダがレンダリング中に優先度（例えば、レンダリング速度）を示す情報を受信せず、このような考慮なしに実施される状況である。しかし、シェーダは、（インスタンス化、そして、それらの選定と対照的に）シェーダによってインスタンス化されるべきレイの数を決定するため使用可能である重み付け情報の入力を可能にすることが書き込まれる。
【０１８８】
同様に、シェーディングアルゴリズムは、親レイの重みに基づいて選択可能であり、（例えば、子レイ１９３０ａ〜１９３０の放射をもたらすシェーディングアルゴリズムは）親レイ１９１０の重みに基づいて選択可能である。親レイ１９１０が比較的高い重みを有するならば、レンダリングされるシーンに対し比較的重要であると見なすことができる。所定のレイの重みは、レイ重みの統計的なサンプリングまたは追跡に基づいて判断可能である。例えば、サンプルプロセス２１０は、例えば、このような重みの移動平均を維持することにより、いくつのレイを含むビンがある特定の重み区分の範囲内にあるか、または、レイ重みの分布を理解するいくつかの他の許容可能な手段によって、現在交差テストされている重みの分布を追跡可能である。
【０１８９】
例えば、ある範囲の計算コストおよび結果の品質（おそらく、直接的な関係）を有するいくつかのアルゴリズムは、ある一定の照明機能を実行するため利用可能であり、したがって、計算的により費用がかかるが、より品質の高いアルゴリズムがそのプリミティブをシェーディングするため選択されることができる。
【０１９０】
さらなる実施例によって、他の状況では、交差した特定のプリミティブの色を決定するとき、鏡面照明、反射、および屈折のようなある程度の数の異なる照明効果が考慮されることができる。このような状況では、１若しくはそれ以上のタイプの子レイが照明効果毎に生成されることができる。このような子レイの１つずつは、重みが関連付けられることがあり、重みの値は少なくとも親レイ（例えば、レイ１９１０）の重みに基づいて決定されることになる。この場合も、レイ３０６の重みは、すべての子レイの重みの合計がレイ３０６の重みにほぼ達するように保存されることができる。レイ３０６の重みが子レイの間でどのように分配されるかは変化する可能性がある。
【０１９１】
例えば、シェーダが鏡面光はプリミティブ１９１５での光効果全体の２０％を占め、拡散照明は５０％を占め、屈折がその他の３０％を占めると決定する場合、各影響（鏡面、拡散、および屈折）のため放射された子レイは、グループとして、レイ１９１０の重みの約２０％、５０％、および３０％に割り当てられることができる。各レイの間で、グループに割り当てられた重みは、さらに等分割されることができる。他の分割も同様に可能である。例えば、拡散照明コンポーネントのいくつかのレイのための重みは他の拡散照明レイより重く重み付けされる可能性ができる。重みの統計的、擬似ランダム、および／またはランダム分布が実施されることができる。このシェーダが光を放射する表面のプリミティブ用であり、そして、それと相互作用する場合、親レイ重みの一部分が加算されることができ、または、そうでなければ、サンプルで決定されているものとして説明されることができる。換言すると、プリミティブは光を放射するので、親レイ上で伝搬された光エネルギーの少なくとも一部分はその放射に由来することになり、その時点のサンプルに加算される可能性がある。このような加算は、色と、その色によって表現されたエネルギーの相対的な量との追跡を含み、さらに、現在の更新された色に到達するためサンプルの現在の色を加算されるべき光エネルギーと混合することを含むことができる。
【０１９２】
レイと関連付けられた重みの割り当ておよび解釈を協調させることにより、レンダリングシステム１０００は、レンダリングシステム１０００が主観的および客観的なシーン品質を効率的に維持する方法でシステム資源を使用できるように、レイトレースされた画像の品質および速度に関係する広範囲の適応型レイトレーシング挙動を可能にする。レンダリングシステム１０００は、レイトレーシング変動のための利用可能な資源として、ある一定の目標を追跡するために、最小フレームレートの維持のようなレイトレーシング挙動において適応を実施することがさらに可能である。
【０１９３】
上記態様の範囲内の別の適応は、既に生成されたレイの重要性の希薄化または濃縮化を含む。例えば、光エネルギーを１画素に導くことになる１０つのカメラレイが放射可能であり、各カメラレイは規則的な間隔で離されたシーンのサンプル部分へ向けることが可能である。これらのレイのうちのいくつかが大きいプリミティブ（例えば、壁）へ直接的に進む場合、カメラレイの一部は不必要であることがある。カメラレイの重さは一般に放射されたレイの数を鑑みて決定されるので、これらのレイのうちの一部が取り消されることが望ましい場合、残りのレイの影響は同等に増加されるべきである。このような増加は、既に完了したカメラレイの色寄与度の重み付けを増加することによって行え、そして、他のレイが完了したとき、これらのレイは、元々のサンプル重みによって示されたより重く重み付けされる可能性もある。そうでなければ、レイは格納領域の中で特定可能であり、それらの重みは他のカメラレイの一部の取消を考慮するため同等に増加される。このような濃縮化機能は、ある程度の数の類似したレイが生成される他の状況にも当てはめることができるが、引き続いて、より少ないレイが時間内に、および／または、他の利用可能な資源を考慮して、許容可能な品質レンダリングをもたらすために必要であると決定される。
【０１９４】
このような機能は逆に動作することも可能であり、１つの理由または別の理由から、それ以上のレイがサンプルの色を精緻化するために放射されるべきであると決定する。このような決定は、そうでない場合に考えられるより多くの処理資源が利用可能であると特定することから生じるか、または、レンダリングされるシーンの複雑さが与えられた場合に（例えば、おそらく、類似したレイから返された色の間の分散が非常に大きい場合に）、結果は正確さが不十分であることがわかった。このような場合、それ以上のレイが所定のサンプルから放射可能であり、既にサンプルに寄与したレイの色の重みは同等に削減可能である。交差テストされているレイの重みは、格納されている場合にレイが利用可能であるならば、調整可能であり、または、各レイが処理を終了し、色情報を返した後に、レイ重み付けへの適切な調整が行われ得る。よって、これらの態様では、光エネルギーは、サンプルを参照する一部のレイに対し（例えば、放射性シェーダとの遭遇に応じて）既にサンプルに寄与済みであり、これらのレイによる寄与があった光エネルギーの相対的な重要度は、このような寄与の後、そのサンプルに影響を与えるレイトレーシングへの適応を実施するために調整されることができる。
【０１９５】
上述されているように、レイ重みは厳密に保存される必要はなく、シェーダが子レイに伝搬しないか、または、シェードされているレイによって表現されることがある光エネルギーの量に合計が到達する光エネルギーに寄与するようにされる。よって、レイ重みは、いくつかの実施例では、保存されるか、または、近似的に保存されるが、実施は必ずしもこのような機能を提供しなくてもよく、いくつかの場合、このような機能を提供しないことは、それと関連付けられた計算を回避し、いくつかの実施では、検討事項であることができる。
【０１９６】
レイトレーシング中のレイトレーシング適応の方法は図２０に関して記載されている。図２０は、レイ２０１０およびレイ２０１１のソース２００５を図示している。レイ２０１０は（特定されていないプリミティブで）物体２０２５と直接的に交差し、レイ２０１１はプリミティブ２０１５で物体２０２０と直接的に交差する。各交差は、上述されているようにシェーダプロセスに知らされることになる。レイ２０１０は物体２０２５と直接的に交差し、その物体のためのシェーダ（または、おそらくより具体的には、交差したプリミティブでの物体２０２５の表面のためのシェーダ）は作動し、ライト２０５０からの鏡面照明をテストするレイ２０５５を生成することができる（例えば、物体２０２５の表面はやや光沢がある）。このレイ／プリミティブ交差のためのシェーダは、さらに、他のレイを生成するか、または、拡散照明のような他の計算を要求する。より複雑な表面は、付加的なレイの生成を必要とすることがある表面下散乱のような付加的な態様のため生成された付加的なレイをさらに有することができる。記載された適応性の態様の重要性は、レイ／プリミティブ２０１５交差のさらなる説明の後に記載されている。
【０１９７】
レイ２０１１はプリミティブ２０１５で物体２０２０と交差し、このことがプリミティブ２０１５のためのシェーダを作動させる。本実施例のため、物体２０２０はガラス製であり、物体２０２０のためのシェーダは、トレーシングのための透過レイ２０３０と、反射レイ２０３１との両方を生成することが仮定される。本実施例では、シェーダは、レイ２０１１と関連付けられた重みをレイ２０３０およびレイ２０３１の１つずつのためのそれぞれの重みを決定する際に使用させる。物体２０２０の表面法線に合理的に直接的なレイ２０１１が生成された場合、シェーダは反射レイ２０３１より高い重みを透過レイ２０３０に割り当てる可能性がある。反射レイ２０３１は、その後、トレースされることになり、反射レイが裏側で物体２０２５とさらに交差していることが決定される。ここで、レイ２０１１の重みは（例えば）レイ２０３１とレイ２０３０との間で分割されているので、レイ２０３１のための重みはレイ２０１０の重みより小さい（例えば、両方のレイ２０１１およびレイ２０１０がカメラレイである）。この状況の現実的な影響は、物体２０２０の中の物体２０２０５の裏側に僅かな反射があり、レイ２０１０によって交差された物体の部分は光線源２００５から直接的に見える。
【０１９８】
よって、レイ２０１０／物体２０２５交差のためのシェーダプロセスは、レイ２０１０と関連付けられた重みにアクセスすることができ、一実施例では、関連付けられた重みに基づいて、正確なシェーディングが必要であることを決定可能であり、物体の色に影響を与える照明のより多くの態様を正確に決定するためそれに応じて動作することになる。対照的に、物体２０２５とレイ２０３１との交差のためのシェーダは（同じシェーダプロセスの別のインスタンス化である可能性があり）、レイ２０３１が非常に低い重みと関連付けられ、相応して、拡散照明呼び出しだけを実行し、より計算的に費用がかかるレイトレーシングを完全になしで済ますことがわかる。
【０１９９】
代替的に、各シェーダプロセスは、入射レイ重みとは無関係に、同じ動作を行うことが可能であり、その後、管理工程１３０は、各シェーダプロセスから出力されたレイと関連付けられた重みに基づいてレイを選定できる。いずれかの実施がこれらの態様に応じて適応性を提供可能である。管理工程１３０の実施において、各シェーダプロセスから放射された重みの相対的なサイズ（例えば、各シェーダプロセスからの鏡面レイ）は、それぞれの親レイ（２０１０および２０３１）の重みが異なり、レイ２０１０の方が高い重みを付けられていることを依然として反映することになる。しかし、これらの注目すべき実施例の実施の態様は、シーンに対するレイの重要度の尺度が、レイによって交差された点における色を正確に決定するため期待されるべき努力の量を修正するため、シェーダプロセスによって、または、管理工程によって参照できることである。都合の良い実施は、レイ（例えば、図１７）を示すデータ構造体を用いて運ばれる重みを使用することであり、ここで、そのレイは、親レイの相対的な重要度の連続性を維持するためそのレイの子レイの間で分割される（例えば、子屈折レイおよび子透過レイ）。
【０２００】
図６に図示された以下の実施例の方法６００は、例えば、レイ選択、希釈化、濃密化、および、レイ重みに基づくシェーディングアルゴリズムの選択を含む概略的に説明された適応の実施例を要約する。複数のこれらの態様は図２１の方法に図示されているが、それらの態様のうちのいずれもが単独で、または、補助的な組み合わせで使用可能である。
【０２０１】
方法２１００は、サンプルからカメラレイを放射する工程（２１１０）と、これらのレイを交差テストのため提供する工程（２１１５）とを含む。方法２１００は、その後、特定された交差の指標を受信する工程（２１２０）と、受信時に、交差したプリミティブまたは他の要素（例えば、光）が放射性であるかどうかを決定する工程（２１３０）と、そうである場合に、色寄与度を交差の中で特定されたレイによって特定されたサンプル・バッファ・ロケーションにライトバックする工程（２１３５）とを含む。要素が放射性でない場合、少なくとも部分的にレイと関連付けられた重みに基づいて、レイ／プリミティブ交差をシェーディングする際にシェーダ資源を使用するかどうかが決定される（２１４０）。資源が使用されるべきであるならば、シェーディングアルゴリズムがレイ重みに基づいて選択され（２１５５）、このようなアルゴリズムの出力は、さらなる交差テストのため放射されるべきチャイルドレイの数を決定する工程（２１６５）を含むことができる。子レイはさらなる交差テストのため設けられる（２１７５）。潜在的に並列に、（各レイに含まれているサンプルロケーション特定情報を用いて特定される）所定のサンプルに寄与する十分なレイが存在するかどうかも決定可能であり（２１６０）、否定である場合、サンプルに寄与するレイの数が、レイの十分性が不足しているか、または、十分性が過剰であるかに応じて上方または下方に修正される（２１７０）。いずれかのこのような新しいカメラレイはその後に交差テストのため提供される（２１７５）。
【０２０２】
レンダリング進行（工程２１４５）が不十分である場合、シェーディング資源を使用すべきかどうかを決定する際にスレッショルドが使用され、より少ないレイがシェーディングであり、および／または、より単純なシェーディングアルゴリズムが使用されるように、シェーディングアルゴリズム選択が更新される。「過剰」十分性であるならば、スレッショルドは、より高品質のシェーディングアルゴリズムおよび／またはより多くのレイがシェーディングされるか、または、より多くの子レイが放たれるように更新される。
【０２０３】
要約すると、記載された実施例および態様は、シーン（例えば、画像フレームのシーケンスの中のフレーム）のレンダリング中に粒状レベルでレイトレーシングを適応させるメカニズムを提供する。このような適応は、デフォルト目標または明示的に選択されたゴールを問わずに、目標の助成において行われ得る。シーンレンダリングへのレイの重要度を決定する際に用いるためのレイと関連付けられた重みの使用は、レイ重要度の粒状決定がどのように行われ得るかの実施例とこのような決定において用いられ、親から子レイへ追跡される情報などを提供する。しかし、このような重要度追跡の他の実施が提供されることができ、適応レイトレーシングがこれらの実施に基づいて実行される可能性がある。
【０２０４】
レンダリングされた画像に到達するため、光エネルギーは、最終的に、レイと関連付けられたサンプルに寄与し（方法６００の工程６３０および６５０に関して参照され）、それに応じて、そのレイが、光の放射を生じさせるプログラムコードと関連付けられたプリミティブである放射性要素と衝突する。よって、放射性要素は、レンズまたはテレビ画面を用いる光のような実施例を含むことができ、これらの項目は他からの光を反射することができ、同時に発光することができ、放射性要素は、よって、単に放射性であるだけでなく、複雑な光相互作用をもつことができる。したがって、放射性要素のためのシェーダは、所定のレイ／プリミティブ交差をシェーディングするとき、光エネルギーをレイと関連付けられたサンプルに追加させることができ、ここで、その光エネルギーはそのシェーダの放射性コンポーネントを示す。シェーダは、上述のように、様々な他のレイを放射させることもできる。いくつかの場合、放射性コンポーネントによって表現された光エネルギーと、放射された他のレイとは、親レイによって表現された光エネルギーの量とほぼ同じでもよく、または、それは、所望の影響に依存して、増減することもできる。サンプルプロセス１１０は、既に追加された光エネルギーの色に対する新たに追加された光エネルギーの相対的な影響を決定するために十分なデータを維持するように、各サンプルに追加された光エネルギーを追跡することがある。例えば、サンプルプロセス１１０は、エネルギーの追加を追跡するサンプルと関連付けられた重みを維持することがあり、例えば、既に追加されたものに対する、新たに追加された光エネルギーの相対的な影響を決定するため参照される可能性がある（例えば、シェードされたレイの放射性コンポーネントと関連付けられた重みが僅かであり、多量のエネルギーがそのシェードされたレイと関連付けられたサンプルに既に追加されているとき、そのサンプルの色は大きく変化することがない。異なる実施例では、レイの重みは、シェーダによって予想されるより大きくなるように作られることがあり、このような環境はサンプル上のそのレイの予想通りに大きい影響によって表現されることがあるが、本明細書中に開示されているレイ重み寄与の態様を実施する明示的または暗黙的要件を侵害しない。
【０２０５】
ある程度詳しく上述されているように、レイ重要度に基づく適応性、より具体的な態様では、レイ重みに基づく適応性は、シェーダプロセスが、例えば、親レイのためにいくつの子レイを放射すべきかを決定するとき、シェードされている所定のレイの重要度に気付くか、または、特に重要度を考慮する必要がないように、シェーダプロセスによるレイの放射後に実施可能である。時々、シェーダは、コードを複製するのではなく、共通照明計算ユーティリティを呼び出すことが可能である。これは、シェーダの移植性およびモジュール性を高める。例えば、シェーダは、拡散照明計算および鏡面照明計算のための照明ユーティリティを呼び出すことができ。これらのユーティリティは、上記態様による適応性を実施することができる。例えば、これらのユーティリティは、照明効果のため使用されるアルゴリズムのタイプを決定する際にレイ重み情報を使用することができ、より重要なレイに対し、より正確であるが、しかし、計算的に費用が高いという効果を使用することができる。見分けられるように、ユーティリティを呼び出すシェーダは、返された照明情報がどのようにして計算されたかに気付く必要がなく、単に照明情報を使用できるだけである。
【０２０６】
さらに別の実施の変形は、シェーダプロセスが交差テストを実行したい子レイのようなシェーダプロセス出力を受信する管理工程を含む可能性がある。管理工程は、これらの子レイのうちのいずれかの部分、全部分、または、一部分が実際に交差テストされるべきかどうかを決定する。管理工程は、システム利用性に対する見通しを有し、悪影響を与えることなく、現在のシステム利用性がこのような交差テストをサポート可能であるかどうかを決定可能である。このような悪影響は、フレームレート目標の維持に失敗すること、または、重要度の高いレイを犠牲にして重要度の低いレイの交差テストを実行することであり、これらは、制約された資源処理の中で不必要なレンダリング品質の低下をもたらすことがある。
【０２０７】
さらなる変形では、シェーダプロセスは、現在の資源利用性に関する情報を渡される可能性があり、シェーダプロセスは、どのようにして現在のレイ／プリミティブ交差が、レイ重みによって決定されることがあるように、レイの重要度にも基づいてシェードされるべきであるかを決定する際に、その情報を使用可能である。このような使用情報は、シェーダプロセスがこのような使用情報を適切な時点で取得できるように、ＡＰＩまたは関数呼び出しの中で定式化されることができる。区別できるように、種々の実施可能性がレイトレーシングを適合させるために、フレーム内レンダリングの間でさせ存在する。いくつかのこのような実施は、シェードされているレイの集中管理により多く依拠する可能性があり、その他の実施は、使用情報をより広範に分配する可能性があり、より分散化された制御をもたらす。
【０２０８】
汎用的な応用可能性の別の項目は、所定のレイ／プリミティブ交差に対するシェーディングアルゴリズム選択が、レイの重要度と、エルゴリズムによって実現された結果品質の指標に基づくことが可能である。時々、特定のアルゴリズムの結果の品質は、実行されるレイトレーシングのタイプに依存する可能性がある。例えば、このアルゴリズムの結果の品質は、実行されているレイトレーシングの中で関心のある出力に依存することがあるので、所定のシェーディングアルゴリズムはいずれも異なる環境では、結果の異なる「品質」を与えるように判断されることができる。したがって、このようなアルゴリズムは、使用に関する品質の範囲、または、品質のマッピングとさらに関連付けられる可能性がある。このようなアルゴリズムの格付けは、主観的品質評価対客観的品質評価にも関係することができる。
【０２０９】
いくつかの実施例および態様では、レイと関連付けられた重みのようないくつかの値は、レイが放射されたサンプルと関連付けられた重みのような他の値と関係付けられている（または、世襲のカメラレイの場合、親レイからの関連付けられたサンプルの継承による）。このような数値関係は、例えば、レイ重みの合計がおよそサンプル重みの合計であり、または、このような関係は、本明細書中に記載されている態様を区別することなく、より複雑にすること、若しくは、より明白にすることが可能であるように、加法的である。さらに例に基づいて記載されたレイ重みに基づく適合に関係する実施例の開示内容は、付加的な子レイの選定若しくは親になること、または、レイの寄与度を精緻化するためにレイのためのピアを考慮している。これらの実施例は考慮されているレイの重みに重点を置いているが、本明細書中に開示されている態様は、あらゆる一般化された形態でレイ重みに基づく適応を包含しているので、特定のレイの重みはそのレイに関係した選定または他の処理のため特定の事例では考慮されないことがある。
【０２１０】
図２２は、複数のコンピュータ２２１０ａ〜２２１０ｎを含み、それらのサブセット、または、全部にハードウェアアクセラレータ９１０が装備されているレンダリングファーム２０００を図示している。コンピュータ２２１０ａ〜２２１０ｎは、ルータ２２２５およびネットワーク・エリア・ストレージ（ＮＡＳ）２２１５につながるスイッチ２２２０によってＬＡＮに接続されている。ルータ２２２５は、インターネット、インターネット、プライベートネットワーク、またはこれらの何らかの組み合わせでもよいネットワーク２２２６につながる。ネットワーク２２２６は、ストレージ・エリア・ネットワーク資源２２３０、および、同様にハードウェアアクセラレータ９１０が装備されているその他のコンピュータ２２１１ａ〜２２１１ｎへのアクセスを提供する。大量のレンダリングが必要である場合、このようなレンダリングファームは、複数の処理資源の間にレンダリングを分散させるため利用されることができる。図示されている各コンピュータは、レンダリングされるある程度の数のシーンが提供され、このようなレンダリングを高速化するためハードウェアアクセラレータ９１０を使用することになる。
【０２１１】
本明細書および特許請求の範囲において、「ネットワーク」はコンピュータシステムおよび／またはモジュール間の電子データの転送を可能にする１若しくはそれ以上のデータリンクを含むことができる。情報がネットワークまたは別の通信接続（有線、無線、または、有線と無線との組み合わせ）を介してコンピュータへ転送または提供されるとき、コンピュータはコンピュータ読み取り可能な媒体としてその接続を使用する。よって、これに限定されるものではないが、一例として、コンピュータ読み取り可能な媒体は、コンピュータ実行可能な命令またはデータ構造の形式で所望のプログラムコード手段を搬送または格納するため使用可能であり、そして、汎用または専用コンピュータによるアクセスが可能であるネットワークまたはデータリンクをさらに含むことができる。
【０２１２】
処理のいずれかは、ローカルまたはワイド・エリア・ネットワークのようなネットワーク上に分散させることが可能であり、そうでなければ、ピア・ツー・ピア・テクノロジなどを使用して実施されることもできる。タスクの分割は、製品若しくはシステムの所望の性能、所望の価格、または、これらの何らかの組み合わせに基づいて決定可能である。上記ユニットのいずれかを少なくとも部分的にソフトウェアで実施する実施形態では、単位機能を示すコンピュータ実行可能な命令は、例えば、磁気ディスク、光ディスク、フラッシュメモリ、ＵＳＢ装置、または、ＮＡＳ若しくはＳＡＳ機器のようなネットワーク型のストレージ装置などのようなコンピュータ読み取り可能な媒体に格納可能である。処理のためのデータのような他の適当な情報もまたこのような媒体に格納可能である。
【０２１３】
上記方法の態様および／または請求項に記載された方法の態様は、以下に詳述されるようにコンピュータハードウェアを含む専用または汎用コンピュータで実施されることがある。このようなハードウェア、ファームウェア、およびソフトウェアは、ビデオカードまたはその他の外部若しくは内部コンピュータシステム周辺機器に具現化することも可能である。種々の機能はカスタム化されたＦＰＧＡ若しくはＡＳＩＣ、または、他の再構成可能なプロセッサの中に提供可能であるが、いくつかの機能はマネージメントまたはホストプロセッサの中に提供可能である。このような処理機能は、パーソナルコンピュータ、デスクトップコンピュータ、ラップトップコンピュータ、メッセージプロセッサ、ハンドヘルド装置、マルチプロセッサシステム、マイクロプロセッサベースまたはプログラマブルな民生エレクトロニクス、ゲームコンソール、ネットワークＰＣ、マイクロコンピュータ、メインフレームコンピュータ、携帯電話機、ＰＤＡ、ページャなどで使用されることがある。
【０２１４】
コンピュータ実行可能な命令は、例えば、汎用コンピュータ、専用コンピュータ、または、専用処理装置にある特定の関数または関数のグループを実行させるか、そうでなければ、再構成する命令およびデータを含む。コンピュータ実行可能な命令は、例えば、バイナリ、アセンブリ言語のような中間フォーマット命令、またはソースコードでもよい。いくつかの主題は構造的特徴および／または方法の工程の実施例に固有の言語で記載されているが、請求項に記載された主題は必ずしもこれらの記載された特徴または作用に限定されないことが理解されるべきである。それどころか、記載された特徴および工程は、請求項に記載された事項の範囲内でシステムおよび方法のコンポーネントの実施例として開示されている。
【図１】
2014081972.tif 000003
【図２】
2014081972.tif 000004
【図３】
2014081972.tif 000005
【図４】
2014081972.tif 000006
【図５】
2014081972.tif 000007
【図６】
2014081972.tif 000008
【図７】
2014081972.tif 000009
【図８】
2014081972.tif 000010
【図９】
2014081972.tif 000011
【図１０Ａ】
2014081972.tif 000012
【図１０Ｂ】
2014081972.tif 000013
【図１１】
2014081972.tif 000014
【図１２】
2014081972.tif 000015
【図１３】
2014081972.tif 000016
【図１４】
2014081972.tif 000017
【図１５】
2014081972.tif 000018
【図１６】
2014081972.tif 000019
【図１７】
2014081972.tif 000020
【図１８】
2014081972.tif 000021
【図１９】
2014081972.tif 000022
【図２０】
2014081972.tif 000023
【図２１】
2014081972.tif 000024
【図２２】
2014081972.tif 000025