(57)【要約】【課題】  レイトレーシングのための方法及び装置はツリー加速構造を用いるレイ探索ユニットを提供する。【解決手段】  レイ探索ユニットは複数のサブパイプラインユニットを含んでもよい。複数のサブパイプラインユニットそれぞれはツリー加速構造を用いるレイ探索のために要求される互いに異なる作業を処理し、互いに並列で動作する。【選択図】      図７
2014038623.tif 000002
【特許請求の範囲】
【請求項１】
ツリー加速構造を用いるレイ探索ユニットにおいて、
並列に動作し、ツリー加速構造を用いるレイ探索のために要求される互いに異なる作業を複数のサブパイプラインユニットを含むことを特徴とするレイ探索ユニット。
【請求項２】
前記複数のサブパイプラインユニットそれぞれは、互いに異なるレイに対する探索を並列で処理するように適合化されたことを特徴とする請求項１に記載のレイ探索ユニット。
【請求項３】
複数のサブパイプラインユニットは、レイが訪問した前記ツリー加速構造のノードのデータをフェッチする第１サブパイプラインユニット、前記レイのデータ及び前記ノードのデータを用いて前記レイ及び前記ノードが示す空間の間の交差を検査する第２サブパイプラインユニット、及び前記ノードのデータに対するスタック動作を処理する第３サブパイプラインユニットを含むことを特徴とする請求項１に記載のレイ探索ユニット。
【請求項４】
前記第１サブパイプラインユニットに前記ノードのデータを提供するキャッシュをさらに含むことを特徴とする請求項３に記載のレイ探索ユニット。
【請求項５】
前記第１サブパイプラインユニット、前記第２サブパイプラインユニット、及び前記第３サブパイプラインユニットのうちの１つ以上は複数であることを特徴とする請求項３に記載のレイ探索ユニット。
【請求項６】
前記第１サブパイプラインユニットの個数、前記第２サブパイプラインユニットの個数、及び前記第３サブパイプラインユニットの個数は、前記レイ探索ユニットによってレイが処理されるために要求される前記第１サブパイプラインユニットの使用回数、前記第２サブパイプラインユニットの使用回数、及び前記第３サブパイプラインユニットの使用回数に基づいて決定されることを特徴とする請求項３に記載のレイ探索ユニット。
【請求項７】
入力されたレイのデータを前記複数のサブパイプラインユニットのうち前記入力されたレイの状態に対応するサブパイプラインユニットに分配する第１クロスバーをさらに含むことを特徴とする請求項１に記載のレイ探索ユニット。
【請求項８】
複数の入力バッファをさらに含み、
前記複数の入力バッファは、それぞれ前記複数のサブパイプラインユニットのうち１つのサブパイプラインユニットに分配された１つ以上のレイのデータを格納することを特徴とする請求項１に記載のレイ探索ユニット。
【請求項９】
前記複数のサブパイプラインユニットのうち１つのサブパイプラインユニットから出力されたレイのデータを前記レイの状態に基づいて前記１つのサブパイプラインユニットに再送信したり、シェーディングユニットまたは交差検査ユニットに送信する第２クロスバーをさらに含むことを特徴とする請求項１に記載のレイ探索ユニット。
【請求項１０】
前記第２クロスバーから出力されて前記シェーディングユニットに送信される１つ以上のレイのデータを格納する第１出力バッファと、
前記第２クロスバーから出力されて前記交差検査ユニットに送信される１つ以上のレイのデータを格納する第２出力バッファと、
をさらに含むことを特徴とする請求項９に記載のレイ探索ユニット。
【請求項１１】
ツリー加速構造を用いるレイ探索方法において、
第１サブパイプラインユニットがレイが訪問した前記ツリー加速構造のノードのデータをフェッチするステップと、
第２サブパイプラインユニットが前記レイ及び前記ノードのデータを用いて前記レイ及び前記ノードが示す空間の間の交差を検査するステップと、
第３サブパイプラインユニットが前記ノードのデータに対するスタック動作を処理するステップと、
を含み、
前記フェッチするステップ、前記検査するステップ、及び前記処理するステップは並列で行われることを特徴とするレイ探索方法。
【請求項１２】
キャッシュが前記第１サブパイプラインユニットに前記ノードのデータを提供するステップをさらに含むことを特徴とする請求項１１に記載のレイ探索方法。
【請求項１３】
前記第１サブパイプラインユニット、前記第２サブパイプラインユニット、及び前記第３サブパイプラインユニットのうちの１つ以上は複数であることを特徴とする請求項１１に記載のレイ探索方法。
【請求項１４】
前記第１サブパイプラインユニットの個数、前記第２サブパイプラインユニットの個数、及び前記第３サブパイプラインユニットの個数は、前記レイ探索ユニットによって処理されるレイが処理されるために要求される前記第１サブパイプラインユニットの使用回数、前記第２サブパイプラインユニットの使用回数、及び前記第３サブパイプラインユニットの使用回数に基づいて決定されることを特徴とする請求項１１に記載のレイ探索方法。
【請求項１５】
第１クロスバーが入力されたレイのデータを前記第１サブパイプラインユニット、前記第２サブパイプラインユニット、及び前記第３サブパイプラインのうち前記入力されたレイの状態に対応するサブパイプラインユニットに分配するステップをさらに含むことを特徴とする請求項１１に記載のレイ探索方法。
【請求項１６】
第２クロスバーが前記第１サブパイプラインユニット、前記第２サブパイプラインユニット、及び前記第３サブパイプラインユニットのうち１つのサブパイプラインユニットから出力されたレイのデータを前記レイの状態に基づいて前記１つのサブパイプラインユニットに再送信したり、シェーディングユニットまたは交差検査ユニットに送信するステップをさらに含むことを特徴とする請求項１１に記載のレイ探索方法。
【請求項１７】
第１出力バッファが前記第２クロスバーから出力されて前記シェーディングユニットに送信される１つ以上のレイのデータを格納するステップと、
第２出力バッファが前記第２クロスバーから出力されて前記交差検査ユニットに送信される１つ以上のレイのデータを格納するステップと、
をさらに含むことを特徴とする請求項１６に記載のレイ探索方法。
【請求項１８】
レイトレーシングを行うレイトレーシングユニットにおいて、
複数のレイ探索ユニット（前記複数のレイ探索ユニットのそれぞれは複数のサブパイプラインユニットを含み、前記複数のサブパイプラインは並列で動作する）と、
複数の交差検査ユニット（前記複数の交差検査ユニットは前記複数の探索ユニットの少なくとも１つから出力されたレイ及びツリー加速構造のリーフノードに対応するシーンオブジェクト間の交差を検査する）と、
を含むことを特徴とするレイトレーシングユニット。
【請求項１９】
入力レイを少なくとも１つの探索ユニットに分配するレイディスパッチユニットと、
レイデータフローを制御することによって前記複数のレイ探索ユニット及び前記複数の交差検査ユニットの間のレイ送信を仲裁するレイ仲裁ユニットと、
少なくとも１つのレイ探索ユニットによる探索の完了に応じて少なくとも１つのレイを格納するバッファと、
をさらに含むことを特徴とする請求項１８に記載のレイトレーシングユニット。
【請求項２０】
レイを生成し、生成されたレイのデータを前記レイディスパッチユニットに提供するレイ生成ユニットと、
バッファから追跡されたレイを受信し、前記追跡されたレイのデータを用いて前記追跡されたレイのシェードを行うシェーディングユニットと、
をさらに含むことを特徴とする請求項１９に記載のレイトレーシングユニット。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明で開示される実施形態はグラフィック処理方法及び装置に関し、より詳細にはレイトレーシングのための方法及び装置が開示される。
【背景技術】
【０００２】
３次元（３Ｄｉｍｅｎｓｉｏｎ；３Ｄ）レンダリングは、３Ｄオブジェクトのデータを与えられたカメラ視点から見える映像に合成した映像処理過程を示すことができる。
【０００３】
レンダリングのための一つの方法として、３Ｄオブジェクトを画面に投影しながら映像を生成するレスター化方法がある。また、レンダリングのための他の方法として、カメラ視点から映像の各ピクセルに向かって発射されたレイについて入射する光の経路を追跡することで映像を生成するレイトレーシング（ｒａｙ  ｔｒａｃｉｎｇ）がある。
【０００４】
前記レンダリングのための方法のうち、レイトレーシングは、反射、屈折、及び透過などのような光の物理的な性質を用いることによって高品質の映像を生成することができる長所がある。しかし、レイトレーシングのために用いられる演算の量がぼう大であるため、レイトレーシングは高速にレンダリングを処理することが困難である短所がある。
【０００５】
加速構造（Ａｃｃｅｌｅｒａｔｉｏｎ  Ｓｔｒｕｃｔｕｒｅ；ＡＳ）の探索（ｔｒａｖｅｒｓａｌ；ＴＲＶ）及びレイプリミティブ（ｒａｙ−ｐｒｉｍｉｔｉｖｅ）間の交差検査（ｉｎｔｅｒｓｅｃｔｉｏｎ  ｔｅｓｔ；ＩＳＴ）はそれぞれレイの追跡性能を決定する最も重要な要素の１つとして動作する。加速構造の探索及びレイプリミティブ間の交差検査は、レイそれぞれに対して数回ないし数十回まで行われる動作である。
【０００６】
加速構造は空間分割加速構造であってもよい。詳細に、加速構造は、レンダリングの対象であるシーンオブジェクト（ｓｃｅｎｅ  ｏｂｊｅｃｔ）を空間的に分割して表現したデータ構造を示す。加速構造として、グリッド（ｇｒｉｄ）ｋｄツリー（ｋｄ−ｔｒｅｅ）、ＢＶＨ（Ｂｏｕｎｄｉｎｇ  Ｖｏｌｕｍｅ  Ｈｉｅｒａｒｃｈｙ）などの資料構造が用いられてもよい。
【０００７】
探索及び交差検査はレイトレーシングにおいて７０％以上の演算量及び９０％以上のメモリ帯域の幅を占有する。すなわち、加速構造の探索及びレイプリミティブ間の交差検査動作は高い費用がかかり、相対的に多い量の電力を消費する。探索及び交差検査のリアルタイム処理のために専用ハードウェアを使用する場合もある。
【発明の概要】
【発明が解決しようとする課題】
【０００８】
本発明の目的は、レイトレーシングのための方法及び装置を提供することにある。
【課題を解決するための手段】
【０００９】
上述した本発明の一実施形態に係るツリー加速構造を用いるレイ探索ユニットにおいて、並列に動作し、ツリー加速構造を用いるレイ探索のために要求される互いに異なる作業を複数のサブパイプラインユニットを含むレイ探索ユニットを提供する。
【００１０】
前記複数のサブパイプラインユニットそれぞれは、互いに異なるレイに対する探索を並列で処理するように適合化されてもよい。
【００１１】
複数のサブパイプラインユニットは、レイが訪問した前記ツリー加速構造のノードのデータをフェッチする第１サブパイプラインユニット、前記レイのデータ及び前記ノードのデータを用いて前記レイ及び前記ノードが示す空間の間の交差を検査する第２サブパイプラインユニット、及び前記ノードのデータに対するスタック動作を処理する第３サブパイプラインユニットを含んでもよい。
【００１２】
前記レイ探索ユニットは、第１サブパイプラインユニットに前記ノードのデータを提供するキャッシュをさらに含んでもよい。
【００１３】
前記第１サブパイプラインユニット、前記第２サブパイプラインユニット、及び前記第３サブパイプラインユニットのうちの１つ以上は複数であってもよい。
【００１４】
前記第１サブパイプラインユニットの個数、前記第２サブパイプラインユニットの個数、及び前記第３サブパイプラインユニットの個数は、前記レイ探索ユニットによってレイが処理されるために要求される前記第１サブパイプラインユニットの使用回数、前記第２サブパイプラインユニットの使用回数、及び前記第３サブパイプラインユニットの使用回数に基づいて決定されてもよい。
【００１５】
入力されたレイのデータを前記複数のサブパイプラインユニットのうち前記入力されたレイの状態に対応するサブパイプラインユニットに分配する第１クロスバーをさらに含んでもよい。
【００１６】
レイ探索ユニットは複数の入力バッファをさらに含み、前記複数の入力バッファは、それぞれ前記複数のサブパイプラインユニットのうち１つのサブパイプラインユニットに分配された１つ以上のレイのデータを格納してもよい。
【００１７】
前記レイ探索ユニットは、前記複数のサブパイプラインユニットのうち１つのサブパイプラインユニットから出力されたレイのデータを前記レイの状態に基づいて前記１つのサブパイプラインユニットに再送信したり、シェーディングユニットまたは交差検査ユニットに送信する第２クロスバーをさらに含んでもよい。
【００１８】
前記レイ探索ユニットは、前記第２クロスバーから出力されて前記シェーディングユニットに送信される１つ以上のレイのデータを格納する第１出力バッファと、前記第２クロスバーから出力されて前記交差検査ユニットに送信される１つ以上のレイのデータを格納する第２出力バッファとをさらに含んでもよい。
【００１９】
前述した他の側面は、ツリー加速構造を用いるレイ探索方法において、第１サブパイプラインユニットがレイが訪問した前記ツリー加速構造のノードのデータをフェッチするステップと、第２サブパイプラインユニットが前記レイ及び前記ノードのデータを用いて前記レイ及び前記ノードが示す空間の間の交差を検査するステップと、第３サブパイプラインユニットが前記ノードのデータに対するスタック動作を処理するステップとを含み、前記フェッチするステップ、前記検査するステップ、及び前記処理するステップは並列で行われるレイ探索方法を提供する。
【００２０】
前記レイ探索方法は、キャッシュが前記第１サブパイプラインユニットに前記ノードのデータを提供するステップをさらに含んでもよい。
【００２１】
前記第１サブパイプラインユニット、前記第２サブパイプラインユニット、及び前記第３サブパイプラインユニットのうちの１つ以上は複数であってもよい。
【００２２】
前記第１サブパイプラインユニットの個数、前記第２サブパイプラインユニットの個数、及び前記第３サブパイプラインユニットの個数は、前記レイ探索ユニットによって処理されるレイが処理されるために要求される前記第１サブパイプラインユニットの使用回数、前記第２サブパイプラインユニットの使用回数、及び前記第３サブパイプラインユニットの使用回数に基づいて決定されてもよい。
【００２３】
前記レイ探索方法は、第１クロスバーが入力されたレイのデータを前記第１サブパイプラインユニット、前記第２サブパイプラインユニット、及び前記第３サブパイプラインのうち前記入力されたレイの状態に対応するサブパイプラインユニットに分配するステップをさらに含んでもよい。
【００２４】
前記レイ探索方法は、第２クロスバーが前記第１サブパイプラインユニット、前記第２サブパイプラインユニット、及び前記第３サブパイプラインユニットのうち１つのサブパイプラインユニットから出力されたレイのデータを前記レイの状態に基づいて前記１つのサブパイプラインユニットに再送信したり、シェーディングユニットまたは交差検査ユニットに送信するステップをさらに含んでもよい。
【００２５】
前記レイ探索方法は、第１出力バッファが前記第２クロスバーから出力されて前記シェーディングユニットに送信される１つ以上のレイのデータを格納するステップと、第２出力バッファが前記第２クロスバーから出力されて前記交差検査ユニットに送信される１つ以上のレイのデータを格納するステップとをさらに含んでもよい。
【００２６】
前述した他の側面に係るレイトレーシングを行うレイトレーシングユニットにおいて、複数のレイ探索ユニット（前記複数のレイ探索ユニットのそれぞれは複数のサブパイプラインユニットを含み、前記複数のサブパイプラインは並列で動作する）と、複数の交差検査ユニット（前記複数の交差検査ユニットは前記複数の探索ユニットの少なくとも１つから出力されたレイ及びツリー加速構造のリーフノードに対応するシーンオブジェクト間の交差を検査する）とを含むレイトレーシングユニットを提供する。
【００２７】
レイトレーシングユニットは、入力レイを少なくとも１つの探索ユニットに分配するレイディスパッチユニットと、レイデータフローを制御することによって前記複数のレイ探索ユニット及び前記複数の交差検査ユニットの間のレイ送信を仲裁するレイ仲裁ユニットと、少なくとも１つのレイ探索ユニットによる探索の完了に応じて少なくとも１つのレイを格納するバッファとをさらに含んでもよい。
【００２８】
レイトレーシングユニットは、レイを生成し、生成されたレイのデータを前記レイディスパッチユニットに提供するレイ生成ユニットと、バッファから追跡されたレイを受信し、前記追跡されたレイのデータを用いて前記追跡されたレイのシェードを行うシェーディングユニットとをさらに含んでもよい。
【発明の効果】
【００２９】
本発明の実施形態によってＧＰＵのレイトレーシング性能が向上する。また、ＴＲＶユニットはレイの探索を処理するために状態転移により要求されるサブパイプラインのみを用いるため、不要なデータ送信による電力消耗を減少させることができる。また、ＴＲＶユニットは複数のサブパイプラインユニットに同時にレイを発給することによって、他の方法（例えば、単一パイプラインを用いるレイＴＲＶ）に比べて並列処理効率を向上させることができる。
【図面の簡単な説明】
【００３０】
【図１】一実施形態に係るレイトレーシングを説明する。
【図２】一実施形態に係るグラフィック処理装置及びグラフィック処理装置と関連する個体の構造図である。
【図３】一例に係るパイプラインのバイパスを説明する。
【図４】一例に係るパイプラインのバイパスを説明する。
【図５】一例に係るパイプラインのバイパスを説明する。
【図６】一例に係るパイプラインのバイパスを説明する。
【図７】一実施形態に係るＴＲＶユニットの構造図である。
【図８】一例に係る複数の第１サブパイプラインユニットが用いられる構成を示す。
【図９】一例に係る複数の第２サブパイプラインユニットが用いられる構成を示す。
【図１０】一実施形態に係るレイ探索方法のフローチャートである。
【図１１】一実施形態に係るレイトレーシング方法のフローチャートである。
【発明を実施するための形態】
【００３１】
以下、添付する図面を参照しながら実施形態を詳細に説明する。各図面に提示された同一の参照符号は同一の部材を示す。
【００３２】
以下、用語「レイ」はレイトレーシングの対象である「レイオブジェクト」、「レイを示すデータ構造」、「レイ情報」または「レイと関連するデータ」を意味し、相互代替されて使用されてもよい。
【００３３】
以下、用語「シェーディングユニット」は「シェーダ」としても示してもよい。
【００３４】
図１は、一実施形態に係るレイトレーシングを説明する。ＡＳ構築１１０は、電子装置内でＡＳが構築される動作または過程を示す。電子装置は、コンピュータ、パーソナルコンピュータ、ポータブルコンピュータ、モバイル電話のようなモバイルデバイス、スマートフォン、個人メディアプレーヤー、タブレット及びこれと類似するものなどで実現される。一般に電子装置は、ここに開示される実施形態によってレイトレーシングを行うことが可能な任意装置であってもよい。電子装置は、レイトレーシングを行うためのグラフィックプロセシングユニット（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ；ＧＰＵ）を含む。ＡＳ構築１１０は、レイトレーシングの前処理（ｐｒｅ−ｐｒｏｃｅｓｓｉｎｇ）であってもよい。ＡＳ構築１１０は、３次元空間を示す階層的ツリーを生成するものであってもよい。レイトレーシングの対象となる３Ｄ空間が階層的ツリーの形態で生成される。３Ｄの空間はシーンであってもよい。
【００３５】
外部メモリ１２０は、ＡＳ１３０及び幾何データ１３５を包括、格納、または提供してもよい。外部メモリ１２０は、例えば、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＰＲＯＭ（Ｐｒｏｇｒａｍｍａｂｌｅ  Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＥＰＲＯＭ（Ｅｒａｓａｂｌｅ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）またはフラッシュメモリのような不揮発性メモリデバイス、ＲＡＭのような揮発性メモリデバイス、またはハードディスクまたは光学ディスクのような格納媒体を用いて実現されてもよい。しかし、本発明はこれに制限されることはない。さらに、外部メモリは、有線またはネットワークを介してＡＳ１３０及び幾何データ１３５を提供してもよい。ＡＳ１３０はＡＳ構築１１０によって生成されたＡＳであってもよい。ＡＳ１３０は、ツリー構造体を用いるツリーＡＳであってもよい。例えば、ＡＳ１３０はｋｄツリーまたはＢＶＨであってもよい。ｋｄツリーは、空間分割（ｓｐａｃｅ−ｐａｒｔｉｔｉｏｎｉｎｇ）データ構造体のタイプを示してもよい。ＢＶＨは、幾何オブジェクトがバウンディングボリューム内に取り囲まれたツリー構造体のタイプを示してもよい。バウンディングボリュームは相異なる形状を有してもよい。また、ＡＳ１３０はグリッドであってもよい。ＡＳ構築１１０は、３Ｄ空間及び３Ｄ空間が分割された空間の一部（ｓｕｂ−ｄｉｖｉｓｉｏｎ）を階層的なツリー形態に示すためのツリー構造体を生成してもよい。
【００３６】
ＡＳ１３０は２進ツリーであってもよい。ＡＳ１３０は１つ以上のノードを有してもよい。ＡＳ１３０の１つ以上のノードそれぞれは、ルートノード、内部ノード、またはリーフノードであってもよい。ノードのタイプは、ルートノード、内部ノード及びリーフノードであってもよい。ここで、ルートノードは内部ノードと見なされてもよい。ＡＳ１３０のノードそれぞれは空間を示す。ノードが示す空間は全体空間の一部であってもよい。ノードが示す空間は２つの点などに表現されるバウンディングボックス（Ｂｏｕｎｄｉｎｇ  Ｂｏｘ；ＢＢ）または軸整列されたバウンディングボックス（Ａｘｉｓ−Ａｌｉｇｎｅｄ  Ｂｏｕｎｄｉｎｇ  Ｂｏｘ；ＡＡＢＢ）であってもよい。２つの点はバウンディングボックスが示す六面体の互いに対称である頂点であってもよい。六面体の面はそれぞれｘ軸、ｙ軸、ｚ軸のうち１つの軸に平行する。例えば、全体空間の大きさがＸ、Ｙ、Ｚであるとき、ＡＳ１３０のルートノードが示す空間は、全体空間を示す点０、０、０及び点Ｘ、Ｙ、Ｚに表現される。
【００３７】
ルートノードまたは内部ノードの子ノードは、親ノードが示す空間の一部を分割する。前記分割は、空間の一部をｘ軸、ｙ軸、またはｚ軸に分割する。例えば、ルートノードの左側子ノード及び右側子ノードは、ルートノードが示す空間をｘ軸上の点を基準として分割してもよい。分割によって空間の一部が生成される。ｘ軸上の点ｘ０にルートノードが示す空間が分割されるとき、ルートノードの左側子が示す空間は点０、０、０及び点ｘ０、Ｙ、Ｚに表現される。また、ルートノードの右側子が示す空間は点ｘ０、Ｙ、Ｚ及びＸ、Ｙ、Ｚに表現されてもよい。
【００３８】
ノードが示す空間はノードのレベルに応じて分割される。例えば、第３ｎ＋２レベルの子ノードは第３ｎ＋１レベルの親ノードが示す空間をｘ軸上の点を基準として分割してもよい。第３ｎ＋３レベルの子ノードは、第３ｎ＋２レベルの親ノードが示す空間をｙ軸上の点を基準として分割してもよい。第３ｎ＋４レベルの子ノードは、第３ｎ＋３レベルの親ノードが示す空間をｚ軸上の点を基準として分割してもよい。ここで、ｎは０以上の整数であってもよく、ルートノードは第１レベルのノードであってもよい。
【００３９】
幾何データ１３５は、３Ｄ空間内のシーンオブジェクトのデータを示す。シーンオブジェクトのプリミティブは三角形であってもよい。または、シーンオブジェクトは三角形の形態に構築されてもよい。しかし、プリミティブは、例えば、平面、球、円錐、円筒、トーラス（ｔｏｒｕｓ）、及びディスクなどのような異なる幾何または多角形の形態を有する。論議の便宜のために、ここで開示された実施形態はプリミティブを三角形に示す。プリミティブは他の形態を取ることに注目する。
【００４０】
レイトレーサー１４０は、レイ生成１５０、ＡＳ探索１５５、交差検査１６０及びシェーディング１６５を含む動作を処理する。
【００４１】
レイ生成１５０の動作よって基準視点から３Ｄ空間に向かうレイが生成される。レイは基準視点から２Ｄスクリーン内の特定ピクセルに向かってもよい。
【００４２】
２Ｄスクリーン内のピクセルそれぞれに対してレイ生成１５０が繰り返して行われる。言い換えれば、仮想のレイが原点（ｏｒｉｇｉｎ）から２Ｄスクリーン内の各ピクセルに発射されてもよい。
【００４３】
ＡＳ探索１５５の動作によってＡＳ１３０を用いてレイの経路が追跡される。ＡＳ探索１５０は、レイが通過するＡＳ１３０のツリーノードを探索して行われてもよい。ここで、レイがノードを通過することはレイがノードが示す空間を通過することを意味する。
【００４４】
ＡＳ探索１５５の反復によってＡＳ１３０のリーフノードに到達する。ＡＳ１３０のリーフノードに到達すると、到達したリーフノードに対応する１つ以上のシーンオブジェクトが特定される。ここで、リーフノードに対応するシーンオブジェクトは、リーフノードが示す空間内に位置するシーンオブジェクトであってもよい。言い換えれば、リーフノードに対応するシーンオブジェクトは、シーン内の全体シーンオブジェクトのうち全てまたは一部がリーフノードが示す空間内に存在するシーンオブジェクトであってもよい。リーフノードのデータは、リーフノードに対応するシーンオブジェクトのデータまたは三角形のデータを含んでもよい。言い換えれば、リーフノードは、対応するシーンオブジェクトまたはプリミティブ（例えば、三角形）を含んでもよい。または、リーフノードは、対応するシーンオブジェクトまたは三角形を示す。
【００４５】
後述される実施形態において、ＡＳ探索１５５は、複数のサブパイプラインユニットを含むレイ探索（Ｔｒａｖｅｒｓａｌ；ＴＲＶ）ユニットによって行われてもよい。レイ探索ユニットを以下ＴＲＶユニットと略述する。
【００４６】
交差検査１６０は複数のシーンオブジェクトに対する交差検査を行う。
【００４７】
後述されるように、交差検査１６０はレイ交差検査（Ｉｎｔｅｒｓｅｃｔｉｏｎ  Ｔｅｓｔ；ＩＳＴ）ユニットによって行われる。
【００４８】
シェーディング１６５の動作によってレイと交差する可視であるシーンオブジェクトのカラーに基づいてレイが向かう２Ｄスクリーン内の特定ピクセルのカラーが算出される。
【００４９】
２Ｄスクリーン内のピクセルのカラーが決定されることによってレンダリングイメージが生成される。
【００５０】
図２は、一実施形態に係るグラフィック処理装置及びグラフィック処理装置と関連する個体の構造図である。図２は、レイトレーシングの実行のためのレンダリングハードウェアまたはグラフィック処理装置の構造を示す。
【００５１】
図２において、レイ生成ユニット２１０、レイトレーシングユニット２２０、第１キャッシュ２８２、第２キャッシュ２８４、バス２８６、外部メモリ２８８及びシェーディングユニット２９０を示す。レイ生成ユニット２１０、第１キャッシュ２８２、第２キャッシュ２８４、及びシェーディングユニット２９０はグラフィック処理装置の構成要素であってもよい。すなわち、ＧＰＵは、レイ生成ユニット２１０、第１キャッシュ２８２、第２キャッシュ２８４及びシェーディングユニット２９０を含む。
【００５２】
ＧＰＵまたはレイトレーシングユニット２２０は図１を参照して前述されたレイトレーサー１４０であってもよい。外部メモリ２８８は、外部メモリ１２０であってもよい。レイ生成ユニット２１０はレイ生成１５０を行う。シェーディングユニット２９０はシェーディング１６５を行う。また、図示されるものと異なって、レイ生成ユニット２１０及びシェーディングユニット２９０はそれぞれレイトレーシングユニット２２０内に含まれる。レイ生成ユニット２１０はレイを生成する。レイ生成ユニット２１０は、生成されたレイのデータをレイトレーシングユニット２２０に提供する。レイ生成ユニット２１０は、レイのデータをレイトレーシングユニット２２０に提供する作業または個体を示す。
【００５３】
レイトレーシングユニット２２０はレイの追跡を処理する。レイトレーシングユニット２２０は、追跡が処理されたレイのデータをシェーディングユニット２９０に提供する。
【００５４】
シェーディングユニット２９０は、追跡が処理されたレイのデータに基づいて追跡されたレイに対するシェーディングを処理する。シェーディングユニット２９０は、レイの追跡が処理された後シェーディングを処理する作業または個体を示す。シェーディングは、２Ｄスクリーン内のピクセルに対して蓄積されたレイの追跡結果を合わせることによって前記ピクセルのカラーを最終的に決定することができる。
【００５５】
第１キャッシュ２８２及び第２キャッシュ２８４はレイの追跡に関連する必要なデータのキャッシュを生成または格納する。レイの追跡を処理するために必要なデータは外部メモリ２８８内に格納されている。第１キャッシュ２８２及び第２キャッシュ２８４はそれぞれ外部メモリ２８８内に格納されたデータのキャッシュを生成または格納する。レイの追跡に関連するデータはバス２８６によって第１キャッシュ２８２及び外部メモリ２８８間で送信されてもよく、第２キャッシュ２８４及び外部メモリ２８８間で送信されてもよい。言い換えれば、第１キャッシュ２８２及び外部メモリ２８８の間と第２キャッシュ２８４及び外部メモリ２８８の間にはコネクション（ｗｉｒｅｄ  ｃｏｎｎｅｃｔｉｏｎ）がある。ここで、第１キャッシュ２８２内に格納されるデータはＡＳ１３０の一部であってもよく、第２キャッシュ２８４内に格納されるデータは幾何データ１４０の一部であってもよい。
【００５６】
第１キャッシュ２８２は、後述されるＴＲＶユニットのキャッシュにレイの探索を処理するために必要なデータを提供する。第２キャッシュ２８４は後述されるＩＳＴユニットのキャッシュにレイの交差検査を処理するために必要なデータを提供する。したがって、ＴＲＶユニットのキャッシュ及びＩＳＴユニットのキャッシュはそれぞれレベル１（ｌｅｖｅｌ１）キャッシュであってもよく、第１キャッシュ２８２及び第２キャッシュ２８４はそれぞれレベル２キャッシュであってもよい。
【００５７】
以下、レイトレーシングユニット２２０の構成要素について説明する。
【００５８】
レイトレーシングユニット２２０は第１バッファ２３０、少なくとも１つのＴＲＶユニット２４０−１ないし２４０−３、第２バッファ２５０、少なくとも１つのＩＳＴユニット２６０−１ないし２６０−３、及び第３バッファ２７０を含む。
【００５９】
少なくとも１つのＴＲＶユニットとして、第１ＴＲＶユニット２４０−１、第２ＴＲＶユニット２４０−２、及び第Ｎ  ＴＲＶユニット２４０−３が示された。ここで、Ｎは１以上の整数であってもよい。少なくとも１つのＩＳＴユニットとして、第１ＩＳＴユニット２６０−１、第２ＩＳＴユニット２６０−２、及び第Ｍ  ＩＳＴユニット２６０−３が示されている。ここで、Ｍは１以上の整数であってもよい。
【００６０】
図２で、レイトレーシングユニット２２０は、ＡＳ１３０のルートノードから下位のノードへの階層的な探索によって、レイが最初に訪問するリーフノードを検索する。前記検索によってリーフノードが訪問されれば、レイトレーシングユニット２２０は、１）レイ及び２）リーフノードに対応するシーンオブジェクトまたは三角形間の交差検査を行う。ここで、リーフノードに対応するシーンオブジェクトまたは三角形は複数であってもよい。訪問されたリーフノード内でレイと交差する三角形が検索されない場合、レイトレーシングユニット２２０はツリーの探索を継続してレイと交差するプリミティブを検索する。言い換えれば、レイが三角形と交差しなければ、レイトレーシングユニット２２０はツリーの他の部分内のＴＲＶがプリミティブ（例えば、シーンオブジェクトまたは三角形）がレイと交差するか否かを決定することを継続する。前記探索及び交差検査は、それぞれＴＲＶユニット及びＩＳＴユニットによって行うことができる。少なくとも１つのＩＳＴユニットはツリーＡＳを用いてシーンオブジェクト及びレイ間の交差有無を検査する。
【００６１】
前述したことのようなレイの追跡特性のために、レイの追跡は多くの演算及び高いメモリ帯域幅を同時に要求する。このような要求は、訪問または交差検査が行われるごとに、外部メモリ２８８からノードのデータ、シーンオブジェクト、または三角形のデータがフェッチ（ｆｅｔｃｈ）された後、演算が実行されなければならないことに起因する。したがって、探索及び交差検査にそれぞれ用いられるＴＲＶユニット及びＩＳＴユニットはそれぞれキャッシュを含んでもよい。ノードのデータ、シーンオブジェクトのデータ、またはプリミティブのデータがキャッシュ内に存在しない場合、外部メモリ２８８からデータをフェッチするとき長い遅延時間が発生することがあり、レイの追跡性能は低下する。
【００６２】
第１バッファ２３０は、レイ生成ユニット２１０及び複数のＴＲＶユニット間のレイ送信を制御する。レイ生成ユニット２１０ は、レイトレーシングユニット２２０に入力された入力レイを格納し、入力レイを少なくとも１つのＴＲＶユニットのうち１つのＴＲＶユニットに分配する。入力レイは１つ以上であってもよい。１つ以上の入力レイは、順次レイトレーシングユニット２２０に入力されてもよい。第１バッファ２３０は、レイディスパッチ（ｄｉｓｐａｔｃｈ）ユニットと命名されたり表現される。
【００６３】
第１バッファ２３０は、少なくとも１つのＴＲＶユニットそれぞれの入力バッファの使用可能の有無に基づいて入力レイをＴＲＶユニットのうち１つのＴＲＶユニットに分配する。
【００６４】
少なくとも１つのＴＲＶユニットのうち１つのＴＲＶユニットから入力されるレイは、レイ生成ユニット２１０によって生成されたレイ、前記１つのＴＲＶユニットによって探索が処理されたり処理されているレイ及びＩＳＴユニットによって交差検査が処理されたレイであってもよい。少なくとも１つのＴＲＶユニットのうち１つのＴＲＶユニットによって出力されるレイは、探索を処理した１つのＴＲＶユニットに再び入力されてもよく、少なくとも１つのＩＳＴユニットのうち第２バッファ２５０によって選択されたＩＳＴユニットに入力されてもよく、シェーディングユニット２９０に入力されてもよい。
【００６５】
第３バッファ２７０は、シェーディングユニット２９０から出力されるレイを格納する。第３バッファ２７０内に格納されたレイは１つ以上であってもよい。レイの探索が完了すると、レイのデータはＴＲＶユニットからシェーディングユニット２９０に送信される。
【００６６】
シェーディングユニット２９０に出力されるレイは第３バッファ２７０内で出力を待機する。言い換えれば、複数のレイは第３バッファ３７０に出力されてもよく、ＴＲＶが完了したとき複数のレイに関連するたデータはシェーディングユニット２９０に出力されてもよい。
【００６７】
第２バッファ２５０は、少なくとも１つのＴＲＶユニット及び少なくとも１つのＩＳＴユニット間でレイの送信を仲裁する。レイがリーフノードに到達すると、レイに対する交差検査が行われる。したがって、レイはＴＲＶユニットから出力され、第２バッファ２５０を経てＩＳＴユニットに入力される。言い換えれば、第２バッファ２５０は、少なくとも１つのＴＲＶユニット及び１つ以上のＩＳＴユニット間のレイのデータの流れを制御する。第２バッファ２５０はレイ仲裁ユニットと命名するか表現される。
【００６８】
レイは１つ以上の空間を通過する。したがって、レイに対する交差検査が実行された後にも、レイに対する探索が続く。少なくとも１つのＩＳＴユニットのうち１つのＩＳＴユニットによって出力されるレイは、少なくとも１つのＴＲＶユニットのうち１つのＴＲＶユニットに入力される。ここで、レイが入力されるＴＲＶユニットは、レイの探索を処理したＴＲＶユニットであってもよい。
【００６９】
図３〜図６は、単一パイプラインを用いてレイの探索を処理する場合に発生する問題点を説明する。
【００７０】
前述したように、ＴＲＶユニットはＡＳ１３０のツリー内で階層的な探索を行う。ツリーの階層的な探索は、１）ノードデータフェッチ及び左側子の訪問過程、２）右側子の訪問及びスタック（ｓｔａｃｋ）ポップ過程、３）ノードのデータフェッチ、リーフノード訪問及びＩＳＴユニットへの出力過程、及び４）ＩＳＴユニットから入力されたレイのデータをシェーディングユニットに出力する過程などで分類される。ここで、ノードデータフェッチは、ノードのデータをキャッシュからフェッチするものであってもよい。ノードのデータはノードが示す空間のデータであってもよい。空間のデータはＢＢまたはＡＡＢＢであってもよい。
【００７１】
処理率を向上させるために、ＴＲＶユニットはパイプラインを用いてレイの探索を処理する。新規のレイはＴＲＶユニットの入力バッファに注入されてもよい。場合に応じて、ツリー内のノードに対する訪問を継続的に行うために、レイのデータはＴＲＶユニットへの出力バッファを経て再び前記ＴＲＶユニットの入力バッファに入力されてもよい。パイプラインは複数の状態を有し得る。
【００７２】
例えば、パイプラインは、第１状態、第２状態及び第３状態を有する。第１状態は、ノードのデータをキャッシュからフェッチする状態である。また、第１状態は、ノードがリーフノード及び内部ノードのうちいずれかのノードであるかを判断する状態である。第２状態は、レイのデータ及びノードのデータを用いてレイ及びノードが示す空間の間の交差を検査する状態である。ここで、交差の検査はレイがノードが示す空間を通過するか否かを検査する。第３状態は、ノードのデータに対するスタック動作を処理する状態である。ノードのデータに対するスタック動作は、ノードのデータをスタック内にプッシュする動作及びスタックからノードのデータをポップする動作を含んでもよい。第３状態で処理されるノードは、次にＴＲＶユニットが次に訪問するノードであってもよい。
【００７３】
ツリーの階層的な探索過程において、状態の転移は非決定的（ｎｏｎ−ｄｅｔｅｒｍｉｎｉｓｔｉｃ）であってもよい。すなわち、パイプラインの状態が常に第１状態、第２状態及び第３状態の順で転移することはない。パイプライン状態の転移は訪問されたノードのタイプ、交差検査の結果、及びパイプラインの現在状態のうちの１つ以上によって毎度異なるよう変更され得る。
【００７４】
非決定的な転移に起因して、レイはパイプラインのうち一部では探索が処理されず、パイプライン内でバイパスしてもよい。下記の図３〜図６を参照してバイパスが説明される。
【００７５】
図３は、一例に係るＴＲＶのパイプラインのバイパスを説明する。図３において、太い矢印はレイのデータの移動を示す。点線の矢印はレイのデータのバイパスを示す。
【００７６】
ＴＲＶユニット３００に入力されたレイのデータは、入力バッファ３１０を経てパイプライン３２０に入力される。
【００７７】
パイプライン３２０は複数のサブパイプラインを含む。パイプライン３２０は、第１サブパイプライン３２２、第２サブパイプライン３２４及び第３サブパイプライン３２６を含む。第１サブパイプライン３２２、第２サブパイプライン３２４及び第３サブパイプライン３２６は、それぞれ前述された第１状態、第２状態及び第３状態に対応する。すなわち、第１サブパイプライン３２２は、パイプライン３２０の状態が第１状態であるとき動作する部分を示す。第２サブパイプライン３２４は、パイプライン３２０の状態が第２状態であるとき動作する部分を示す。第３サブパイプライン３２６は、パイプライン３２０の状態が第３状態であるとき動作する部分を示す。
【００７８】
例えば、第１サブパイプライン３２２は、ノードのデータをキャッシュからフェッチしてもよく、ノードがリーフノード及び内部ノードのいずれかのノードであるかを判断する。第２サブパイプライン３２４は、レイのデータ及びノードのデータを用いてレイ及びノードが示す空間の間の交差を検査する。第３サブパイプライン３２６は、ノードのデータに対するスタック動作を処理する。
【００７９】
図３において、第１サブパイプライン３２２及び第２サブパイプライン３２４では、レイまたはレイのデータに対する作業が行われる。一方、第３サブパイプライン３２６で、レイまたはレイのデータは単にバイパスされる。
【００８０】
例えば、図３は、ノードデータフェッチ及び左側子の訪問過程を示す。第１サブパイプライン３２２で、ノードのデータがフェッチされる。第１サブパイプライン３２２で、ノードがリーフノード及び内部ノードのうちいずれかのノードであるかが判断される。ノードが内部ノードであれば、ノードの左側子ノード及びレイ間の交差検査のためにパイプライン３２０の状態が第２状態に転移される。第２サブパイプライン３２４で、左側子ノード及びレイ間の交差検査が行われる。前記交差検査の後には、ノードの右側子ノード及びレイ間の交差検査が行われる。しかし、第２サブパイプライン３２４と接続された第３サブパイプライン３２６は、第３状態のためのものであるため、第３サブパイプライン３２６はレイに対するいずれの作業も行わず、レイのデータを第１出力バッファ３３０に伝達する。
【００８１】
バイパスされたレイのデータは、第１出力バッファ３３０を経て再び入力バッファ３１０に再入力される。その後、パイプライン３２０によって右側子ノード及びレイ間の交差検査が行われる。
【００８２】
第２出力バッファ３４０及び第３出力バッファ３５０は図３で説明される動作では用いられない。
【００８３】
図４は、一例に係るパイプラインのバイパスを説明する。図４において、第１サブパイプライン３２２でレイまたはレイのデータが単にバイパスされる。第２サブパイプライン３２４及び第３サブパイプライン３２６ではレイまたはレイのデータに対する作業が行われる。
【００８４】
例えば、図４は、右側子訪問及びスタックポップ過程を示す。ノードのデータのフェッチが必要ではないため、第１サブパイプライン３２２で、レイまたはレイのデータはバイパスされる。第２サブパイプライン３２４で、右側子ノード及びレイ間の交差検査が行われる。第３サブパイプライン３２６で、スタックの動作が行われる。スタックの動作は探索されるノードのデータをスタックからポップするものであってもよい。ポップされたノードの探索のために、レイのデータは第１出力バッファ３３０を経て再び入力バッファ３１０に再入力される。
【００８５】
第２出力バッファ３４０及び第３出力バッファ３５０は図４で説明される動作では用いられない。
【００８６】
上記の図３を参照して説明された技術的な内容がそのまま適用されるため、より詳細な説明は省略する。
【００８７】
図５は、一例に係るパイプラインのバイパスを説明する。図５において、第１サブパイプライン３２２及び第２サブパイプライン３２４では、レイまたはレイのデータに対する作業が行われる。一方、第３サブパイプライン３２６で、レイまたはレイのデータは単にバイパスされる。
【００８８】
例えば、図５は、ノードのデータフェッチ、リーフノード訪問及びＩＳＴユニットへの出力過程を示す。第１サブパイプライン３２２で、ノードのデータがフェッチされる。第１サブパイプライン３２２で、ノードがリーフノード及び内部ノードのうちいずれかのノードであるかを判断する。ノードがリーフノードであれば、ノード及びレイ間の交差検査のためにパイプライン３２０の状態が第２状態に転移する。第２サブパイプライン３２４で、ノード及びレイ間の交差検査が行われる。ノード及びレイが交差すると、レイのデータはＩＳＴユニットに伝達される。第２サブパイプライン３２４と接続された第３サブパイプライン３２６は、第３状態のためのものであるため、第３サブパイプライン３２６はレイに対するいずれの作業も行わず、レイのデータを第２出力バッファ３４０に伝達する。
【００８９】
第１出力バッファ３３０及び第３出力バッファ３５０は図５を参照して説明される動作では用いられない。
【００９０】
上記の図３及び図４を参照して説明された技術的な内容がそのまま適用されるため、より詳細な説明は省略する。
【００９１】
図６は、一例に係るパイプラインのバイパスを説明する。図６において、第１サブパイプライン３２２では、レイまたはレイのデータに対する作業が行われる。一方、第２サブパイプライン３２４及び第３サブパイプライン３２６で、レイまたはレイのデータは単にバイパスされてもよい。
【００９２】
例えば、図６は、ＩＳＴユニットから入力されたレイのデータをシェーディングユニットに出力する過程を示す。第１サブパイプライン３２２で、ノードのデータがフェッチされる。ノードのデータはシェーディングユニット２９０に伝えられる。第２サブパイプライン３２４及び第３サブパイプライン３２６はそれぞれ第２状態及び第３状態のためのものであるため、第２サブパイプライン３２４及び第３サブパイプライン３２６はレイに対するいずれの作業も行わず、レイのデータを第３出力バッファ３５０に伝達する。
【００９３】
第１出力バッファ３３０及び第２出力バッファ３４０は図６を参照して説明される動作では用いられない。
【００９４】
上記の図３ないし図５を参照して説明された技術的な内容がそのまま適用されるため、より詳細な説明は省略する。
【００９５】
図３〜図６を参照して前述されたように、パイプライン３２０内の接続された全てのサブパイプラインが常にレイまたはレイのデータに対する作業を処理することはない。すなわち、状態の分岐により、一部のサブパイプラインはレイのデータを単にバイパスのみを行ってもよい。言い換えれば、１つ以上のサブパイプラインは、１つ以上の他のサブパイプラインが動作する間に活性化されないこともある。結果的に、１レイ当たり１サイクルのパイプライン処理比率は維持されるが、パイプライン３２０内で発生する不要なデータの伝達によって有効処理率が減少することがあり、電力が消費される。したがって、有効処理率の向上及び電力消費の減少のために、サブパイプラインの分離及び分離されたサブパイプラインの並列実行が考慮される。
【００９６】
図７は、一実施形態に係るＴＲＶユニットの構造図である。
【００９７】
ＴＲＶユニット７００は、ツリーＡＳを用いる。図２を参照して前述した第１ＴＲＶユニット２４０−１、第２ＴＲＶユニット２４０−２、及び第Ｎ  ＴＲＶユニット２４０−３はそれぞれＴＲＶユニット７００であってもよい。
【００９８】
ＴＲＶユニット７００は、複数のサブパイプラインユニットを含む。複数のサブパイプラインユニットそれぞれはツリーＡＳを用いるレイ探索のために要求される互いに異なる作業を処理する。複数のサブパイプラインユニットは互いに並列で動作してもよい。複数のサブパイプラインユニットのそれぞれは、互いに異なるレイに対する探索を並列処理する。言い換えれば、複数のサブパイプラインユニットのそれぞれは、相異なるレイ上の動作（例えば、相異なる動作）を同時に行う。
【００９９】
複数のサブパイプラインユニットは、第１サブパイプラインユニット７３２、第２サブパイプラインユニット７３４及び第３サブパイプラインユニット７３６を含む。第１サブパイプラインユニット７３２、第２サブパイプラインユニット７３４及び第３サブパイプラインユニット７３６はそれぞれ１つ以上のパイプラインステージを含んでもよい。
【０１００】
複数のサブパイプラインユニットはそれぞれパイプラインの状態のうち１つの状態に対応する。例えば、第１サブパイプラインユニット７３２、第２サブパイプラインユニット７３４及び第３サブパイプラインユニット７３６は、それぞれ図２を参照して前述した第１状態、第２状態、及び第３状態に対応してもよい。
【０１０１】
ＴＲＶユニット７００は、第１クロスバー７１０、キャッシュ７４０、スタック７５０、第２クロスバー７６０、第１出力バッファ７７４及び第２出力バッファ７７６をさらに含む。
【０１０２】
ＴＲＶユニット７００は、複数の入力バッファをさらに含んでもよい。複数の入力バッファは、それぞれ複数のサブパイプラインユニットのうち１つのサブパイプラインユニットに分配された１つ以上のレイのデータを格納する。言い換えれば、各サブパイプラインユニットの入口には別個の入力バッファがあってもよい。入力バッファは、格納されたレイのデータをＴＲＶユニット７００に送信してもよい。
【０１０３】
複数の入力バッファは第１入力バッファ７２２、第２入力バッファ７２４及び第３入力バッファ７３６を含んでもよい。第１入力バッファ７２２、第２入力バッファ７２４及び第３入力バッファ７３６は、それぞれ第１サブパイプラインユニット７３２、第２サブパイプラインユニット７３４及び第３サブパイプラインユニット７３６にレイのデータを送信してもよい。
【０１０４】
複数の入力バッファ、第１出力バッファ７７４、及び第２出力バッファ７７６は、先入先出（Ｆｉｒｓｔ−Ｉｎ  Ｆｉｒｓｔ−Ｏｕｔ；ＦＩＦＯ）で動作してもよい。
【０１０５】
第１サブパイプラインユニット７３２は、レイが訪問したツリーＡＳ構造のノードのデータをフェッチしてもよく、ノードがリーフノード及び内部ノードのうちいずれかのノードであるかを判断する。第１サブパイプラインユニット７３２は、前述された第１サブパイプライン３２２の作業を行う。
【０１０６】
第２サブパイプラインユニット７３４は、レイのデータ及びノードのデータを用いてレイ及びノードが示す空間の間の交差を検査する。第２サブパイプラインユニット７３４は、前述された第２サブパイプライン３２４の作業を行う。
【０１０７】
第３サブパイプラインユニット７３６は、ノードのデータに対するスタック動作を処理する。第３サブパイプラインユニット７３６は、前述された第３サブパイプライン３２６の作業を行う。
【０１０８】
キャッシュ７４０は、第１サブパイプラインユニット７３２にノードのデータを提供する。キャッシュ７４０は、図２を参照して前述された第１キャッシュ２８２からＡＳのデータをキャッシュして格納してもよい。ＡＳのデータはＡＳのノードのデータを含んでもよい。
【０１０９】
スタック７５０は、第３サブパイプラインユニット７３６にスタック動作を提供する。スタック７５０は、第３サブパイプラインユニット７３６がプッシュするデータを格納し、第３サブパイプラインユニット７３６に第３サブパイプラインユニット７３６がポップするデータを提供する。スタック７５０は、後入選出（Ｌａｓｔ−Ｉｎ  Ｆｉｒｓｔ−Ｏｕｔ；ＬＩＦＯ）で動作してもよい。
【０１１０】
第１クロスバー７１０は、ＴＲＶユニット７００に入力されたレイのデータを複数のサブパイプラインユニットのうち前記入力されたレイの状態に対応するサブパイプラインユニットに分配する。レイの状態に応じてレイに加えられなければならない作業が決定される。例えば、ＴＲＶユニット７００に入力されたレイは複数のサブパイプラインユニットのうち１つのサブパイプラインによって処理され、レイの状態はレイを処理するサブパイプラインユニットを示す。
【０１１１】
複数のサブパイプラインユニットそれぞれによってレイのデータに対して行われる作業または演算によってレイの状態が変更され得る。
【０１１２】
第１クロスバー７１０は、入力されたレイのデータを複数の入力バッファのうち任意の入力バッファにルーティングするバッファであってもよい。
【０１１３】
第２クロスバー７６０は、複数のサブパイプラインユニットのうち１つのサブパイプラインユニットから出力されたレイのデータをレイの状態に基づいて前記１つのサブパイプラインユニットに再送信したり、シェーディングユニット２９０または交差検査ユニットに送信してもよい。第２クロスバー７６０から交差検査ユニットに送信されるレイのデータは第２バッファ２５０を経由して交差検査ユニットに送信される。
【０１１４】
第１クロスバー７１０及び第２クロスバー７６０によって複数のサブパイプラインユニットはフィードバックラインに接続される。
【０１１５】
第１出力バッファ７７４は、第２クロスバー７６０から出力されてシェーディングユニット２９０に送信される１つ以上のレイのデータを格納する。第２クロスバー７６０からシェーディングユニット２９０に送信されるレイのデータは、第１出力バッファ７７４を経由してシェーディングユニット２９０に送信される。
【０１１６】
第２出力バッファ７７６は、第２クロスバー７６０から出力されてＩＳＴユニットに送信される１つ以上のレイのデータを格納する。第２クロスバー７２０からシェーディングユニット２９０に送信されるレイのデータは、第２出力バッファ７７６を経由してＩＳＴユニットに送信される。
【０１１７】
複数の入力バッファそれぞれで、入力バッファに対応するサブパイプラインユニットで処理されなければならないレイが待機することがある。したがって、複数の入力バッファ内に適する個数のレイがバッファリングされる場合、複数のサブパイプラインユニットに同時にレイが発給（ｉｓｓｕｅ）される。したがって、複数のサブパイプラインユニットの完全な並列実行が可能になる。レイの探索アルゴリズムの特性上、特定のサブパイプラインユニットで処理されなければならないレイのデータが枯渇されるようにレイの状態が転換されないことがある。したがって、複数のサブパイプラインユニット間の並列性は常に保持される。
【０１１８】
第１サブパイプラインユニット７３２、第２サブパイプラインユニット７３４、及び前記第３サブパイプラインユニット７３６のうち少なくとも１つは複数であってもよい。レイの状態の発生頻度は互いに異なってもよい。したがって、１つのサブパイプラインを複数で複製することで複数のサブパイプラインユニット間の負荷不均衡が回避されることができ、処理率が向上し得る。
【０１１９】
第１サブパイプラインユニット７３２の個数、第２サブパイプラインユニット７３４の個数、及び第３サブパイプラインのユニット７３６の個数は、ＴＲＶユニット７００によってレイが処理されるため平均または他の統計基盤の第１サブパイプラインユニット７３２の使用回数、第２サブパイプラインユニット７３４の使用回数、及び第３サブパイプラインユニット７３８の使用回数に基づいて決定されてもよい。または、第１サブパイプラインユニット７３２、第２サブパイプラインユニット７３４、及び第３サブパイプラインユニット７３６それぞれの個数は、サブパイプラインユニットの使用頻度の比率に基づいて決定されてもよい。
【０１２０】
図８は、一例に係る複数の第１サブパイプラインユニットが用いられる構成を示す。図８において、第１入力バッファ７２２及び第１サブパイプラインユニット７３２はそれぞれ２つずつ示されている。キャッシュ７４０は、それぞれの第１サブパイプラインユニット７３２にノードのデータを提供する。
【０１２１】
レイのデータが第１サブパイプラインユニット７３２によって処理される頻度が、第２サブパイプラインユニット７３４によって処理される頻度及び第３サブパイプラインユニット７３６によって処理される頻度よりも高い場合、ＴＲＶユニット７００は第１サブパイプラインユニット７３２を２つ以上用いてもよい。複数の第１サブパイプラインユニットによって複数のレイのデータが同時に処理されてもよい。したがって、高い頻度によって第１サブパイプラインユニット７３２がボトルネックになることを防止することができる。
【０１２２】
図９は、一例に係る複数の第２サブパイプラインユニットが用いられる構成を示す。図９において、第２入力バッファ７２４及び第２サブパイプラインユニット７３４はそれぞれ２つずつ示されている。
【０１２３】
レイのデータが第２サブパイプラインユニット７３４によって処理される頻度が、第１サブパイプラインユニット７３２によって処理される頻度及び第３サブパイプラインユニット７３６によって処理される頻度よりも高い場合、ＴＲＶユニット７００は第２サブパイプラインユニット７３４を２つ以上用いてもよい。複数の第２サブパイプラインユニットによって複数のレイのデータが同時に処理されてもよい。
【０１２４】
大体的に通常の技術者はＴＲＶユニット７００が複数のサブパイプライン内の２つ以上のサブパイプラインユニット（例えば、複数の第１サブパイプラインユニット及び複数の第２サブパイプラインユニット、複数の第２サブパイプラインユニット及び複数の第３サブパイプラインユニット、複数の第１サブパイプラインユニット及び複数の第２サブパイプラインユニット、及び複数の第３サブパイプラインユニットなど）を用いるものと理解できる。サブパイプラインユニットの個数は、レイデータの処理の回数、レイデータ処理のために要求される時間の量、使用の相対的な比率及び適合及び／または効率の方式によって負荷のバランスを取るために使用される他の統計的な情報によって変わり得る。
【０１２５】
図１０は、一実施形態に係るレイ探索方法のフローチャートである。
【０１２６】
ステップＳ１０１０において、第１クロスバー７１０は、ＴＲＶユニット７００に入力されたレイのデータを第１サブパイプラインユニット７３２、第２サブパイプラインユニット７３４及び第３サブパイプラインユニット７３６のうち入力されたレイの状態に対応するサブパイプラインユニットに分配する。レイのデータは分配された少なくとも１つのサブパイプラインユニットに出力されてもよい。
【０１２７】
分配されたサブパイプラインユニットが第１サブパイプラインユニット７３２、第２サブパイプラインユニット７３４及び第３サブパイプラインユニット７３６のいずれかのサブパイプラインユニットであるかに応じて、ステップＳ１０２２、ステップＳ１０２４及びステップＳ１０２６のうち１つのステップが行われる。
【０１２８】
ステップＳ１０２２において、第１入力バッファ７２２は、第１クロスバー７１０から出力されたレイのデータを格納する。第１入力バッファ７２２は、１つ以上のレイのデータを格納する。第１入力バッファ７２２は、格納された１つ以上のレイのデータを先入先出の方式で第１サブパイプラインユニット７３２に送信する。
【０１２９】
ステップＳ１０３２において、第１サブパイプラインユニット７３２は、レイが訪問したツリーＡＳのノードのデータをフェッチする。第１サブパイプラインユニット７３２は、ノードがリーフノード及び内部ノードのいずれかのノードであるかを判断する。
【０１３０】
ステップＳ１０４０において、キャッシュ７４０は、第１サブパイプラインユニット７３２にノードのデータを提供する。
【０１３１】
前記フェッチまたは判断の完了後、ステップＳ１０６０において、第１サブパイプラインユニット７３２は第２クロスバー７６０にレイのデータを出力する。
【０１３２】
ステップＳ１０２４において、第２入力バッファ７２４は、第１クロスバー７１０から出力されたレイのデータを格納する。第２入力バッファ７２４は、１つ以上のレイのデータを格納してもよい。第２入力バッファ７２４は、格納された１つ以上のレイのデータを先入先出の方式で第２サブパイプラインユニット７３４に送信する。
【０１３３】
ステップＳ１０３４において、第２サブパイプラインユニット７３４は、レイ及びノードのデータを用いてレイ及びノードが示す空間の間の交差を検査する。
【０１３４】
前記検査の完了後、ステップＳ１０６０において、第２サブパイプラインユニット７３４は、第２クロスバー７６０にレイのデータを出力する。
【０１３５】
ステップＳ１０２６において、第３入力バッファ７２６は、第１クロスバー７１０から出力されたレイのデータを格納する。第３入力バッファ７２６は、１つ以上のレイのデータを格納してもよい。第３入力バッファ７２６は、格納された１つ以上のレイのデータを先入先出の方式で第３サブパイプラインユニット７３６に送信する。
【０１３６】
ステップＳ１０３６において、第３サブパイプラインユニット７３６は、ノードのデータに対するスタック動作を処理する。前記動作の実行後、ステップＳ１０６０で、第３サブパイプラインユニット７３６は第２クロスバー７６０にレイのデータを出力する。
【０１３７】
前述されたステップＳ１０３２／１０４０、ステップＳ１０３４及びステップＳ１０３６は互いに異なるレイに対する探索を並列処理する。すなわち、ステップＳ１０３２／１０４０、ステップＳ１０３４及びステップＳ１０３６で、複数のレイのデータがそれぞれ第１サブパイプラインユニット７３２、第２サブパイプラインユニット７３４及び第３サブパイプラインユニット７３６のうちの１つ以上によって並列処理される。
【０１３８】
第１サブパイプラインユニット７３２、第２サブパイプラインユニット７３４及び第３サブパイプラインユニット７３６のうちの１つ以上は複数であってもよい。第１サブパイプラインユニット７３２の個数、第２サブパイプラインユニット７３４の個数及び第３サブパイプラインユニット７３６の個数は、ＴＲＶユニット７００によってレイが処理されるために平均的または統計的に要求される第１サブパイプラインユニット７３２の使用回数、第２サブパイプラインユニット７３４の使用回数及び第３サブパイプラインユニット７３８の使用回数に基づいて決定される。
【０１３９】
ステップＳ１０３２／Ｓ１０４０、ステップＳ１０３４またはステップＳ１０３６が実行された後、ステップＳ１０６０が行われてもよい。
【０１４０】
ステップＳ１０６０において、第２クロスバー７６０は、第１サブパイプラインユニット７３２、第２サブパイプラインユニット７３４及び第３サブパイプラインユニット７３６のうち１つのサブパイプラインユニットから出力されたレイのデータをレイの状態に基づいて、前記１つのサブパイプラインユニットに再送信したり、シェーディングユニット２９０または少なくとも１つのＩＳＴユニットに送信してもよい。
【０１４１】
レイのデータがサブパイプラインユニットに再送信された場合、ステップＳ１０１０が行われる。レイのデータがシェーディングユニット２９０に送信された場合、ステップＳ１０７４が行われる。レイのデータが少なくとも１つのＩＳＴユニットに送信された場合、ステップＳ１０７６が行われる。
【０１４２】
ステップＳ１０７４において、第１出力バッファ７７４は、第２クロスバー７６０から出力されてシェーディングユニット２９０に送信される１つ以上のレイのデータを格納する。
【０１４３】
第１出力バッファ７７４は、格納された１つ以上のレイのデータを先入先出の方式でシェーディングユニット２９０に送信する。
【０１４４】
ステップＳ１０７６において、第２出力バッファ７７６は、第２クロスバー７６０から出力されて少なくとも１つのＩＳＴユニットのうち１つのＩＳＴユニットに送信される１つ以上のレイのデータを格納する。
【０１４５】
第２出力バッファ７７６は、格納された１つ以上のレイのデータを先入先出の方式で少なくとも１つのＩＳＴユニットのうち１つのＩＳＴユニットに送信する。
【０１４６】
上記図１ないし図９を参照して説明された技術的な内容がそのまま適用されるため、より詳細な説明は省略する。
【０１４７】
図１１は、一実施形態に係るレイトレーシング方法のフローチャートである。
【０１４８】
ステップＳ１１１０において、レイ生成ユニット２１０はレイを生成する。生成されたユニットは、レイトレーシングユニット２２０に入力されてもよい。
【０１４９】
ステップＳ１１２０において、少なくとも１つのＴＲＶユニットは、それぞれＡＳを探索する。ここで、ＡＳはツリーＡＳであってもよい。ステップＳ１１１０は図１０を参照して前述されたステップＳ１０１０ないしＳ１０７６を含んでもよい。
【０１５０】
ステップＳ１１３０において、少なくとも１つのＩＳＴユニットそれぞれは、ＡＳを用いてシーンオブジェクト及びレイ間の交差有無を検査する。
【０１５１】
ステップＳ１１４０において、シェーディングユニット１１４は、レイに対応するピクセルのカラーを算出する。シェーディングユニット１１４０は、レイと交差する可視のシーンオブジェクトのカラーに基づいてレイが向かう２Ｄスクリーン内の特定ピクセルのカラーを算出する。
【０１５２】
ステップＳ１１１０、ステップＳ１１２０、ステップＳ１１３０及びステップＳ１１４０は、それぞれ図２を参照して説明したレイ生成１５０、ＡＳ探索１５５、交差検査１６０及びシェーディング１６５を処理する。
【０１５３】
上記図１ないし図１０を参照して説明された技術的な内容がそのまま適用されるため、より詳細な説明は省略する。
【０１５４】
上述された実施形態に係るレイトレーシングを行う装置及び方法は１つ以上のプロセッサを用いることができる。１つ以上のプロセッサは、ＧＰＵ、マイクロプロセッサー、中央処理装置（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ；ＣＰＵ）、デジタル信号プロセッサ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ；ＤＳＰ）またはアプリケーション−特有集積回路（Ａｐｐｌｉｃａｔｉｏｎ−Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ；ＡＳＩＣ）を含んでもよく、このようなプロセシングデバイスまたは他のプロセシングデバイスの部分または組合を含んでもよい。
【０１５５】
ここで用いられた用語「モジュール」及び「ユニット」はＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）またはＡＳＩＣのような特定のタスクを行う、ソフトウェアまたはハードウェア構成要素または装置を言及することができるが、これに制限されることはない。モジュールまたはユニットは住所指定可能な（ａｄｄｒｅｓｓａｂｌｅ）格納媒体内に存在するよう構成されてもよく、１つ以上のプロセッサ上で行われるように構成されてもよい。したがって、モジュールまたはユニットは、例示的な方式でソフトウェア構成要素、オブジェクト−指向（ｏｂｊｅｃｔ−ｏｒｉｅｎｔｅｄ）ソフトウェア構成要素、クラス構成要素及びタスク構成要素、プロセス、関数、属性、手続き（ｐｒｏｃｅｄｕｒｅ）、サブルーチン（ｓｕｂｒｏｕｔｉｎｅ）、プログラムコードのセグメント、ドライバ、ファームウェア、マイクロコード、回路、データ、データベース、データ構造体、テーブル、配列及び変数のような構成要素を含んでもよい。構成要素及びモジュール／ユニット内で提供される機能はさらに少ない構成要素及びモジュール／ユニットから組合わせることができ、追加的な構成要素及びモジュールにさらに分離されてもよい。
【０１５６】
実施形態に係る方法は、多様なコンピュータ手段によって行うことができるプログラム命令の形態で実現されても良く、かかるプログラム命令は、コンピュータ読み出し可能媒体に記録されてもよい。前記コンピュータ読み出し可能媒体は、プログラム命令、データファイル、データ構造などを単独または組み合わせたものを含んでもよい。前記媒体に記録されるプログラム命令は、本発明のために特別に設計して構成されたものでもよく、コンピュータソフトウェア分野の技術を有する当業者にとって公知のものであり使用可能なものであってもよい。
【０１５７】
以上のように本発明を限定された実施形態と図面によって説明したが、本発明は、上記の実施形態に限定されることなく、本発明が属する分野における通常の知識を有する者であれば、このような記載から多様な修正及び変形が可能である。
【０１５８】
したがって、本発明の範囲は、説明された実施形態に限定されて定められるものではなく、特許請求の範囲及び特許請求の範囲と均等なものなどによって定められるものである。
【図１】
2014038623.tif 000003
【図２】
2014038623.tif 000004
【図３】
2014038623.tif 000005
【図４】
2014038623.tif 000006
【図５】
2014038623.tif 000007
【図６】
2014038623.tif 000008
【図７】
2014038623.tif 000009
【図８】
2014038623.tif 000010
【図９】
2014038623.tif 000011
【図１０】
2014038623.tif 000012
【図１１】
2014038623.tif 000013
【外国語明細書】
2014038623000001.pdf