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