(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-11-19
(45)【発行日】2024-11-27
(54)【発明の名称】非同期動作による加速レイトレーシング及び光線変換のためのシステム及び方法
(51)【国際特許分類】
G06T 15/06 20110101AFI20241120BHJP
【FI】
G06T15/06
(21)【出願番号】P 2023038331
(22)【出願日】2023-03-13
(62)【分割の表示】P 2021134276の分割
【原出願日】2021-08-19
【審査請求日】2023-03-16
(32)【優先日】2020-08-20
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】518187455
【氏名又は名称】ソニー・インタラクティブエンタテインメント エルエルシー
(74)【代理人】
【識別番号】100105924
【氏名又は名称】森下 賢樹
(72)【発明者】
【氏名】マーク エヴァン サーニー
【審査官】渡部 幸和
(56)【参考文献】
【文献】米国特許出願公開第2020/0050451(US,A1)
【文献】特開2017-188098(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06T 15/00
(57)【特許請求の範囲】
【請求項1】
グラフィックス処理のための方法であって、
レイトレーシングを行うシェーダープログラムを実行することと、
前記シェーダープログラムの要求に応じて加速構造をトラバースするハードウェア実装レイトレーシングユニット(RTU)を使用することと、
前記シェーダープログラムにおいて、前記加速構造
のトラバースの結果を使用することと、
を含み、
前記シェーダープログラムは、ルートノード及び光線情報を前記RTUに送信し、前記RTUが前記加速構造をトラバースするように構成され、前記シェーダープログラムは前記RTUの少なくとも1つのステータスを読み取り、前記RTUはトラバースを継続するときに少なくとも第1のステータスをレポートし、前記シェーダープログラムはヒット識別を前記RTUに渡し、前記RTUが光線を短くすることを可能にし、前記RTUからの少なくとも第2のステータスは前記RTUが第1のプリミティブとの交差を発見したことを示し、前記シェーダープログラムはヒットテストを行い、前記第1のプリミティブが光線にヒットしたことを発見したことに応答して、前記ヒットを前記RTUに通知する、前記方法。
【請求項2】
前記結果を使用することは、コンピュータ生成グラフィックスの画素をシェーディングすることを含む、請求項1に記載の方法。
【請求項3】
前記RTUによる前記加速構造のトラバースの前記結果は、第1の光線と前記加速構造内に含まれるバウンディングボリュームとの交差、及び/または第2の光線と前記加速構造内に含まれるプリミティブとの交差の検出を含む、請求項1に記載の方法。
【請求項4】
前記RTUの処理は、前記加速構造のトラバースで使用されるスタックのメンテナンスを含む、請求項1に記載の方法。
【請求項5】
前記RTUによる前記加速構造のトラバースの前記結果は、光線の原点からの前記交差の距離による、前記RTUによって検出された前記交差の前記RTUによるソーティングを含み、
前記RTUは、前記加速構造をトラバースするとき、第1の光線とプリミティブとの第1の交差を検出し、
前記RTUは、前記加速構造をトラバースするとき、前記第1の光線と前記プリミティブとの間の第2の交差を検出し、
前記RTUからの結果を前記シェーダープログラムに伝達するとき、前記第2の交差の結果は前記第1の交差の結果の前に伝達される、請求項1に記載の方法。
【請求項6】
前記RTUによる前記加速構造のトラバースの前記結果は、前記第1の光線と前記加速構造内に含まれる前記プリミティブとの最初の交差の検出を含む、請求項3に記載の方法。
【請求項7】
グラフィックス処理のための方法であって、
加速構造によって表される3D環境のレイトレーシングを行うシェーダープログラムを実行することと、
前記加速構造をトラバースするハードウェア実装レイトレーシングユニット(RTU)を使用することと、
前記シェーダープログラムにおいて、前記RTUによって前記加速構造のトラバースの結果を使用することであって、前記加速構造は複数のレベルを伴う階層であり、前記RTUは、前記加速構造における要素を用いて光線の交差を識別し、前記シェーダープログラムに交差を示し、前記シェーダープログラムは、ヒットテストを行い、前記RTUは距離によって交差をソートし、前記シェーダープログラムは、前記RTUが第1のプリミティブを用いて交差を発見したというステータスを受信し、前記シェーダープログラムは、前記第1のプリミティブでのヒットテストを行い、前記第1のプリミティブが光線にヒットしたと決定したことに応答して、前記RTUに通知し、前記RTUは第2及び第3のプリミティブを用いて交差を決定し、前記第3のプリミティブは前記第2のプリミティブよりも光線の原点に近く、前記シェーダープログラムは前記第2のプリミティブではなく前記第3のプリミティブでのヒットテストを行うためのRTU情報にアクセスする、前記使用することと、
を含む、前記方法。
【請求項8】
前記結果を使用することは、コンピュータ生成グラフィックスの画素をシェーディングすることを含む、請求項7に記載の方法。
【請求項9】
前記RTUによる前記加速構造のトラバースの前記結果は、前記加速構造の前記複数のレベルの範囲内でより高レベルからより低レベルまでの移行の検出を含む、請求項7に記載の方法。
【請求項10】
前記RTUによる前記加速構造のトラバースの前記結果は、前記加速構造の前記複数のレベルの範囲内でより低レベルからより高レベルまでの移行の検出を含む、請求項7に記載の方法。
【請求項11】
ソフトウェア実装
のシェーダーを実行するように適応された少なくとも1つのプロセッサコアと、
前記シェーダー
の動作に対して非同期に、加速構造をトラバースするように適応され、前記加速構造に表されるオブジェクトとの光線の交差を識別し、結果を生成し、前記結果を前記シェーダーに戻す、少なくとも1つのハードウェア実装レイトレーシングユニット(RTU)と、
を備え、前記シェーダーは、前記RTUが前記加速構造をトラバースするように構成される処理を開始するように構成され、前記シェーダーは前記RTUの少なくとも1つのステータスを読み取り、前記シェーダーはヒット識別を前記RTUに渡し、前記少なくとも1つのステータスは前記RTUから前記シェーダーに送信され、前記RTUからの少なくとも第2のステータスは前記RTUが第1のプリミティブとの交差を発見したことを示し、前記シェーダーはヒットテストを行い、前記第1のプリミティブが光線にヒットしたことを発見したことに応答して、前記ヒットを前記RTUに通知する、グラフィクス処理ユニット。
【請求項12】
前記RTUは前記交差を識別するためのハードウェア回路を含み、前記シェーダーはソフトウェアを使用して前記ヒットを識別するように適応される、請求項11に記載のグラフィクス処理ユニット。
【請求項13】
前記シェーダーは、前記プロセッサコアによって実行可能な命令によって、3Dコンピュータグラフィックスの画素をシェーディングするように構成される、請求項11に記載のグラフィクス処理ユニット。
【請求項14】
前記RTUは、前記加速構造をトラバースするためのトラバースロジックを実装するハードウェア回路を含む、請求項11に記載のグラフィクス処理ユニット。
【請求項15】
前記RTUは、前記加速構造のトラバースで使用されるスタックのスタック管理を実施するためのハードウェア回路を含む、請求項11に記載のグラフィクス処理ユニット。
【請求項16】
ソフトウェア実装
のシェーダーを実行するように適応された少なくとも1つのプロセッサコアと、
オブジェクトとの光線の交差を識別し、結果を生成し、前記結果を前記シェーダーに戻す、少なくとも1つのレイトレーシングユニット(RTU)であって、前記シェーダーは、前記RTUが第1のプリミティブを用いて交差を発見したという第1のステータスを受信し、前記シェーダーは、前記第1のプリミティブでのヒットテストを行い、前記第1のプリミティブが前記光線にヒットしたと決定したことに応答して、前記RTUに通知するように構成され、前記RTUは第2及び第3のプリミティブを用いて交差を決定するように構成され、前記第3のプリミティブは前記第2のプリミティブよりも光線の原点に近く、前記シェーダーは前記第2のプリミティブではなく前記第3のプリミティブでのヒットテストを行うためのRTU情報にアクセスするように構成される、前記少なくとも1つのハードウェア実装レイトレーシングユニット(RTU)と、
を備える、グラフィクス処理ユニット。
【請求項17】
前記RTUは前記交差を識別するためのハードウェア回路を含み、前記シェーダーはソフトウェアを使用して前記ヒットを識別するように適応される、請求項16に記載のグラフィクス処理ユニット。
【請求項18】
前記シェーダーは、前記プロセッサコアによって実行可能な命令によって、3Dコンピュータグラフィックスの画素をシェーディングするように構成される、請求項16に記載のグラフィクス処理ユニット。
【請求項19】
前記RTUは、加速構造のトラバースで使用されるスタックのスタック管理を実施するためのハードウェア回路を含む、請求項16に記載のグラフィクス処理ユニット。
【請求項20】
前記RTUは、少なくとも、ワールド空間から、マルチレベルの加速構造のより低レベルに対応する座標空間に第1の光線を変換するためのハードウェア回路を含む、請求項16に記載のグラフィクス処理ユニット。
【請求項21】
前記RTUは、少なくとも、マルチレベルの加速構造のより低レベルに対応する座標空間からワールド空間に第1の光線を変換するためのハードウェア回路を含む、請求項16に記載のグラフィクス処理ユニット。
【発明の詳細な説明】
【技術分野】
【0001】
本出願は、概して、加速レイトレーシングのためのシステム及び方法に関する。
【背景技術】
【0002】
レイトレーシングを使用して、想像上の観察者の目(一般的に、カメラの位置)からグラフィックスの仮想オブジェクトまでの光の経路をトレースすることによって、コンピュータ生成3Dグラフィックスの光学的効果をシミュレートする。
【発明の概要】
【発明が解決しようとする課題】
【0003】
レイトレーシングは、ラスター化等の他の手法よりもリアリズムの高い光学的効果が生じるが、算出コストは高くなる。これは、ビデオゲーム等のリアルタイムアプリケーションでは、レンダリング速度が重要であるため、レイトレーシングが課題になることが提起されることを意味する。
【課題を解決するための手段】
【0004】
したがって、グラフィックス処理のための方法は、グラフィックス処理ユニット(GPU)で、加速構造によって表される3D環境のレイトレーシングを行うシェーダープログラムを実行することを含む。本方法は、シェーダープログラムの要求に応じて加速構造をトラバースするGPU内のハードウェア実装レイトレーシングユニット(RTU)を使用することと、シェーダープログラムで加速構造トラバースの結果を使用することとを含む。
【0005】
例示的な実施形態では、RTUによる加速構造トラバースは、シェーダープログラムに対して非同期であり得る。いくつかの実施態様では、RTUによる加速構造トラバースの結果は、光線と加速構造内に含まれるバウンディングボリュームとの交差の検出を含む。いくつかの例では、RTU処理は、加速構造トラバースで使用されるスタックのメンテナンスを含む。
【0006】
加速構造は、複数のレベルを伴う階層であり得る。係る実施形態では、RTUによる加速構造トラバースの結果は、加速構造の複数のレベルの範囲内でより高レベルからより低レベルまでの移行の検出を含み得る。RTUによる加速構造トラバースの結果は、また、加速構造の複数のレベルの範囲内でより低レベルからより高レベルまでの移行の検出を含み得る。RTUによる加速構造トラバースは、加速構造の複数のレベル間の移行の処理を含み得る。
【0007】
非限定的な実施態様では、RTUによる加速構造トラバースの結果は、光線と加速構造内に含まれるプリミティブとの交差の検出を含み得る。係る実施態様では、RTUによる加速構造トラバースの結果は、光線と加速構造内に含まれるプリミティブとの最初の交差の検出を含み得る。さらに、RTUによる加速構造トラバースの結果は、光線の原点からの交差の距離による、RTUによって検出された交差のRTUによるソーティングを含み、ソーティングでは、RTUは、加速構造をトラバースするとき、光線とプリミティブとの第1の交差を検出し、RTUは、加速構造をトラバースするとき、光線とプリミティブとの間の第2の交差を検出し、RTUからの結果をシェーダープログラムに伝達するとき、第2の交差の結果は第1の交差の結果の前に伝達される。必要に応じて、光線と加速構造内に含まれるプリミティブとの交差をRTUが検出し、この結果をシェーダープログラムに伝達すると、その後、シェーダープログラム及びRTUは、光線とプリミティブとのシェーダープログラムのヒットテストの結果に関して伝達する。
【0008】
光線と加速構造内に含まれるバウンディングボリュームとの交差がRTUによって検出され、この結果がシェーダープログラムに伝達されると、その後、シェーダープログラム及びRTUは、交差を無視するかどうかのシェーダープログラムの決定及び/または光線に沿った交差の位置のシェーダープログラムの決定に関して伝達できる。
【0009】
別の態様では、グラフィックス処理ユニット(GPU)は、ソフトウェア実装シェーダーを実行するように適応する少なくとも1つのプロセッサコアと、プロセッサコアから分離しており、加速構造をトラバースするように適応し、加速構造に表されるオブジェクトとの光線の交差を識別し、結果を生成し、交差に関連付けられるヒットのシェーダーによる識別のために、結果をシェーダーに戻す、少なくとも1つのハードウェア実装レイトレーシングユニット(RTU)とを含む。
【0010】
この第2の態様の例示的な実施態様では、RTUは交差を識別するためのハードウェア回路を含み得、シェーダーはソフトウェアを使用してヒットを識別するように適応できる。シェーダーは、プロセッサコアによって実行可能な命令によって、3Dコンピュータグラフィックスの画素をシェーディングするように構成され得る。
【0011】
この第2の態様のいくつかの実施形態では、RTUは、加速構造をトラバースするためのトラバースロジックを実装するハードウェア回路を含み得る。RTUは、加速構造のトラバースで使用されるスタックのスタック管理を実施するためのハードウェア回路を含み得る。また、RTUは、原点からの距離によって交差をソートするためのハードウェア回路を含み得る。
【0012】
いくつかの実施態様では、RTUは、ヒットを識別するシェーダーと非同期に交差を識別するように適応する。シェーダーは、RTUのステータスを読み取るためにプロセッサコアによって実行可能な命令を含み得る。
【0013】
非限定的な実施形態では、RTUは、複数のレベルを伴うより高レベルの加速構造によって使用される座標空間から、より低レベルの加速構造によって使用される座標空間に光線を変換するためのハードウェア回路を含み得る。RTUは、また、複数のレベルを伴う加速構造のより低レベルによって使用される座標空間から、より高レベルの加速構造によって使用される座標空間に光線を変換するための及び/または光線属性をより高レベルの加速構造をトラバースするときに使用される光線属性に復元するためのハードウェア回路を含み得る。
【0014】
いくつかの例では、RTUは、第1の光線と加速構造内に含まれる第1のバウンディングボリュームとの第1の交差を識別するためのハードウェア回路を含み得、シェーダーは、第1の交差を無視するかどうかを決定するために実行可能な命令を含み得、第1の交差を無視するかどうかの決定に応答して、第1の光線に沿った第1の交差の位置を識別する。
【0015】
プロセッサコア及びRTUは共通の半導体ダイでサポートできる。複数のプロセッサコア及び複数のRTUは共通の半導体ダイにあり得る。
【0016】
別の態様では、アセンブリは、グラフィックスの画素をシェーディングするために少なくとも1つのシェーダーを実行するように適応する少なくとも1つのプロセッサコアを含む。アセンブリは、また、少なくとも1つのプロセッサコアから分離しているレイトレーシングユニット(RTU)を含む。RTUはハードウェア回路を含み、ハードウェア回路は、プロセッサコアによって交差に関連付けられるヒットを識別するために加速構造で表されるオブジェクトとの光線の交差を識別し、加速構造をトラバースするためのロジックを実装し、加速構造のトラバースで使用されるデータスタックの管理を実施する。
【0017】
別の態様では、グラフィックス処理のための方法は、グラフィックス処理ユニット(GPU)で、加速構造によって表される3D環境のレイトレーシングを行うシェーダープログラムを実行することを含む。また、本方法は、シェーダープログラムと非同期に、シェーダープログラムの要求に応じて加速構造をトラバースするGPU内のハードウェア実装レイトレーシングユニット(RTU)を使用することと、シェーダープログラムで加速構造トラバースの結果を使用することとを含む。
【0018】
別の態様では、グラフィックス処理のための方法は、グラフィックス処理ユニット(GPU)で、加速構造によって表される3D環境のレイトレーシングを行うシェーダープログラムを実行することを含む。また、本方法は、シェーダープログラムの要求に応じて加速構造をトラバースするGPU内のハードウェア実装レイトレーシングユニット(RTU)を使用することと、シェーダープログラムで加速構造トラバースの結果を使用することとを含む。加速構造は複数のレベルを伴う階層であり、RTUによる加速構造トラバースは、加速構造の複数のレベル間の座標移行の処理を含む。
【0019】
別の態様では、グラフィックス処理ユニット(GPU)は、ソフトウェア実装シェーダーを実行するように適応する少なくとも1つのプロセッサコアと、プロセッサコアから分離しており、シェーダー動作に対して非同期に、加速構造をトラバースするように適応し、加速構造に表されるオブジェクトとの光線の交差を識別し、結果を生成し、交差に関連付けられるヒットのシェーダーによる識別のために、結果をシェーダーに戻す、少なくとも1つのハードウェア実装レイトレーシングユニット(RTU)とを含む。
【0020】
別の態様では、グラフィックス処理ユニット(GPU)は、ソフトウェア実装シェーダーを実行するように適応する少なくとも1つのプロセッサコアと、プロセッサコアから分離しており、加速構造をトラバースするように適応し、加速構造に表されるオブジェクトとの光線の交差を識別し、結果を生成し、交差に関連付けられるヒットのシェーダーによる識別のために、結果をシェーダーに戻す、少なくとも1つのハードウェア実装レイトレーシングユニット(RTU)とを含む。RTUは、トラバース中の座標系の変化を考慮して少なくとも1つの光線を修正することを含む、加速構造をトラバースするトラバースロジックを実装するハードウェア回路を含む。
【0021】
本出願の詳細は、その構造及び動作の両方について、添付の図面を参照すると最良に理解でき、図面では、類似の参照番号は類似の部分を指す。
【図面の簡単な説明】
【0022】
【
図2】マルチレベルの加速構造のさらなる詳細を示す。
【
図3】簡略化されたグラフィックス処理ユニット(GPU)を示す。
【
図4】光線交差を識別するためのハードウェア回路、加速構造をトラバースするためのトラバースロジック、及びスタック管理回路を有するレイトレーシングユニット(RTU)を伴うGPUの例を、トラバース図と一緒に示す。
【
図4A】例示的なフローチャート形式の
図4と一致する例示的なロジックを示す。
【
図4B】例示的なフローチャート形式の
図4と一致する例示的なロジックを示す。
【
図4C】例示的なフローチャート形式の
図4と一致する例示的なロジックを示す。
【
図5】シェーダーとRTUとの間で非同期処理を実行する2つのGPUの例を示す。
【
図5A】例示的なフローチャート形式の
図5と一致する例示的なロジックを示す。
【
図6】ヒットテストが必要ではないときの協調処理を示すトラバース図を用いてGPUを示す。
【
図7】マルチレベルの加速構造を含むさらなる例を示す。
【
図7A】例示的なフローチャート形式の
図7と一致する例示的なロジックを示す。
【
図8】シェーダーによって決定された交差を示すトラバース図を用いてGPUを示す。
【発明を実施するための形態】
【0023】
本開示は、概して、限定ではないが、コンピュータゲームネットワーク等の家電製品(CE)デバイスネットワークの態様を含むコンピュータエコシステムに関する。本明細書のシステムはネットワークを通じて接続され得るサーバコンポーネント及びクライアントコンポーネントを含み得、それにより、クライアントコンポーネントとサーバコンポーネントとの間でデータが交換され得る。クライアントコンポーネントは、Sony PlayStation(登録商標)等のゲーム機またはMicrosoft(登録商標)もしくはNintendo(登録商標)もしくは他の製造者によって作成されたゲーム機、仮想現実(VR)ヘッドセット、拡張現実(AR)ヘッドセット、ポータブルテレビ(例えば、スマートテレビ、インターネット対応テレビ)、ラップトップ及びタブレットコンピュータ等のポータブルコンピュータ、ならびにスマートフォン及び下記に説明される追加の例を含む他のモバイルデバイスを含む、1つ以上のコンピューティングデバイスを含み得る。これらのクライアントデバイスは、様々な動作環境で動作し得る。例えば、クライアントコンピュータの一部は、例として、Linux(登録商標)オペレーティングシステム、Microsoft(登録商標)のオペレーティングシステム、もしくはUnix(登録商標)オペレーティングシステム、またはApple(登録商標)社もしくはGoogle(登録商標)によって製造されたオペレーティングシステムを使用し得る。これらの動作環境を使用して、Microsoft(登録商標)もしくはGoogle(登録商標)もしくはMozilla(登録商標)によって作成されたブラウザ、または下記に説明されるインターネットサーバによってホストされるウェブサイトにアクセスできる他のブラウザプログラム等の1つ以上の閲覧プログラムを実行し得る。また、本原理に従った動作環境を使用して、1つ以上のコンピュータゲームプログラムを実行し得る。
【0024】
サーバ及び/またはゲートウェイは、インターネット等のネットワークを通じてデータを受信及び伝送するサーバを構成する命令を実行する1つ以上のプロセッサを含み得る。または、クライアント及びサーバは、ローカルイントラネットまたは仮想プライベートネットワークを通じて接続できる。サーバまたはコントローラは、Sony PlayStation(登録商標)等のゲーム機、パーソナルコンピュータ等によってインスタンス化され得る。
【0025】
クライアントとサーバとの間でネットワークを通じて情報を交換し得る。この目的のために及びセキュリティのために、サーバ及び/またはクライアントは、ファイアウォール、ロードバランサ、テンポラリストレージ、及びプロキシ、ならびに信頼性及びセキュリティのための他のネットワークインフラストラクチャを含み得る。1つ以上のサーバは、ネットワークメンバーにオンラインソーシャルウェブサイト等のセキュアコミュニティを提供する方法を実施する装置を形成し得る。
【0026】
プロセッサまたはプロセッサコアは、アドレスライン、データライン、及び制御ライン等の様々なライン、ならびにレジスタ及びシフトレジスタによってロジックを実行できるシングルチッププロセッサまたはマルチチッププロセッサであり得る。本発明の原理を制限することなく、フローチャートを含む様々な形式で、本明細書にロジックを表し得る。例えば、必要に応じて、状態ロジックを使用し得る。
【0027】
他の実施形態では、一実施形態に含まれるコンポーネントは、いずれかの適切な組み合わせで使用できる。例えば、本明細書で説明される及び/または図で示される様々なコンポーネントのいずれかは、組み合わされ得る、交換され得る、または他の実施形態から排除され得る。
【0028】
「A、B、及びCの少なくとも1つを有するシステム」(同様に「A、B、またはCの少なくとも1つを有するシステム」及び「A、B、Cのうちの少なくとも1つを有するシステム」)は、A単独、B単独、C単独、A及びBを一緒に、A及びCを一緒に、B及びCを一緒に、ならびに/またはA、B、及びCを一緒に有するシステム等を含む。
【0029】
ここで、具体的には
図1を参照すると、加速構造10が示され、加速構造10は、映画、コンピュータゲーム等のコンピュータシミュレーション等に使用され得るようなコンピュータ生成オブジェクトの3次元(3D)環境を表すデータ構造である。
図1の例に示される加速構造10のアーキテクチャは、バウンディングボリューム階層(BVH)であり、加速構造10は、ルートノード12、内部ノード14、及びリーフ16を伴うツリー構造である。ルートノード12及び内部ノード14はいくつかのバウンディングボリュームを含み、ルートノード12及び内部ノード14のそれぞれはノードの子に対応する。リーフ16は、1つ以上のプリミティブまたは他のタイプのジオメトリを含む。
【0030】
図2は、簡単にするために2つのレベルを伴う例示的なマルチレベルの加速構造200を示す。上位レベル(「最上位レベルの加速構造」)202は、そのリーフ204にプリミティブを含まない。代わりに、そのリーフ204は、より低レベル(「最下位レベルの加速構造」)206への基準である。最下位レベルの加速構造206は、最下位レベル206のリーフ208がプリミティブを含むという点で、最上位レベル202とは異なる。
【0031】
トップレベルの加速構造202は、ワールド空間座標にバウンディングボリューム(いくつかのアプリケーションでは、バウンディングボリューム及びプリミティブ)を有し得る。最下位レベルの加速構造206は、それぞれ、独自の座標空間を有する。これにより、例えば、最下位レベルの加速構造「Y」で表される3Dオブジェクトを、それぞれ異なる位置及び方位に2回だけ表示することが可能である。
【0032】
図1及び
図2は、本発明の原理と一致して使用され得る加速構造の非限定的な例を示す。
【0033】
図3はグラフィックプロセッサユニット(GPU)300の簡略図であり、GPU300は、1つ以上のプロセッサコア304(例では、複数のプロセッサコア304)と、1つ以上の交差エンジン306(示される例では、複数の交差エンジン306)とをサポートする半導体ダイ302を含む。交差エンジンはレイトレーシングを補助する。GPU300は、また、キャッシュ308、メモリインターフェース310、ラスタライザ312、及びレンダリングバックエンド314等のいくつかの他の機能ユニットを含み得る。
【0034】
プロセッサコア304は、ソフトウェア実装シェーダープログラム(本明細書では、「シェーダー」とも呼ばれる)を実行して、光線を初期化し、次に加速構造をトラバースすることによって、例えば、
図2の加速構造200によって表される3D環境を通して光線を発射して、加速構造に含まれるバウンディングボリューム及びプリミティブと光線を連続的に衝突させる。簡略化された実施形態では、専用ハードウェアによって実装され得る交差エンジン306は、バウンディングボリューム及びプリミティブとの光線の交差を算出し得る。したがって、光線とバウンディングボリュームとの交差及び光線とプリミティブとの交差を識別することは、交差エンジン306にオフロードできる。
図3の簡略化された概念では、プロセッサコア304は、光線の記述と一緒に、ノードまたはリーフアドレスを交差エンジン306に転送し、交差エンジンが光線とバウンディングボリュームまたはプリミティブとの交差を算出した後、交差エンジンは結果をプロセッサコアに戻す。
【0035】
しかしながら、
図3を参照して本明細書で理解されるように、処理のほとんどは、スタック管理を行い、光線状態を追跡し、中間結果等を追跡する必要があるシェーダープログラムによって処理される。本明細書でさらに理解されるように、実際には、シェーダープログラムによって直接処理される大量のロジック及び算出のために、パフォーマンスは望まれるよりも低下し得る。これに関連して、
図4(以下参照)が提供される。
【0036】
図4はレンダリングデバイス404に実装され得る共通の半導体ダイ402のGPU400を示し、レンダリングデバイス404は、限定ではないが、コンピュータシミュレーションまたはゲーム機、エンドユーザにゲームをストリーミングするコンピュータサーバ、映画のコンピュータ拡張グラフィックス等に関連付けられるデバイスであり得る。GPU400は1つ以上のプロセッサコア406(示される例では、複数のプロセッサコア406)を含み、プロセッサコア406は、1つ以上のシェーダープログラムを実行し、1つ以上のレイトレーシングユニット(RTU)408(示される例では、複数のRTU408)と通信するためのプロセッサコアである。RTUは、本明細書に開示されるタスクを実行するためのハードウェア回路を伴うハードウェアによって実装される。RTU408は、独自のハードウェア実装トラバースロジックを使用して加速構造をトラバースできる。RTU408は、バウンディングボリュームまたはプリミティブ(三角形等)との光線の交差を計算できる1つ以上の交差エンジン回路410と、加速構造をトラバースするためのトラバースロジック回路412と、加速構造のトラバースで使用されるスタックをメンテナンスするためのスタック管理回路414とを含み得る。RTU408は、同様に、他のサブユニットも含み得る。
【0037】
図4Aはより高レベルのロジックを示し、
図4BはRTU410のハードウェア回路によって実装され得るより詳細なロジックを示す。ブロック414から始まり、プロセッサコアで実行されているシェーダーは、加速構造のルートノード及び光線情報をRTU410に渡す。この情報を使用して、ブロック416において、RTUは、そのトラバースロジック回路412及びスタック管理回路414を使用して加速構造をトラバースし、バウンディングボリューム及びプリミティブとの光線の交差を識別する。ブロック418において、1つ以上の交差はシェーダーに伝達される。ブロック420において、シェーダーはいずれかの交差のヒットを識別し、ブロック422において、その識別によって得られた全体的情報を使用して、レンダリングするために画素をシェーディングする。
【0038】
いくつかの実施形態では、RTUは、
図4Bに示される加速構造のスタック管理及びトラバースを実行するための回路を含み得る。段階424において、現在のノードがルートノードまたは内部ノードであると決定された場合、RTUはブロック426に進み、現在のノードに含まれる各バウンディングボリュームとの光線の交差をチェックする。段階428において、複数の交差があると決定された場合、ブロック430において、複数の交差はソートされ、最初の交差(すなわち、光線の原点に最も近い交差)が第1の交差になり、残りは光線の原点からの距離の順になる。本質的に、交差は(光線の原点から)最短距離から最長距離にソートされる。ブロック432において、複数の交差がある場合、第2の交差以降の交差に対応する子ノードがスタックにプッシュされる。ブロック432から、または段階428から、テストがそこで否定された場合、回路はブロック434に進み、第1の交差に対応する子ノードで処理を継続する、または交差がない場合、スタックの上からポップされたノードで処理を継続する。スタックが空であるためにポップするノードがない場合、加速構造トラバースは完了する。段階424において、現在のノードがリーフであると決定された場合、ブロック436において、RTUは、リーフに含まれるプリミティブまたは複数のプリミティブとの光線の交差をチェックする。
【0039】
他の実施形態では、トラバースはスタックレスであり得る。
【0040】
図4の下半分に説明を戻すと、上記の手順を使用する例示的なトラバースが示されている。太い矢印は加速構造のトラバースを示す。太い実線のボックスは、RTUが光線とノードのバウンディングボリュームとの交差が発見されたノードを示し、太い破線のボックスは、RTUが光線とリーフに含まれるプリミティブとの交差が発見されたノードを示す。太い破線の輪郭でマークされていないトラバースのリーフは、RTUが発見されなかったリーフであり、光線とリーフに含まれるプリミティブとの交差である。例示的なトラバースの具体的なステップは次のとおりである。
【0041】
438に示されるように、トラバースはルートノードAを処理することによって始まり、それに含まれるバウンディングボリュームとの光線の交差を識別する。440及び442に示されるように、Aの子E及びJに各々対応するバウンディングボリュームは、ルートノードAの処理によって交差として識別されるため、E及びJはスタックにプッシュされる。さらに、Aの子Bに対応するバウンディングボリュームは、ルートノードAの処理からの交差としても識別され、次に、444Bにおいて、そのバウンディングボリュームは処理され、光線とそのバウンディングボリュームとの交差が識別される。次に、これにより、446においてスタックにプッシュされるプリミティブDが識別され、448において処理されるプリミティブCが識別される。示される例では、この処理によって、光線とプリミティブCとの交差がないと決定される。プリミティブDはスタックからポップされ、450において、光線との交差を識別するために処理される。この例の場合、光線とプリミティブDの交差が識別され、プリミティブがシェーダープログラムに渡され、光線とプリミティブとの「ヒット」があったかどうかが識別される(以下に説明され、
図4Cにも説明される)。
【0042】
次に、452に示されるように、バウンディングボリュームEがスタックからポップされ、交差を識別するために処理される。454に示されるように、バウンディングボリュームEの処理から識別されるプリミティブH及びIがスタックにプッシュされ、456において、バウンディングボリュームFが処理され交差が識別される。次に、458において、プリミティブGが処理され交差が識別され、プリミティブGがヒットテストのためにシェーダープログラムに渡される。460において、次のプリミティブHがスタックからポップされて処理されるが、交差が発見されない。次に、462において、プリミティブIがスタックからポップされて処理され(交差が識別され、プリミティブIがヒットテストのためにシェーダープログラムに渡され)、その次に、464において、バウンディングボリュームJがスタックからポップされて処理される。これにより、466において処理されるプリミティブKに識別につながり、交差は識別されない。
【0043】
プロセッサコア及びRTUで実行しているシェーダープログラムは協調してレイトレーシングを行う。上記の例では、プリミティブが部分的にトランスペアレントであるときの処理が示され、例えば、プリミティブは木の枝葉を表す三角形である。シェーダープログラムの目的は、加速構造(「ヒット」)によって表される3D環境の非トランスペアレント部との最初の交差(つまり、光線の原点に最も近い交差)を識別することである。
【0044】
上記を実現するためのシェーダープログラムとRTUとの間の通信を
図4Cの例に示す。最初に、シェーダープログラムはルートノードA及び光線情報をRTUに渡す。RTUは、
図4のプリミティブDの例では、光線とプリミティブとの交差に到達するまで、加速構造をトラバースする(この例では、光線とプリミティブCとの交差はなかった)。
【0045】
図4Cのブロック470から開始して、RTUはプリミティブDをシェーダープログラムに渡す。段階472において、シェーダーは光線がプリミティブDのオパーク部にヒットするかどうかを識別し、これは、光線がプリミティブのトランスペアレント部を通過するか、または光線がプリミティブのソリッド部にヒットするかを決定するためにプリミティブDをテストすることを意味する。この例では、光線はプリミティブのソリッド部にヒットする。シェーダープログラムは、プリミティブDをこれまでに発生した最初の交差として記録し、ブロック474において、交差の結果(「ヒット」)をRTUに渡す。
【0046】
ブロック476に進むと、プリミティブDとの光線の交差の位置を超えてポイントテストが行われないため、RTUは光線を短くする。ブロック478において、RTUが加速構造のトラバースを継続し、プリミティブGに到達することが示され、光線がプリミティブGと交差したことが決定される。RTUは、ヒットテストのためにGをシェーダープログラムに渡す。
【0047】
シェーダープログラムは、
図4及び
図4Cと一致するようにヒットテストを行い、光線がプリミティブGのトランスペアレント部を通過したため、ヒットがなかったことを決定する。いくつかの実施形態では、シェーダープログラムは、Gがヒットではなかったという情報をRTUに渡す。他の実施形態では、ヒットがなかったので、シェーダープログラムは、プリミティブGがヒットではなかったという情報を、RTUに渡さない。
【0048】
図4に関して説明したように、RTUはトラバースを継続し、プリミティブHに到達する。プリミティブDの「ヒット」によって光線が短くならなかった場合、交差が検出されるが、光線が短くなっているため、光線とプリミティブHとの交差はない。RTUはトラバースを継続し、プリミティブIに到達し、RTUは光線とプリミティブとの交差を検出する。RTUはプリミティブIをシェーダープログラムに渡し、シェーダープログラムはヒットテストを行う。この例では、シェーダープログラムは、ヒットがあることと、プリミティブIのヒットがプリミティブDのヒットよりも早い(つまり、光線の原点に近い)こととを決定する。したがって、シェーダープログラムは、発生した最初の交差をプリミティブIに更新する。また、シェーダープログラムは、プリミティブIにヒットがあったことをRTUに通知する。繰り返しになるが、RTUはプリミティブIのヒットに基づいて光線を短くし、加速構造のトラバースを継続し、プリミティブKに到達する。光線とプリミティブKとの交差がないため、RTUは次のノードをポップしスタックから処理しようとするが、スタックは空である。従って、RTUは処理を終了し(RTUは加速構造トラバースの終わりに到達して)、シェーダープログラムに処理が済んだことを通知する。ここで、シェーダープログラムは最初のヒットがプリミティブIにあることを認識し、シェーダープログラムはそれに応じてその処理を継続する。
【0049】
プロセッサコアとRTUとの間のこの通信の各ステップは
図4の上半分に見ることができる。プロセッサコアはルートノードAをRTUに渡す。RTUはヒットテストのためにプリミティブDをシェーダープログラムに渡し、シェーダープログラムはヒットをレポートする。RTUはヒットテストのためにプリミティブGをシェーダープログラムに渡し、シェーダープログラムはミスをレポートする。RTUは、ヒットテストのためにプリミティブIをシェーダープログラムに渡し、シェーダープログラムはヒットをレポートする。RTUは、加速構造トラバースが完了したことをシェーダープログラムに通知する。
【0050】
上記の処理手順では、シェーダープログラムがヒットテストだけを行うため、レイトレーシング速度の大幅な向上をもたらし得る。加速構造のトラバースを行わない、または対応するスタックを管理しない。
【0051】
上記では、「ノードAを通過する」、「プリミティブGを通過する」等の表現は、限定ではないが、ポインタをノードもしくはプリミティブに渡すこと、またはノードもしくはプリミティブのIDを渡すことを含む通信のためのいずれかの手順を説明するものである。上記では、「RTUがシェーダープログラムに通知する」または「シェーダープログラムがRTUに通知する」等の表現は、同様に、限定ではないが、レジスタの設定及びドアベルの呼び出し、または割り込み駆動型通信等の「プッシュ」方式、ならびに他のユニットのステータスの読み取りまたはポーリング等の「プル」方式を含むいずれかの通信方式を指す。
【0052】
次に、
図5及び
図5Aを参照されたい。
図5及び
図5Aでは、シェーダーに関するRTUの非同期動作と、プロセッサコアで実行しているシェーダープログラムがシェーダープログラムとRTUとの間の通信の全ての態様を開始する手順とが示される。
図5の上半分を参照すると、GPU500は、1つ以上のプロセッサコア502と、シェーダープログラムから非同期的に動作する1つ以上のRTU504とを含む。GPU500は、下記に言及する例外を除いて、
図4に示されるGPU400と実質的に同一の構成及び動作であり得る。
【0053】
図5Aでは、ブロック506において、シェーダープログラムがルートノードA及び光線情報をRTUに送信して、処理が開始することが示される。ブロック508において、RTUは、シェーダー動作とは非同期に加速構造をトラバースし始め、ブロック510において、シェーダーはRTUのステータスを定期的に読み取り、ブロック512において、RTUがトラバースを継続するとき、RTUはステータスをレポートする。ブロック514において、シェーダーはヒットIDをRTUに渡し、RTUがその光線を短くすることを可能にする。
【0054】
上記の動作は
図5に反映されており、左向きの矢印はシェーダープログラムによる情報の要求であり、右向きの矢印はシェーダープログラムからRTUへの情報の転送である。より具体的には、516に示されるように、シェーダープログラムはルートノードAをRTUに送信し、ステータスをRTUから読み取り、518において、ステータス「WIP」を受信し、これは、RTUがいずれかの交差をまだ発見していないことを意味する。シェーダープログラムは再度ステータスを読み取り、520において、ステータス「D」を受信し、これは、RTUがプリミティブDとの交差を発見したことを意味する。
【0055】
シェーダープログラムはヒットテストを行い、プリミティブDが光線にヒットしたことを発見し、522において、RTUが光線を短くできるように、このヒットをRTUに通知する。読み取り/レポートプロセスは、読み取りを発生させるシェーダーと非同期に、RTUが加速構造をトラバースするときに継続する。
【0056】
図5の下半分は、RTUが距離によって交差をソートする別の実施形態の例である。これにより、レイトレーシング速度の向上をもたらし得る。この例では、前述同様に、光線とプリミティブとの3つの交差がある。光線の原点に最も近い交差は「I」である。それは、524に示されるようなヒットである。光線の原点に次に近い交差は「G」である。それはミスである。光線の原点から最も遠い交差は「D」である。それは前述に示したようなヒットである。
【0057】
しかし、ここで、
図5の下半分を参照すると、最初の手順は
図5の上部の図と同一である。シェーダープログラムはルートノードA及び光線情報をRTUに送信して処理を開始し、次に、シェーダープログラムはステータスをRTUから読み取り、526において、ステータス「WIP」を受信し、これは、RTUがいずれかの交差をまだ発見していないことを意味する。シェーダープログラムは再度ステータスを読み取り、528において、ステータス「D」を受信し、これは、RTUがプリミティブDとの交差を発見したことを意味する。シェーダープログラムはヒットテストを行い、プリミティブDが光線にヒットしたことを発見し、530において、RTUが光線を短くできるように、このヒットをRTUに通知する。
【0058】
シェーダープログラムがヒットテストを行っていた間、RTUトラバースは、プリミティブG及びプリミティブIとの交差があり、プリミティブIがプリミティブGよりも光線の原点に近いことを決定した(すなわち、RTUは交差を光線の原点からの距離によってソートされた)。次に、シェーダープログラムがステータスを読み取ると、プリミティブIが光線の原点に最も近い既知の交差であるため、532において、プリミティブI(Gではない)に対してヒットテストを行うべきであることが通知される。534に示されるように、シェーダープログラムはヒットテストを行い、プリミティブIが光線にヒットしたことを発見し、このヒットをRTUに通知する。シェーダープログラムがヒットテストを行っていた間、RTUはこれ以上の交差を発見することなく加速構造のトラバースを終了した。プリミティブGの交差がプリミティブIよりも光線の原点から遠いため、プリミティブGは破棄される。次に、シェーダープログラムがステータスを読み取ると、536において、加速構造のトラバースが完了し、ヒットテストを必要とするプリミティブがないことが通知される。このような交差のソーティングは、また、半透明の環境のレイトレーシングを行うときに有用であり得る。その場合、光線の原点から最も遠い交差についてシェーダープログラムに最初に通知されるように、交差をソートすると有益をもたらす。
【0059】
図6は、RTUによって実行される加速トラバース
図600と、1つ以上のプロセッサコア606と1つ以上のRTU608(
図4もしくは
図5または本書の他の箇所で説明されるGPUのいずれか等のGPUのRTU)との間の通信
図602、604とを示すことによって、ヒットテストが必要ではないときの協調処理の例を示す。本明細書で理解されるように、加速構造のプリミティブがオパークであるとき等、ヒットテストが必要ではない場合、シェーダープログラムによって行われる処理はさらに減少し、結果として、パフォーマンスの向上をもたらす。プリミティブは、フラグまたは他の手段によって、RTUに対してオパークであると示され得る。
【0060】
図6では、プリミティブはオパークであり、RTUは、シェーダープログラムがヒットテストを行う必要なく、光線とプリミティブとの最初の交差を追跡できる。加速トラバース
図600は、本質的に、
図4に示されるのと同じ例であるが、
図6では、光線が交差するリーフは、太い破線の境界線ではなく、太字の実線の境界線で示される。したがって、
図4のように、プリミティブとの交差は、最初の交差(光線の原点に最も近い交差)から最も遠い交差まで、I-G-Dの順に3つの交差がある。
【0061】
図6の中央の通信
図602は、最初のヒットを見つけるときの、シェーダープログラムとRTUとの協調レイトレーシングを示す。RTUは最初の交差を追跡できるため、加速構造のトラバースが完了するまで、RTUは進行中の作業(「WIP」)のステータスをレポートし、その時点において、612に示されるように「完了済」のステータスをレポートし、RTUは光線が交差する最初のプリミティブとしてIを提供する。
【0062】
図6の下部の通信
図604は、シェーダープログラムが交差があるかを知りたいが、交差の詳細を知る必要がないときの、シェーダープログラムとRTUとの協調レイトレーシングを示す。これは、一般的なシャドウ及びアンビエントオクルージョンのレイトレーシングである。シェーダー処理は、光線が交差するプリミティブを見つけるとすぐに終了し、この場合、それは、614に示されるようにDである。
【0063】
下記に言及することを除いて、
図7は加速構造700を示し、加速構造700は、
図2に示される構造と同様の最上位レベル加速構造(TLAS)702及び最下位レベル加速構造(BLAS)704のセットを伴う。また、
図7は、1つ以上のプロセッサコア706とGPUの1つ以上のRTU708との間の通信図を示し、加速構造がマルチレベル階層であるときのシェーダープログラムとRTUとの協調処理の例が示される。
【0064】
TLAS702は、それぞれが各々のBLAS(BLAS704のセットの1つであるBLAS X等)へのリンクを与えるリーフ(X710等)を有する。前述に説明したように、TLAS702はワールド空間座標を使用する。BLAS704のセットにおけるBLASのそれぞれは、プリミティブを含むD712等のリーフがあり、前述にも説明したように、BLAS704のセットにおけるBLASのそれぞれは独自の座標空間を有する。この例では、シェーダープログラムの目標は最初の交差を決定することであり、加速構造の全てのプリミティブはオパークである。
【0065】
RTU708によって実施される加速構造700の望ましいトラバースは以下の通りである。TLAS720のルートノードAの処理により、子B及び子Eを表すバウンディングボリュームとの光線の交差が識別される。この場合、TLAS702のEは、RTUによってメンテナンスされるスタックにプッシュされ、TLAS702のB内に含まれるバウンディングボリュームは、光線の交差を識別するために処理される。リーフXに対応するB内のバウンディングボリュームに対して、光線との交差を発見する。次に、これは、BLAS704のセットのBLAS Xを表すリーフXの処理につながる。Xの座標空間はワールド空間の座標とは異なるため(プリミティブには独自の座標空間がある)、光線の光線属性(原点等)を変換する必要がある。
【0066】
BLAS Xのルートノードは光線の交差を識別するために処理され、Cの処理につながる。Cを処理するとき、交差はリーフノードD712のバウンディングボリュームに対して識別される。示される例では、リーフノードD712の処理により、プリミティブDとの交差が識別され、
図7のプリミティブはオパークであると想定されるため、交差は自動的にヒットとしてカウントされることを思い出されたい。Dはヒットとしてカウントされるため、RTUは、光線を光線の原点からDまでの長さに短くする。
【0067】
次に、TLAS702のEがスタックからポップされる。BLASのX部の座標空間を使用しないため、ワールド空間の光線属性を復元する必要がある。このプロセスでは、光線の長さを維持する必要がある。Eは光線の交差を識別するために処理され、交差はリーフZに対応するバウンディングボリュームに対して識別される。次に、これは、BLAS704のセットのBLAS Zを表すリーフZの処理につながる。繰り返しになるが、Zの座標空間はワールド空間の座標とは異なるため、光線の光線属性(原点等)をZの座標空間に変換する必要がある。
【0068】
BLAS Zのルートノードは光線の交差を識別するために処理され、Fの処理につながり、次にリーフGの処理につながり、これは、示される例では交差(したがって、示される「オパーク」の例では、ヒット)として識別される。光線は、原点とGのプリミティブとの間の長さに短くなる。
【0069】
一実施形態では、RTUは、BLAS704のセット内のTLAS702からBLASへの移行と、BLAS704のセット内のBLASからTLAS702への移行とを検出し、シェーダープログラムは、光線変換の更新を行い、結果をRTUに渡す。この例では、通信ステップは
図7に示すとおりであり、714から始まり、シェーダープログラムがルートノードA及び光線情報をRTUに送信して、処理を開始する。
【0070】
716に示されるように、シェーダープログラムはステータスをRTUから読み取り、進行中の作業(「WIP」)のステータスを受信し、これは、RTUがまだいずれかの交差を発見していないことを意味する。シェーダープログラムは再度ステータスを読み取り、718においてステータス「BLAS Xに入る」を受信し、RTUが加速構造700のトラバースにおいてBLAS Xへの移行を検出したことを示す。シェーダープログラムは、光線属性(原点等)をBLAS X座標空間に変換し、光線属性及びBLASルートノードXをRTUに送信する(720)。
【0071】
RTUはBLAS Xをトラバースし、光線とプリミティブDとの交差を発見し、それに応じて、光線を短くする。この例では、プリミティブがオパークであると想定されるため、シェーダーユニットでヒットテストを実行する必要がないことを思い出されたい。シェーダープログラムはステータスを読み取り、722において、ステータス「BLASから出る」を受信し、BLASのRTU処理が完了したことを示す。724に示されるように、シェーダープログラムはワールド空間光線属性をRTUに送信する。
【0072】
シェーダープログラムは再度ステータスを読み取り、726に示されるように、ステータス「BLAS Zに入る」を受信する。シェーダープログラムは、光線属性(原点等)をBLAS Z座標空間に変換し、728において、光線属性及びBLASルートノードZをRTUに送信する。RTUはBLAS Zをトラバースし、光線とプリミティブGとの交差を発見し、それに応じて、光線を短くする。次に、シェーダープログラムがステータスを読み取ると、730において、加速構造のトラバースが完了したことと、最初の交差がプリミティブGとの交差であったこととが通知される。
【0073】
別の実施形態では、RTUは、TLASからBLASまで及びBLASからTLASまで、検出された移行を処理でき、必要に応じて光線属性を更新する。この場合、
図7の例では、全ての処理がRTUによって行われるため、シェーダープログラムがルートノードAをRTUに送信した後、加速構造のRTUトラバースが完了するまで、シェーダープログラムはステータス「WIP」を読み取り、その時点において、シェーダープログラムはステータス「完了済」を読み取り、最初の交差がプリミティブ「G」との交差であった。
【0074】
図7Aは、RTUによって、またはシェーダーとRTUとの協調によって全体的に実行し得るロジックの観点から、上記で説明した座標移行ロジックを示す。この例は、2つのレベルを伴う加速構造を示す。ブロック732から開始して、光線とバウンディングボリュームとの交差の決定は、最初にワールド空間で実行される。RTUが加速構造をトラバースするとき、段階734において、RTUが別の座標空間にあるBLASにトラバースしたと決定された場合、ロジックはブロック736に進み、光線をBLASに固有の座標空間に変換し、ブロック738において、交差識別のために光線を処理する。同様に、RTUが加速構造のトラバースを継続するとき、段階740において、RTUがTLAS(ワールド空間で記述される)にトラバースしたと決定された場合、ロジックはブロック742に進み、光線をワールド空間に変換し(または、光線の属性をワールド空間にあるように復元し)、ブロック744において、交差を識別するために光線を処理する。上記の変形例では、TLASはワールド座標空間ではなく、独自の特定の座標空間にあり得る。他の変形例では、加速構造には複数のレベルがある。
図7Aと同様に、処理は進行し、トラバースが加速構造のより低レベルに到達すると光線を新しい座標空間に変換し、トラバースが加速構造のより高レベルに到達すると光線を復元または変換する。
【0075】
次に、
図8を参照されたい。
図8は、GPUの1つ以上のRTU802と通信する1つ以上のプロセッサコア800で実行しているシェーダーによって決定された交差の例を示す。前述の例では、RTUは、テスト用の光線がプリミティブと交差するかどうかを決定し、例えば、プリミティブは三角形であり、RTUの交差エンジンは光線と三角形との交差を決定できる。対照的に、
図8では、加速構造806のリーフN(804)に関連付けられるジオメトリは、RTUの交差エンジンが交差を算出できないようなジオメトリを有し、例えば、そのジオメトリは球である。
【0076】
したがって、いくつかの実施形態では、以下のように、シェーダープログラム及びRTUは協調してレイトレーシングを行う。RTUは、本明細書の他の箇所で説明されるように、加速構造806をトラバースする。RTUは、ノードM(808)のバウンディングボリュームに対して光線をテストし、光線がリーフN(804)に対応するバウンディングボリュームと交差したことを決定する。シェーダープログラムがステータスを読み取ると、810において、シェーダープログラムはNのバウンディングボリュームが交差しているとのステータスを受信する。シェーダープログラムは、光線とリーフNに含まれる球とのヒットテストを行い、ヒットがあったことを決定する。これは、812において、ヒットがあったことをRTUに通知し、それに応じて、RTUによって光線を短くできるように、ヒットの位置もRTUに通知する。リーフNのプリミティブが球であるという事実は、それが球であるというプリミティブに関連付けられるフラグまたは他のインジケータ(または処理するためにRTUの能力を超える他のジオメトリ)に基づいて、RTU及び/またはシェーダーによって識別され得る。
【0077】
いくつかの例示的な実施形態を参照して本原理を説明してきたが、これらは限定することを意図していないことと、様々な代替の配置を使用して、本明細書で請求される主題を実施し得ることとが認識される。