(58)【調査した分野】(Int.Cl.,DB名)
前記複数のサブパイプラインユニットそれぞれは、互いに異なるレイに対する探索を並列で処理するように適合化されたことを特徴とする請求項1に記載のレイ探索ユニット。
複数のサブパイプラインユニットは、レイが訪問した前記ツリー加速構造のノードのデータをフェッチする第1サブパイプラインユニット、前記レイのデータ及び前記ノードのデータを用いて前記レイ及び前記ノードが示す空間の間の交差を検査する第2サブパイプラインユニット、及び前記ノードのデータに対するスタック動作を処理する第3サブパイプラインユニットを含むことを特徴とする請求項1に記載のレイ探索ユニット。
前記第1サブパイプラインユニット、前記第2サブパイプラインユニット、及び前記第3サブパイプラインユニットのうちの1つ以上は複数であることを特徴とする請求項3に記載のレイ探索ユニット。
前記第1サブパイプラインユニットの個数、前記第2サブパイプラインユニットの個数、及び前記第3サブパイプラインユニットの個数は、前記レイ探索ユニットによってレイが処理されるために要求される前記第1サブパイプラインユニットの使用回数、前記第2サブパイプラインユニットの使用回数、及び前記第3サブパイプラインユニットの使用回数に基づいて決定されることを特徴とする請求項3に記載のレイ探索ユニット。
【発明を実施するための形態】
【0031】
以下、添付する図面を参照しながら実施形態を詳細に説明する。各図面に提示された同一の参照符号は同一の部材を示す。
【0032】
以下、用語「レイ」はレイトレーシングの対象である「レイオブジェクト」、「レイを示すデータ構造」、「レイ情報」または「レイと関連するデータ」を意味し、相互代替されて使用されてもよい。
【0033】
以下、用語「シェーディングユニット」は「シェーダ」としても示してもよい。
【0034】
図1は、一実施形態に係るレイトレーシングを説明する。AS構築110は、電子装置内でASが構築される動作または過程を示す。電子装置は、コンピュータ、パーソナルコンピュータ、ポータブルコンピュータ、モバイル電話のようなモバイルデバイス、スマートフォン、個人メディアプレーヤー、タブレット及びこれと類似するものなどで実現される。一般に電子装置は、ここに開示される実施形態によってレイトレーシングを行うことが可能な任意装置であってもよい。電子装置は、レイトレーシングを行うためのグラフィックプロセシングユニット(Graphics Processing Unit;GPU)を含む。AS構築110は、レイトレーシングの前処理(pre−processing)であってもよい。AS構築110は、3次元空間を示す階層的ツリーを生成するものであってもよい。レイトレーシングの対象となる3D空間が階層的ツリーの形態で生成される。3Dの空間はシーンであってもよい。
【0035】
外部メモリ120は、AS130及び幾何データ135を包括、格納、または提供してもよい。外部メモリ120は、例えば、ROM(Read Only Memory)、RAM(Random Access Memory)、PROM(Programmable Read Only Memory)、EPROM(Erasable Programmable Read Only Memory)またはフラッシュメモリのような不揮発性メモリデバイス、RAMのような揮発性メモリデバイス、またはハードディスクまたは光学ディスクのような格納媒体を用いて実現されてもよい。しかし、本発明はこれに制限されることはない。さらに、外部メモリは、有線またはネットワークを介してAS130及び幾何データ135を提供してもよい。AS130はAS構築110によって生成されたASであってもよい。AS130は、ツリー構造体を用いるツリーASであってもよい。例えば、AS130はkdツリーまたはBVHであってもよい。kdツリーは、空間分割(space−partitioning)データ構造体のタイプを示してもよい。BVHは、幾何オブジェクトがバウンディングボリューム内に取り囲まれたツリー構造体のタイプを示してもよい。バウンディングボリュームは相異なる形状を有してもよい。また、AS130はグリッドであってもよい。AS構築110は、3D空間及び3D空間が分割された空間の一部(sub−division)を階層的なツリー形態に示すためのツリー構造体を生成してもよい。
【0036】
AS130は2進ツリーであってもよい。AS130は1つ以上のノードを有してもよい。AS130の1つ以上のノードそれぞれは、ルートノード、内部ノード、またはリーフノードであってもよい。ノードのタイプは、ルートノード、内部ノード及びリーフノードであってもよい。ここで、ルートノードは内部ノードと見なされてもよい。AS130のノードそれぞれは空間を示す。ノードが示す空間は全体空間の一部であってもよい。ノードが示す空間は2つの点などに表現されるバウンディングボックス(Bounding Box;BB)または軸整列されたバウンディングボックス(Axis−Aligned Bounding Box;AABB)であってもよい。2つの点はバウンディングボックスが示す六面体の互いに対称である頂点であってもよい。六面体の面はそれぞれx軸、y軸、z軸のうち1つの軸に平行する。例えば、全体空間の大きさがX、Y、Zであるとき、AS130のルートノードが示す空間は、全体空間を示す点0、0、0及び点X、Y、Zに表現される。
【0037】
ルートノードまたは内部ノードの子ノードは、親ノードが示す空間の一部を分割する。前記分割は、空間の一部をx軸、y軸、またはz軸に分割する。例えば、ルートノードの左側子ノード及び右側子ノードは、ルートノードが示す空間をx軸上の点を基準として分割してもよい。分割によって空間の一部が生成される。x軸上の点x
0にルートノードが示す空間が分割されるとき、ルートノードの左側子が示す空間は点0、0、0及び点x
0、Y、Zに表現される。また、ルートノードの右側子が示す空間は点x
0、Y、Z及びX、Y、Zに表現されてもよい。
【0038】
ノードが示す空間はノードのレベルに応じて分割される。例えば、第3n+2レベルの子ノードは第3n+1レベルの親ノードが示す空間をx軸上の点を基準として分割してもよい。第3n+3レベルの子ノードは、第3n+2レベルの親ノードが示す空間をy軸上の点を基準として分割してもよい。第3n+4レベルの子ノードは、第3n+3レベルの親ノードが示す空間をz軸上の点を基準として分割してもよい。ここで、nは0以上の整数であってもよく、ルートノードは第1レベルのノードであってもよい。
【0039】
幾何データ135は、3D空間内のシーンオブジェクトのデータを示す。シーンオブジェクトのプリミティブは三角形であってもよい。または、シーンオブジェクトは三角形の形態に構築されてもよい。しかし、プリミティブは、例えば、平面、球、円錐、円筒、トーラス(torus)、及びディスクなどのような異なる幾何または多角形の形態を有する。論議の便宜のために、ここで開示された実施形態はプリミティブを三角形に示す。プリミティブは他の形態を取ることに注目する。
【0040】
レイトレーサー140は、レイ生成150、AS探索155、交差検査160及びシェーディング165を含む動作を処理する。
【0041】
レイ生成150の動作よって基準視点から3D空間に向かうレイが生成される。レイは基準視点から2Dスクリーン内の特定ピクセルに向かってもよい。
【0042】
2Dスクリーン内のピクセルそれぞれに対してレイ生成150が繰り返して行われる。言い換えれば、仮想のレイが原点(origin)から2Dスクリーン内の各ピクセルに発射されてもよい。
【0043】
AS探索155の動作によってAS130を用いてレイの経路が追跡される。AS探索150は、レイが通過するAS130のツリーノードを探索して行われてもよい。ここで、レイがノードを通過することはレイがノードが示す空間を通過することを意味する。
【0044】
AS探索155の反復によってAS130のリーフノードに到達する。AS130のリーフノードに到達すると、到達したリーフノードに対応する1つ以上のシーンオブジェクトが特定される。ここで、リーフノードに対応するシーンオブジェクトは、リーフノードが示す空間内に位置するシーンオブジェクトであってもよい。言い換えれば、リーフノードに対応するシーンオブジェクトは、シーン内の全体シーンオブジェクトのうち全てまたは一部がリーフノードが示す空間内に存在するシーンオブジェクトであってもよい。リーフノードのデータは、リーフノードに対応するシーンオブジェクトのデータまたは三角形のデータを含んでもよい。言い換えれば、リーフノードは、対応するシーンオブジェクトまたはプリミティブ(例えば、三角形)を含んでもよい。または、リーフノードは、対応するシーンオブジェクトまたは三角形を示す。
【0045】
後述される実施形態において、AS探索155は、複数のサブパイプラインユニットを含むレイ探索(Traversal;TRV)ユニットによって行われてもよい。レイ探索ユニットを以下TRVユニットと略述する。
【0046】
交差検査160は複数のシーンオブジェクトに対する交差検査を行う。
【0047】
後述されるように、交差検査160はレイ交差検査(Intersection Test;IST)ユニットによって行われる。
【0048】
シェーディング165の動作によってレイと交差する可視であるシーンオブジェクトのカラーに基づいてレイが向かう2Dスクリーン内の特定ピクセルのカラーが算出される。
【0049】
2Dスクリーン内のピクセルのカラーが決定されることによってレンダリングイメージが生成される。
【0050】
図2は、一実施形態に係るグラフィック処理装置及びグラフィック処理装置と関連する個体の構造図である。
図2は、レイトレーシングの実行のためのレンダリングハードウェアまたはグラフィック処理装置の構造を示す。
【0051】
図2において、レイ生成ユニット210、レイトレーシングユニット220、第1キャッシュ282、第2キャッシュ284、バス286、外部メモリ288及びシェーディングユニット290を示す。レイ生成ユニット210、第1キャッシュ282、第2キャッシュ284、及びシェーディングユニット290はグラフィック処理装置の構成要素であってもよい。すなわち、GPUは、レイ生成ユニット210、第1キャッシュ282、第2キャッシュ284及びシェーディングユニット290を含む。
【0052】
GPUまたはレイトレーシングユニット220は
図1を参照して前述されたレイトレーサー140であってもよい。外部メモリ288は、外部メモリ120であってもよい。レイ生成ユニット210はレイ生成150を行う。シェーディングユニット290はシェーディング165を行う。また、図示されるものと異なって、レイ生成ユニット210及びシェーディングユニット290はそれぞれレイトレーシングユニット220内に含まれる。レイ生成ユニット210はレイを生成する。レイ生成ユニット210は、生成されたレイのデータをレイトレーシングユニット220に提供する。レイ生成ユニット210は、レイのデータをレイトレーシングユニット220に提供する作業または個体を示す。
【0053】
レイトレーシングユニット220はレイの追跡を処理する。レイトレーシングユニット220は、追跡が処理されたレイのデータをシェーディングユニット290に提供する。
【0054】
シェーディングユニット290は、追跡が処理されたレイのデータに基づいて追跡されたレイに対するシェーディングを処理する。シェーディングユニット290は、レイの追跡が処理された後シェーディングを処理する作業または個体を示す。シェーディングは、2Dスクリーン内のピクセルに対して蓄積されたレイの追跡結果を合わせることによって前記ピクセルのカラーを最終的に決定することができる。
【0055】
第1キャッシュ282及び第2キャッシュ284はレイの追跡に関連する必要なデータのキャッシュを生成または格納する。レイの追跡を処理するために必要なデータは外部メモリ288内に格納されている。第1キャッシュ282及び第2キャッシュ284はそれぞれ外部メモリ288内に格納されたデータのキャッシュを生成または格納する。レイの追跡に関連するデータはバス286によって第1キャッシュ282及び外部メモリ288間で送信されてもよく、第2キャッシュ284及び外部メモリ288間で送信されてもよい。言い換えれば、第1キャッシュ282及び外部メモリ288の間と第2キャッシュ284及び外部メモリ288の間にはコネクション(wired connection)がある。ここで、第1キャッシュ282内に格納されるデータはAS130の一部であってもよく、第2キャッシュ284内に格納されるデータは幾何データ140の一部であってもよい。
【0056】
第1キャッシュ282は、後述されるTRVユニットのキャッシュにレイの探索を処理するために必要なデータを提供する。第2キャッシュ284は後述されるISTユニットのキャッシュにレイの交差検査を処理するために必要なデータを提供する。したがって、TRVユニットのキャッシュ及びISTユニットのキャッシュはそれぞれレベル1(level1)キャッシュであってもよく、第1キャッシュ282及び第2キャッシュ284はそれぞれレベル2キャッシュであってもよい。
【0057】
以下、レイトレーシングユニット220の構成要素について説明する。
【0058】
レイトレーシングユニット220は第1バッファ230、少なくとも1つのTRVユニット240−1ないし240−3、第2バッファ250、少なくとも1つのISTユニット260−1ないし260−3、及び第3バッファ270を含む。
【0059】
少なくとも1つのTRVユニットとして、第1TRVユニット240−1、第2TRVユニット240−2、及び第N TRVユニット240−3が示された。ここで、Nは1以上の整数であってもよい。少なくとも1つのISTユニットとして、第1ISTユニット260−1、第2ISTユニット260−2、及び第M ISTユニット260−3が示されている。ここで、Mは1以上の整数であってもよい。
【0060】
図2で、レイトレーシングユニット220は、AS130のルートノードから下位のノードへの階層的な探索によって、レイが最初に訪問するリーフノードを検索する。前記検索によってリーフノードが訪問されれば、レイトレーシングユニット220は、1)レイ及び2)リーフノードに対応するシーンオブジェクトまたは三角形間の交差検査を行う。ここで、リーフノードに対応するシーンオブジェクトまたは三角形は複数であってもよい。訪問されたリーフノード内でレイと交差する三角形が検索されない場合、レイトレーシングユニット220はツリーの探索を継続してレイと交差するプリミティブを検索する。言い換えれば、レイが三角形と交差しなければ、レイトレーシングユニット220はツリーの他の部分内のTRVがプリミティブ(例えば、シーンオブジェクトまたは三角形)がレイと交差するか否かを決定することを継続する。前記探索及び交差検査は、それぞれTRVユニット及びISTユニットによって行うことができる。少なくとも1つのISTユニットはツリーASを用いてシーンオブジェクト及びレイ間の交差有無を検査する。
【0061】
前述したことのようなレイの追跡特性のために、レイの追跡は多くの演算及び高いメモリ帯域幅を同時に要求する。このような要求は、訪問または交差検査が行われるごとに、外部メモリ288からノードのデータ、シーンオブジェクト、または三角形のデータがフェッチ(fetch)された後、演算が実行されなければならないことに起因する。したがって、探索及び交差検査にそれぞれ用いられるTRVユニット及びISTユニットはそれぞれキャッシュを含んでもよい。ノードのデータ、シーンオブジェクトのデータ、またはプリミティブのデータがキャッシュ内に存在しない場合、外部メモリ288からデータをフェッチするとき長い遅延時間が発生することがあり、レイの追跡性能は低下する。
【0062】
第1バッファ230は、レイ生成ユニット210及び複数のTRVユニット間のレイ送信を制御する。レイ生成ユニット210 は、レイトレーシングユニット220に入力された入力レイを格納し、入力レイを少なくとも1つのTRVユニットのうち1つのTRVユニットに分配する。入力レイは1つ以上であってもよい。1つ以上の入力レイは、順次レイトレーシングユニット220に入力されてもよい。第1バッファ230は、レイディスパッチ(dispatch)ユニットと命名されたり表現される。
【0063】
第1バッファ230は、少なくとも1つのTRVユニットそれぞれの入力バッファの使用可能の有無に基づいて入力レイをTRVユニットのうち1つのTRVユニットに分配する。
【0064】
少なくとも1つのTRVユニットのうち1つのTRVユニットから入力されるレイは、レイ生成ユニット210によって生成されたレイ、前記1つのTRVユニットによって探索が処理されたり処理されているレイ及びISTユニットによって交差検査が処理されたレイであってもよい。少なくとも1つのTRVユニットのうち1つのTRVユニットによって出力されるレイは、探索を処理した1つのTRVユニットに再び入力されてもよく、少なくとも1つのISTユニットのうち第2バッファ250によって選択されたISTユニットに入力されてもよく、シェーディングユニット290に入力されてもよい。
【0065】
第3バッファ270は、シェーディングユニット290から出力されるレイを格納する。第3バッファ270内に格納されたレイは1つ以上であってもよい。レイの探索が完了すると、レイのデータはTRVユニットからシェーディングユニット290に送信される。
【0066】
シェーディングユニット290に出力されるレイは第3バッファ270内で出力を待機する。言い換えれば、複数のレイは第3バッファ370に出力されてもよく、TRVが完了したとき複数のレイに関連するたデータはシェーディングユニット290に出力されてもよい。
【0067】
第2バッファ250は、少なくとも1つのTRVユニット及び少なくとも1つのISTユニット間でレイの送信を仲裁する。レイがリーフノードに到達すると、レイに対する交差検査が行われる。したがって、レイはTRVユニットから出力され、第2バッファ250を経てISTユニットに入力される。言い換えれば、第2バッファ250は、少なくとも1つのTRVユニット及び1つ以上のISTユニット間のレイのデータの流れを制御する。第2バッファ250はレイ仲裁ユニットと命名するか表現される。
【0068】
レイは1つ以上の空間を通過する。したがって、レイに対する交差検査が実行された後にも、レイに対する探索が続く。少なくとも1つのISTユニットのうち1つのISTユニットによって出力されるレイは、少なくとも1つのTRVユニットのうち1つのTRVユニットに入力される。ここで、レイが入力されるTRVユニットは、レイの探索を処理したTRVユニットであってもよい。
【0069】
図3〜
図6は、単一パイプラインを用いてレイの探索を処理する場合に発生する問題点を説明する。
【0070】
前述したように、TRVユニットはAS130のツリー内で階層的な探索を行う。ツリーの階層的な探索は、1)ノードデータフェッチ及び左側子の訪問過程、2)右側子の訪問及びスタック(stack)ポップ過程、3)ノードのデータフェッチ、リーフノード訪問及びISTユニットへの出力過程、及び4)ISTユニットから入力されたレイのデータをシェーディングユニットに出力する過程などで分類される。ここで、ノードデータフェッチは、ノードのデータをキャッシュからフェッチするものであってもよい。ノードのデータはノードが示す空間のデータであってもよい。空間のデータはBBまたはAABBであってもよい。
【0071】
処理率を向上させるために、TRVユニットはパイプラインを用いてレイの探索を処理する。新規のレイはTRVユニットの入力バッファに注入されてもよい。場合に応じて、ツリー内のノードに対する訪問を継続的に行うために、レイのデータはTRVユニットへの出力バッファを経て再び前記TRVユニットの入力バッファに入力されてもよい。パイプラインは複数の状態を有し得る。
【0072】
例えば、パイプラインは、第1状態、第2状態及び第3状態を有する。第1状態は、ノードのデータをキャッシュからフェッチする状態である。また、第1状態は、ノードがリーフノード及び内部ノードのうちいずれかのノードであるかを判断する状態である。第2状態は、レイのデータ及びノードのデータを用いてレイ及びノードが示す空間の間の交差を検査する状態である。ここで、交差の検査はレイがノードが示す空間を通過するか否かを検査する。第3状態は、ノードのデータに対するスタック動作を処理する状態である。ノードのデータに対するスタック動作は、ノードのデータをスタック内にプッシュする動作及びスタックからノードのデータをポップする動作を含んでもよい。第3状態で処理されるノードは、次にTRVユニットが次に訪問するノードであってもよい。
【0073】
ツリーの階層的な探索過程において、状態の転移は非決定的(non−deterministic)であってもよい。すなわち、パイプラインの状態が常に第1状態、第2状態及び第3状態の順で転移することはない。パイプライン状態の転移は訪問されたノードのタイプ、交差検査の結果、及びパイプラインの現在状態のうちの1つ以上によって毎度異なるよう変更され得る。
【0074】
非決定的な転移に起因して、レイはパイプラインのうち一部では探索が処理されず、パイプライン内でバイパスしてもよい。下記の
図3〜
図6を参照してバイパスが説明される。
【0075】
図3は、一例に係るTRVのパイプラインのバイパスを説明する。
図3において、太い矢印はレイのデータの移動を示す。点線の矢印はレイのデータのバイパスを示す。
【0076】
TRVユニット300に入力されたレイのデータは、入力バッファ310を経てパイプライン320に入力される。
【0077】
パイプライン320は複数のサブパイプラインを含む。パイプライン320は、第1サブパイプライン322、第2サブパイプライン324及び第3サブパイプライン326を含む。第1サブパイプライン322、第2サブパイプライン324及び第3サブパイプライン326は、それぞれ前述された第1状態、第2状態及び第3状態に対応する。すなわち、第1サブパイプライン322は、パイプライン320の状態が第1状態であるとき動作する部分を示す。第2サブパイプライン324は、パイプライン320の状態が第2状態であるとき動作する部分を示す。第3サブパイプライン326は、パイプライン320の状態が第3状態であるとき動作する部分を示す。
【0078】
例えば、第1サブパイプライン322は、ノードのデータをキャッシュからフェッチしてもよく、ノードがリーフノード及び内部ノードのいずれかのノードであるかを判断する。第2サブパイプライン324は、レイのデータ及びノードのデータを用いてレイ及びノードが示す空間の間の交差を検査する。第3サブパイプライン326は、ノードのデータに対するスタック動作を処理する。
【0079】
図3において、第1サブパイプライン322及び第2サブパイプライン324では、レイまたはレイのデータに対する作業が行われる。一方、第3サブパイプライン326で、レイまたはレイのデータは単にバイパスされる。
【0080】
例えば、
図3は、ノードデータフェッチ及び左側子の訪問過程を示す。第1サブパイプライン322で、ノードのデータがフェッチされる。第1サブパイプライン322で、ノードがリーフノード及び内部ノードのうちいずれかのノードであるかが判断される。ノードが内部ノードであれば、ノードの左側子ノード及びレイ間の交差検査のためにパイプライン320の状態が第2状態に転移される。第2サブパイプライン324で、左側子ノード及びレイ間の交差検査が行われる。前記交差検査の後には、ノードの右側子ノード及びレイ間の交差検査が行われる。しかし、第2サブパイプライン324と接続された第3サブパイプライン326は、第3状態のためのものであるため、第3サブパイプライン326はレイに対するいずれの作業も行わず、レイのデータを第1出力バッファ330に伝達する。
【0081】
バイパスされたレイのデータは、第1出力バッファ330を経て再び入力バッファ310に再入力される。その後、パイプライン320によって右側子ノード及びレイ間の交差検査が行われる。
【0082】
第2出力バッファ340及び第3出力バッファ350は
図3で説明される動作では用いられない。
【0083】
図4は、一例に係るパイプラインのバイパスを説明する。
図4において、第1サブパイプライン322でレイまたはレイのデータが単にバイパスされる。第2サブパイプライン324及び第3サブパイプライン326ではレイまたはレイのデータに対する作業が行われる。
【0084】
例えば、
図4は、右側子訪問及びスタックポップ過程を示す。ノードのデータのフェッチが必要ではないため、第1サブパイプライン322で、レイまたはレイのデータはバイパスされる。第2サブパイプライン324で、右側子ノード及びレイ間の交差検査が行われる。第3サブパイプライン326で、スタックの動作が行われる。スタックの動作は探索されるノードのデータをスタックからポップするものであってもよい。ポップされたノードの探索のために、レイのデータは第1出力バッファ330を経て再び入力バッファ310に再入力される。
【0085】
第2出力バッファ340及び第3出力バッファ350は
図4で説明される動作では用いられない。
【0086】
上記の
図3を参照して説明された技術的な内容がそのまま適用されるため、より詳細な説明は省略する。
【0087】
図5は、一例に係るパイプラインのバイパスを説明する。
図5において、第1サブパイプライン322及び第2サブパイプライン324では、レイまたはレイのデータに対する作業が行われる。一方、第3サブパイプライン326で、レイまたはレイのデータは単にバイパスされる。
【0088】
例えば、
図5は、ノードのデータフェッチ、リーフノード訪問及びISTユニットへの出力過程を示す。第1サブパイプライン322で、ノードのデータがフェッチされる。第1サブパイプライン322で、ノードがリーフノード及び内部ノードのうちいずれかのノードであるかを判断する。ノードがリーフノードであれば、ノード及びレイ間の交差検査のためにパイプライン320の状態が第2状態に転移する。第2サブパイプライン324で、ノード及びレイ間の交差検査が行われる。ノード及びレイが交差すると、レイのデータはISTユニットに伝達される。第2サブパイプライン324と接続された第3サブパイプライン326は、第3状態のためのものであるため、第3サブパイプライン326はレイに対するいずれの作業も行わず、レイのデータを第2出力バッファ340に伝達する。
【0089】
第1出力バッファ330及び第3出力バッファ350は
図5を参照して説明される動作では用いられない。
【0090】
上記の
図3及び
図4を参照して説明された技術的な内容がそのまま適用されるため、より詳細な説明は省略する。
【0091】
図6は、一例に係るパイプラインのバイパスを説明する。
図6において、第1サブパイプライン322では、レイまたはレイのデータに対する作業が行われる。一方、第2サブパイプライン324及び第3サブパイプライン326で、レイまたはレイのデータは単にバイパスされてもよい。
【0092】
例えば、
図6は、ISTユニットから入力されたレイのデータをシェーディングユニットに出力する過程を示す。第1サブパイプライン322で、ノードのデータがフェッチされる。ノードのデータはシェーディングユニット290に伝えられる。第2サブパイプライン324及び第3サブパイプライン326はそれぞれ第2状態及び第3状態のためのものであるため、第2サブパイプライン324及び第3サブパイプライン326はレイに対するいずれの作業も行わず、レイのデータを第3出力バッファ350に伝達する。
【0093】
第1出力バッファ330及び第2出力バッファ340は
図6を参照して説明される動作では用いられない。
【0094】
上記の
図3ないし
図5を参照して説明された技術的な内容がそのまま適用されるため、より詳細な説明は省略する。
【0095】
図3〜
図6を参照して前述されたように、パイプライン320内の接続された全てのサブパイプラインが常にレイまたはレイのデータに対する作業を処理することはない。すなわち、状態の分岐により、一部のサブパイプラインはレイのデータを単にバイパスのみを行ってもよい。言い換えれば、1つ以上のサブパイプラインは、1つ以上の他のサブパイプラインが動作する間に活性化されないこともある。結果的に、1レイ当たり1サイクルのパイプライン処理比率は維持されるが、パイプライン320内で発生する不要なデータの伝達によって有効処理率が減少することがあり、電力が消費される。したがって、有効処理率の向上及び電力消費の減少のために、サブパイプラインの分離及び分離されたサブパイプラインの並列実行が考慮される。
【0096】
図7は、一実施形態に係るTRVユニットの構造図である。
【0097】
TRVユニット700は、ツリーASを用いる。
図2を参照して前述した第1TRVユニット240−1、第2TRVユニット240−2、及び第N TRVユニット240−3はそれぞれTRVユニット700であってもよい。
【0098】
TRVユニット700は、複数のサブパイプラインユニットを含む。複数のサブパイプラインユニットそれぞれはツリーASを用いるレイ探索のために要求される互いに異なる作業を処理する。複数のサブパイプラインユニットは互いに並列で動作してもよい。複数のサブパイプラインユニットのそれぞれは、互いに異なるレイに対する探索を並列処理する。言い換えれば、複数のサブパイプラインユニットのそれぞれは、相異なるレイ上の動作(例えば、相異なる動作)を同時に行う。
【0099】
複数のサブパイプラインユニットは、第1サブパイプラインユニット732、第2サブパイプラインユニット734及び第3サブパイプラインユニット736を含む。第1サブパイプラインユニット732、第2サブパイプラインユニット734及び第3サブパイプラインユニット736はそれぞれ1つ以上のパイプラインステージを含んでもよい。
【0100】
複数のサブパイプラインユニットはそれぞれパイプラインの状態のうち1つの状態に対応する。例えば、第1サブパイプラインユニット732、第2サブパイプラインユニット734及び第3サブパイプラインユニット736は、それぞれ
図2を参照して前述した第1状態、第2状態、及び第3状態に対応してもよい。
【0101】
TRVユニット700は、第1クロスバー710、キャッシュ740、スタック750、第2クロスバー760、第1出力バッファ774及び第2出力バッファ776をさらに含む。
【0102】
TRVユニット700は、複数の入力バッファをさらに含んでもよい。複数の入力バッファは、それぞれ複数のサブパイプラインユニットのうち1つのサブパイプラインユニットに分配された1つ以上のレイのデータを格納する。言い換えれば、各サブパイプラインユニットの入口には別個の入力バッファがあってもよい。入力バッファは、格納されたレイのデータをTRVユニット700に送信してもよい。
【0103】
複数の入力バッファは第1入力バッファ722、第2入力バッファ724及び第3入力バッファ736を含んでもよい。第1入力バッファ722、第2入力バッファ724及び第3入力バッファ736は、それぞれ第1サブパイプラインユニット732、第2サブパイプラインユニット734及び第3サブパイプラインユニット736にレイのデータを送信してもよい。
【0104】
複数の入力バッファ、第1出力バッファ774、及び第2出力バッファ776は、先入先出(First−In First−Out;FIFO)で動作してもよい。
【0105】
第1サブパイプラインユニット732は、レイが訪問したツリーAS構造のノードのデータをフェッチしてもよく、ノードがリーフノード及び内部ノードのうちいずれかのノードであるかを判断する。第1サブパイプラインユニット732は、前述された第1サブパイプライン322の作業を行う。
【0106】
第2サブパイプラインユニット734は、レイのデータ及びノードのデータを用いてレイ及びノードが示す空間の間の交差を検査する。第2サブパイプラインユニット734は、前述された第2サブパイプライン324の作業を行う。
【0107】
第3サブパイプラインユニット736は、ノードのデータに対するスタック動作を処理する。第3サブパイプラインユニット736は、前述された第3サブパイプライン326の作業を行う。
【0108】
キャッシュ740は、第1サブパイプラインユニット732にノードのデータを提供する。キャッシュ740は、
図2を参照して前述された第1キャッシュ282からASのデータをキャッシュして格納してもよい。ASのデータはASのノードのデータを含んでもよい。
【0109】
スタック750は、第3サブパイプラインユニット736にスタック動作を提供する。スタック750は、第3サブパイプラインユニット736がプッシュするデータを格納し、第3サブパイプラインユニット736に第3サブパイプラインユニット736がポップするデータを提供する。スタック750は、後入選出(Last−In First−Out;LIFO)で動作してもよい。
【0110】
第1クロスバー710は、TRVユニット700に入力されたレイのデータを複数のサブパイプラインユニットのうち前記入力されたレイの状態に対応するサブパイプラインユニットに分配する。レイの状態に応じてレイに加えられなければならない作業が決定される。例えば、TRVユニット700に入力されたレイは複数のサブパイプラインユニットのうち1つのサブパイプラインによって処理され、レイの状態はレイを処理するサブパイプラインユニットを示す。
【0111】
複数のサブパイプラインユニットそれぞれによってレイのデータに対して行われる作業または演算によってレイの状態が変更され得る。
【0112】
第1クロスバー710は、入力されたレイのデータを複数の入力バッファのうち任意の入力バッファにルーティングするバッファであってもよい。
【0113】
第2クロスバー760は、複数のサブパイプラインユニットのうち1つのサブパイプラインユニットから出力されたレイのデータをレイの状態に基づいて前記1つのサブパイプラインユニットに再送信したり、シェーディングユニット290または交差検査ユニットに送信してもよい。第2クロスバー760から交差検査ユニットに送信されるレイのデータは第2バッファ250を経由して交差検査ユニットに送信される。
【0114】
第1クロスバー710及び第2クロスバー760によって複数のサブパイプラインユニットはフィードバックラインに接続される。
【0115】
第1出力バッファ774は、第2クロスバー760から出力されてシェーディングユニット290に送信される1つ以上のレイのデータを格納する。第2クロスバー760からシェーディングユニット290に送信されるレイのデータは、第1出力バッファ774を経由してシェーディングユニット290に送信される。
【0116】
第2出力バッファ776は、第2クロスバー760から出力されてISTユニットに送信される1つ以上のレイのデータを格納する。第2クロスバー720からシェーディングユニット290に送信されるレイのデータは、第2出力バッファ776を経由してISTユニットに送信される。
【0117】
複数の入力バッファそれぞれで、入力バッファに対応するサブパイプラインユニットで処理されなければならないレイが待機することがある。したがって、複数の入力バッファ内に適する個数のレイがバッファリングされる場合、複数のサブパイプラインユニットに同時にレイが発給(issue)される。したがって、複数のサブパイプラインユニットの完全な並列実行が可能になる。レイの探索アルゴリズムの特性上、特定のサブパイプラインユニットで処理されなければならないレイのデータが枯渇されるようにレイの状態が転換されないことがある。したがって、複数のサブパイプラインユニット間の並列性は常に保持される。
【0118】
第1サブパイプラインユニット732、第2サブパイプラインユニット734、及び前記第3サブパイプラインユニット736のうち少なくとも1つは複数であってもよい。レイの状態の発生頻度は互いに異なってもよい。したがって、1つのサブパイプラインを複数で複製することで複数のサブパイプラインユニット間の負荷不均衡が回避されることができ、処理率が向上し得る。
【0119】
第1サブパイプラインユニット732の個数、第2サブパイプラインユニット734の個数、及び第3サブパイプラインのユニット736の個数は、TRVユニット700によってレイが処理されるため平均または他の統計基盤の第1サブパイプラインユニット732の使用回数、第2サブパイプラインユニット734の使用回数、及び第3サブパイプラインユニット738の使用回数に基づいて決定されてもよい。または、第1サブパイプラインユニット732、第2サブパイプラインユニット734、及び第3サブパイプラインユニット736それぞれの個数は、サブパイプラインユニットの使用頻度の比率に基づいて決定されてもよい。
【0120】
図8は、一例に係る複数の第1サブパイプラインユニットが用いられる構成を示す。
図8において、第1入力バッファ722及び第1サブパイプラインユニット732はそれぞれ2つずつ示されている。キャッシュ740は、それぞれの第1サブパイプラインユニット732にノードのデータを提供する。
【0121】
レイのデータが第1サブパイプラインユニット732によって処理される頻度が、第2サブパイプラインユニット734によって処理される頻度及び第3サブパイプラインユニット736によって処理される頻度よりも高い場合、TRVユニット700は第1サブパイプラインユニット732を2つ以上用いてもよい。複数の第1サブパイプラインユニットによって複数のレイのデータが同時に処理されてもよい。したがって、高い頻度によって第1サブパイプラインユニット732がボトルネックになることを防止することができる。
【0122】
図9は、一例に係る複数の第2サブパイプラインユニットが用いられる構成を示す。
図9において、第2入力バッファ724及び第2サブパイプラインユニット734はそれぞれ2つずつ示されている。
【0123】
レイのデータが第2サブパイプラインユニット734によって処理される頻度が、第1サブパイプラインユニット732によって処理される頻度及び第3サブパイプラインユニット736によって処理される頻度よりも高い場合、TRVユニット700は第2サブパイプラインユニット734を2つ以上用いてもよい。複数の第2サブパイプラインユニットによって複数のレイのデータが同時に処理されてもよい。
【0124】
大体的に通常の技術者はTRVユニット700が複数のサブパイプライン内の2つ以上のサブパイプラインユニット(例えば、複数の第1サブパイプラインユニット及び複数の第2サブパイプラインユニット、複数の第2サブパイプラインユニット及び複数の第3サブパイプラインユニット、複数の第1サブパイプラインユニット及び複数の第2サブパイプラインユニット、及び複数の第3サブパイプラインユニットなど)を用いるものと理解できる。サブパイプラインユニットの個数は、レイデータの処理の回数、レイデータ処理のために要求される時間の量、使用の相対的な比率及び適合及び/または効率の方式によって負荷のバランスを取るために使用される他の統計的な情報によって変わり得る。
【0125】
図10は、一実施形態に係るレイ探索方法のフローチャートである。
【0126】
ステップS1010において、第1クロスバー710は、TRVユニット700に入力されたレイのデータを第1サブパイプラインユニット732、第2サブパイプラインユニット734及び第3サブパイプラインユニット736のうち入力されたレイの状態に対応するサブパイプラインユニットに分配する。レイのデータは分配された少なくとも1つのサブパイプラインユニットに出力されてもよい。
【0127】
分配されたサブパイプラインユニットが第1サブパイプラインユニット732、第2サブパイプラインユニット734及び第3サブパイプラインユニット736のいずれかのサブパイプラインユニットであるかに応じて、ステップS1022、ステップS1024及びステップS1026のうち1つのステップが行われる。
【0128】
ステップS1022において、第1入力バッファ722は、第1クロスバー710から出力されたレイのデータを格納する。第1入力バッファ722は、1つ以上のレイのデータを格納する。第1入力バッファ722は、格納された1つ以上のレイのデータを先入先出の方式で第1サブパイプラインユニット732に送信する。
【0129】
ステップS1032において、第1サブパイプラインユニット732は、レイが訪問したツリーASのノードのデータをフェッチする。第1サブパイプラインユニット732は、ノードがリーフノード及び内部ノードのいずれかのノードであるかを判断する。
【0130】
ステップS1040において、キャッシュ740は、第1サブパイプラインユニット732にノードのデータを提供する。
【0131】
前記フェッチまたは判断の完了後、ステップS1060において、第1サブパイプラインユニット732は第2クロスバー760にレイのデータを出力する。
【0132】
ステップS1024において、第2入力バッファ724は、第1クロスバー710から出力されたレイのデータを格納する。第2入力バッファ724は、1つ以上のレイのデータを格納してもよい。第2入力バッファ724は、格納された1つ以上のレイのデータを先入先出の方式で第2サブパイプラインユニット734に送信する。
【0133】
ステップS1034において、第2サブパイプラインユニット734は、レイ及びノードのデータを用いてレイ及びノードが示す空間の間の交差を検査する。
【0134】
前記検査の完了後、ステップS1060において、第2サブパイプラインユニット734は、第2クロスバー760にレイのデータを出力する。
【0135】
ステップS1026において、第3入力バッファ726は、第1クロスバー710から出力されたレイのデータを格納する。第3入力バッファ726は、1つ以上のレイのデータを格納してもよい。第3入力バッファ726は、格納された1つ以上のレイのデータを先入先出の方式で第3サブパイプラインユニット736に送信する。
【0136】
ステップS1036において、第3サブパイプラインユニット736は、ノードのデータに対するスタック動作を処理する。前記動作の実行後、ステップS1060で、第3サブパイプラインユニット736は第2クロスバー760にレイのデータを出力する。
【0137】
前述されたステップS1032/1040、ステップS1034及びステップS1036は互いに異なるレイに対する探索を並列処理する。すなわち、ステップS1032/1040、ステップS1034及びステップS1036で、複数のレイのデータがそれぞれ第1サブパイプラインユニット732、第2サブパイプラインユニット734及び第3サブパイプラインユニット736のうちの1つ以上によって並列処理される。
【0138】
第1サブパイプラインユニット732、第2サブパイプラインユニット734及び第3サブパイプラインユニット736のうちの1つ以上は複数であってもよい。第1サブパイプラインユニット732の個数、第2サブパイプラインユニット734の個数及び第3サブパイプラインユニット736の個数は、TRVユニット700によってレイが処理されるために平均的または統計的に要求される第1サブパイプラインユニット732の使用回数、第2サブパイプラインユニット734の使用回数及び第3サブパイプラインユニット738の使用回数に基づいて決定される。
【0139】
ステップS1032/S1040、ステップS1034またはステップS1036が実行された後、ステップS1060が行われてもよい。
【0140】
ステップS1060において、第2クロスバー760は、第1サブパイプラインユニット732、第2サブパイプラインユニット734及び第3サブパイプラインユニット736のうち1つのサブパイプラインユニットから出力されたレイのデータをレイの状態に基づいて、前記1つのサブパイプラインユニットに再送信したり、シェーディングユニット290または少なくとも1つのISTユニットに送信してもよい。
【0141】
レイのデータがサブパイプラインユニットに再送信された場合、ステップS1010が行われる。レイのデータがシェーディングユニット290に送信された場合、ステップS1074が行われる。レイのデータが少なくとも1つのISTユニットに送信された場合、ステップS1076が行われる。
【0142】
ステップS1074において、第1出力バッファ774は、第2クロスバー760から出力されてシェーディングユニット290に送信される1つ以上のレイのデータを格納する。
【0143】
第1出力バッファ774は、格納された1つ以上のレイのデータを先入先出の方式でシェーディングユニット290に送信する。
【0144】
ステップS1076において、第2出力バッファ776は、第2クロスバー760から出力されて少なくとも1つのISTユニットのうち1つのISTユニットに送信される1つ以上のレイのデータを格納する。
【0145】
第2出力バッファ776は、格納された1つ以上のレイのデータを先入先出の方式で少なくとも1つのISTユニットのうち1つのISTユニットに送信する。
【0146】
上記
図1ないし
図9を参照して説明された技術的な内容がそのまま適用されるため、より詳細な説明は省略する。
【0147】
図11は、一実施形態に係るレイトレーシング方法のフローチャートである。
【0148】
ステップS1110において、レイ生成ユニット210はレイを生成する。生成されたユニットは、レイトレーシングユニット220に入力されてもよい。
【0149】
ステップS1120において、少なくとも1つのTRVユニットは、それぞれASを探索する。ここで、ASはツリーASであってもよい。ステップS1110は
図10を参照して前述されたステップS1010ないしS1076を含んでもよい。
【0150】
ステップS1130において、少なくとも1つのISTユニットそれぞれは、ASを用いてシーンオブジェクト及びレイ間の交差有無を検査する。
【0151】
ステップS1140において、シェーディングユニット114は、レイに対応するピクセルのカラーを算出する。シェーディングユニット1140は、レイと交差する可視のシーンオブジェクトのカラーに基づいてレイが向かう2Dスクリーン内の特定ピクセルのカラーを算出する。
【0152】
ステップS1110、ステップS1120、ステップS1130及びステップS1140は、それぞれ
図2を参照して説明したレイ生成150、AS探索155、交差検査160及びシェーディング165を処理する。
【0153】
上記
図1ないし
図10を参照して説明された技術的な内容がそのまま適用されるため、より詳細な説明は省略する。
【0154】
上述された実施形態に係るレイトレーシングを行う装置及び方法は1つ以上のプロセッサを用いることができる。1つ以上のプロセッサは、GPU、マイクロプロセッサー、中央処理装置(Central Processing Unit;CPU)、デジタル信号プロセッサ(Digital Signal Processor;DSP)またはアプリケーション−特有集積回路(Application−Specific Integrated Circuit;ASIC)を含んでもよく、このようなプロセシングデバイスまたは他のプロセシングデバイスの部分または組合を含んでもよい。
【0155】
ここで用いられた用語「モジュール」及び「ユニット」はFPGA(Field Programmable Gate Array)またはASICのような特定のタスクを行う、ソフトウェアまたはハードウェア構成要素または装置を言及することができるが、これに制限されることはない。モジュールまたはユニットは住所指定可能な(addressable)格納媒体内に存在するよう構成されてもよく、1つ以上のプロセッサ上で行われるように構成されてもよい。したがって、モジュールまたはユニットは、例示的な方式でソフトウェア構成要素、オブジェクト−指向(object−oriented)ソフトウェア構成要素、クラス構成要素及びタスク構成要素、プロセス、関数、属性、手続き(procedure)、サブルーチン(subroutine)、プログラムコードのセグメント、ドライバ、ファームウェア、マイクロコード、回路、データ、データベース、データ構造体、テーブル、配列及び変数のような構成要素を含んでもよい。構成要素及びモジュール/ユニット内で提供される機能はさらに少ない構成要素及びモジュール/ユニットから組合わせることができ、追加的な構成要素及びモジュールにさらに分離されてもよい。
【0156】
実施形態に係る方法は、多様なコンピュータ手段によって行うことができるプログラム命令の形態で実現されても良く、かかるプログラム命令は、コンピュータ読み出し可能媒体に記録されてもよい。前記コンピュータ読み出し可能媒体は、プログラム命令、データファイル、データ構造などを単独または組み合わせたものを含んでもよい。前記媒体に記録されるプログラム命令は、本発明のために特別に設計して構成されたものでもよく、コンピュータソフトウェア分野の技術を有する当業者にとって公知のものであり使用可能なものであってもよい。
【0157】
以上のように本発明を限定された実施形態と図面によって説明したが、本発明は、上記の実施形態に限定されることなく、本発明が属する分野における通常の知識を有する者であれば、このような記載から多様な修正及び変形が可能である。
【0158】
したがって、本発明の範囲は、説明された実施形態に限定されて定められるものではなく、特許請求の範囲及び特許請求の範囲と均等なものなどによって定められるものである。