(57)【特許請求の範囲】
【請求項１】
レイトレースされる３Ｄシーンを構成するプリミティブに交差すると分かった光線に対する情報を受け取るための入力ポートと、
複数のバッファと、
前記入力ポート及び複数のバッファに結合され、１つ以上の共通のシェーダーコード及び共通のシェーダーデータを使用してシェーディングされるべき光線に対する情報を各バッファにおいて一緒にグループ化することにより前記受け取った情報を前記複数のバッファ間で分割するように構成されたソーターと、
選択されたバッファのコンテンツを、その選択されたバッファに情報が記憶されるところの光線に対する交差をシェーディングするように構成される１つ以上のプロセッサへ出力するための出力ポートと、
を備えたレイトレーシングシステム。
【請求項２】
各光線に対する情報は、その光線の識別子を含む、請求項１に記載のレイトレーシングシステム。
【請求項３】
前記プリミティブは、各識別子で識別され、各プリミティブ識別子は、そのプリミティブが一部分であるところのシーンオブジェクトを表す複数のビットより成り、前記ソーターは、交差するシーンオブジェクトの共通性を、前記１つ以上のシェーダーコード及びシェーダーデータの共通性の指示子として使用してそのような光線交差をシェーディングするように構成される、請求項１及び２に記載のレイトレーシングシステム。
【請求項４】
各光線に対する最も近い検出された交差情報をバッファに記憶するメモリリソースへのポートと、このメモリリソースへのポートに結合されて、前記選択されたバッファの光線に対する交差情報を検索し、この交差情報を、前記出力ポートから、前記選択されたバッファの光線情報と共に、１つ以上のプロセッサへシェーディングのために出力させるバッファコントローラと、を更に備えた請求項１から３のいずれかに記載のレイトレーシングシステム。
【請求項５】
各交差されたプリミティブは、シェーダーコードの各部分と関係付けられ、更に、前記ソーターは、各シェーダーコード部分の共通性を使用して、光線情報をバッファ間で分割するように構成される、請求項１から４のいずれかに記載のレイトレーシングシステム。
【請求項６】
光線交差をシェーディングするように構成される１つ以上のプロセッサを更に備え、この１つ以上のプロセッサは、選択されたバッファからの光線に対して指示された交差をシェーディングする間にローカルアクセスするために検索されたシェーディングデータをキャッシュに記憶するように構成される、請求項１から５のいずれかに記載のレイトレーシングシステム。
【請求項７】
前記バッファは、所与の光線が交差する複数のプリミティブの識別情報を記憶し、交差
をシェーディングするよう構成される前記１つ以上のプロセッサは、シェーディングされるべき所与の光線の実際の交差を識別するために複数の識別されたプリミティブの最終的な交差テストを遂行するように構成される、請求項１から６のいずれかに記載のレイトレーシングシステム。
【請求項８】
前記出力ポートは、選択されたバッファから１つ以上のプロセッサへ光線識別子をストリーミングしてそれらの各交差をシェーディングすることにより光線情報を出力するように動作する、請求項１から７のいずれかに記載のレイトレーシングシステム。
【請求項９】
交差テスト装置を更に備え、この交差テスト装置において交差テストを開始すべき光線の識別子を受け取るために交差テスト入力ポートを有し、この交差テスト入力ポートは、複数のシェーダーコードモジュールソフトウェアから光線識別子を受け取り、そしてそれら光線識別子により識別された光線の交差テストを開始するために光線識別子のブロックを出力するように構成される、請求項１から８のいずれかに記載のレイトレーシングシステム。
【請求項１０】
前記交差テスト装置は、複数のテストセルを備え、そして識別された光線の同時テストのためにテストセル間で光線識別子のブロックを分割するように構成され、前記入力ポートは、複数のテストセルから出力された光線の識別子を光線情報として集めるように構成される、請求項９に記載のレイトレーシングシステム。
【請求項１１】
１つ以上のプロセッサが、３Ｄシーンを構成するオブジェクトを定義するデータを準備し、このデータは、オブジェクトを構成するプリミティブのための定義データを含むものであり、
前記１つ以上のプロセッサが、処理されるべき複数の光線を定義し、各光線の処理は、プリミティブとの最も近い交差がもしあればその各々を識別し、そして１つ以上のコードモジュールを実行することによりそのような交差をシェーディングすることを含み、
前記１つ以上のプロセッサが、最も近い交差が識別された光線の情報のグループを出力し、そのグループは、コードモジュールの共通性、及び識別された光線の交差のシェーディング中に使用されるべきデータの共通性の１つ以上に基づいて形成され、
前記１つ以上のプロセッサが、複数の光線に対する定義データを分散型メモリに記憶し、そして
前記１つ以上のプロセッサが、複数のテストセルにおいて複数の光線に対する最も近い各交差の識別を遂行することを含み、
各テストセルは、前記分散型メモリへの割り当てられたポートを有し、前記分散型メモリは、各光線に対して現在の最も近い検出された交差を識別するデータも記憶する、レイトレーシング方法。
【請求項１２】
前記最も近い各交差を識別することは、交差されるプリミティブの識別子と、それらプリミティブに交差した光線の識別子との間の関連性を発生することを含み、前記プリミティブの識別子は、それらプリミティブを伴う交差をシェーディングするために実行されるべきコードモジュールの共通性を決定するのに使用される、請求項１１に記載の方法。
【請求項１３】
前記グループの光線情報を、前記出力を保留するバッファに記憶することを更に含む、請求項１１及び１２のいずれかに記載の方法。
【請求項１４】
請求項１１から１３のいずれかに記載の方法を一つ以上のプロセッサに遂行させるためのコンピュータ実行可能なインストラクションを記憶するコンピュータ読み取り可能な媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、形状より成る三次元シーンの二次元表現を、レイトレーシングを使用して、レンダリングすることに係り、より詳細には、３Ｄシーンにおける光線の交差テストを行うシステム、方法及び手段に係る。
【０００２】
関連出願の相互参照：本出願は、２００８年９月１０日に出願された“Architectures for Parallelized Intersection Testing and Shading for Ray-Tracing Rendering”と題する米国プロビジョナル特許出願第６１／０９５，８９０号、どちらも“Ray Tracing System Architectures and Methods”と題する２００９年７月２８日に出願された米国プロビジョナル特許出願第６１／２２９，２５８号、及び２００９年７月２９日に出願された第６１／２２９，７０５号、並びに２００９年９月８日に出願された“Ray Tracing System Architectures and Methods”と題する米国特許出願第１２／５５５，７６６号の優先権を主張するものであり、これら全ての出願は、あらゆる目的で、参考としてここにそのまま援用される。
【背景技術】
【０００３】
レイトレーシングで３Ｄシーン記述からフォトリアリスティックな２Ｄ画像をレンダリングすることは、コンピュータグラフィックの分野で良く知られている。レイトレーシングは、通常、シーンにおける構造体の表面を記述するプリミティブと称される幾何学形状より成るシーン記述を得ることを含む。共通のプリミティブ形状は、三角形である。
【０００４】
仮想光線が視点（カメラ）からシーンへとトレースされ、各光線は、その光線が効果をもつことのできる２Ｄ表現の各ピクセルを通して進むように発生される。光線は、光線ごとに第１の交差プリミティブがあれば、それを識別するために、シーンのプリミティブとの交差についてテストされる。
【０００５】
所与の光線について交差を識別した後に、そのプリミティブに関連したシェーダーが、次に何が起きるか決定する。例えば、プリミティブがミラーの一部分である場合には、光が照明器具から交点に当たるかどうか決定するために反射光線が発生され、又はより複雑な状況においては、交差テストされるべき異なる光線を発生させる表面下反射及び散乱をモデリングすることができる。更に別の例では、オブジェクトの表面が滑らかでなく、粗面である場合には、そのオブジェクトに対するシェーダーが、その表面における拡散反射をモデリングするために光線を発生する。従って、光線とプリミティブとの間の交差を見つけることは、所与の光線により光エネルギーがピクセルに到達するかどうか及びどんな種類の光エネルギーがピクセルに到達するかを決定する上で第１ステップである。というのは、どんな光がそのプリミティブに当たるか決定する必要がまだあるからである。
【０００６】
従って、従来のほとんどのアルゴリズムは、光線がシーンをトレースするとき飛行光線ツリー(a tree of rays in flight)を構築し、このツリーは、それがシーンを去るか又は新たな光線を発生しない照明器具に当たるまで、各岐路に沿って続く。従って、光放射性オブジェクトに当たる岐路の場合に、その岐路は、プリミティブ交差を通してロールアップされ、その経路に沿って、各プリミティブ交差がそれに当たる光に対してどんな効果をもつか決定する。最終的に、最初に発生されたカメラ光線に対する光の色及び強度を決定してバッファに記憶することができる。
【発明の概要】
【発明が解決しようとする課題】
【０００７】
レンダリングされるべき２Ｄシーンのピクセルの異なる部分に作用する多数の処理リソースを設けることによりレイトレーシングを単純に並列化することができる。しかしながら、より多くの計算能力を単に設けるだけでは、必ずしもレイトレーシング速度及び効率の適当な拡張を果たすことができない。その１つの理由は、このような並列化は、データがシーンをどのように構成しているか考慮するものでなく、又、トレーシング効率を高める加速構造に効率的にアクセスできないからである。レイトレーシングアーキテクチャーに対する種々の改良を提供することが残されている。
【課題を解決するための手段】
【０００８】
１つの態様において、レイ（光線）トレーシングシステムは、レイトレースされる３Ｄシーンを構成するプリミティブに交差すると分かった光線に対する情報を受信する入力を備えている。又、このシステムは、複数のバッファも備えている。その入力及び複数のバッファにはソーターが結合される。このソーターは、１つ以上の共通のシェーダーコード及び共通のシェーダーデータを使用してシェーディングすることが予想される光線の情報を各バッファにおいてグループ化することにより、その受信した情報を複数のバッファ間で分割するように構成される。又、このシステムは、選択されたバッファに情報が記憶される光線に対する交差をシェーディングするように構成される計算リソースへ、選択されたバッファのコンテンツを出力するための出力も備えている。一実施形態では、各光線の情報は、その光線の識別子を含む。光線識別情報に加えて、交差される１つ以上のプリミティブに対する識別情報を、潜在的に交差する光線に対する識別情報に関連して記憶することができる。又、検出された最も近い交差を特徴付ける他の情報も、バッファに記憶することができ、又はバッファ選択の際にメモリから検索することもできる。出力は、光線識別子、及びもしあれば、光線識別子に関連した他の情報のストリームのようなストリームとして、バッファからの情報を与えることができる。
【０００９】
ある実施形態では、所与の光線により潜在的に交差されるプリミティブは、各識別子をもつことができる。これら識別子を使用して、そのプリミティブが一部分であるところのオブジェクトを決定することができる。従って、オブジェクトの共通性を使用して、異なる光線を伴う交差のシェーディング中に使用されるべき１つ以上のシェーダーコード及びシェーダーデータの共通性を推測することができる。ある実施形態では、オブジェクトを、個別のシェーダーコードモジュールに関連付け、そしてある実施形態では、各プリミティブを、シェーダーコードモジュール又はその一部分に関連付けることができる。
【００１０】
上述した実施形態及び態様によるレイトレーシングシステムは、光線の交差をシェーディングするように構成される計算リソースを備え、これは、選択されたバッファからの光線に対する指示された交差をシェーディングする間にローカルアクセスのためのキャッシュに、検索されたシェーディングデータを記憶するように構成できる。又、交差をシェーディングするように構成される計算リソースは、所与の光線が交差する複数の識別されたプリミティブの最終的交差テストを遂行して、シェーディングされるべき所与の光線の実際の交差を識別するように構成できる。又、このような機能は、交差テストとシェーディングとの中間の計算リソースにより具現化することもできる。このようなレイトレーシングシステムは、各交差をシェーディングするために選択されたバッファから計算リソースへ光線識別子をストリーミングすることにより光線情報を出力することができる。
【００１１】
規範的なレイトレーシングシステムの他の態様は、交差テスト入力をもつ交差テストリソースを備え、その入力は、交差テストリソースにおいて交差テストを開始すべき光線のための識別子を受け取る。このような光線識別子は、複数のシェーダーコードモジュールから受け取ることができ、そしてそれら光線識別子で識別された光線の交差テスト、好ましくは、同時テストを開始するためにブロックで出力される。このような同時テストは、複数のテストセルを含む交差テストリソースを備えたシステムにより遂行することができ、そして識別された光線の同時テストのためにテストセル間で光線識別子のブロックを分割するように構成される。入力は、複数のテストセルから出力された光線の識別子を光線情報として収集するように構成される。
【００１２】
他の態様は、レイトレーシング方法を含む。その一例である方法は、３Ｄシーンを構成するオブジェクトを定義するデータを準備することを含み、このデータは、オブジェクトを構成するプリミティブのための定義データを含む。又、この方法は、処理されるべき複数の光線を定義することも含み、各光線の処理は、プリミティブとの交差があれば、最も近い各交差を識別し、そして１つ以上のコードモジュールを実行することによりそのような交差をシェーディングすることを含む。又、この方法は、最も近い交差が識別された光線に対する情報のグループを出力することも含み、これらのグループは、識別された光線に対する交差のシェーディング中に使用されるべきコードモジュールの予想される共通性及びデータの予想される共通性の１つ以上に基づいて形成される。このような方法において、出力は、それらグループに対する光線情報を出力保留バッファに記憶することを含む。光線情報は、光線識別子、各識別された光線が交差した１つ以上のプリミティブに対する識別子を含み、ある実施形態では、各光線が最初に実際に交差したプリミティブのみを含む。
【００１３】
このような方法では、最も近い各交差を識別することは、交差したプリミティブの識別子と、それらプリミティブに交差した光線の識別子との関連性を生成することを含む。プリミティブの識別子を使用して、それらプリミティブを伴う交差をシェーディングするために実行されるべきコードモジュールの予想される共通性を決定することができる。
【００１４】
又、このような規範的な方法は、更に、複数の光線の定義データを分散型メモリに記憶し、そして複数のテストセルにおける複数の光線に対する最も近い各交差の識別を遂行することも含む。各テストセルは、分散型メモリへの割り当てられたポートを有することができる。又、分散型メモリは、各光線に対して現在最も近い検出された交差を識別するデータを記憶することもできる。
【００１５】
このシステム及びそれに対応する方法では、コントローラは、光線の収集体、即ち、３Ｄシーンを構成する各シーンオブジェクトに関連した収集体の少なくとも幾つかを形成することができる。これら収集体は、交差テスト及びシェーディングの両方について形成することができる。ある例では、シェーディングについて形成される収集体は、実際の交差が識別された光線のみに制限することができる。他の例では、収集体は、加速構造の葉ノードから形成することができ、これら葉ノードは、共通シーンオブジェクトのプリミティブを境界定めするように定義されている（又、このような葉ノードは、１つ以上のシェーダーコード及びシェーダーデータの決定された共通性に基づいて選択又は定義することができる）。
【００１６】
他の態様は、レイトレーシングシステムを準備する方法であって、３Ｄシーンにおける複数の光線の同時交差テストのために動作できる交差テストリソースを準備して、複数の光線のうちの少なくとも幾つかに対して検出された有効な交差の識別を生じさせる方法を包含する。又、この方法は、検出された有効な光線交差をシェーディングするためにシェーダーコードを実行する構成については交差シェーディングリソースを準備し、そして交差テストリソースとシェーディングリソースとの間で通信を行うことも含む。この通信は、検出された交差に対する情報の１つ以上のグループ、即ち各グループの各交差が１つ以上の共通シェーダーコード及び共通シェーダーデータでシェーディングされるという予想に基づいて決定されたグループを出力することにより、具現化できる。これらグループは、光線を、それに交差する各プリミティブに対する識別情報に基づいて分類することで、形成できる。又、このような方法は、シェーディングリソースから交差テストリソースへの新たな光線データをバッファすることも含む。新たな光線データをバッファすることは、新たな光線の同時交差テストを開始するために複数のシェーダーコードモジュールから新たな光線データを収集することを含む。又、このような方法は、共通シェーダーコードを実行するためのシェーディングリソースとして機能するように１つ以上のスレッドをスケジュールする制御モジュール機能のような機能を準備することも含む。
【００１７】
上述したシステム及び方法は、コンピュータ読み取り可能な媒体から得られるコンピュータ実行可能なコードを使用して具現化することができる。このようなコードは、上述したシステムコンポーネント及び他の態様を具現化するための機能的モジュールで与えることもできるし、汎用のプロセッサを構成するのに加えて、特定用途向け回路、プログラム可能なゲートアレイ及び他のカスタム又は半カスタムロジックを含むハードウェアで実施することもできる。
【００１８】
別の規範的なシステムは、与えられた形状データにより定義される形状との交差に対して光線をテストするように各々動作できる複数の交差テスタを備えている。各交差テスタによりテストされるべき光線は、その交差テスタがローカルにアクセスできるデータにより定義される。このシステムは、３Ｄシーンを構成するプリミティブを境界定めする加速構造の要素と、各要素に交差するように決定された光線の識別子との間の関連性を交差テスタから収集するためのコントローラを備えている。
【００１９】
又、このシステムは、コントローラと、複数の交差テスタとの間のインターフェイスも備えている。このインターフェイスは、テストされるべき光線の識別子のグループを受け取り、そしてどの交差テスタが各光線の定義データにローカルでアクセスできるかに基づいて光線の識別子を交差テスタ間に分散させることができる。このようなインターフェイスは、テスタがそれによりテストされるデータのソース又は性質に気付く必要がないようにコントローラから複数のテスタを抽象化することができる。同様に、テストセルからの結果は、コントローラが特定のテストの結果について特定のテストセルをポーリングする必要がなく、さもなければ、それに問合せする必要もないように、インターフェイスによって抽象化される。
【００２０】
更に、このようなシステムは、光線と、３Ｄシーンを構成するプリミティブとの間の交差をシェーディングするための計算リソースも備えている。シェーディングは、交差テストされるべき新たな光線を生じさせる。又、このシステムは、シェーディング計算リソースからコントローラ及び複数のテスタを抽象化する第２のインターフェイスも備えている。この第２のインターフェイスは、新たな光線に対する定義データを受け取り、そしてトレーシング中に新たな光線の各々を識別するところの新たな光線の各識別子を指定するように動作できる。
【００２１】
ある実施形態では、このようなシステムのこのようなテストセルは、複数のテスト領域を形成するためのサブセットへと編成することができる。各テスト領域は、３Ｄシーンのオブジェクトとで交差テストされる光線に対する定義データの各サブセットを記憶するプライベートメモリを含むことができる。第１のインターフェイスは、コントローラから複数の光線識別子を含むパケットを受け取るように動作できる。各光線識別子は、テスト領域のプライベートメモリに定義データが記憶されるところの光線の１つへとマップすることができ、そしてパケットにおいて識別された各光線の定義データをどのテスト領域が含むかを決定するのに使用される。
【００２２】
別の態様は、情報のサブセットをグループ分けする要素を有する強制型ハイアラーキー加速構造で情報のデータベースに問合せするシステムを包含する。このシステムは、入力バッファと、データベースから満足されるべく残っているテスト要求を定義するデータを記憶するメモリとを備えている。又、このシステムは、加速構造の要素が問合せによって定義された基準を満足するかどうかの個別の問合せ（即ち、提出されたときに互いに既知の関係をもたない問合せ）の同時テストを遂行するためのテストロジックも備えている。個別の問合せは、テストの出力に基づく収集体へと収集される。テストリソースは、個別の問合せを、提出順ではなく満足できるように、テストに対して収集をスケジュールすることにより更なる問い合わせに対してスケジュールされる。このような問合せの１つの結果は、問合せにおいて定義された１つ以上のパラメータに基づいて実行されるべきモードモジュールの識別である。又、結果は、コードモジュールの実行中に使用されるべき他のデータを識別することも含む。あるケースでは、コードモジュールの実行は、データベースへのより多くの問合せを生じさせる。
【００２３】
更に別の態様は、３Ｄシーンにおいて光線をトレースする方法を含む。この方法は、シーンにおいてトレースされる光線をハイアラーキー加速構造の複数の要素間に分散させることを含む。各要素は、各要素に交差すると決定された光線の各収集体を形成する３Ｄシーンの各サブ部分を境界定めする。又、この方法は、更に分散するための光線を、それらがメンバーであるところの収集体を選択することに基づき、選択することも含む。この選択は、収集体における光線の各本数と、収集体に関連したハイアラーキー加速度構造における要素の各位置と、の両方を考慮したものである。
【００２４】
前記システム及びそこで実施される方法は、横断ユニットへ送られる光線（より一般的には、問合せ）の数を表すクレジットカウントと、横断ユニットから結果が返送されるところの光線の数とを維持することにより、上述したインターフェイスを通して動作することができる。クレジットカウントは、新たな光線（問合せ）を横断ユニットへいつ送信すべきか決定するのに使用できる。
【００２５】
このようなシステム又は他のシステムに使用できる他の方法態様は、ソフトウェアベースのドライバにおいて、光線定義情報を記憶するためのメモリの一部分を割り当てることを含む。割り当てるべきメモリ部分のサイズは、交差テスト状態を維持すべき光線の合計数に基づく。又、この方法は、交差テストを待機している光線の大きなプールからメモリ部分に記憶するより多くの光線を与えるために、割り当てられたメモリ部分に記憶された光線の状態を維持するコマンドを交差テストコントローラから受け容れることも含む。
【００２６】
このようなシステム又は他のシステムに又はシステムと共に使用できる更に別の成分的方法は、交差テストのための加速構造を設定する方法を包含する。この方法は、加速構造の要素がサイズスレッシュホールドより大きいことに応答して第１のビット数を使用してその要素の定義データを表すことを含む。又、この方法は、第１のビット数より大きな第２のビット数を使用して、要素がサイズスレッシュホールド以下であるのに応答して定義データを表すことも含む。交差テスタにおいて、テストは、要素がサイズスレッシュホールドより小さい場合には、高精度フォーマットで進めることができ、又、要素がサイズスレッシュホールド以上である場合には、低精度フォーマットを使用して光線で進めることができる。
【図面の簡単な説明】
【００２７】
【図１】カメラが光線を放射し、光線が交差テストされ、このような交差でシェーダーを実行させて、更に別の光線を交差テストのために放射する単純な玩具シーンを示す。
【図２】交差テストリソース、シェーダーを実行する計算リソース、及びそれらの相互接続を例示する規範的システムアーキテクチャーである。
【図３】規範的な交差テストアーキテクチャー、及びそのコンポーネントの使用を管理する制御ロジックを示す。
【図４】規範的な交差テストアーキテクチャーを示すもので、そのアーキテクチャーの態様をどのように具現化するかを詳細に示す。
【図５】シェーディングの範囲内で有意義で且つレイトレーシングを通して搬送される光線識別子を使用するレイトレーシングに対して交差処理（シェーディング）及び交差テスト（トレーシング）をどのように抽象化できるかの一例を示す。
【図６】システムにおいてレイトレーシング機能を与える規範的アーキテクチャーを更に詳細に示す。
【図７】図６のパケットユニットから送信できるパケットの規範的編成であって、パケットが識別する光線の交差テストをトリガーするためにアービターにより使用されるパケットの編成を示す。
【図８】光線交差テストに使用できると共に、図６のアービターによる制御から抽象化できるテスタの態様を示す。
【図９】図６のパケットユニットで具現化できる規範的な光線交差テスト結果処理フローを示す。
【図１０Ａ】パケットが利用可能な光線交差テスタリソースに対して過剰な光線識別子を含む実施例の態様を示す。
【図１０Ｂ】パケットが利用可能な光線交差テスタリソースに対して過剰な光線識別子を含む実施例の態様を示す。
【図１１】ここに開示する実施例に使用できる規範的な交差テスタアーキテクチャーを示す。
【図１２】レイトレーシングアーキテクチャーで具現化できる更に別の態様を説明する加速構造を示す。
【図１３】パケットユニットにより検出可能な異なる条件のもとで、パケットユニットにより維持される収集体をどのようにテストのために選択するかの態様を示す。
【図１４】レイトレーシングアーキテクチャーにおいて具現化できるコンポーネントであるシェーダー又は交差オブジェクトによる交差光線の収集に関する態様を詳細に示す。
【図１５】交差オブジェクト及びより粒状的なシェーディングコードコンポーネントに基づき光線の収集及び収集した光線のシェーディングに関するデータフロー態様を示す。
【図１６】以上の図面に関して開示したレイトレーシング態様を具現化するのに使用できるシステムのコンポーネントを示す。
【発明を実施するための形態】
【００２８】
以下の説明は、当業者が本発明の種々の態様を利用し実施できるようにするためのものである。特定の技術、具現化及び用途の説明は、例示に過ぎない。当業者であれば、ここに述べる実施例の種々の変更が明らかであろうし、本発明の範囲から逸脱せずに、ここに定義する一般的な原理を他の実施例及び用途に適用することができよう。
【００２９】
説明を明瞭化するために、ある形式のオブジェクト、例えば、プリミティブのデータ（例えば、三角形の３つの頂点の座標）は、通常、オブジェクトのデータを参照するのではなく、単にオブジェクトそれ自体として説明する。例えば、「光線」を参照するときは、その光線を表すデータを、シーンにおける光線のコンセプトと共に参照することを理解されたい。
【００３０】
図１は、オブジェクト１１０、１１５及びライト１２０を含むシーン１５０と、カメラ１０５との間に、２Ｄ平面１７５が配置された簡単なシーン設定を示す。カメラ１０５から、カメラ光線１３０が放出される（例えば、カメラの振舞いを示すプログラムコードを使用して）。交差テストを通して、光線３０がオブジェクト１１０に交差することが決定される。オブジェクト１１０に関連したシェーダー（例えば、オブジェクト又は表面の振舞いを示すプログラムコード及びデータ）により光線１３１が放出される。例えば、オブジェクト１１０は、鏡面を有し、従って、そのシェーダーは、光線１３０がオブジェクト１１０に入射した角度での反射をテストするために光線１３１を発生する。従って、光線１３１がオブジェクト１１５に当たることが決定される。簡単化のために、オブジェクト１１５に関連したシェーダーは、オブジェクト１１０のシェーダーと同様の振舞いを有するものとして示され、光線１３１の経路を経て進んだ角度でオブジェクト１１５に光が入射するかどうかテストするために光線１３２を放出する。光線１３２は、ライト１２０に交差すると決定される。
【００３１】
図１の実施例は、当然、甚だしく簡単化されている。より現実的なレイトレーシングシーンに計算コストを追加する多くのファクタは、レンダリングされるべき２Ｄ表現の解像度が高く、例えば、１９２０ｘ１０８０ピクセル（２百万ピクセル以上）の全ＨＤ解像度であることを含む。シーンの各ピクセルは、それに関連したカメラから放出される多数の光線を有する。従って、このようなシーンをレンダリングすることは、数百万のカメラ光線だけを最初にテストし、その後、カメラ光線とのオブジェクト交差に基づき識別されるシェーダーにより放射される非常に多数の光線、次いで、シェーダーによりその後に放出される光線をテストすることを含む。
【００３２】
シェーダーは、種々の状態をテストする更に別の光線の実質的な計算及び放出を伴う。例えば、シェーダーは、周囲照明状態をテストするために多数の光線の放出を伴うモンテカルロ拡散照明のような拡散照明テストを遂行することができる。シェーダーは、交差点がシーン内の既知の光源に対して別のオブジェクトの影に入るかどうかテストするために光線を放出する。又、シェーダーは、皮膚の表面下散乱、反射、屈折、等の複雑な材料特性をモデリングすることもできる。これら機能は、各々、シーンにおいて交差テストする必要のある光線の放出も含む。従って、複雑なシーンの全ＨＤ高解像度２Ｄ表現をレンダリングすることは、数億本以上の光線の交差テストを含むことになる。
【００３３】
従って、説明上、この実施例は、シーンにおける交差について光線がテストされることを示す。オブジェクト（例えば、プリミティブ）に交差すると分かった場合には、そのオブジェクトに関連したシェーダーを識別し、実行することができる。そのシェーダーは、次いで、交差テストされるべきより多くの光線を放出する。シェーダーが放出する光線の数及び形式は、典型的に、交差する光線の特性、及びシェーダーが具現化する効果の両方に依存する。
【００３４】
非常に多くの光線が交差テストを必要とする状態では、全ての光線を同時に交差テストすることができない。又、開始から終了まで進行するシーンのレンダリングを考えれば、所与の時間に、レンダリングを完了するためにトレースを必要とする全ての光線が拒絶されることはない。というのは、シーンレンダリングそれ自体が、どんな光線がテストされるかを決定するからである。
【００３５】
図２は、レイトレーシング技術でシーンをレンダリングするのに使用するための規範的なシステム２００を示す。このシステム２００は、交差シェーディングのためのデータ２０６（例えば、シェーダーコード、テクスチャ、手続き上の幾何学形状、等）、プリミティブ及び加速形状要素２０７（例えば、三角形、三角ストリップ、頂点、境界球、軸整列の境界箱又はｋ−ｄツリー定義、等）、及びシーンにおける交差について現在テストされている光線を定義するデータ２０８のマスターコピーが記憶されたメインメモリ２０５を備えている。このメインメモリ２０５は、識別された光線／プリミティブ交差のシェーダーを実行できる交差処理リソース２０２と通信する。メモリ２０５と交差処理リソース２０２との間の通信は、メモリ２０５から交差シェーディングデータ２０６を与えるリンク２２１と、メモリ２０５からプリミティブデータを与えるリンク２２２とを含むように示されている。
【００３６】
交差処理リソース２０２は、交差テストリソース２１０により識別された交差をシェーディングするように動作する。交差テストリソース２１０は、コントローラ２０３により光線をテストするように指令される。コントローラ２０３は、リンク２２５を経て交差テストリソース２１０へテストされるべき光線の指示を与え、好ましくは、コントローラ２０３は、キャッシュ２１１に存在する光線を定義するデータを記憶するメモリ位置に関連付けることのできる識別子を与えることにより、テストされるべき光線を指示する。その好ましい状況において、テストされるべき光線の定義データが光線定義キャッシュ２１１からリンク２２８を経て得られ／受け取られる。現在の最も近い検出されたプリミティブ交差の中間テスト結果を光線定義データと共にキャッシュ２１１に記憶することができる（即ち、ある実施形態では、光線がプリミティブに交差するが、光線がシーンを横断する順序で光線がテストされない場合には、一般的に唯一の当該交差である真の最も近い交差の前に、より遠い交差を検出することができる。
【００３７】
考えられる最も近い検出された交差（もしあれば）は、リンク２２４を経てコントローラ２０３に指示される（例えば、光線がシーンオブジェクトに交差しなかった場合には、その光線は、リンク２２４を通して指示されてもされなくてもよい）。交差テストリソース２１０は、メモリ２０５からリンク２２０を通してプリミティブ及び加速形状データを受け取る。
【００３８】
コントローラ２０３は、これらの考えられる最も近い指示された交差を交差処理リソース２０２において処理するように構成される。コントローラ２０３は、リソース２０２で実行されるシェーダーにより生成された交差テストされるべき光線を定義するデータを受け取る。図２において、リンク２２６は、このような新たな光線データを受け取るように示されており、一方、リンク２２７は、リンク２２４から与えられた特定の交差のシェーディングをインスタンス生成するための情報を与えるように示されている。リンク２２７は、シェーダーを定義するコード及びデータを与え又はフェッチするか、さもなければ、メモリ２０５からそのようなフェッチを遂行するように交差処理リソースに指令することを含む。
【００３９】
又、コントローラ２０３は、メモリ２０５に記憶された光線定義データ２０８のマスターコピーを管理し、そして新たな光線を定義するデータを、リンク２２３を経てメモリ２０５に記憶することができる。交差テストを完了した光線を定義するメモリ２０５に記憶されるデータは、シェーダーによりインスタンス生成される新たな光線を定義するデータに置き換えられる。
【００４０】
交差テストリソース２１０及び交差処理リソース２０２は、処理プラットホーム２０１において具現化することができ、そしてマルチスレッドプロセッサにおける処理のスレッドを含むか、或いはマルチコアプロセッサの個別のコア、又は複数のコアを各々潜在的に伴う物理的に個別のプロセッサにおいて実行されるスレッドを含むことができる。各スレッドは、メモリ２０５又は別のソースから得られたコンピュータ実行可能なコードからのインストラクションを実行することができる。同様に、メモリ２０５は、プロセッサ２０１によりメモリコントローラ（個別に示さず）を通してアクセス可能なダイナミックＲＡＭとして具現化することができる。キャッシュ２１１は、マルチコアプロセッサにおける１つ以上のコアにより所有されたプライベート又は半プライベートＬ１キャッシュ、コア間及び／又はプロセッサ間で共有されるＬ２及びＬ３キャッシュのような種々のレベルで具現化することができる。好ましくは、キャッシュ２１１に記憶された光線定義データは、“Least Recently Used”、等の通常のキャッシュマネージメントアルゴリズムによりオーバーライとされることから保護される。むしろ、コントローラ２０３は、キャッシュ２１１の記憶された光線定義データを、光線定義データマスター２０８のサブセットとして管理する。キャッシュ２１１におけるこのような光線定義データは、リンク２２９を経てマスター２０８から更新することができる。
【００４１】
図示されたリンク２２０−２２９は、キャッシュ２１１、メモリ２０５、並びに交差テスト２１０及び処理２１０リソースの具現化に基づいて具現化される。
【００４２】
一般的に、交差テストリソース２１０は、通常、シーンを定義するプリミティブの選択を境界定めするプリミティブ形状又は加速形状要素のいずれかの形状に対して光線を交差についてテストするという点で、より固定機能形式の計算を遂行する。対照的に、（交差処理リソース２０２において）シェーディング中に遂行されるべき計算の形式は、シェーダーが種々の計算を遂行し、種々のデータにアクセスし、それを操作し、生成する、等の点で、より一般的である。それ故、ある環境では、交差テストリソース２１０は、より固定機能の処理で有益に具現化することができる一方、リソース２０２は、多くの場合に、より汎用の計算プラットホームにおいて有益に具現化することができる。それ故、ある環境では、交差テストリソース２１０は、固定機能であるか、或いはシーンのレンダリング中にプログラミングが頻繁に変化しないという予想でプログラムできる加速機能、アドインカード、コプロセッサ、等として設けることができる。
【００４３】
この開示による具現化は、規範的システム２００に示す全ての特徴をもつ必要はない。例えば、システム２００において、光線を定義するデータとは別に光線識別子を、オプションである交差テストリソース２１０に与えることにより、光線が交差テストについて指示される。更に別の例では、種々のリンクが示されているが、具現化によっては、そのような全てのリンクが必要とされ又は希望されるのではない。むしろ、図２は、交差テストのために計算リソースを設けることができ、それ故、検出された交差の指示を発生できるシステムを示している。これらの交差テストリソースは、検出された交差に対してシェーダーを実行する計算リソースと同時に動作することができる。シェーダーは、交差テストのために新たな光線を放出し、それら光線は、交差テストリソースによりテストのために取り上げられる。
【００４４】
図３は、複数のテストセル３１０ａ−３１０ｎ及び３４０ａ−３４０ｎを含む交差テストリソース２１０を例示するブロック図である。加速構造の要素は、記憶装置２０７から供給されるものとして示されている（加速構造の要素は、シーンのプリミティブを定義するデータも含めて、メモリに収容された定義データにより定義することができる）。
【００４５】
ＩＴＵ３０３は、収集管理ロジック３０３及び収集バッファ３６１も含む。収集バッファ３６１及び光線データ２１１は、（例えば）メモリ１３９から光線データを受け取ることのできるメモリ３４０に記憶される。収集バッファ３６１は、ＧＡＤ要素に関連した光線基準を維持する。収集管理ロジック３０３は、テストセルからの交差情報に基づいて収集体を維持する。又、収集管理ロジック３０３は、光線収集体をテストするためにメモリ２０７からのプリミティブ及びＧＡＤ要素のフェッチを開始することができる。
【００４６】
ＩＴＵ３０３は、識別された交差の指示を返送し、これは、出力バッファ３７５にバッファされ、最終的に、結果インターフェイス２２５を経て交差処理２０２に与えられる。これらの指示は、所与の精度で光線が交差すると決定されたところのプリミティブのような光線及び形状を識別するに充分な情報を含む。その精度は、１つ以上のプリミティブを境界定めする所与の境界定め要素に１つ以上の光線が交差したことが分かったが、各プリミティブは、まだ、そのような光線で最終的に交差テストされていないことを含むものである。
【００４７】
ＩＴＵ３０３は、光線が交差についてテストされるところの光線及び幾何学形状をＩＴＵ３０３に与える制御プロセス又はドライバを通して呼び出せる機能又はユーティリティとして考えることができる。例えば、ＩＴＵ３０３には、ドライバを通して情報を供給することができ、これは、１つの態様において、ＩＴＵ３０３を、シェーディング及び初期光線発生機能のような他のレンダリングプロセスにインターフェイスするプロセスと考えることができる。ＩＴＵ３０３の観点から、ＩＴＵ３０３は、それに与えられる情報の発信点に気付く必要はない。というのは、それに与えられた、或いはそれに与えられた他の情報に基づいてそれが得た光線、ＧＡＤ及びプリミティブ（又はより一般的にはシーンオブジェクト）を使用して交差テストを遂行できるからである。
【００４８】
上述したように、ＩＴＵ３０３は、それが受動的でないように、それにどんなデータがどのように、いつ与えられるか制御し、そして例えば、交差テストに必要な光線又は幾何学的データ或いは加速データをフェッチすることができる。例えば、ＩＴＵ３０３には、交差テストのための多数の光線を、光線をテストすべきシーンを識別するに充分な情報と共に与えることができる。例えば、ＩＴＵ３０３には、所与の時間に交差テストのために一万（１０，０００）本以上の光線を与えることができ、そしてそれら光線に対するテストが完了したときに、ＩＴＵ３０３で処理される光線の本数を、以下に述べるように、ほぼ最初の本数に保持するために、（交差処理２０２により発生される）新たな光線を与えることができる。その後、ＩＴＵ３０３は、処理中に（光線収集バッファ３６１（図３を参照）における）光線の一時的記憶を（ロジック３０３において）制御し、そして処理中に必要に応じてプリミティブ及びＧＡＤの要素のフェッチを開始することもできる。
【００４９】
上述したように、ＧＡＤ要素及びプリミティブは、光線に比してＩＴＵ３０３に一時的に存在する。というのは、光線識別子がバッファ３６１に維持されてＦＡＤ要素に対して編成され、且つ光線を定義するデータ（光線データ２１１）もテストセル３１０ａ−３１０ｎ及び３４０ａ−３４０ｎにより使用するように維持されるからである。バッファ３６１及び光線データ２１１の各々は、メモリ３４０に維持することができ、このメモリは、ＳＲＡＭキャッシュの１つ以上のバンクのような種々の仕方で物理的に具現化することができる。
【００５０】
上述したように、ロジック３０３は、メモリ３４０に記憶された光線収集体の状態を追跡し、そしてどの収集体が処理の準備ができたか決定する。図３に示すように、ロジック３０３は、メモリ３４０に通信結合され、そして接続されたテストセルの各々へテストのために光線を配送し始めることができる。
【００５１】
特定のＧＡＤ要素が他のＧＡＤ要素及びプリミティブの両方を境界定めする実施例では、ＩＴＵ３０３は、ＧＡＤ要素及びプリミティブの両方を、光線と共に各テストセルに与えるためのデータ経路を有し、ロジック３０３は、テストリソースの間で集合物の光線をテストするように構成できる。このような実施例では、ＧＡＤ要素とプリミティブとの間の形状の典型的な相違（例えば、球対三角形）のために、テストされている形状に対して最適な交差テストアルゴリズムをロードし又はテストロジックをスイッチするための指示をロジック３０３から与えることができる。
【００５２】
ロジック３０３は、テストセル３１０ａ−３１０ｎ及びテストセル３４０ａ−３４０ｎに情報を直接的又は間接的に与えることができる。間接的な状態では、ロジック３０３は、各テストセルがメモリ３４０からのテストのための光線データのフェッチを開始するように各テストセルへ情報を与えることができる。ロジック３０３は、メモリ３４０とは個別に示されているが、説明を簡略化するために、ロジック３０３をメモリ３４０の回路内で具現化することができる。というのは、ロジック３０３により遂行される管理機能は、主として、メモリ３４０に記憶されたデータに関連したものだからである。
【００５３】
交差テストリソースによるメモリ３４０へのアクセスの並列化を高められることは、ここに述べる幾つかの態様の効果である。従って、メモリ３４０へのアクセスポート数を、好ましくは、少なくともテストセル当たり１つまで増加するのが効果的である。このような並列化に関連した編成例について、以下に詳細に述べる。
【００５４】
又、ＩＴＵ３０３は、これに入力データを与えるか又はここからの出力を受け取るユニットに対して非同期で動作することができる。ここで「非同期」とは、以前に受け取った光線に対して交差テストを継続している間にＩＴＵが付加的な光線を受け取りそしてその交差テストを開始することを含む。又、「非同期」とは、ＩＴＵ３０３が光線を受け取った順序で光線が交差テストを完了する必要がないことも含む。又、非同期とは、ＩＴＵ３０３における交差テストリソースが、３Ｄシーン内の光線の位置又はシーンに重畳されるスケジューリンググリッドに関わりなく交差テストを指定又はスケジューリングし、或いは親光線及び少数の親光線から生まれる子光線のような世代関係をもつ光線、又はカメラ光線や二次光線のような特定世代の光線だけをテストするのに利用できることも含む。
【００５５】
出力バッファ３７５は、プリミティブ及びおそらくプリミティブに交差する光線の識別された交差の指示を受け取ることができる。一実施例では、その指示は、プリミティブに交差した光線を識別するに充分な情報と対になるプリミティブの識別を含む。光線の識別情報は、光線のリストにおける特定の光線を識別するインデックスのような参照を含む。例えば、このリストは、ホストにおいて実行されるドライバにより維持され、又、このリストは、メモリ２０５に維持される。好ましくは、メモリ２０５は、メモリ３４０内の全ての光線に対する光線定義データも含む。しかしながら、光線識別情報は、メモリ２０５がこのような情報を含まない場合に、光線を再構成するのに充分な光線の起点及び方向のような情報も含む。
【００５６】
図４は、システムを設計及び編成できるところの規範的なアーキテクチャーの態様を示す。ここに示すアーキテクチャーは、各光線定義データ４６６ａ−４６６ｎが記憶された各キャッシュ４６５ａ−４６５ｎに各々結合された複数の交差テストリソース（交差テスタ）４０５ａ−４０５ｎを備えている。交差テスタ４０５ａ−４０５ｎは、収集マネージャー４７５により開始されたメモリアクセスを送ることのできるデータライン４６０を通して交差テストされるべきシーンオブジェクトを受け取る。形状は、交差テスタ４０５ａ−４０５ｎに利用できるように、メモリ（例えば、キュー又はバッファ）４４０に記憶される。
【００５７】
従って、交差テスタ４０５ａ−４０５ｎは、各メモリ内の光線定義データへローカルアクセスすることができ、各入力バッファ４２１ａ−４２１ｎから光線識別子を受け取ることにより光線定義データの一部分を得て使用するように指令される。入力バッファ４２１ａ−４２１ｎは、判断点４１３−４１５を実施する配布ロジック４８０に設けられるか、さもなければ、それによりサービスを受け、ここで、収集管理４７５から与えられた光線識別子を入力バッファ４２１ａ−４２１ｎのいずれかに追加すべきかどうかの判断がなされる。
【００５８】
各交差テスタ４０５ａ−４０５ｎの結果は、（図示されたように、結果チャンネル４５０ａ−４５０ｎを経て）収集管理４７５に与えられる。ある実施例では、このような結果は、それが光線と加速構造の要素（即ち、ＧＡＤ要素）との間の交差に関するものであるときには収集管理によって処理され、一方、その結果がプリミティブと光線との間の交差に関するものである場合には、その結果を収集管理４７５から出力し又はそれにより転送することができる。収集管理４７５は、光線ＩＤと、次にテストされるべきオブジェクトを境界定めする各ＧＡＤ要素（交差テスタ４０５ａ−４０５ｎへアクセスできるデータがバッファ４４０に与えられる）との間の関連性を維持する。
【００５９】
ある実施例では、バッファ４４０は、メインメモリ（例えば、メモリ２０５）から収集管理４７５により開始されるＤＭＡトランザクションによりいっぱいにされる。例えば、ハイアラーキー加速構造の場合には、バッファ４４０は、光線の収集体が累積されるところの親加速要素の子である形状を記憶することができる。所与の収集体の光線がキャッシュ４６６ａ−４６６ｎ間で等しく分配されるときに最も高いスループットが得られる。
【００６０】
所与の収集体の複数の光線が１つのキャッシュにあるときには、他の交差テスタをストールすることができるか、又は次の収集体からの光線をテストすることができる。注目すべき他の態様は、所与の光線収集体に対する２つ以上の光線ＩＤを（収集体４４７で示された）キュー４２１ａ、４２１ｂ、４２１ｃのいずれかに記憶できることである。このようなケースでは、そのキューのＩＴＲが両方の光線をテストすることができ、そして第２のテストに対する結果（又は多数の順次の結果）を、それらが得られたときに、出力することができる。
【００６１】
所与の収集体の複数の光線が交差テスタの１つ（例えば、交差テスタ４０５ｂ）においてテストされる場合に、その収集体に対する残りの結果は、収集体の全ての結果がアッセンブルされるのを待機するか、又は「はぐれた(straggler」結果は、それが得られるとき、及び他のテストがテスタにより遂行される間に、伝播することができる。ある具現化では、以下に述べるように、収集体テスト同期が再び要求される前に、最大数の順序ずれテストを受け容れる（さもなければ、設計する）ことができる。
【００６２】
要約すれば、図４は、１つ以上の形状に関連した光線識別子のパケットを、光線データのサブセットを各々記憶する複数のテストリソースに対してキューへ分配できるようにするシステム編成を示す。各テストリソースは、テストリソースへロードされる形状に対して各光線識別子により識別される光線データをフェッチする。好ましくは、形状は、全てのテストリソースを同時に通して順次にストリーミングすることができる。形状は、メインメモリのアドレスで始まる子のシーケンスとして識別することができる。従って、図４は、形状が一般的に複数の光線に対して同時にテストされるシステム編成を示す。
【００６３】
図５は、図２−４に示したアーキテクチャー態様における別の観点を、他の機能と共に示す。図５の１つの高レベル態様は、交差処理２０２が抽象レイヤ５０１を通して交差テスト２１０と通信することである。抽象レイヤ５０１のある例において、交差処理を実行するシェーダーは、交差テストされるべき新たな光線をインスタンス生成することができる。このような新たな光線は、シェーダーを実行する処理リソースのコンテクスト内で有意義な識別子により識別することができる。便宜上、これらの識別子は、「ソフトウェア識別子」又は「ＳＷ識別子」と称される。これらのＳＷ識別子は、テストされるべき光線の定義データと共に、ＳＷ対ＨＷのＩＤマッパー５１５に与えられ、このマッパーは、各光線に対する各識別子を発生し、これを使用して、交差テスト中にそのような光線を識別することができる。光線のＳＷ識別子は、光線定義データと共に記憶することができ、そして所与の光線の交差結果を報告すべきときに、その光線のＳＷ識別子を、交差情報と共に報告することができる。ＳＷ識別子は、ＨＷ  ＩＤ対ＳＷ  ＩＤマッパー５２０を使用して特定のＨＷ識別子に対して識別することができる。他の例では、ＳＷ  ＩＤは、光線定義データと共にＲＡＭ２１１に記憶することができ、そして他の例では、ＨＷ  ＩＤは、ＳＷ  ＩＤのビットのサブセットであるか又はＳＷ  ＩＤのアルゴリズム変換に基づくものである。
【００６４】
しかしながら、図４と同様のアーキテクチャーによるシステムに関しては、特定の光線に対する光線定義データをどこに記憶すべきか決定する際に交差テストリソースが融通性をもてるようにＨＷ光線ＩＤを選択できるのが好ましい。この決定は、光線定義データを記憶する個別のメモリ間で負荷バランスをとるためになされる。この例に基づく独立した光線識別子戦略は、異なる目的に対して光線識別子を適当なサイズにすることができる。例えば、マスター光線メモリが維持され、それら光線のサブセットが、交差テスト２１０で完了するように能動的に交差テストされる。従って、マスターメモリにおける光線の本数は、能動的にテストされる光線の本数より何倍も大きく、マスターメモリ内の各光線を独特に識別するための識別子をより長くすることができる。
【００６５】
又、この光線識別子解決策は、所与の光線数を記憶するための大きな全メモリフットプリントを受け容れて、所与の光線を交差について繰り返しテストするための全データ移動が比較的少ないという利益を得る規範的なアーキテクチャー選択も提供する。
【００６６】
図５に戻ると、幾何学的及び加速形状データ２０７は、交差処理（例えば、シェーディング）及び交差テスト（即ち、加速構造横断及び／又はプリミティブ交差テスト）の両方に与えることができる。
【００６７】
交差テスト２１０から交差処理２０２へ戻される結果は、プリミティブ及び加速要素の１つ以上に対する光線の検出された交差の指示を含むことができる。ある具現化では、光線を交差テストの出力（例えば、出力バッファ３７５）において収集し、さもなければ、バッファすることができる。バッファ動作は、種々の仕方で具現化することができ、光線が種々の共通の属性に基づいて分類されることを含む。上述したように、光線は、加速要素に基づき収集体へと収集することができ、又、特定のシーンオブジェクトを境界定めするように加速要素を形成できることも開示される。従って、ある実施例では、光線の収集は、シーンオブジェクトに基づくことができる。ある具現化では、この収集戦略は、光線の収集を共通のシェーダーに対して実行できるようにする。
【００６８】
出力バッファ３７５について示されたように、光線のバッファ動作を行って、共通のシェーディングコードに対して光線の収集を実行できるようにする。更に、出力バッファ３７５に光線を収集することにより、使用すべきデータ要素のローカル性を高めて、所与のオブジェクトに対して頂点属性データ５１１、テクスチャデータ５１２、及び／又は均一性データ５１３を得て、コンパクトな時間フレームに多数の光線をシェーディングするのに使用できるようにする。ある態様において、これら種類のデータを使用するオブジェクトに交差する多数の光線が収集された後にそのようなデータをキャッシュ５１４にロードすることができる。例えば、多数の光線が交差するオブジェクトに対して頂点属性の大きなセットをフェッチしてキャッシュ５１４に記憶することができる。
【００６９】
図６は、交差テスタ（例えば、交差テスト２１０）の具現化の更に別の態様を示す。図４を参照して述べたように、多数の交差テスタ４０５ａ−４０５ｎを設けることができる。各テスタは、各バッファ４２１ａ−４２１ｎとインターフェイスすることができる。バッファは、光線識別子と、光線識別子で識別された光線で交差テストされるべきオブジェクトに関する情報とを含む。光線識別子は、パケットユニット６０８から（制御６３１を経て）制御される準備パケットリスト６１２から与えることができる。準備パケットリスト６１２は、（参照により又は含まれたデータにより）パケットにおいて識別された１つ以上の形状に対し交差についてテストされるべき光線識別子のリストを含むことができる。抽象ポイント６２０は、このようなパケットを準備パケットリスト６１２から受け取り、そして識別された光線の各々に対してどのローカルメモリ２３１ａ−２３１ｎが定義データを含むかに基づいてバッファ４２１ａ−４２１ｎ間で光線識別子を分割する。ある具現化では、抽象ポイント６２０は、その特定光線に対する光線定義データで交差テスタを識別するために各光線識別子のあるビットをマスクすることにより、ローカルメモリ２３１ａ−２３１ｎ内のメモリアドレス位置と光線識別子との相関に基づいてデータを分割することができる（もちろん、２つ以上のローカルメモリが所与の光線に対するデータを記憶する）。パケットは、交差テストされるべき加速データの要素又はプリミティブを参照することができ、典型的に、光線は、加速要素に対してテストするためにパケットにおいて最初に参照され、そして最終的に、プリミティブがテストのために識別される。
【００７０】
パケットユニット６０８は、システムインターフェイス６１６を使用して別の抽象ポイント６０５を通して通信し、パケット化及び交差テストされるべき更に別の光線を受け取る。又、パケットユニット６０８は、ＤＲＡＭ６１８とインターフェイスし、準備リスト６１２にパケットと共に含まれた参照に基づき交差テスタへ形状データを配送するようにメモリトランザクションをスケジュールすることもできる。
【００７１】
パケットユニット６０８は、加速構造において形状に対して光線識別子の収集体を維持する際に収集メモリ６０６を使用することができ、そしてあるケースでは、収集メモリ６０６を固定サイズ位置へ細分化し、これを使用して、所与の数の光線識別子を記憶することができる。収集メモリ６０６が、既知のサイズ、さもなければ、発見可能又は構成可能なサイズを有するとすれば、既知の数の収集体を受け容れて参照することができる。従って、このような各位置への参照は、空き位置リスト６１０に維持することができる。結果が結果リスト６１４から読み取られると、パケットユニット６０８は、それらの結果を、交差される各加速構造要素に関連した収集体へと処理する。このような処理は、戻りパケット、又は１つ以上の交差テスタ４０５ａ−４０５ｎにより与えられる他の情報から、各加速要素の識別子を検索することを含む。ある具現化では、交差テスタ４０５ａ−４０５ｎは、それら自体の間で所与の加速要素に対する光線交差結果を収集するためにパケットを通すことができ、他の実施例では、各交差テスタが、多数の加速要素及び１つの光線、又は１つの光線及び多数の加速要素に対してテスト結果を集計することができる。
【００７２】
従って、交差テスト結果は、抽象ポイント６２０を通して結果リスト６１４へ伝播され、一方、準備パケットリスト６１２において識別された他の収集体の光線は、バッファ４２１ａ−４２１ｎ間に分配される。各交差テスタ４０５ａ−４０５ｎは、別の光線を交差についてテストできるときにそのバッファから読み取るように動作することができる。ある実施例では、各バッファの各エントリは、識別された形状で交差についてテストされるべき光線を識別することができる。図４を参照して開示されたように、形状のデータは、ＤＲＡＭから与えることができ、そしてこのようなデータの付与は、パケットユニット６０８により開始することができる。
【００７３】
図７は、準備パケットリスト６１２に記憶できるパケット７０５の規範的フォーマットを示し、このパケットは、パケットＩＤ、位置、複数の光線識別子、及び形状識別子の成分を含む。形状識別子は、好ましくは、パケット７０５の各光線によって交差されると決定された形状を識別し、従って、各識別された光線は、交差された形状に関連するものとして識別されたオブジェクト（例えば、加速データのハイアラーキーにおける子ノード）に対してテストされる。
【００７４】
パケット７０５が交差テストを開始すべきであると決定されると、識別された形状に基づいて識別された各オブジェクトに対して個別のパケットを形成することができ、そしてこのような各パケットをバッファ４２１ａ−４２１ｎの各々に与えることができる。他の実施例では、テストされるべきオブジェクトを定義するデータは、交差テスタ４０５ａ−４０５ｎへ送ることができ、これらオブジェクトの各々は、パケットに与えられた識別子によりテストされる必要があると識別される（例えば、識別子の多数のビットが同じに留まり、最上位ビットのようなある数のビットが一致する限り、所与のオブジェクトを、別のオブジェクトの子として識別することができる）。
【００７５】
図６及びどこか（例えば、図４）を参照して述べたように、パケットユニット６０８、又は収集データを管理する別のエンティティは、テスタへの形状データの付与を、そのような形状で識別された光線グループをテストすると決定されたときに、開始することができる。図８は、ワークメモリ８１０がそのような形状データを受け取って記憶するように動作する交差テスタ４０５ａ−４０５ｎの規範的構成を示す。ワークメモリ８１０は、例えば、１つのテスタについてメモリに光線定義データとして記憶された２つ以上の光線を所与のパケットが識別したときに、異なる光線でテストを繰り返すためにそのような形状データをキャッシュ記憶することができる（図４を参照した前記説明を参照）。
【００７６】
このような形状データの記憶は、以下に述べるように、分散された交差テスタ間で光線テストをトリガーするために光線識別子を使用することに関連して更に別の態様を具現化するのに使用することができる。
【００７７】
図８は、ワーキングメモリ８１０及びテストロジック８２０を含むテストセル４０５ａの一実施例を示す。ワーキングメモリ８１０は、表面との交差について線セグメントをテストするのに充分な情報を含む複数のレジスタでもよいし、又は他の具現化では、もっと複雑なものでもよい。例えば、ワーキングメモリ８１０は、受け取った特定の形状を交差についてテストするようにテストロジック８２０を構成するためのインストラクションを記憶し、そして受け取ったデータに基づいてどんな形状が受け取られたか検出する。又、ワーキングメモリ８１０は、検出されたヒットをキャッシュ記憶し、各テストセルは、幾何学的形状に対して一連の光線をテストするように、又はその逆を行うように構成され、次いで、キャッシュ記憶されたヒットは、以下に詳細に述べるように、グループとして出力される。又、ワーキングメモリは、図１０Ａ及び１０Ｂを参照して述べる実施例に基づく具現化では、記憶装置、例えば、メインメモリ（２０５）から到来する形状データも受け取り、そしてそれを使用のために記憶する。
【００７８】
しかしながら、結果をどのように処理できるかに関する更に別の説明は、先ず、図９を参照して述べる。図９は、パケット識別子、光線識別子（Ｒｉｄ）、及び１つ以上の形状ヒットビットを含むパケットフォーマット９０１を示す。パケットフォーマット９０２は、パケットＩＤと、加速ツリー位置指示子（位置）と、光線識別子（ｒｉｄ）と、複数の形状識別子、及び各光線識別子に対するヒット／ミス情報の各指示と、を示す。
【００７９】
フォーマット９０１に基づき結果を提示するパケットフォーマットの場合に、パケットＩＤに関連した形状の任意のルックアップ（９０３）を具現化することができる。例えば、準備リスト６１２のパケットがテストを開始すると決定されたときには、そのパケットで指示された形状を使用して、複数の関連（例えば、子）形状を識別することができ、そしてそれらの関連形状が識別されるときには、それらに対する識別情報をパケットユニット６０８又は別の機能的ユニットにより保持することができる。従って、パケットフォーマット９０１と同様のフォーマットで結果が返送されるときには、関連形状を識別するためにそのレポジトリーをインデックスすることができる。
【００８０】
或いは又、フォーマット９０２のようなフォーマットにより、形状が明確に識別される場合には、ルックアップ（９０３）をスキップすることができる。いずれにせよ、複数の形状識別子（９０５）が得られる。その各々は、ハッシュ処理され（９１０）、ハッシュ値からの多数のビットを使用して、収集メモリ６０６をインデックスし、その形状ＩＤに関連した光線収集に対して複数の候補位置を識別することができる。例えば、収集メモリ６０６は、マルチウェイインターリーブ型キャッシュで具現化することができ、従って、インデックス動作で、所与のハッシュ値に関連した収集体に対する多数の候補位置を与えることができる。従って、形状ＩＤ全体を、各候補位置に記憶された形状ＩＤと比較して（９１７）、その位置がその形状ＩＤに対する収集体を記憶するかどうか決定することができる。一致する形状ＩＤがある場合には、集合体に空きスロットがあるかどうか決定され（９１９）、もしあれば、パケットからのｒｉｄ  ＩＤがその位置に追加される。この実施例は、好ましい具現化である固定サイズをもつ収集体に対するものであるが、収集体は、可変サイズであってもよい。
【００８１】
空きスロットがない場合は、一致する位置の１つにあるとして識別された収集体の１つが立ち退かされ（９２２）、そして丁度立ち退かされて今や空きとなった位置にその形状ＩＤに対する収集体が生成される。
【００８２】
一致がない場合には（９１８）、候補位置のいずれかがオープンであるかどうか決定され（９２３）、もしそうであれば、その位置において収集が開始される（９２４）。空き位置がない場合には、収集体が立ち退かされ（９２２）、その位置で新たな形状ＩＤに対して収集が開始される。従って、ある規範的態様において、収集メモリ６０６は、固定サイズのチャンクで管理することができ、収集体は、それらの識別子のハッシュ値に基づいて、利用可能な収集位置のサブセットに記憶することができる。形状がそれに対して光線を収集させることができるよう確保するために立ち退き戦略を具現化することができる。立ち退きの結果、収集体識別情報が準備リスト６１２に入れられる。
【００８３】
ある具現化では、シーンの追跡／横断光線において関連付けできる種々の目的を達成するために立ち退き戦略を調整することができる。例えば、オーバーライドモード９２５を具現化し、１つ以上の異なる収集体選択戦略（９２６）を使用することができる。このような戦略を以下に例示する。オーバーライドモードは、ある時間に関与することもできるし、又はある条件に応答して関与することもできる。他の実施例では、収集体選択モードを変更する明確な判断は必要でなく、むしろ、オーバーライド及びノーマルの両モードにおいて達成されることが求められる目的を含む収集体発見法のセットを使用することができる。図１０Ａ、１０Ｂ及び図１１の態様は、収集体選択戦略に関するものであり、それ故、最初に扱うことにする。
【００８４】
図１０Ａは、タイムスロットＴ１・・・Ｔ５が利用できるパケットフローフォーマットを示す。この実施例の新たな光線パケット１００１は、各タイムスロットにおいて４０本までの光線を識別することができ、一方、交差テストリソースは、光線テスト１００５で示すように、各タイムスロットにおいて３２本までの光線をテストすることができる。図１０Ａは、一連の完全にいっぱいのパケット１００２−１００５がタイムスロットＴ１−Ｔ４にわたってテストのために与えられる状態を示している。完全にいっぱいのパケットは４０本の光線を含むので、４つの４０光線パケットの交差テストは、５つのタイムスロットを必要とする。従って、タイムスロット５では、新たな光線の交差テストが開始されない。
【００８５】
交差テストへの入力に、より深いバッファ（例えば、バッファ４２１ａ−４２１ｎ）がある状態では、捕獲のために交差テストを開始しなければならなくなる前に、より多くの光線パケットを受け取ることができる。しかしながら、他の具現化では、主として、交差テストリソースを飽和状態に保持しながら、いっぱいでない収集体を伝送できるようにするために、光線交差テスト容量に対する光線識別子伝送容量の過剰分を使用することが期待される。飽和を維持しながら、いっぱいでない収集体を伝送することで、交差テストの進行中に動的である収集体選択／立ち退き戦略を具現化できることになる。
【００８６】
注目すべきことに、図１０Ａは、抽象ポイント６２０の観点から描かれたもので、パケットは、抽象ポイント６２０を通して与えられるが、パケットユニット６０８は、どんな光線がテストされ又はテストされないか、或いは所与の収集体の各光線がどの交差テスタへ分配されるかの視界を有していない。
【００８７】
そのような実施例が、同じ５つのタイムスロットが描かれた図１０Ｂに示されている。Ｔ１において、４０光線パケットが伝送され、３２本の光線がテストされ、８本が未テストのまま残る。図１０Ｂは、更に、３２光線パケットをＴ２タイムスロット内に受け取ることができ、３２本の光線がテストされることを示している。従って、テストに供される４０本の光線のうち、３２本をテストすることができ、８本が残る。Ｔ３では、２４光線パケットが受け取られ、３２本の光線がテストに供され、その全部をＴ３においてテストすることができる。Ｔ４及びＴ５では、４０光線パケットが受け取られるが、各タイムスロットに３２本の光線がテストされ、１６本の光線が、その後のタイムスロットでテストされるべき残される。実際に、バッファ動作は、ここに述べるように、より深くすることができ、幾つかのほぼ空のパケットが受け取られても、各テストセルのバッファ（例えば、図６を参照）は、テストを行うに充分な光線識別子を有する。
【００８８】
図１１は、交差テスタ８２０（図８）の更なる細部を例示する。ここに示す実施例では、交差テスタ８２０は、複数のテスタ１１０２ａ−１１０２ｎを備え、その各々は、ワーキングメモリ８１０へアクセスし、そして複数の形状８２５、８２６及び８３３を定義するデータを記憶する。これらの形状は、パケットユニット６０８により開始されるメモリフェッチの結果としてワーキングメモリ８１０に記憶されている。バッファ４２１ａは、抽象ポイント６２０を経て配布された複数のパケットから受け取られた光線識別子を記憶する。図１１に更に示すように、このような光線識別子の選択により識別された光線は、光線定義データ記憶装置２３１ａから各テスタ１１０２ａ−１１０２ｎへロードされる。図示されたように、異なるテスタ１１０２ａ−１１０２ｎは、異なる形状に対して異なるパケットからの光線をテストすることができる。
【００８９】
あるケースでは、各テスタ１１０２ａ−１１０２ｎは、計算ユニットにおいて実行されるスレッドとして具現化することができる。各テスタ１１０２ａ−１１０２ｎは、異なる形状に対して異なる光線をテストできるが、いずれかのテスタ１１０２ａ−１１０２ｎにおいてテストに供することのできる形状及び光線は、所与の交差テスタ（例えば、４０５ａ−４０５ｎ）が特定光線の定義データへのアクセスをローカライズしたかどうかに基づくのが好ましい。更に、その特定の光線は、収集体を通して、交差テストされるべきオブジェクトに関連しているので、テスタに得られる光線識別子及び形状の両方が最終的にパケットユニット６０８により決定される。対照的に、独立してスケジュールされる仕事を自由に実行する多数の計算ユニットは、よりランダムなパターンで且つ低い効率でメインメモリにアクセスすることになる。
【００９０】
上述したように、図４又は６の実施例に基づくアーキテクチャーは、交差テストのために光線が提示されるときを非同期で制御して、光線がテストされるところのオブジェクトデータのローカル性を実質的に高めることができる。交差テストでは、これらの規範的アーキテクチャーが光線に対する交差テストを延期するときにパケットがしばしばいっぱいになるケースがあり、このようなケースでは、多数のオブジェクトに対して多数の光線をテストできるので、多くの場合、オブジェクトデータをメインメモリからストリーミングすることができる。しかしながら、時々は、いっぱいでないパケットのテストをスケジュールすることも望まれる。
【００９１】
例えば、交差テスタは、所与のサイズの収集記憶装置を使用するように設計することができ、これは、所与の時間に最大又はほぼ最大の収集体を記憶できるか、又は最大数のアクティブな収集体を、例えば、高速メモリに維持できることを意味する。ここに述べるように、光線は、加速構造（例えば、ハイアラーキー構造）の要素に対して収集することができる。ある具現化では、このような構造の各ポイントに、比較的高いファンアウトがある。例えば、この構造における所与のノードは、交差について次にテストされるべき８個、１０個、１６個、２４個、又は３２個もの子ノードを有することができる。次いで、これらノードの各々は、それ自身の子ノードを有することができる。光線のダイバーシティを高め、そして共通のオブジェクト（例えば、加速要素）に対してテストできるより多くの光線を識別するためには、光線を多数の異なる収集体へと分散することが一般的に望ましいが、このような分散は、各々追跡する必要のある非常に多数の収集体の生成も引き起こす。
【００９２】
より具体的には、図１２を参照すれば、根ノードの子（ノード１．０−１．ｎと示された）に対して多数の光線が交差についてテストされると仮定する。ここで、ノード１．０は、縁１２０２により根ノードに接続されて示され、同様に、縁１２０３は、ノード１．ｎを根ノードに接続する。又、図１２は、プリミティブを境界定めする要素が他の要素（例えば、要素１２４４）と直接兄弟となるように、加速構造が異種のものでよいことも示している。根ノードにより近いほど、多くの場合、ノードがより広くファンアウトし、図示されたように、ノード１．０ａは、子ノードｐ．１−ｐ．ｎを有し、一方、ノード１．ｎは、子ノードｑ．１−ｑ．ｎを有する（多数の中間接続ノードがある）。最終的に、加速構造１２００は、プリミティブを境界定めするノードに近いほど、狭くなる。
【００９３】
この実施例では、プリミティブを各々境界定めするオブジェクトノード１２１０が与えられ、これは、異なるシーンオブジェクトに関連した各メッシュを定義する（例えば、ノードｒ．１は、１つのオブジェクトに関連したプリミティブを境界定めすることができ、一方、ノードｒ．２は、異なるオブジェクトに関連したプリミティブを境界定めすることができる）。次いで、更に別の加速要素は、所与のオブジェクトのプリミティブのサブセットを境界定めし（例えば、ノードｒ．１の葉１）、これは、そのようなプリミティブを直接境界定めする最終的な葉ノード（例えば、葉ノード１−Ｔ）に到達するまで行うことができる。
【００９４】
このような加速構造では、どの収集体を交差についてテストするか制御して、そのようなテストの結果として形成する必要のある新たな収集体の数を制御することが望まれる（ここに述べる指数関数的な収集体成長の回避）。一実施形態では、葉ノードに近い交差に対する収集体を選択することにより、たとえそれらが根ノードに近い収集体よりいっぱいでないとしても、そのような制御を行うことができる。あるパケットフォーマットは、加速構造のどこに、それらに関連したオブジェクトが位置するかに関する情報を含むことができると説明された。あるケースでは、この情報は、その収集体に累積される光線から決定されるバウンスカウントである。他の実施例では、この情報は、オブジェクト識別子情報を含み、オブジェクト識別子は、番号付けされ、その番号は、加速構造内で意味をもつようにされる。次いで、それら番号は、加速構造における位置を決定するのに使用でき、ひいては、それに関連した収集体がテストの完了に近い光線をもつかどうか決定するのに使用できる。
【００９５】
従って、完了に近い収集体をテストに対して選択することにより、交差テストユニットは、ツリーの横断中にファンアウトの程度を制御し、メモリ内の収集スペースの解放及び完了を促進することができる。パケットは、交差テストユニットに過剰供給できるので、交差テストが完全に飽和されている間に、いっぱい未満のパケットの選択を行うことができる。
【００９６】
図１３は、レイトレーシングに対するこのような解決策を具現化する方法態様を示す。図１３は、交差指示処理１３０２が収集準備処理１３０３と通信することを示す。交差指示処理１３０２は、光線及び加速要素の交差の指示の返送を取り扱い、そして例えば、パケットユニット６０８において具現化される。このような処理の規範的態様は、図９を参照して説明され、加速要素に交差したと示される光線が光線識別子の収集体間に分布されることを含む。収集準備処理１３０３は、メモリの使用、及び／又は収集体が個々に及び／又は集計としていっぱいであることに関する統計情報を集めることにより、収集体を監視できる（１３０４）ことを含む。収集メモリに制約があるかどうかに関して判断することができ（１３０５）、制約条件の決定がノーの場合には、テストのための収集体選択１３０６を、主として、収集体がいっぱいであることに基づいて行うことができる（が、このような判断をそれに基づいて排他的に行う必要はない）。制約条件が検出された場合には、どの収集体が横断の完了に近いかに基づいて収集を行うことができ、これは、ある実施例では、収集体が葉ノードに近いか又は当該加速構造内の別の位置に近いことを含む。
【００９７】
次いで、このように識別されるか、さもなければ、選択された収集体は、立ち退かせるか、又はテストの準備ができたとしてフラグを立てることができ、そして図８の実施例では、準備リスト８１２に記憶することができる。
【００９８】
図１４は、光線横断、光線分類、及びシェーディングの準備を含む方法の態様を示す。図１４は、加速構造（例えば、図１２の）を通して光線を横断させられることを示す。又、図１４は、一実施形態において、横断を完了させると考えることにできる境界定め要素（例えば、葉ノード）により収集体の光線を交差テストできることも示している。このような要素は、葉ノードであるか、又は加速構造における別のノード（例えば、オブジェクトに関連したプリミティブを境界定めするノード）である。いずれにせよ、光線は、その光線に対して現在考えられる最も近い検出された交差と、その考えられる最も近い検出された交差を含むオブジェクトとに基づいて分類することができる。
【００９９】
この説明は、最終的なプリミティブ交差テストの前に横断が停止される解決策を含むので、最も近い交差は、できるだけ指示されるということに注意されたい。というのは、たとえ光線が加速要素に交差しても、その要素により境界定めされたプリミティブに光線が最終的に交差し損なうケースがあるからである。
【０１００】
１４０６において、分類基準を決定することができる。一実施例では、このような分類基準は、各プリミティブに関連した識別子を使用することを含む。別の実施例では、このような分類基準は、共通のシェーダー又はシェーダーコードモジュールの一部分、そしてより一般的には、アクセスされるべき共通データ及び／又はコードを、交差のシェーディングに使用し及び／又はそこで実行することを含む。次いで、分類基準を交差の分類に使用することができる。又、光線が交差するプリミティブをルックアップするために光線識別子（三角形識別子(ＴＩＤ)）を使用する機能１４３２を使用して、光線識別子に対して光線交差テストと分類ロジックとの間のデータ路を与えることができ、そして必要なときに、識別された光線に対して交差情報を得るためにメモリルックアップ機能を与えることもできる。このルックアップは、複数の交差テストエリア（図６を参照）間に分布される光線定義データ記憶装置２１１から行うことができる。
【０１０１】
いずれにせよ、交差（又は考えられる交差）をオブジェクト関連バッファへと分類すること（１４０７）は、そのとき得られる交差情報（実際の及び／又は考えられる交差）に基づいて行うことができ、そしてソーターにより具現化することができる。バッファ１４０８、１４１０及び１４１２は、オブジェクトにより分類される交差情報を受け取るための規範的バッファとして示され、このようなバッファは、ＦＩＦＯ、リングバッファ、リンクされたリスト、等として具現化することができる。他の具現化では、シェーダーのような特定のコードセグメントとの関連性に基づいて光線をバッファへと分類することができる。ある具現化では、特定のシェーダー又は特定のオブジェクトに関連したバッファへ光線を分類すること（１４０７）は、上述したレイトレーシング延期の態様を使用して具現化することができる。あるケースでは、各プリミティブに独特の番号が与えられ、そのある部分が、プリミティブが属するシーンオブジェクトを識別し、そして光線を種々のバッファへ分類することは、光線に関連したプリミティブ識別子、又はそのシーンオブジェクト識別部分に基づく。
【０１０２】
バッファ選択１４１８は、シェーディング動作を行うために光線交差情報がどのバッファから得られるかを制御することができる。バッファ選択１４１８は、バッファ１４０８、１４１０及び１４１２の中から、よりいっぱいの又は最もいっぱいのバッファを選択することにより動作できる。あるケースでは、バッファ選択１４１８は、最小数以上の光線が収集されたバッファを選択することができる（光線の収集とは、光線の識別子の収集を指すのが好ましいが、光線の定義データをバッファに収集することを含んでもよい）。ある実施例では、バッファ１４０８−１４１２が、光線識別子を記憶するが、プリミティブ識別子のような、特定の交差を識別するのに使用される全てのデータを記憶するのではない場合を具現化するために、光線結果ルックアップ機能１４３０を設けることができる。
【０１０３】
一実施例では、光線は、オブジェクトにより収集することができ、そしてそのオブジェクトに関連したシェーダーコードをキャッシュ１４１９にロードし（１４２０）、記憶することができる。シェーダーは、更に、選択されたバッファ（１つ又は複数）から読み取られたデータで識別された光線の定義データをロードすることができる（１４２２）。選択されたバッファからの光線に関連したオブジェクト（１つ又は複数）の頂点属性データをメモリからページングすることができる（１４２４）。更に、実行中に、オブジェクトに対してロードされたシェーダーコードは、光線交差のシェーディングに有用なテクスチャ及び他のデータをサンプリングすることができる。バッファ１４０８、１４１０、１４１２に維持される収集体は、大きなものであり、あるケースでは、加速構造のノードに対して維持される収集体より著しく大きい。例えば、各バッファは、２５６、５１２、１０２４、１０９６、２０４８、或いはそれ以上又はそれ以下の光線交差指示を保持することができる。
【０１０４】
バッファ解決策は、１２８エントリのような比較的小さなサイズのバッファセグメントを含ませ、そしてそれらを大きなバッファに対して必要とされるようにリンクすることを含む。更に別の解決策は、複数のバッファサイズを有し、バッファに関連する形状を構成するプリミティブの数に基づいてバッファサイズを選択することを含む。例えば、２５０ｋプリミティブに関連した形状は、１Ｍプリミティブの形状より小さなバッファに関連付けることができる。バッファサイズは、シーン及びそれを構成するオブジェクトの分析に基づいて生成することができる。例えば、シーンが多数の小さなオブジェクトの分布を有する場合には、より小さなバッファを割り当てることができ、逆に、シーンに少数の大きなオブジェクトがある場合には、少数の大きなバッファを割り当てることができる。
【０１０５】
バッファ型解決策を上述したが、ここに述べる光線分類及び収集の態様は、このようなバッファ動作を必要としない。例えば、交差を決定した光線情報のグループを、中間バッファ動作なしに、交差テストの直後に出力することができる。例えば、あるケースでは、交差テストリソースは、同じシーンオブジェクト又はその一部分に関連したプリミティブの選択で３２、６４又はそれ以上の光線を交差について同時にテストすることができる。その同時テストから交差すると分かった光線は、同じオブジェクトに交差するより多くの光線を待機するためのバッファ動作のようなバッファ動作なしに、グループとして出力することができる。他の具現化では、数百又は数千の光線を集計してシェーディングへ出力するためにバッファ動作を使用することができる。
【０１０６】
あるケースでは、システムの具現化は、所与の光線がどんな三角形に交差するかルックアップできるようにするソフトウェア又はハードウェア実施機能を含む。このような機能を発揮する具現化の場合に、バッファは、三角形識別子を光線又は光線識別子と共に記憶する必要がなく、むしろ、光線がシェーディングの準備ができたときに光線識別子を使用してルックアップを行うことができる。
【０１０７】
前記態様において、頂点属性の比較的大きな区分をページインし、そしてそのページインされた頂点データ（及び他のデータ）の部分を使用して多数の光線交差がシェーディングされる間にそのデータをキャッシュに維持するのが好ましい。
【０１０８】
上述した図は、説明に基づく方法の機能的要素及びシステムの構造的要素の両方を示す。例えば、テスト１４０４は、図２−５の実施例による構造及びシステムにより具現化することができる。
【０１０９】
図１５は、オブジェクト交差情報に基づいて、又は実行されているシェーダーコードの部分に基づくより高い粒度レベルで、光線集合体をどのようにグループ分けするかの更に別の実施例を示す。図１５は、交差処理リソース２０２を示し、これは、複数の実行コア（スレッド）１５１０ａ−１５１０ｎと、交差シェーディングスケジューラ１５０７と、複数のキャッシュメモリを含むキャッシュハイアラーキー１５１５とを備えている。この実施例では、キャッシュハイアラーキー１５１５に含まれる複数のキャッシュは、オンチップで配置され、及び／又は実行コア１５１０ａ−１５１０ｎが位置するモジュール内に配置される。更に別のメモリ１５１７は、オフチップでアクセスすることができる。交差処理リソース２０２は、実行コア１５１０ａ−１５１０ｎにおいてシェーダーコードを実行し、そしてこの特定の実施例では、同じシェーダーの異なるインスタンスであるシェーダーインスタンス１５２０ａ及び１５２０ｂが示されている。又、シェーダーインスタンス１５２１も、異なるシェーダーに対するシェーダーコードのインスタンスとして示されている。
【０１１０】
スケジューラ１５０７は、他の光線の収集体のシェーディングのために自身のシェーディングを延期するよう光線を収集できる集計ポイントを生成することができる。収集ポイント１５２２は、図示された２つのシェーダーインスタンス１５２０ａ及び１５２０ｂ（シェーダーコードの入口ポイントを示す）の実行を待機するためにシェーディングスケジューラ１５０７が光線を集計できる論理的観点を示している。従って、光線は、それが延期されるとき、収集ポイント１５２２に関連した収集体へと収集される。収集された光線をシェーディングするときには、シェーディングに有用なデータをキャッシュハイアラーキー１５１５（図１４を参照して説明した）へページインすることができる。
【０１１１】
又、図１５は、シェーダーがコードの複数の区分で構成され、そして分岐し、又、コードの他のモジュールをコールすることも示している。例えば、コード１５２５は、シェーダーインスタンス１５２０ａの実行中に分岐するが、シェーダーインスタンス１５２０ｂの実行中には分岐しないコードとして示されている。モジュール１５３１及び１５３２は、シェーダーによりコールできる拡散照明モジュールのようなモジュールの一例である。そのようなモジュールをコールするシェーダーインスタンスの光線を収集するためにスケジューラ１５０７により収集ポイントを設けることができる。例えば、収集ポイント１５３０は、モジュール１５３２をコールした収集光線を表す。
【０１１２】
図示されたように、このようなコールは、異なるシェーダーコードのインスタンス（ここでは、インスタンス１５２０ｂ及びインスタンス１５２１）から到来する。モジュール１５３２が、収集ポイント１５３０で収集された光線について実行されると、シェーダーは、それらの通常のシェーディング経路を進み続ける。例えば、モジュール１５３２から収集される光線は、コード１５３５を実行するように戻り、そしてモジュール１５３２の完了後にモジュール１５３６をコールする。同様に、シェーダーインスタンス１５２０ａは、ある光線についてはモジュール１５３１が実行され、一方、他の光線についてはモジュール１５３２が実行される２つの岐路を有する。収集ポイント１５３０は、モジュール１５３２のみに適用され、モジュール１５３１の岐路をとる交差については、コード１５３３を実行し、最終的に、モジュール１５３７において同じコード経路へ合流し、モジュール１５３２をとる交差については、コード１５３４を実行した後に、モジュール１５３７に合流する。図１５は、スケジューラ１５０７が、モジュールに与えられるコールに基づき、あるオブジェクト又はオブジェクト部分に対してオブジェクトデータがロードされたメモリの定義領域へのアクセス、等々に基づき、シェーダーモジュール内に種々の収集ポイントを与えるという実施例に過ぎない。１つの好ましい態様において、光線交差処理は、拡散照明計算の始めに収集され、拡散照明計算は、同じオブジェクトの部分に交差する多数の光線について進められ、又、他の実施例では、同じ又は異なるオブジェクトの部分に交差する光線であってそのシェーダーが拡散照明コール使用するような光線を収集することができる。
【０１１３】
以上の実施例は、プリミティブ（一例）との交差の検出に応答して分類することを述べた。検出された交差に基づく分類に加えて、各光線は、検出された交差がないとき、それが分類されるべきデフォールトビン又はバッファに関連付けることができる。特定のビン又はバッファは、１つ以上のプリミティブ又はオブジェクト或いは特定のコードモジュールにも関連したビン又はバッファであって、ある光線は、それらの各々のデフォールト指定により終了し、一方、他の光線は、その光線をビン又はバッファ処理させる交差を検出する結果として終了するようにする。それ故、典型的な実施例は、検出された交差に基づいて分類／バッファ／ビン処理を行うが、各光線がデフォールトを特定できるようにする機能を発揮することもできる。デフォールト指定を受け容れるために、光線放出を許すＡＰＩコールを行うことができる。
【０１１４】
両実施例へのこれら解決策の結合は、１つのシステム内で具現化することができる。このような態様を具現化できるシステムの実施例が図１６に示されている。
【０１１５】
更なる概要により、これら実施例に基づくシステムは、リソースを割り当てて交差テストをシーン構造の更なるエリアへと推進させ、種々の光線を発生し、そして新たなカメラ光線を開始させるように広く動作することができる。最終的に、実行されるシェーダーにより放射される全ての光線をテストすることが予想されるが、実行順序は、レンダリング中にメモリの使用に重要な影響を及ぼす。
【０１１６】
ここに述べる機能、特徴及び他のロジックは、いずれも、種々の計算リソースで具現化することができる。計算リソースは、例えば、スレッド、コア、プロセッサ、プロセッサのグループ、仮想マシン、固定機能処理要素、等を含む。従って、種々の解決策、方法の態様、処理コンポーネント、等について説明したが、このような計算リソースは、これらの機能を具現化する手段をなす。又、前記実施形態を具現化するのに使用される他の機能も、１つの計算リソースにローカライズされるか又は複数の計算リソース間に分散されるプロセス、スレッド又はタスクとして設け又は具現化することができる（例えば、複数の物理的計算リソース間に分散された複数のスレッド）。
【０１１７】
特定の実施例により、交差テストに使用される計算リソースは、検出された交差をシェーディングするのに使用されるシェーディングプロセスのような他のプロセスをホストすることもできる。更に別の実施例により、コアが複数のスレッドをサポートできる場合には、あるスレッドをシェーディング専用とし、別のスレッドを交差処理専用とすることができる。
【０１１８】
上述したように、ここに述べる実施例は、定義された有利な点から考えられるように、３Ｄシーンを２Ｄ表現へと変換するのに使用できる。３Ｄシーンは、物理的オブジェクトのデータ表現を含むことができる。光線交差テストの他の結果は、種々の用途で使用できるオブジェクト可視性決定を含む。他の変換は、定義された方法により決定されたデータを記憶することによりコンピュータ読み取り可能な媒体を異なる状態へと変換することを含む。
【０１１９】
レンダリングの準備及びレンダリングそれ自体における前記ワークフロー及び方法の実施例は、複数の計算リソース１６０４−１６０７を備えたシステム１６００において遂行することができる。計算リソース１６０４−１６０７は、固定機能及び／又はプログラム可能な要素を各々含む複数の処理コア、プロセッサの１つ以上で構成される。又、計算リソース１６０４−１６０７は、例えば、マルチスレッドプロセッサにおける異なる計算スレッドも含む。計算リソース１６０４−１６０７各々は、その計算リソースと一体的でも個別のものでもよい各Ｌ１キャッシュ１６２５ａ−１６２５ｎへ読み取り及び書き込みアクセスすることができる。複数のＬ２キャッシュ、例えば、Ｌ２キャッシュ１６３０及びＬ２キャッシュ１６３５を設けることができ、そして計算リソースの間で共有されてもよいしプライベートなものであってもよい。共有されるＬ３キャッシュ及び／又はメインワークメモリ１６４０を設けることができる。この実施例では、光線データ１６１０及び形状データ１６１５をＬ３／メインメモリ１６４０に記憶することができる。規範的なシステム１６００は、１つ以上のアプリケーション及びシーンビルダーワークフロー、例えば、アプリケーション／ビルダー８６５を実行することができる。計算リソースは、共有バス１６０１を経て、又はポイント対ポイント接続を使用して、或いはＬ２キャッシュ１６３０及び１６３５又はＬ３／メインメモリ１６４０における共有メモリスペースを通して、互いに通信することができる。
【０１２０】
１つのアプリケーションにおいて、これらのシステム及び方法は、ホログラフィー画像形成システムに使用する３Ｄシーンの表現をレンダリングするのに使用できる。ホログラフィー画像形成システムのレンダリングに対する規範的解決策では、所与のシーンの複数の画像を異なる観点から各々レンダリングすべきである。各画像をレンダリングする際には、各観点を、交差テストされるべき光線の起点と考えることができる。各観点の光線は、それらの起点に関わらず、むしろ、遂行すべき交差テスト及び／又はシェーディングの共通性に関して、異なる起点の光線及びそれらの子孫を一緒に収集するように、交差テストについて一緒に収集することができる。複数のこのような起点からの光線を収集できることで、このシステム及び方法は、３Ｄシーンの設定を一度に行って、非常に多数の画像レンダリングにわたりシーンの設定をアモアタイズすることができる。又、異なる起点からトレースされるべき光線を結合することで、より大きなコヒレンス及び全体的なプロセッサ利用を許す。従って、上述した実施例では、光線の収集体が本開示に基づいて形成され、出力され、さもなければ、取り扱われる場合に、これらの光線は、複数のカメラ位置に帰属する。例えば、所与の収集体の光線は、共通の加速構造の親ノードの子ノードに対してテストすることができる。
【０１２１】
これら開示の別のアプリケーションは、コンピュータ実施プロセスの実行中に定義できる第１形式のデータ要素と、そのプロセスの実行中に第１形式の要素において与えられる情報を使用できるコードモジュールを含む第２形式のデータ要素との間のマッピングを決定することを含む。換言すれば、多数の個別の潜在的な入力と多数の個別の潜在的なコードモジュールとの間に、アプリケーションは、潜在的な入力の特性及びコードモジュールの特性に基づいて、どのコードモジュールがどの入力を受け取るか決定することを含む。このようなアプリケーションでは、コードモジュールは、更に別の潜在的な入力を発生し、それに対して再び決定がなされねばならない。従って、幾つかのそのようなアプリケーションでは、処理されるべき完全なデータセットが、アプリケーション自体の実行中に、発生され、さもなければ、展開される。
【０１２２】
対照的に、プロセスのあるクラスは、プロセスを開始する前に特定された、行うべき全ての考えられるアクションを有し、例えば、コードモジュールの入力として使用されるデータ要素を受け容れるコードモジュールは、コードモジュールを使用するプログラム又はプロセスの実行前に特定することができる。しかしながら、ここに示す環境では、どのアクションを行うべきか（又はより特定のインスタンスでは実行されるコードモジュール）及びどんな環境のもとでそれらアクションを行うべきかは、プロセスを開始する前には、又はプロセス実行中の所与の点でも、不確定である。むしろ、そのような情報は、プロセス実行の繰り返し中に決定される。従って、ある実施例では、プロセスの実行中に使用される全てのデータセットは、プロセスの開始には不確定である。又、プロセスのどのコードモジュール（又は機能的モジュール）がデータセットのどの部分を使用するかも不確定である。コンパイル時にこのようなプロセスの実行を微粒子的に並列化することは、困難である。というのは、コードモジュールの実行順序及びどのコードモジュールがどの入力を使用するかは、その時点では、未知だからである。
【０１２３】
それ故、利用可能な並列化の高い効果を得るためにプロセスの実行中に展開するデータセットの部分に対する処理を決定しスケジュールすることのできるシステム及び方法が望まれる。１つの特定のプロセス分類では、１つの形式のデータ要素があり、そのデータ要素の異なるインスタンスは、異なるパラメータを有し、そして各パラメータは、異なる値を有する。所与のデータ要素に関連したパラメータを選択できるところのパラメータのスーパーセットがあっても、異なるデータ要素は、異なるパラメータを有する。
【０１２４】
これらのデータ要素は、これらのデータ要素のパラメータを入力として使用するコードモジュールへの入力として使用すると共に、新たなデータ要素を実行の出力としてインスタンス生成することもできる。データ要素がインスタンス生成されると、それらは、実行される更に別のコードを生じないとの決定によりクローズされるか、又はその各々に対して実行されるべきコードの適当な部分が識別される（そしてどのようにクローズが定義されるに基づいて実行される）。
【０１２５】
プロセスを実行するための事前設定は、コード部分（例えば、コードモジュール又はモジュールの部分）をｎ次元空間構造内の１つ以上のポイント又は位置に関連付けることによりそれらコード部分を相互関連又は編成することのできるｎ次元空間を確立することを含む（そのようなコード部分は、ｎ次元スペース内の定義された領域に関連付けることもできるが、それらをポイントに関連付けるのが好ましく、この説明は、その実施例を使用しているが、これに限定されない）。
【０１２６】
ｎ次元スペースは、複数の要素を含む加速構造により細分化でき、各要素は、各コード部分に関連したポイントの各選択を境界定めするハイパー表面（便宜上、３Ｄ構造と同様に表面と称される）を確立する。ある実施例では、加速構造は、親要素の子要素とでハイアラーキー状である（この実施例は、説明を容易にするために、以下に使用されるが、加速構造のハイアラーキー性は、必要とされない）。典型的に、親の加速要素は、それらの子により境界定めされたスーパーセットを境界定めするが、必ずしも、子要素自体の表面全体を境界定めするものではない。
【０１２７】
処理を行う必要のある複数のデータ要素が定義される（又は得られる）。ｎ次元空間におけるサーチは、これらデータ要素の処理をクローズするために実行される１つ以上のコードモジュール（及びより一般的な幾つかのケースでは、所与の要素に対して処理を行うべきかどうか）を決定するために行われる。サーチは、データ要素において特定される基準に基づいて行われ、これは、値の許容範囲がｎ次元スペースにおける経路又は領域を定義する１つ以上のパラメータを含む。例えば、データ要素としての光線のケースでは、これらパラメータは、３Ｄスペース内で特定されて３Ｄスペース内に線を定義する起点及び方向を含む。同様に、これらパラメータは、球のような３Ｄオブジェクトも定義する。他の例としては、スペースを通る点又は２Ｄ表面の突出の任意の経路がある。ｎ次元スペースにおける規則的な又は不規則な境界によりハイパー次元領域を定義することができる。この領域は、隣接していてもいなくてもよく、例えば、ｎ次元スペースの複数のばらばらの部分の連合で構成されてもよい。従って、データ要素は、ｎ次元スペースにおける空間的な広がりを定義し、但し、ｎは、２以上であり、空間的な広がりは、所与のデータ要素に対して定義されたパラメータ及びパラメータの値に基づく（「空間的」とは、ここでは、理解を高めるために使用され、動作スペースにおける次元の数と同様に、何ら限定されない）。
【０１２８】
所与のデータ要素に対してどんなコード部分（もしあれば）を実行すべきか決定するために、そのデータ要素に対する空間的広がりが、ｎ次元スペースにおいて加速構造の要素により画成された表面（ハイパー表面）との交差についてテストされる。データ要素が加速要素の表面に交差すると分かったときに、それらデータ要素が、それら加速要素に関連した収集体へと収集される。
【０１２９】
サーチ動作は、（一例として）所与の表面との交差について異なるデータ要素をテストできるスレッド又は専用テストセルのような複数のテスト要素を含む計算リソースにおいて行うことができる。この計算リソースは、実行しなければならない全ての交差テストを同時に遂行できないという点で制限があり、従って、この計算リソースをスケジュールしなければならない。テストに対して計算リソースを割り当てることは、収集体のプールから、更なるテストのためのデータ要素の収集体をスケジュールすることに基づく。データ要素を、それらが定義された順序又はテストを開始した順序でテストするのではなく、プールから選択される収集体におけるメンバーシップに基づいてデータ要素をテストする。データ要素は、複数の収集体に同時に存在し、又、１つの収集体におけるメンバーシップによりテストできるが、異なる収集体におけるメンバーシップに基づくテストは、延期される。
【０１３０】
他の収集体のためにある収集体を延期することで、いっぱい未満の収集体を有する加速構造において収集体に関与するために更なる収集体を横断させ、一般的に、よりいっぱいの収集体からのデータ要素を同時にテストすることができる（収集体スケジューリングのための発見法は、ある環境において他の特性を有する収集体を選択することを含む）。ハイアラーキー的な加速構造のケースでは、データ要素の収集体は、次いで、データ要素の所与の収集体に関連した加速要素の子加速要素とでテストされる。
【０１３１】
光線交差テストのケースでは、関心のある結果は、典型的に、テストされる光線の起点から最も近い交差である。しかしながら、（ｎ次元スペースにおける）データ要素のパラメータ定義により画成される空間的広がりの交差テストのより一般的なケースでは、複数の結果、又は選択された結果、或いは結果の順序を返送することができる。従って、返送されるべき結果、及びそのフォーマットは、データ要素問合せをフォーマットできるところのフォーマットを設けることにより特定することができる。
【０１３２】
このようなテストからの出力は、どのデータ要素をどのコード部分への入力（又は実行のためのトリガー）として使用すべきかの指示を含む。又、このようなデータ要素は、同じ又は関連するコード部分の多数のインスタンスを異なるデータ要素に対して与えることができるように、収集体として出力することもできる。従って、コード部分の出力は、ここに述べたサーチを行うべき更に別のデータ要素を含むことができる。
【０１３３】
前記に加えて又はそれとは別に、コード部分自体の実行のスケジュールは、異なるデータ要素に対してコード部分の実行を並列化して、異なるデータ要素に対してコードの共通の部分を同時に実行できるようにすることを含む。又、コード部分により使用される他のデータ（例えば、データ要素自体に含まれる以外のデータ）を、使用のために検索してキャッシュ記憶することもできる。
【０１３４】
従って、上述した実施例に基づくシステムは、複数のパラメータがあってその値がｎ次元スペース内の領域を定めるようなデータ要素を、実行のためのコードのモジュールに関連したスペース内のポイント（又は領域）を境界定めするハイパー表面との交差についてテストできる方法を具現化することができる。このようなハイパー表面に交差すると分かったデータ要素は、交差表面により境界定めされる１つ以上のコードモジュールへの入力として使用できるデータを搬送することができる。ある実施形態では、システムは、所与のデータ要素により定められた領域と、所与のコードモジュールに関連したポイントとの間の接近性又は交差を特定の精度で確立するために更に別のテストを行うことができる。複数のデータ要素のテストは、所与のハイパー表面に交差すると分かった多数のデータ要素を受け容れるために個々のデータ要素の更に別のテストを延期し、そして他の累積されたデータ要素をデータ要素を、与えられたシステムリソースでテストするようにスケジュールすることにより、システムにおいて同時に遂行される。
【０１３５】
ここに述べる方法及び他の態様を具現化するためにコンピュータコード及び関連データを与えることができる。コンピュータコードは、例えば、アッセンブル言語、ファームウェア又はソースコードのようなバイナリーの中間フォーマットインストラクションであるコンピュータ実行可能なインストラクションを含む。コードは、汎用コンピュータ、特殊目的コンピュータ、或いはある機能又は機能グループを遂行するための特殊目的処理装置を構成するか又は構成させる。
【０１３６】
このようなコードは、ソリッドステートドライブ、ハードドライブ、ＣＤ−ＲＯＭ及び他の光学的記憶手段のようなコンピュータ読み取り可能な媒体に記憶され、ＤＲＡＭのような揮発性メモリに一時的に又はＳＲＡＭにもっと一時的に記憶される。
【０１３７】
ラップトップ、スマートホン、小フォームファクタのパーソナルコンピュータ、パーソナルデジタルアシスタント、等を含む種々のフォームファクタ及び装置のいずれかで実施できる相互運用のハードウェア、ファームウェア、及び／又はソフトウェアを含む種々の具現化形態を提供することができる。又、ここに述べる機能は、周辺装置又はアドインカードで実施することもできる。又、このような機能は、更に別の例では、単一装置で実行される異なるプロセス又は異なるチップの間で回路板において具現化することもできる。
【０１３８】
例えば、これら実施例によるマシンは、特定の固定目的のテストセルを含む交差テストリソース、及び／又はここに述べる特定の交差テストを遂行してテスト結果を解釈するためにコンピュータ読み取り可能な媒体からのコンピュータ読み取り可能なインストラクションで構成された汎用コンピュータを備えることができる。更に別のマシンコンポーネントは、テストリソースに加速構造を与えると共にテスト結果を受け取るための通信リンクを含む。交差テストのためのマシンは、他の入力及び出力装置を含むより大きなシステムのコンポーネント、例えば、シーン記述データを読み取るためのドライバ、及びレンダリングされたシーンを出力するためのディスプレイ又はコンピュータ読み取り可能な媒体である。例えば、コンピュータ読み取り可能な媒体は、ＤＶＤであり、各シーンは、動画のフレームである。
【０１３９】
上述した全ての実施例において、レンダリングされる３Ｄシーンは、実世界のシーンの抽象又はモデルを表すことができ、そしてテストされる光線は、シーン内に位置するライトから放出される光エネルギーを表すことができる。同様に、カメラの使用は、シーンに対する観察者の観点を表すことができる。ライトがどのようにシーンに影響し、そして最終的に、他のアプリケーションにより消費できる出力に影響するのか決定するときの交差テスト結果の出力は、コンピュータ読み取り可能な媒体に記憶することができ、ユーザに表示することができる。
【０１４０】
請求の範囲内の態様を説明するために種々の実施例及び他の情報を使用したが、当業者であれば、これらの実施例を使用して種々様々な具現化を導出できるであろうから、このような実施例における特定の特徴又は構成に基づいて特許請求の範囲を何ら限定するものではない。更に、幾つかの要旨は、構造的特徴及び／又は方法ステップの実施例に特有の言語で説明したが、特許請求の範囲に規定される要旨は、ここに述べた特徴又はアクションに必ずしも限定されないことを理解されたい。例えば、このような機能は、異なる仕方で分配することもできるし、或いはここに述べる以外の、それに加えての、又はそれより少数の、コンポーネントで遂行することができる。以上に述べた特徴及びステップは、特許請求の範囲のシステム及び方法のコンポーネントの一例として開示されたものである。
【符号の説明】
【０１４１】
１０５：カメラ
１１０、１１５：オブジェクト
１２０：ライト
１３０、１３１：光線
１５０：シーン
１７５：２Ｄ平面
２００：シーン
２０２：交差処理リソース
２０３：コントローラ
２０５：メインメモリ
２０６、２０８：データ
２０７：記憶装置
２０８：光線定義データマスター
２１０：交差テストリソース
２１１：光線定義キャッシュ
２２１、２２２、２２３、２２４、２２５、２２７、２２８：リンク
３０３：ＩＴＵ
３１０ａ−３１０ｎ、３４０ａ−３４０ｎ：テストセル
３４０：メモリ
３６１：収集バッファ
４０５ａ−４０５ｎ：交差テストリソース
４１３−４１５：判断ポイント
４２１ａ−４２１ｎ：入力バッファ
４４０：メモリ
４６５ａ−４６５ｎ：キャッシュ
４６６ａ−４６６ｎ：光線定義データ
４７５：収集マネージャー
５０１：抽象レイヤ
５１５：ＳＷ対ＨＷのＩＤマッパー
５２０：ＨＷ  ＩＤ対ＳＷ  ＩＤマッパー
【図１】
0005291798.tif 000002
【図２】
0005291798.tif 000003
【図３】
0005291798.tif 000004
【図４】
0005291798.tif 000005
【図５】
0005291798.tif 000006
【図６】
0005291798.tif 000007
【図７】
0005291798.tif 000008
【図８】
0005291798.tif 000009
【図９】
0005291798.tif 000010
【図１０Ａ】
0005291798.tif 000011
【図１０Ｂ】
0005291798.tif 000012
【図１１】
0005291798.tif 000013
【図１２】
0005291798.tif 000014
【図１３】
0005291798.tif 000015
【図１４】
0005291798.tif 000016
【図１５】
0005291798.tif 000017
【図１６】
0005291798.tif 000018