(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-12-05
(54)【発明の名称】境界ボリューム階層のボックスノードの圧縮
(51)【国際特許分類】
G06T 15/06 20110101AFI20241128BHJP
【FI】
G06T15/06
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2024535344
(86)(22)【出願日】2022-11-03
(85)【翻訳文提出日】2024-06-25
(86)【国際出願番号】 US2022048892
(87)【国際公開番号】W WO2023129276
(87)【国際公開日】2023-07-06
(32)【優先日】2021-12-27
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】591016172
【氏名又は名称】アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED
(74)【代理人】
【識別番号】100108833
【氏名又は名称】早川 裕司
(74)【代理人】
【識別番号】100111615
【氏名又は名称】佐野 良太
(74)【代理人】
【識別番号】100162156
【氏名又は名称】村雨 圭介
(72)【発明者】
【氏名】スカイラー ジョナソン サレハ
(72)【発明者】
【氏名】チェン ファン
(57)【要約】
レイトレーシング動作を行うための技術が提供される。本技術は、圧縮ボックスノードの1つ以上の共通指数値を、圧縮ボックスノードの1つ以上の最小頂点仮数及び圧縮ボックスノードの1つ以上の最大頂点仮数と組み合わせて、1つ以上の最小頂点及び1つ以上の最大頂点を取得することと、1つ以上の最小頂点のうち何れかの最小頂点と1つ以上の最大頂点のうち何れかの最大頂点とを組み合わせて、圧縮ボックスノードの圧縮ボックスデータアイテムのための境界ボックスを取得することと、を含む。
【選択図】
図6
【特許請求の範囲】
【請求項1】
レイトレーシング動作を行うための方法であって、
圧縮ボックスノードの1つ以上の共通指数値を、前記圧縮ボックスノードの1つ以上の最小頂点仮数及び前記圧縮ボックスノードの1つ以上の最大頂点仮数と組み合わせて、1つ以上の最小頂点及び1つ以上の最大頂点を取得することと、
前記1つ以上の最小頂点のうち何れかの最小頂点と前記1つ以上の最大頂点のうち何れかの最大頂点とを組み合わせて、前記圧縮ボックスノードの圧縮ボックスデータアイテムの境界ボックスを取得することと、を含む、
方法。
【請求項2】
前記共通指数値は、各座標成分に対して1つの共通指数値を含む、
請求項1の方法。
【請求項3】
前記共通指数値は、ボックスノードの複数のボックスデータアイテムにわたって共有される、
請求項1の方法。
【請求項4】
前記共通指数値は、ボックスノードの最小頂点仮数と最大頂点仮数との間で共有される、
請求項1の方法。
【請求項5】
前記圧縮ボックスノードの子ボックスノード内の子圧縮ボックスデータアイテムへのポインタを、前記圧縮ボックスデータアイテムの第1子ポインタと、前記子ボックスノードの他の子圧縮ボックスデータアイテムについての情報と、を組み合わせることによって取得することを含む、
請求項1の方法。
【請求項6】
前記圧縮ボックスノードの前記1つ以上の最小頂点仮数及び前記圧縮ボックスノードの前記1つ以上の最大頂点仮数を拡張して、前記1つ以上の最小頂点及び前記1つ以上の最大頂点を取得することを含む、
請求項1の方法。
【請求項7】
ボックスノードを圧縮して、前記圧縮ボックスノードを生成することを含む、
請求項1の方法。
【請求項8】
前記ボックスノードを圧縮することは、ボックスノードの各座標成分についての共通指数を識別することを含む、
請求項7の方法。
【請求項9】
前記境界ボックスを用いて光線-ボックス交差試験を実行することを含む、
請求項1の方法。
【請求項10】
システムであって、
圧縮ボックスノードを記憶するように構成されたメモリと、
前記メモリに結合され、動作を実行するように構成されたプロセッサと、を備え、
前記動作は、
前記圧縮ボックスノードの1つ以上の共通指数値を、前記圧縮ボックスノードの1つ以上の最小頂点仮数及び前記圧縮ボックスノードの1つ以上の最大頂点仮数と組み合わせて、1つ以上の最小頂点及び1つ以上の最大頂点を取得することと、
前記1つ以上の最小頂点のうち何れかの最小頂点と前記1つ以上の最大頂点のうち何れかの最大頂点とを組み合わせて、前記圧縮ボックスノードの圧縮ボックスデータアイテムのための境界ボックスを取得することと、を含む、
システム。
【請求項11】
前記共通指数値は、各座標成分に対して1つの共通指数値を含む、
請求項10のシステム。
【請求項12】
前記共通指数値は、ボックスノードの複数のボックスデータアイテムにわたって共有される、
請求項10のシステム。
【請求項13】
前記共通指数値は、ボックスノードの最小頂点仮数と最大頂点仮数との間で共有される、
請求項10のシステム。
【請求項14】
前記プロセッサは、
前記圧縮ボックスノードの子ボックスノード内の子圧縮ボックスデータアイテムへのポインタを、前記圧縮ボックスデータアイテムの第1子ポインタと、前記子ボックスノードの他の子圧縮ボックスデータアイテムについての情報と、を組み合わせることによって取得するように構成されている、
請求項10のシステム。
【請求項15】
前記プロセッサは、
前記圧縮ボックスノードの前記1つ以上の最小頂点仮数及び前記圧縮ボックスノードの前記1つ以上の最大頂点仮数を拡張して、前記1つ以上の最小頂点及び前記1つ以上の最大頂点を取得するように構成されている、
請求項10のシステム。
【請求項16】
前記プロセッサは、
ボックスノードを圧縮して、前記圧縮ボックスノードを生成するように構成されている、
請求項10のシステム。
【請求項17】
前記ボックスノードを圧縮することは、ボックスノードの各座標成分についての共通指数を識別することを含む、
請求項16のシステム。
【請求項18】
前記プロセッサは、
前記境界ボックスを用いて光線-ボックス交差試験を実行するように構成されている、
請求項10のシステム。
【請求項19】
命令を記憶するコンピュータ可読記憶媒体であって、
前記命令は、プロセッサによって実行されると、
圧縮ボックスノードの1つ以上の共通指数値を、前記圧縮ボックスノードの1つ以上の最小頂点仮数及び前記圧縮ボックスノードの1つ以上の最大頂点仮数と組み合わせて、1つ以上の最小頂点及び1つ以上の最大頂点を取得することと、
前記1つ以上の最小頂点のうち何れかの最小頂点と前記1つ以上の最大頂点のうち何れかの最大頂点とを組み合わせて、前記圧縮ボックスノードの圧縮ボックスデータアイテムの境界ボックスを取得することと、
を含む動作を前記プロセッサに行わせる、
コンピュータ可読記憶媒体。
【請求項20】
前記共通指数値は、各座標成分に対して1つの共通指数値を含む、
請求項19のシステム。
【発明の詳細な説明】
【技術分野】
【0001】
(関連出願の相互参照)
本願は、2021年12月27日に出願された米国特許出願第17/562,889号の利益を主張するものであり、その内容は、参照により本明細書に組み込まれる。
【背景技術】
【0002】
レイトレーシング(ray tracing)は、シミュレートされた光線が物体交差を試験するために投射され、ピクセルが光線投射の結果に基づいて着色される一種のグラフィックスレンダリング技術である。レイトレーシングは、ラスタライズベースの技術よりも計算コストが高くなるが、より物理的に正確な結果を生み出す。レイトレーシング動作の改善が絶えず行われている。
【0003】
添付の図面と共に例として与えられる以下の説明から、より詳細な理解を得ることができる。
【図面の簡単な説明】
【0004】
【
図1】本開示の1つ以上の特徴を実装することができる、例示的なデバイスのブロック図である。
【
図2】一例による、
図1の加速処理デバイスでの処理タスクの実行に関する追加の詳細を示すデバイスのブロック図である。
【
図3】一例による、レイトレーシング技術を使用してグラフィックをレンダリングするためのレイトレーシングパイプラインを示す図である。
【
図4】一例による、境界ボリューム階層を示す図である。
【
図5】ボックスノードを含む例示的な境界ボリューム階層を示す図である。
【
図6】一例による、ボックスノードの圧縮スキームを示す図である。
【
図7】一例による、ボックスノードを圧縮するための方法のフロー図である。
【
図8】一例による、ボックスノードを解凍するための方法のフロー図である。
【
図9】一例による、圧縮ボックスノードを利用して交差について光線を試験するための方法のフロー図である。
【発明を実施するための形態】
【0005】
レイトレーシング動作を行うための技術が提供される。本技術は、圧縮ボックスノードの1つ以上の共通指数値を、圧縮ボックスノードの1つ以上の最小頂点仮数(minimum vertex mantissas)及び圧縮ボックスノードの1つ以上の最大頂点仮数(maximum vertex mantissas)と組み合わせて、1つ以上の最小頂点及び1つ以上の最大頂点を取得することと、1つ以上の最小頂点のうち何れかの最小頂点と1つ以上の最大頂点のうち何れかの最大頂点とを組み合わせて、圧縮ボックスノードの圧縮ボックスデータアイテムのための境界ボックスを取得することと、を含む。
【0006】
図1は、本開示の1つ以上の特徴を実装することができる例示的なデバイス100のブロック図である。デバイス100は、例えば、コンピュータ、ゲームデバイス、ハンドヘルドデバイス、セットトップボックス、テレビ、携帯電話、又は、タブレットコンピュータを含む。デバイス100は、プロセッサ102、メモリ104、ストレージ106、1つ以上の入力デバイス108、及び、1つ以上の出力デバイス110を含む。また、デバイス100は、オプションで、入力ドライバ112及び出力ドライバ114を含む。デバイス100は、
図1に示されていない追加の構成要素を含むことを理解されたい。
【0007】
様々な代替例では、プロセッサ102は、中央処理ユニット(central processing unit、CPU)、グラフィックス処理ユニット(graphics processing unit、GPU)、同じダイ上に位置するCPU及びGPU、又は、1つ以上のプロセッサコアを含み、各プロセッサコアは、CPU又はGPUとすることができる。様々な代替例では、メモリ104は、プロセッサ102と同じダイ上に位置するか、又は、プロセッサ102とは別に位置する。メモリ104は、揮発性又は不揮発性メモリ(例えば、ランダムアクセスメモリ(random access memory、RAM)、ダイナミックRAM、キャッシュ)を含む。
【0008】
ストレージ106は、固定若しくはリムーバブルストレージ(例えば、ハードディスクドライブ、ソリッドステートドライブ、光ディスク、フラッシュドライブ)を含む。入力デバイス108は、キーボード、キーパッド、タッチスクリーン、タッチパッド、検出器、マイクロフォン、加速度計、ジャイロスコープ、生体認証スキャナ、又は、ネットワーク接続(例えば、無線IEEE802シグナルの送信及び/又は受信のための無線ローカルエリアネットワークカード)を含むが、これらに限定されない。出力デバイス110は、表示デバイス118、スピーカ、プリンタ、触覚フィードバックデバイス、1つ以上の光、アンテナ、又は、ネットワーク接続(例えば、無線IEEE802信号の送信及び/又は受信のための無線ローカルエリアネットワークカード)を含むが、これらに限定されない。
【0009】
入力ドライバ112は、プロセッサ102及び入力デバイス108と通信し、プロセッサ102が入力デバイス108から入力を受信することを可能にする。出力ドライバ114は、プロセッサ102及び出力デバイス110と通信し、プロセッサ102が出力デバイス110に出力を送信することを可能にする。入力ドライバ112及び出力ドライバ114は、オプションの構成要素であること、並びに、デバイス100は、入力ドライバ112及び出力ドライバ114が存在しない場合に、同じ方式で動作することに留意されたい。出力ドライバ114は、表示デバイス118に連結された加速処理デバイス(Accelerated Processing Device、APD)116を含む。APD116は、プロセッサ102から計算コマンド及びグラフィックスレンダリングコマンドを受け入れて、それらの計算及びグラフィックスレンダリングコマンドを処理し、表示のために表示デバイス118にピクセル出力を提供するように構成される。以下で更に詳細に説明するように、APD116は、単一命令複数データ(single-instruction-multiple-data、SIMD)パラダイムに従って計算を実施するように構成された1つ以上の並列処理ユニットを含む。したがって、様々な機能が、本明細書では、APD116によって又はAPD116と併せて行われるものとして説明されているが、様々な代替例では、APD116によって行われるものとして説明される機能は、追加的又は代替的に、ホストプロセッサ(例えば、プロセッサ102)によってドライブされず、表示デバイス118に(グラフィック)出力を提供するように構成された同様の能力を有する他のコンピューティングデバイスによって行われる。例えば、SIMDパラダイムに従って処理タスクを行う任意の処理システムは、本明細書に説明される機能を行うように構成することができることが企図される。代替的に、SIMDパラダイムに従って処理タスクを実施しないコンピューティングシステムが、本明細書に説明される機能を実施することが企図される。
【0010】
図2は、APD116上の処理タスクの実行に関する追加の詳細を示すデバイス100のブロック図である。プロセッサ102は、システムメモリ104内で、プロセッサ102による実行のための1つ以上の制御論理モジュールを維持する。制御論理モジュールは、オペレーティングシステム120、ドライバ122及びアプリケーション126を含む。これらの制御論理モジュールは、プロセッサ102及びAPD116の動作の様々な特徴を制御する。例えば、オペレーティングシステム120は、ハードウェアと直接通信し、プロセッサ102上で実行される他のソフトウェアのためのハードウェアへのインターフェースを提供する。ドライバ122は、例えば、プロセッサ102上で実行されるソフトウェア(例えば、アプリケーション126)にアプリケーションプログラミングインターフェース(application programming interface、API)を提供して、APD116の様々な機能にアクセスすることによって、APD116の操作を制御する。いくつかの実施形態では、ドライバ122は、APD116の処理構成要素(以下で更に詳細に説明されるSIMDユニット138等)によって実行するためのプログラムをコンパイルするジャストインタイムコンパイラを含む。他の実施形態では、プログラムをコンパイルするためにジャストインタイムコンパイラが使用されず、通常のアプリケーションコンパイラが、APD116上で実行するためにシェーダプログラムをコンパイルする。
【0011】
APD116は、並列処理及び/又は非順序処理に適しているグラフィック動作及び非グラフィック動作等の選択された機能のためのコマンド及びプログラムを実行する。APD116は、プロセッサ102から受信したコマンドに基づいて、ピクセル動作、幾何学計算、及び、表示デバイス118への画像のレンダリング等のグラフィックスパイプライン動作を実行するために使用される。また、APD116は、プロセッサ102から受信したコマンドに基づいて、ビデオ、物理シミュレーション、計算流体力学又は他のタスクに関連する動作等のように、グラフィックス動作に直接関連しない計算処理動作を実行する。
【0012】
APD116は、プロセッサ102の要求で、SIMDパラダイムに従って並列の方式で動作を行う1つ以上のSIMDユニット138を含む計算ユニット132(並列処理ユニット202と共に)を含む。SIMDパラダイムは、複数の処理要素が単一のプログラム制御フローユニット及びプログラムカウンタを共有し、したがって同じプログラムを実行するが、そのプログラムを異なるデータで実行することができるものである。一例では、各SIMDユニット138は、16個のレーンを含み、各レーンは、SIMDユニット138内の他のレーンと同時に同じ命令を実行するが、その命令を異なるデータで実行する。レーンは、全てのレーンが所定の命令を実行する必要がない場合、予測でオフに切り替えることができる。また、予測は、分岐制御フローを有するプログラムを実行するために使用することができる。より具体的には、制御フローが個々のレーンによって行われる計算に基づいている条件付き分岐又は他の命令を有するプログラムについては、現在実行されていない制御フローパスに対応するレーンの予測及び異なる制御フローパスのシリアル実行が、任意の制御フローを可能にする。実施形態では、計算ユニット132の各々は、ローカルL1キャッシュを有することができる。実施形態では、複数の計算ユニット132がL2キャッシュを共有する。
【0013】
計算ユニット132内の実行の基本的単位は、ワークアイテムである。各ワークアイテムは、特定のレーンにおいて並列で実行されるプログラムの単一のインスタンス化を表す。ワークアイテムは、単一のSIMDユニット138上の「ウェーブフロント(wavefront)」として同時に実行することができる。1つ以上のウェーブフロントが「ワークグループ」に含まれ、これは、同じプログラムを実行するように指定されたワークアイテムの集合体を含む。ワークグループは、ワークグループを構成するウェーブフロントのそれぞれを実行することによって実行される。代替例では、ウェーブフロントは、単一のSIMDユニット138上で連続して、又は、異なるSIMDユニット138上で部分的に若しくは完全に並列に実行される。ウェーブフロントは、単一のSIMDユニット138上で同時に実行され得るワークアイテムの最大集合体と考えることができる。したがって、プロセッサ102から受信されたコマンドが、プログラムが単一のSIMDユニット138上で同時に実行させることができない程度に特定のプログラムが並列化されるべきであることを示す場合、そのプログラムは、2つ以上のSIMDユニット138上に並列化されるか、又は、同じSIMDユニット138上で直列化される(又は必要に応じて並列化及び直列化の両方)ウェーブフロントに分けられる。スケジューラ136は、異なる計算ユニット132及びSIMDユニット138上の様々なウェーブフロントのスケジューリングに関連する操作を行うように構成される。
【0014】
計算ユニット132によって与えられる並列処理は、ピクセル値計算、頂点変換及び他のグラフィック動作等のグラフィック関連動作に好適である。したがって、場合によっては、プロセッサ102からのグラフィックス処理コマンドを受け入れるグラフィックスパイプライン134は、並列で実行するために計算タスクを計算ユニット132に提供する。
【0015】
また、計算ユニット132は、グラフィックに関連しないか又はグラフィックスパイプライン134の「通常の」動作の一部(例えば、グラフィックスパイプライン134の動作に対して行われる処理を補足するために行われるカスタム動作)として行われない計算タスクを行うために使用される。プロセッサ102上で実行されるアプリケーション126又は他のソフトウェアは、そのような計算タスクを定義するプログラムを、実行のためにAPD116に送信する。
【0016】
計算ユニット132は、レイトレーシングを実施し、これは、シミュレート光線とシーン内の物体との間の交差を試験することによって3Dシーンをレンダリングする技術である。レイトレーシングに関与するワークの多くは、以下で更に詳細に説明するように、計算ユニット132内のSIMDユニット138上で実行されるプログラム可能なシェーダプログラムによって行われる。
【0017】
図3は、一例による、レイトレーシング技術を使用してグラフィックをレンダリングするためのレイトレーシングパイプライン300を示す図である。レイトレーシングパイプライン300は、レイトレーシングを利用してシーンをレンダリングすることに関与する動作及びエンティティの概要を提供する。光線生成シェーダ(ray generation shader)302、任意のヒットシェーダ(any hit shader)306、最も近いヒットシェーダ(closest hit shader)310、及び、ミスシェーダ(miss shader)312は、SIMDユニット138内で実行されるシェーダプログラムによって機能が果たされるレイトレーシングパイプラインステージを表すシェーダ実装(実行)ステージである。各特定のシェーダ実装ステージでの特定のシェーダプログラムの何れも、アプリケーション提供コードによって(すなわち、アプリケーションコンパイラによって事前にコンパイルされ、及び/又は、ドライバ122によってコンパイルされた、アプリケーション開発者によって提供されるコードによって)定義される。加速構造横断ステージ(acceleration structure traversal stage)304は、光線交差試験を行って、光線が三角形にヒットするかどうかを判定する。
【0018】
様々なプログラマブルシェーダステージ(光線生成シェーダ302、任意のヒットシェーダ306、最も近いヒットシェーダ310、ミスシェーダ312)は、SIMDユニット138上で実行されるシェーダプログラムとして実装される。加速構造横断ステージ304は、ソフトウェアに(例えば、SIMDユニット138上で実行されるシェーダプログラムとして)、ハードウェアに、又は、ハードウェアとソフトウェアとの組み合わせとして実装される。ヒット又はミスユニット308は、他のユニットの何れの一部として等のように、任意の技術的に実現可能な様態で実装されるか、ハードウェア加速された構造として実装されるか、又は、SIMDユニット138上で実行されるシェーダプログラムとして実装される。レイトレーシングパイプライン300は、部分的若しくは完全にソフトウェアに、又は、部分的若しくは完全にハードウェアに編成され、プロセッサ102、スケジューラ136によって、それらの組み合わせによって、又は、部分的に若しくは完全に任意の他のハードウェア及び/若しくはソフトウェアユニットによって編成されてもよい。本明細書で使用される「レイトレーシングパイプラインプロセッサ」という用語は、レイトレーシングパイプライン300の動作を行うためのソフトウェアを実行するプロセッサ、レイトレーシングパイプライン300の動作を行うための物理的に結線されたハードウェア回路、又は、レイトレーシングパイプライン300の動作を一緒に行うハードウェアとソフトウェアの組み合わせを指す。
【0019】
レイトレーシングパイプライン300は、以下の態様で動作する。光線生成シェーダ302が行われる。光線生成シェーダ302は、三角形に対して試験する光線のデータを設定し、三角形と交差するために光線を試験する加速構造横断ステージ304を要求する。
【0020】
加速構造横断ステージ304は、シーンボリューム及びシーン内の物体(三角形等)を記述するデータ構造である加速構造を横断し、シーン内の三角形に対して光線を試験する。様々な例では、加速構造は境界ボリューム階層(bounding volume hierarchy)である。いくつかの実施形態では、加速構造横断ステージ304の一部であるヒット又はミスユニット308は、加速構造横断ステージ304の結果(重心座標及び可能性のあるヒット時間等の生データを含み得る)が実際にヒットを示すかどうかを判定する。ヒットした三角形に対して、レイトレーシングパイプライン300は、任意のヒットシェーダ306の実行をトリガする。複数の三角形が、単一の光線によってヒットされ得ることに留意されたい。加速構造横断ステージは、光線起点に最も近いものから光線起点から最も遠いものへの順序で加速構造を横断することが保証されていない。ヒット又はミスユニット308は、光線がヒットする光線の起点に最も近い三角形に対して最も近いヒットシェーダ310の実行をトリガするか、又は、三角形がヒットしなかった場合に、ミスシェーダをトリガする。
【0021】
任意のヒットシェーダ306が光線交差試験ユニット304からのヒットを「拒否」することが可能であり、したがって、ヒット又はミスユニット308は、光線交差試験ユニット304によってヒットが見つからないか又は受け入れられない場合、ミスシェーダ312の実行をトリガすることに留意されたい。任意のヒットシェーダ306がヒットを「拒否」し得る例示的な状況は、光線交差試験ユニット304がヒットしたと報告する三角形の少なくとも一部が完全に透明である場合である。光線交差試験ユニット304は、幾何形状のみを試験し、透明性を試験しないため、少なくともいくらかの透明性を有する三角形へのヒットのために、呼び出される任意のヒットシェーダ306は、報告されたヒットが実際には、三角形の透明部分に「ヒットした」ために、ヒットではないと判定することがある。最も近いヒットシェーダ310の典型的な使用は、素材のテクスチャに基づいて素材を着色することである。ミスシェーダ312の典型的な使用は、スカイボックスによって設定された色でピクセルを着色することである。最も近いヒットシェーダ310及びミスシェーダ312のために定義されたシェーダプログラムは、画素を着色するため及び/又は他の動作を行うための多種多様な技術を実装し得ることを理解されたい。
【0022】
光線生成シェーダ302が光線を生成する典型的な方法は、後方レイトレーシング(backwards ray tracing)と称される技術を用いるものである。後方レイトレーシングでは、光線生成シェーダ302は、カメラの点に起点を有する光線を生成する。光線が画面に対応するように定義された平面を交差する点は、光線がその色を判定するために使用される画面上のピクセルを定義する。光線が物体にヒットする場合、そのピクセルは、最も近いヒットシェーダ310に基づいて着色される。光線が物体にヒットしない場合、ピクセルは、ミスシェーダ312に基づいて着色される。複数の光線がピクセルごとに投射されてもよく、ピクセルの最終の色は、ピクセルの光線の各々について判定された色のいくつかの組み合わせによって判定される。本明細書の他の場所で説明されるように、個々の光線が複数のサンプルを生成することが可能であり、各サンプルは、光線が三角形をヒットするか又は三角形をヒットしないかを示す。一例では、光線は、4つのサンプルで投射される。2つのそのようなサンプルは三角形をヒットし、2つはヒットしない。したがって、三角形の色は、ピクセルの最終的な色に部分的にだけ(例えば、50%)寄与し、色の他の部分は、他のサンプルによってヒットされた三角形に基づいて判定されるか、又は、三角形がヒットされない場合に、ミスシェーダによって判定される。いくつかの例では、シーンをレンダリングすることは、画像の複数のピクセルの各々に対して少なくとも1つの光線を投射して、各ピクセルについて色を得ることを伴う。いくつかの例では、マルチサンプルレンダリングターゲットについてピクセルごとに複数の色を得るために、複数の光線がピクセルごとに投射される。いくつかのそのような例では、いくらか後の時間に、マルチサンプルレンダリングターゲットは、色混合を通して圧縮されて、表示又は更なる処理のための単一サンプル画像を得る。ピクセルごとに複数の光線を投射することによってピクセルごとに複数のサンプルを得ることが可能であるが、本明細書では、1つの光線のみを投射することによってピクセルごとに複数のサンプルが得られるように、光線ごとに複数のサンプルを得るための技術が提供されている。ピクセルごとに追加のサンプルを得るために、そのようなタスクを複数回行うことが可能である。より具体的には、ピクセルごとに複数の光線を投射し、ピクセルごとに得られるサンプルの総数が、光線ごとのサンプル数にピクセルごとの光線の数を掛けたものになるように、光線ごとに複数のサンプルを得ることが可能である。
【0023】
任意のヒットシェーダ306、最も近いヒットシェーダ310及びミスシェーダ312のうち何れかが、光線試験点(ray test point)でレイトレーシングパイプライン300に入る独自の光線を引き起こすことが可能である。これらの光線は、任意の目的に使用することができる。1つの一般的な使用は、環境照明又は反射を実装することである。一例では、最も近いヒットシェーダ310が呼び出された場合に、最も近いヒットシェーダ310は、様々な方向に光線を引き起こす。引き起こされた光線によってヒットされた各物体又は光について、最も近いヒットシェーダ310は、最も近いヒットシェーダ310に対応するピクセルに照明強度及び色を追加する。レイトレーシングパイプライン300の様々な構成要素を使用してシーンをレンダリングすることができる方法のいくつかの例が説明されているが、多種多様な技術の何れもが代替的に使用され得ることを理解されたい。
【0024】
上述したように、光線が物体をヒットするかどうかの判定は、本明細書では「光線交差試験」と称される。光線交差試験は、起点から光線を発射し、光線が三角形にヒットするかどうかを判定し、そうである場合、三角形ヒットの起点からの距離がどれだけかを判定することを伴う。効率を高めるために、レイトレーシング試験は、境界ボリューム階層と称される空間の表現を使用する。この境界ボリューム階層は、上述した「加速構造」である。境界ボリューム階層では、各非葉ノードは、そのノードの全ての子供の幾何形状を境界付ける軸整列境界ボックス(axis aligned bounding box)を表す。一例では、ベースノードは、光線交差試験が行われている領域全体の最大範囲を表す。この例では、ベースノードは、各々が、領域全体をサブ分割する相互に排他的な軸整列境界ボックスを表す2つの子供を有する。それらの2つの子供の各々は、それらの親の空間をサブ分割する軸整列境界ボックスを表す2つの子ノードを有する等である。葉ノードは、光線試験を行うことができる三角形を表す。
【0025】
境界ボリューム階層データ構造は、そのようなデータ構造が使用されておらず、したがってシーン内の全ての三角形を光線に対して試験する必要があるシナリオと比較して、光線-三角形交差の数(これは、複雑であり、且つ、そのため、処理リソースの点で高価である)が低減されることを可能にする。具体的には、光線が特定の境界ボックスと交差せず、その境界ボックスが多数の三角形を境界付ける場合、そのボックス内の全ての三角形を試験から排除することができる。こうして、光線交差試験は、軸整列境界ボックスに対する光線の一連の試験として行われ、三角形に対する試験が続く。
【0026】
図4は、一例による、境界ボリューム階層を示す図である。簡単にするために、階層は、2Dで示されている。しかしながら、3Dへの拡張は単純であり、本明細書に説明される試験は概して三次元で行われることを理解されたい。
【0027】
境界ボリューム階層の空間表現402が
図4の左側に示されており、境界ボリューム階層の木表現404が
図4の右側に示されている。空間表現402及び木表現404の両方において、非葉ノードが文字「N」で表され、葉ノードが文字「O」で表されている。光線交差試験は、木404を通って横断することによって行われ、試験された各非葉ノードについて、その非葉ノードに対するボックス試験が失敗した場合、そのノードの下の枝を排除する。排除されない葉ノードに対しては、光線-三角形交差試験が行われて、光線がその葉ノードで三角形と交差するかどうかを判定する。
【0028】
一例では、光線は、O5と交差するが、他の三角形とは交差しない。試験は、N1に対して試験し、その試験が成功したことを判定する。試験は、N2対して試験し、試験が失敗したことを判定する(O5はN1内にないため)。この試験は、N2の全てのサブノードを排除し、N3に対して試験を行い、その試験が成功することに留意されたい。この試験は、N6及びN7を試験し、N6は成功するが、N7は失敗することに留意されたい。この試験は、O5及びO6を試験し、O5は成功するが、O6は失敗することに留意されたい。8つの三角形試験を試験する代わりに、2つの三角形試験(O5及びO6)並びに5つのボックス試験(N1、N2、N3、N6、N7)が行われる。
【0029】
図5は、ボックスノード502を含む例示的な境界ボリューム階層500を示す。ボックスノード502等のノードは、複数のジオメトリ要素(境界ボックス等)のデータを含むデータの単位を表す。ボックスノード502は、ボックスデータアイテム504を含む。ボックスデータアイテム504は、
図4のボックス(N)と同様の境界ボックスを記述する。各ボックスデータアイテム504は、境界ボックスのジオメトリの記述(例えば、最小頂点及び最大頂点)、及び、別のボックスノード502又は三角形ノード(
図5には示さず)へのポインタを含む。ボックスデータアイテム504の境界ボックスは、ポインタが指すノード内のジオメトリを囲む。言い換えれば、境界ボックスのボックスデータアイテム504は、そのジオメトリがその境界ボックス内に収まるノードを指す。三角形ブロック(図示せず)は、
図4の三角形(O)に類似する1つ以上の三角形のデータを含む。
【0030】
図示されたBVH500を横断するために、レイトレーシングパイプライン300は、ボックスノード502で開始し、そのボックスノード502のボックスデータアイテムの境界ボックスとの交差について光線を試験する。交差試験が失敗した場合、レイトレーシングパイプライン300は、そのボックスデータアイテム504の全ての子を考慮から除外する。交差が失敗しない場合、レイトレーシングパイプライン300は、そのボックスデータアイテム504の子を試験する。いくつかのボックスデータアイテム504はボックスノード502を指し、いくつかのボックスデータアイテム504は三角形ノードを指す。レイトレーシングパイプライン300が三角形ノードに到着したことに応じて、レイトレーシングパイプライン300は、光線が三角形ノードの1つ以上の三角形と交差するかどうかを決定するために光線交差試験を実行する。レイトレーシングパイプライン300がボックスノードに到着したことに応じて、レイトレーシングパイプライン300は、上述したように、そのボックスノードの子を試験する。
【0031】
図6は、一例による、ボックスノード502の圧縮スキームを示す図である。コンプレッサ610は、ボックスノード502を、非圧縮ボックスノード502よりもデータ消費の少ない圧縮ボックスノード620に変換する。コンプレッサ610は、本明細書で説明される圧縮を実行することができる任意の技術的に実現可能なエンティティである。いくつかの例では、コンプレッサ610は、ソフトウェア、ハードウェア又はそれらの組み合わせである。いくつかの例では、コンプレッサ610は、「オフライン」で(すなわち、アプリケーションがエンドユーザデバイス上で実行されていない間に)境界ボリューム階層を生成するアプリケーション開発者に帰属するコンピュータシステムの一部である。他の例では、コンプレッサ610は、エンドユーザのためのアプリケーションを実行するコンピュータシステムの一部である。いくつかの例では、コンプレッサ610は、アプリケーションがエンドユーザデバイス又は別のデバイス上で実行されている間にボックスノード502を圧縮する。いくつかの例では、コンプレッサ610は、プロセッサ102上、APD116上、又は、別のプロセッサ上で実行されるソフトウェアである。いくつかの例では、コンプレッサ610は、デバイス100等の任意のデバイス内(例えば、プロセッサ102の内部、APD116の内部、又は、別の部分の内部)に存在するハードワイヤードの回路であるか又はその一部である。
【0032】
ボックスノード502は、いくつかのボックスデータアイテム504(例えば、4つのボックスデータアイテム504)を含む。各ボックスデータアイテム504は、最小頂点501及び最大頂点503を含み、これらは共に境界ボックスを指定する。いくつかの実施形態では、ボックスデータアイテム504によって指定された境界ボックスが軸整列され、これは、各面が軸平面に対して整列されることを意味する。このような境界ボックスは、各軸におけるボックスの最小範囲を定義する最小頂点501と、各軸におけるボックスの最大範囲を定義する最大頂点503と、によって定義することができる。最小頂点501及び最大頂点503の各々は、x成分、y成分及びz成分によって定義される。図示した例では、最小頂点501は、最小X成分605(X)、最小Y成分605(Y)、及び、最小Z成分605(Z)を含む。加えて、最大頂点503は、最大X成分607(X)、最大Y成分607(Y)、及び、最大Z成分607(Z)を含む。
【0033】
各最小成分605及び最大成分607は浮動小数点数であり、したがって指数602及び仮数604を含む。また、ボックスデータアイテム504は、複数の子ポインタ606を含む。単一のボックスデータアイテム504が1つの単一ノード(すなわち、ボックスノード又は三角形ノード)に関連付けられているので、ボックスデータアイテム504内の各子ポインタ606は、同じノードの異なるボックスデータアイテム504を指す。図示されていないが、図示されたボックスノード502内の他のボックスデータアイテム504も、最小頂点501、最大頂点503、及び、子ポインタ606を含む。
【0034】
通常、各軸の指数値は、ボックスデータアイテム504にわたっても非常に類似している。したがって、コンプレッサ610は、個々のボックスデータアイテム628から指数を除去し、X成分622の共通指数、Y成分624の共通指数及びZ成分626の共通指数を含めることによって、圧縮ボックスノード620を生成する。したがって、非圧縮ボックスノード502のボックスデータアイテム504を置き換える各圧縮ボックスデータアイテム628は、X最小仮数630、X最大仮数632、Y最小仮数634、Y最大仮数636、Z最小仮数638、及び、Z最大仮数を含む。X最小仮数630及びX成分622の共通指数は、非圧縮ボックスノード502の最小頂点501のX成分を形成する。同様に、Y最小仮数634及びY成分624の共通指数は、非圧縮ボックスノード502の最小頂点501のY成分を形成し、Z最小仮数638及びZ成分626の共通指数は、非圧縮ボックスノード502の最小頂点501のZ成分を形成する。同様に、X最大仮数632及び共通X指数622は、非圧縮ボックスノード502の最大頂点503に対するX成分を形成し、Y最大仮数636及び共通Y成分624は、最大頂点503に対するY成分を形成し、Z最大仮数640及び共通Z成分626は、最大頂点503に対するZ成分を形成する。共通X指数622、共通Y成分624及び共通Z成分626は、圧縮ボックスノード620内の圧縮ボックスデータアイテム628にわたって共有され、したがって、指数は、成分ごとに個別に記憶される必要はない。
【0035】
概して、ボックスノード502内の異なる境界ボックスのスケールがほぼ同じであるので、異なる圧縮ボックスデータアイテム628における最小成分を有する指数及び最大成分を有する指数を共有することが可能である。指数値の共有は、圧縮ボックスノード620内に含まれる指数値の数を大幅に低減することにより、圧縮ボックスノード620に必要とされる空間の量を削減する。
【0036】
上記に加えて、いくつかの実施形態では、子ポインタ606が圧縮される。具体的には、圧縮ボックスノード620内の全ての圧縮ボックスデータアイテム628をメモリ内で隣接させることによって、第1ボックスデータアイテム628へのポインタを、そのポインタアドレスからのオフセットを計算するための暗黙的又は明示的サイズ情報と共に記憶することが可能である。より具体的には、本明細書の他の箇所で説明されるように、非圧縮ボックスノード502において、子ボックスノード502に関連付けられたボックスデータアイテム504は、子ボックスノードのボックスデータアイテム504の各々への子ポインタ606を含む。この情報を使用して子ボックスノード内の任意の特定のボックスデータアイテム504にアクセスするために、子ポインタ606を使用して、そのボックスデータアイテム504のメモリ位置を見つける。圧縮ボックスノード620には、第1子ポインタ650及び追加子情報652が含まれる。第1子ポインタ650は、子ノードの第1圧縮ボックスデータアイテム628を指す。追加子情報652は、子圧縮ボックスノード620の他の圧縮ボックスデータアイテム628を見つけるための情報を含む。いくつかの例では、追加子情報652は、圧縮ボックスデータアイテム628のサイズを示す情報を含む。このサイズ情報は、第1子ポインタ650によって指定されたアドレスに、特定の圧縮ボックスデータアイテム628の前にある全ての圧縮ボックスデータアイテム628のサイズを追加することによって、子の特定の圧縮ボックスデータアイテム628へのアクセスを可能にする。いくつかの例では、追加子情報652は、子圧縮ボックスノード620に含まれる圧縮ボックスデータアイテム628のタイプを指定するタイプ情報を含む。このタイプ情報は、子ノード内の圧縮ボックスデータアイテム628のサイズを暗黙的に記述する。したがって、第1子ポインタ650のアドレスに対して、所望の圧縮ボックスデータアイテム628の前の各圧縮ボックスデータアイテム628のサイズを追加することによって、任意の圧縮ボックスデータアイテム628にアクセスすることができ、このサイズはタイプ情報によって決定される。
【0037】
いくつかの実施形態では、ボックスノード502を圧縮して圧縮ボックスノード620を生成するために、他の技術が代替的に又は追加的に適用される。いくつかの例では、圧縮ボックスノード620内の仮数は、非圧縮ボックスノード502内の仮数604より小さい。
【0038】
図7は、一例による、ボックスノード502を圧縮して圧縮ボックスノード620を生成するための方法700のフロー図である。請求項1~6のシステムに関して説明されているが、当業者は、任意の技術的に実現可能な順序で方法700のステップを実施するように構成された任意のシステムが本開示の範囲に含まれることを理解するであろう。
【0039】
コンプレッサ610は、ボックスノード502から圧縮ボックスノード620を次のように生成する。702において、コンプレッサ702は、ボックスノード502内のボックスデータアイテム504の共通指数を抽出する。より具体的には、コンプレッサ610は、共通X指数622、共通Y指数624及び共通Z指数626として使用されるボックスデータアイテム504の各々のx成分、y成分及びz成分の各々について単一の指数値を識別する。いくつかの例では、コンプレッサ610は、何れかのコンポーネントのための指数として、1つのボックスデータアイテム504のうち何れかの最小頂点501又は最大頂点503のうち少なくとも1つのコンポーネント値のうち何れかの指数値602を識別する。他の例では、コンプレッサ610は、何れかの成分の指数として、各ボックスデータアイテム504内に見出される各成分の指数値の間にあるが、それに等しくない中間値を識別する。一例として、ボックスデータアイテム504の最小頂点及び最大頂点のX成分に対して、指数が10、10、10、11、11、11、13、15である場合、コンプレッサ610は、1つの値(例えば、11)を共通X指数622として含んでもよく、14のような中間値を共通X指数622として用いてもよい。ボックスノードの指数622のセットから共通指数を識別するための任意の他の技術的に実行可能な手段が可能である。ステップ704において、コンプレッサ610は、各圧縮ボックスデータアイテムの仮数と共に、共通コンポーネントを圧縮ボックスノード620に格納する。
【0040】
また、コンプレッサ610は、圧縮ボックスデータアイテム628の第1子ポインタ650を生成する。第1子ポインタ650は、各特定の圧縮ボックスデータアイテム628に関連付けられたボックスノード620の第1圧縮ボックスデータアイテム628を指す。また、コンプレッサ610は、追加子情報652を圧縮ボックスデータアイテム628に格納する。上記に加えて、いくつかの実装において、コンプレッサ610は、圧縮ボックスノード620内に圧縮された仮数を生成するために、仮数のサイズを縮小する。
【0041】
図8は、圧縮ボックスノード620を解凍してボックスノード502を生成する方法800のフロー図である。請求項1~6のシステムに関して説明されているが、当業者は、任意の技術的に実現可能な順序で方法800のステップを実施するように構成された任意のシステムが本開示の範囲に含まれることを理解するであろう。
【0042】
デコンプレッサ611は、圧縮ボックスノード620から解凍ボックスノード502を生成する。デコンプレッサ611は、ソフトウェア、ハードウェア又はそれらの組み合わせとして具現化される。様々な例では、デコンプレッサ611は、プロセッサ102、APD116又は別のエンティティのうち何れかの中にある(又はその上で実行している)。様々な例では、デコンプレッサ611の少なくとも一部は、例えば、APD116、プロセッサ102又は別のエンティティ内に含まれるハードウェア回路である。いくつかの例では、デコンプレッサ611は、レイトレーシングパイプライン300が加速構造を横断する間、境界ボリューム階層の少なくとも一部を記憶するメモリとインターフェースする。例えば、レイトレーシングパイプライン300がボックスノードの読み取りを要求する場合、デコンプレッサ611は、圧縮ボックスノード620を解凍して、解凍ボックスノード502を生成する。圧縮ボックスノード620を解凍するために、ステップ802において、デコンプレッサ611は、X成分、Y成分及びZ成分の各々に対する共通指数を、最小X仮数、最小Y仮数、最小Z仮数、最大X仮数、最大Y仮数及び最大Z仮数と組み合わせて、最小頂点のX成分、Y成分及びZ成分、並びに、最大頂点のX成分、Y成分及びZ成分を生成する。いくつかの実施形態では、子ポインタを再構成する必要がなく、デコンプレッサ611は、単に、圧縮子ポインタ情報(第1子ポインタ650及び追加子情報652)を使用して、適切な圧縮ボックスデータアイテム628を読み取り、対応する浮動小数点数を生成する。しかしながら、他の実施形態又は動作モードでは、デコンプレッサ611は、解凍ボックスデータアイテム504を指す新しい子ポインタ606を生成することによって子ポインタ606を再構成する。仮数のサイズが低減される例では、デコンプレッサ611は、パディングの使用等のように、任意の技術的に実行可能な技術を通じて仮数のサイズを増加させる。ステップ804において、デコンプレッサ611は、最小頂点と最大頂点を組み合わせてボックス記述を取得する。いくつかの例では、このボックス記述は、解凍ボックスデータアイテム504を含むが、他の例では、ボックス記述は、ボックスデータアイテム504の形式ではなく、境界ボックス情報を必要とするエンティティ(レイトレーシングパイプライン300等)によって直接使用される。
【0043】
図9は、一例による、圧縮ボックスノード502を利用して交差について光線を試験するための方法900のフロー図である。請求項1~6のシステムに関して説明されているが、当業者は、任意の技術的に実現可能な順序で方法900のステップを実施するように構成された任意のシステムが本開示の範囲に含まれることを理解するであろう。
【0044】
ステップ902において、プロセッサ(例えば、プロセッサ102又はAPD116)等のエンティティは、圧縮ボックスノードを解凍してボックス情報を取得する。いくつかの例では、解凍は、
図8に関して説明したように行われる。ステップ904において、レイトレーシングパイプライン300等のエンティティは、本明細書の他の箇所で説明されるように、取得された解凍ボックスノードに対して光線を試験する。
【0045】
本開示は、境界ボリューム階層のリーフノード内にあるものとして三角形を参照することがあるが、任意の他の幾何学的形状がリーフノード内で代替的に使用され得ることに留意されたい。そのような事例では、圧縮された三角形ブロックは、少なくとも1つの頂点を共有する2つ以上のそのようなプリミティブを含む。
【0046】
図に示されたユニットの各々は、本明細書に説明される動作を行うように構成されたハードウェア回路、本明細書に説明される動作を行うように構成されたソフトウェア、又は、本明細書に説明されるステップを行うように構成されたソフトウェア及びハードウェアの組み合わせを表す。例えば、レイトレーシングパイプライン300、光線生成シェーダ302、任意のヒットシェーダ306、ヒット又はミスユニット308、ミスシェーダ312、最も近いヒットシェーダ310、及び、加速構造横断ステージ304は、完全にハードウェアで実装されるか、完全に処理ユニット(計算ユニット132等)上で実行されるソフトウェアで実装されるか、又は、それらの組み合わせとして実装される。いくつかの例では、加速構造横断ステージ304は、部分的にハードウェアとして実装され、部分的にソフトウェアとして実装される。いくつかの例では、境界ボリューム階層を横断する加速構造横断ステージ304の部分は、プロセッサ上で実行されるソフトウェアであり、光線-ボックス交差試験及び光線-三角形交差試験を実行する加速構造横断ステージ304の部分は、ハードウェアで実装される。
【0047】
本明細書の開示に基づいて、多くの変形が可能であることを理解されたい。特徴及び要素が特定の組み合わせで上述されているが、各特徴又は要素は、他の特徴及び要素を用いずに単独で、又は、他の特徴及び要素を用いて若しくは用いずに様々な組み合わせで使用することができる。
【0048】
提供される方法は、汎用コンピュータ、プロセッサ又はプロセッサコアにおいて実施することができる。好適なプロセッサとしては、例として、汎用プロセッサ、専用プロセッサ、従来型プロセッサ、デジタルシグナルプロセッサ(digital signal processor、DSP)、複数のマイクロプロセッサ、DSPコアに関連する1つ以上のマイクロプロセッサ、コントローラ、マイクロコントローラ、特定用途向け集積回路(Application Specific Integrated Circuit、ASIC)、フィールドプログラマブルゲートアレイ(Field Programmable Gate Array、FPGA)回路、任意の他のタイプの集積回路(integrated circuit、IC)、及び/又は、状態マシンが挙げられる。そのようなプロセッサは、処理されたハードウェア記述言語(hardware description language、HDL)命令及びネットリストを含む他の中間データ(コンピュータ可読媒体に記憶させることが可能な命令)の結果を使用して製造プロセスを構成することによって製造することができる。そのような処理の結果はマスクワークとすることができ、次いで、このマスクワークを半導体製造プロセスにおいて使用して、実施形態の態様を実装するプロセッサを製造する。
【0049】
本明細書に提供される方法又はフローチャートは、汎用コンピュータ又はプロセッサによる実行のために非一時的なコンピュータ可読記憶媒体に組み込まれるコンピュータプログラム、ソフトウェア又はファームウェアにおいて実施することができる。非一時的なコンピュータ可読記憶媒体の例としては、読み取り専用メモリ(ROM)、ランダムアクセスメモリ(RAM)、レジスタ、キャッシュメモリ、半導体メモリデバイス、内蔵ハードディスク及びリムーバブルディスク等の磁気媒体、磁気光学媒体、並びに、CD-ROMディスク及びデジタル多用途ディスク(DVD)等の光学媒体が挙げられる。
【国際調査報告】