(57)【要約】  レイトレーシングのための方法および装置は、第1のレイおよび第1の形状体に関するレイ交差テストを実行するためにGPUのテクスチャパイプラインハードウェアを使用するステップを含み得る。レイ交差テストを実行するためにテクスチャパイプラインハードウェアを使用するステップは、テクスチャパイプラインハードウェアを用いて複数の内積を計算することと、複数の内積に基づいて第1のレイが第1の形状体に交差するかどうかを判定することとを含み得る。
2017534976.tif 000002
【特許請求の範囲】
【請求項１】
レイトレーシングのための方法であって、
第1のレイと第1の形状体とに関するレイ交差テストを実行するためにグラフィックス処理ユニットのテクスチャパイプラインハードウェアを使用するステップを含み、前記使用するステップが、
前記テクスチャパイプラインハードウェアを用いて複数の内積を計算することと、
前記複数の内積に基づいて、前記第1のレイが前記第1の形状体に交差するかどうかを判定することと
を含む、方法。
【請求項２】
前記第1の形状体がボックスまたは矩形のうちの1つである、請求項1に記載の方法。
【請求項３】
前記第1の形状体が軸平行バウンディングボックスである、請求項1に記載の方法。
【請求項４】
前記複数の内積を計算することが、前記テクスチャパイプラインハードウェアの固定関数内積ハードウェアユニットを用いて前記複数の内積を計算することを含む、請求項1に記載の方法。
【請求項５】
前記複数の内積に基づいて少なくとも1つの最小計算および少なくとも1つの最大計算を実行するステップをさらに含み、前記第1のレイが前記第1の形状体に交差するかどうかに関する前記判定が、前記少なくとも1つの最小計算および前記少なくとも1つの最大計算に基づく、請求項1に記載の方法。
【請求項６】
複数の命令の各々に関してGPUのシェーダプロセッサを用いて、前記命令がレイ-ボックス交差テスト命令であるかどうかを判定するステップと、
レイ-ボックス交差テスト命令であると判定された各命令に関して、情報を前記テクスチャパイプラインハードウェアに送るステップであって、前記情報が少なくとも前記第1のレイおよび前記第1の形状体に基づく、ステップと
をさらに含む、請求項1に記載の方法。
【請求項７】
前記テクスチャパイプラインハードウェアを用いて、前記第1のレイが前記第1の形状体に交差するかどうかを判定するステップと、
前記第1のレイが前記第1の形状体に交差するかどうかを示す指示を前記テクスチャパイプラインハードウェアからシェーダプロセッサに送るステップと
をさらに含む、請求項1に記載の方法。
【請求項８】
レイトレーシングのためのデバイスであって、
グラフィックス処理ユニット(GPU)を含み、前記GPUが、
少なくとも1つのシェーダプロセッサと、
テクスチャパイプラインとを含み、前記テクスチャパイプラインが、
複数の内積を計算することと、
前記複数の内積に基づいて、第1のレイが第1の形状体に交差するかどうかを判定することと、
前記第1のレイが前記第1の形状体に交差するかどうかに関する前記判定に基づく情報を前記少なくとも1つのシェーダプロセッサに提供することと
を行うように構成される、デバイス。
【請求項９】
前記第1の形状体がボックスまたは矩形のうちの1つである、請求項8に記載のデバイス。
【請求項１０】
前記第1の形状体が軸平行バウンディングボックスである、請求項8に記載のデバイス。
【請求項１１】
前記複数の内積を計算することが、前記テクスチャパイプラインの固定関数内積ハードウェアユニットを用いて前記複数の内積を計算することを含む、請求項8に記載のデバイス。
【請求項１２】
前記テクスチャパイプラインが、
前記複数の内積に基づいて少なくとも1つの最小計算および少なくとも1つの最大計算を実行するようにさらに構成され、前記第1のレイが前記第1の形状体に交差するかどうかに関する前記判定が、前記少なくとも1つの最小計算および前記少なくとも1つの最大計算に基づく、請求項8に記載のデバイス。
【請求項１３】
前記少なくとも1つのシェーダプロセッサが、
複数の命令の各々に関して、前記命令がレイ-ボックス交差テスト命令であるかどうかを判定することと、
レイ-ボックス交差テスト命令であると判定された各命令に関して、情報を前記テクスチャパイプラインに送ることとを行うように構成され、前記情報が少なくとも前記第1のレイおよび前記第1の形状体に基づく、請求項8に記載のデバイス。
【請求項１４】
少なくとも1つのシェーダプロセッサと、
テクスチャパイプラインとを含み、前記テクスチャパイプラインが、
複数の内積を計算することと、
前記複数の内積に基づいて、第1のレイが第1の形状体に交差するかどうかを判定することと、
前記第1のレイが前記第1の形状体に交差するかどうかに関する前記判定に基づく情報を前記少なくとも1つのシェーダプロセッサに提供することと
を行うように構成される、グラフィックス処理ユニット(GPU)。
【請求項１５】
前記第1の形状体がボックスまたは矩形のうちの1つである、請求項14に記載のGPU。
【請求項１６】
前記第1の形状体が軸平行バウンディングボックスである、請求項14に記載のGPU。
【請求項１７】
前記複数の内積を計算することが、前記テクスチャパイプラインの固定関数内積ハードウェアユニットを用いて前記複数の内積を計算することを含む、請求項14に記載のGPU。
【請求項１８】
前記テクスチャパイプラインが、
前記複数の内積に基づいて少なくとも1つの最小計算および少なくとも1つの最大計算を実行するようにさらに構成され、前記第1のレイが前記第1の形状体に交差するかどうかに関する前記判定が、前記少なくとも1つの最小計算および前記少なくとも1つの最大計算に基づく、請求項14に記載のGPU。
【請求項１９】
前記少なくとも1つのシェーダプロセッサが、
複数の命令の各々に関して、前記命令がレイ-ボックス交差テスト命令であるかどうかを判定することと、
レイ-ボックス交差テスト命令であると判定された各命令に関して、情報を前記テクスチャパイプラインに送ることとを行うように構成され、前記情報が少なくとも前記第1のレイおよび前記第1の形状体に基づく、請求項14に記載のGPU。
【請求項２０】
レイトレーシングのためのデバイスであって、
第1のレイと第1の形状体とに関するレイ交差テストを実行するためにグラフィックス処理ユニット(GPU)のテクスチャパイプラインハードウェアを採用するための手段を含み、前記採用するための手段が、
前記テクスチャパイプラインハードウェアを用いて複数の内積を計算するための手段と、
前記複数の内積に基づいて、前記第1のレイが前記第1の形状体に交差するかどうかを判定するための手段と
を含む、デバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、グラフィックス処理に関し、より詳細には、レイ-ボックス交差テストのための技法に関する。
【背景技術】
【０００２】
レイトレーシング(ray tracing)は、表示用の3D画像を生成するのに使用されるコンピュータグラフィックス技法である。より具体的には、レイトレーシングは、3次元(3D)シーンを通る3Dレイを追跡し、レイ-プリミティブの交点を見つけるプロセスであり、その結果、3Dシーンの2次元(2D)表示を実現する場合がある。レイトレーシングに使用される一技法は、レイ-三角形交点を特定することである。入力レイと三角形のセットとを仮定すれば、アルゴリズムの目標は、どの三角形がレイによって交差されるか、および/または交点のセットを特定することである。レイトレーシング演算を加速させるために、プリミティブ(たとえば、三角形)は、一般に、シーンプリミティブを階層的にグループ化する加速データ構造体(ADS:acceleration data structure)中に編成される。
【０００３】
加速データ構造体の例には、バウンディングボリューム階層(BVH:bounding volume hierarchy)ツリー、k次元(KD)ツリー、グリッドなどがある。ADSは、レイが交差する、シーンのプリミティブを特定するためにシーンプリミティブの階層上でレイ交差テストを実行することによって再帰的に横断され得る。BVHツリーを介してレイを追跡するために、一般に、2つのタイプの演算、すなわち、レイ-ボックス交差テスト(たとえば、レイ-AABB(axis-aligned bounding box(軸平行バウンディングボックス))交差テスト)と、レイ-三角形交差テストとが使用される。
【発明の概要】
【課題を解決するための手段】
【０００４】
本開示の技法は、一般に、レイトレーシングに関する。たとえば、本開示の態様は、一般に、たとえばレイ-ボックス交差テストを含む、レイトレーシングのいくつかの態様を実行するためにグラフィックス処理ユニット(GPU)のテクスチャパイプライン内のハードウェアユニットを再使用することに関する。特に、いくつかの例では、レンダリングパイプラインのテクスチャユニットの内積ユニットが、レイ-ボックス交差テスト中に使用され得る。
【０００５】
本開示の1つまたは複数の態様の詳細を添付の図面および以下の説明に記載する。本開示で説明する技法の他の特徴、目的、および利点は、これらの説明および図面、ならびに特許請求の範囲から明らかになろう。
【図面の簡単な説明】
【０００６】
【図１】本開示の技法を実装し得る例示的なシステムを示すブロック図である。
【図２】本開示の技法を実装し得る、図1のシステムの一例を示すブロック図である。
【図３】GPUがレイトレーシングを実行し得る例示的なシーンを示す概念図である。
【図４】例示的なシーンをバウンディングボリュームに区分することを示す概念図である。
【図５】図4に示すバウンディングボリュームおよびプリミティブに関連付けられたノードを有する例示的な階層データ構造体を示す概念図である。
【図６】本開示の技法による、レイトレーシングのためのプロセスを示す流れ図である。
【図７】図2のテクスチャパイプラインの一部分として採用され得るフィルタパイプラインの一例を示すブロック図である。
【図８】図6のプロセスの一例を示す流れ図である。
【図９】本開示の技法による、図6および/または図8のプロセスの一部分の一例として採用され得る、レイがボックスに交差するかどうかを判定するための例示的なプロセスを示す流れ図である。
【発明を実施するための形態】
【０００７】
本開示の態様は、一般にグラフィックス処理に関する。いくつかの例では、これらの技法は、レイ-プリミティブ交差テストに関連し得る。
【０００８】
本開示の態様は、第1のレイおよび第1の形状体に関するレイ交差テストを実行するためにグラフィックス処理ユニット(GPU)のテクスチャパイプラインハードウェアを使用することを含み得る、レイトレーシングのための方法および装置に関し得る。レイ交差テストを実行するためにテクスチャパイプラインハードウェアを使用することは、テクスチャパイプラインハードウェアを用いて複数の内積を計算することと、複数の内積に基づいて第1のレイが第1の形状体に交差するかどうかを判定することとを含み得る。
【０００９】
図1は、本開示の1つまたは複数の態様を実装するように構成され得る例示的なシステム/コンピューティングデバイスを示すブロック図である。図1に示すように、システム/デバイス2は、限定はしないが、ビデオデバイス、メディアプレーヤ、セットトップボックス、携帯電話およびいわゆるスマートフォンなどのワイヤレスハンドセット、携帯情報端末(PDA)、デスクトップコンピュータ、ラップトップコンピュータ、ゲームコンソール、ビデオ会議ユニット、タブレットコンピューティングデバイスなどを含むコンピューティングデバイスであり得る。図1の例では、デバイス2は、中央処理ユニット(CPU)6、システムメモリ10、およびGPU12を含み得る。デバイス2は、ディスプレイプロセッサ14、トランシーバモジュール3、ユーザインターフェース4、およびディスプレイ8も含み得る。トランシーバモジュール3およびディスプレイプロセッサ14は、どちらもCPU6および/もしくはGPU12と同じ集積回路(IC)の一部である場合があるか、どちらもCPU6および/もしくはGPU12を含む1つもしくは複数のICの外部にある場合があるか、またはCPU6および/もしくはGPU12を含むICの外部にあるIC内に形成される場合がある。
【００１０】
デバイス2は、明快のために、図1に示さない追加のモジュールまたはユニットを含み得る。たとえば、デバイス2は、デバイス2がモバイルワイヤレス電話である例では電話通信をもたらし、デバイス2がメディアプレーヤである場合にはスピーカーをもたらすために、図1には示していない、スピーカーおよびマイクロフォンを含み得る。デバイス2は、ビデオカメラも含み得る。さらに、デバイス2に示す様々なモジュールおよびユニットは、デバイス2のすべての例には必要でない場合がある。たとえば、ユーザインターフェース4およびディスプレイ8は、デバイス2が、デスクトップコンピュータ、または外部のユーザインターフェースもしくはディスプレイとインターフェースするために装備された他のデバイスである例ではデバイス2の外部にある場合がある。
【００１１】
ユーザインターフェース4の例は、限定しないが、トラックボール、マウス、キーボード、および他のタイプの入力デバイスを含む。ユーザインターフェース4は、タッチスクリーンであってもよく、ディスプレイ8の一部として組み込まれてもよい。トランシーバモジュール3は、デバイス2と他のデバイスまたはネットワークとの間のワイヤレス通信またはワイヤード通信を可能にするための回路を含み得る。トランシーバモジュール3は、変調器、復調器、および増幅器と、ワイヤード通信またはワイヤレス通信のための他のそのような回路を含み得る。
【００１２】
CPU6は、実行用のコンピュータプログラムの命令を処理するように構成された中央処理ユニット(CPU)などのマイクロプロセッサである場合がある。CPU6は、デバイス2の演算を制御する汎用プロセッサまたは専用プロセッサを含み得る。ユーザは、CPU6に1つまたは複数のソフトウェアアプリケーションを実行させるためにデバイス2に入力を提供し得る。CPU6上で実行するソフトウェアアプリケーションは、たとえば、オペレーティングシステム、ワードプロセッサアプリケーション、電子メールアプリケーション、スプレッドシートアプリケーション、メディアプレーヤアプリケーション、ビデオゲームアプリケーション、グラフィカルユーザインターフェースアプリケーション、または別のプログラムを含み得る。加えて、CPU6は、GPU12の演算を制御するためのGPUドライバ22を実行し得る。ユーザは、キーボード、マウス、マイクロフォン、タッチパッド、またはユーザインターフェース4を介してデバイス2に結合される別の入力デバイスなどの1つまたは複数の入力デバイス(図示せず)を介してデバイス2に入力を提供し得る。
【００１３】
CPU6上で実行されるソフトウェアアプリケーションは、ディスプレイ8へのグラフィックスデータのレンダリングを行わせるようCPU6に命令する1つまたは複数のグラフィックスレンダリング命令を含み得る。いくつかの例では、ソフトウェア命令は、たとえば、オープングラフィックスライブラリ(OpenGL(登録商標))API、オープングラフィックスライブラリ組込みシステム(OpenGL ES)API、Direct3D API、X3D API、RenderMan API、WebGL API、または任意の他の公的もしくはプロプライエタリ規格グラフィックスAPIなどのグラフィックスアプリケーションプログラミングインターフェース(API)に準拠し得る。グラフィックスレンダリング命令を処理するために、CPU6は、GPU12にグラフィックスデータのレンダリングの一部または全部を実行させるために、1つまたは複数のグラフィックスレンダリングコマンドをGPU12に(たとえば、GPUドライバ22を通じて)発行し得る。いくつかの例では、レンダリングされるべきグラフィックスデータは、グラフィックスプリミティブ、たとえば、点、線、三角形、四角形、三角形ストリップなどのリストを含んでもよい。
【００１４】
GPU12は、1つまたは複数のグラフィックスプリミティブをディスプレイ8にレンダリングするためのグラフィックス動作を実行するように構成され得る。したがって、CPU6上で実行されるソフトウェアアプリケーションのうちの1つがグラフィックス処理を必要とするとき、CPU6は、ディスプレイ8にレンダリングするためにグラフィックスコマンドおよびグラフィックスデータをGPU12に与え得る。グラフィックスデータは、たとえば、描画コマンド、状態情報、プリミティブ情報、テクスチャ情報などを含み得る。GPU12は、いくつかの事例では、CPU6よりも効率的な、複雑なグラフィック関連動作の処理を実現する高度並列構造で構築され得る。たとえば、GPU12は、複数の頂点またはピクセル上で並列に動作するように構成されたシェーダユニットなどの複数の処理要素を含み得る。GPU12の高度並列の性質は、いくつかの事例では、CPU6を使用してシーンを直接ディスプレイ8に描画するよりも速く、GPU12がグラフィックス画像(たとえば、GUIならびに2次元(2D)および/または3次元(3D)グラフィックスシーン)をディスプレイ8上で描画することを可能にし得る。
【００１５】
GPU12は、いくつかの事例では、デバイス2のマザーボードに統合され得る。他の事例では、GPU12は、デバイス2のマザーボード内のポート内にインストールされたグラフィックスカード上に存在する場合があるか、または場合によっては、デバイス2と相互動作するように構成された周辺デバイス内に組み込まれる場合がある。GPU12は、1つもしくは複数のマイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、デジタル信号プロセッサ(DSP)、または他の均等な集積論理回路もしくは個別論理回路などの1つまたは複数のプロセッサを含み得る。GPU12は、1つまたは複数のプロセッサコアを含む場合もあり、その結果、GPU12は、マルチコアプロセッサと呼ばれる場合がある。
【００１６】
GPU12は、グラフィックスメモリ40に直接結合され得る。したがって、GPU12は、バスを使用することなく、グラフィックスメモリ40からデータを読み取り、グラフィックスメモリ40にデータを書き込む場合がある。言い換えれば、GPU12は、オフチップメモリではなく、ローカルストレージを使用して局所的にデータを処理し得る。そのようなグラフィックスメモリ40は、オンチップメモリと呼ばれる場合がある。このグラフィックスメモリ40は、GPU12が、重いバストラフィックを経る場合があるバスを介してGPU12がデータを読み書きする必要性を除去することによって、より効率的に動作することを可能にする。しかしながら、いくつかの事例では、GPU12は、別個のメモリを含まず、代わりに、バスを介してシステムメモリ10を利用する場合がある。グラフィックスメモリ40は、たとえば、ランダムアクセスメモリ(RAM)、スタティックRAM(SRAM)、ダイナミックRAM(DRAM)、消去可能プログラマブルROM(EPROM)、電気的消去可能プログラマブルROM(EEPROM)、フラッシュメモリ、磁気データ媒体または光学記憶媒体など、1つまたは複数の揮発性もしくは不揮発性メモリまたはストレージデバイスを含み得る。
【００１７】
いくつかの例では、GPU12は、システムメモリ10内に十分に形成された画像を記憶し得る。ディスプレイプロセッサ14は、画像を表示するためにディスプレイ8のピクセルを照明させる、システムメモリ10からの画像および出力値を取り出す場合がある。ディスプレイ8は、GPU12によって生成された画像コンテンツを表示するデバイス2のディスプレイである場合がある。ディスプレイ8は、液晶ディスプレイ(LCD)、有機発光ダイオードディスプレイ(OLED)、陰極線管(CRT)ディスプレイ、プラズマディスプレイ、または別のタイプのディスプレイデバイスである場合がある。
【００１８】
本開示の態様によれば、GPU12は、階層データ構造体内に複数のプリミティブを編成し得る。GPU12は、内積を計算し、計算された内積に基づいてレイ交差テスト(たとえば、レイ-ボックス交差テスト)を実行するように構成されたテクスチャパイプラインを含み得る。
【００１９】
図2は、図1のCPU6、GPU12、およびシステムメモリ10の例示的な実装形態をさらに詳細に示すブロック図である。図2に示すように、CPU6は、各々がCPU6上で実行する1つまたは複数のソフトウェアアプリケーションまたはサービスである場合がある、少なくとも1つのソフトウェアアプリケーション18、グラフィックスAPI20、およびGPUドライバ22を含み得る。
【００２０】
CPU6およびGPU12が利用可能なメモリは、システムメモリ10およびフレームバッファ16を含み得る。フレームバッファ16は、システムメモリ10の一部であってもよく、またはシステムメモリ10とは別であってもよい。フレームバッファ16は、レンダリングされた画像データを記憶し得る。
【００２１】
ソフトウェアアプリケーション18は、GPU12の機能を利用する任意のアプリケーションであり得る。たとえば、ソフトウェアアプリケーション18は、GUIアプリケーション、オペレーティングシステム、ポータブルマッピングアプリケーション、エンジニアリングもしくは美術アプリケーション用のコンピュータ支援デザインプログラム、ビデオゲームアプリケーション、または2Dもしくは3Dグラフィックスを使用する別のタイプのソフトウェアアプリケーションであってもよい。
【００２２】
ソフトウェアアプリケーション18は、グラフィカルユーザインターフェース(GUI)および/またはグラフィックスシーンをレンダリングするようにGPU12に命令する1つまたは複数の描画命令を含み得る。たとえば、描画命令は、GPU12によってレンダリングされるべき1つまたは複数のグラフィックスプリミティブのセットを定義する命令を含み得る。いくつかの例では、描画命令は、GUIで使用される複数のウィンドウ処理サーフェスの全部または一部をまとめて定義してもよい。追加の例では、描画命令は、アプリケーションによって定義されたモデル空間またはワールド空間内に1つまたは複数のグラフィックスオブジェクトを含むグラフィックスシーンの全部または一部をまとめて定義してもよい。
【００２３】
ソフトウェアアプリケーション18は、1つまたは複数のグラフィックスプリミティブを表示可能グラフィックス画像にレンダリングするために、グラフィックスAPI20を介して1つまたは複数のコマンドをGPU12に発出するようにGPUドライバ22を起動し得る。たとえば、ソフトウェアアプリケーション18は、グラフィックスAPI20を介して、プリミティブ定義をGPU12に提供するようにGPUドライバ22を起動し得る。いくつかの事例では、プリミティブ定義は、描画プリミティブ、たとえば、三角形、矩形、三角形ファン、三角形ストリップなどのリストの形態でGPU12に提供され得る。プリミティブ定義は、レンダリングされるプリミティブに関連する1つまたは複数の頂点を指定する頂点仕様を含み得る。頂点仕様は、各頂点の位置座標を含み、いくつかの事例では、たとえば、色座標、法線ベクトル、およびテクスチャ座標などの、頂点に関連する他の属性を含み得る。プリミティブ定義は、プリミティブタイプ情報(たとえば、三角形、矩形、三角形ファン、三角形ストリップなど)、スケーリング情報、回転情報などを含む場合もある。ソフトウェアアプリケーション18によってGPUドライバ22に発出された命令に基づいて、GPUドライバ22は、プリミティブをレンダリングするためにGPU12が実行する1つまたは複数の演算を指定する1つまたは複数のコマンドを策定し得る。GPU12がCPU6からコマンドを受け取るとき、グラフィックス処理パイプライン24は、コマンドを復号し、コマンドに指定された演算を実行するようにグラフィックス処理パイプライン24を構成する。たとえば、グラフィックス処理パイプライン24内の入力アセンブラ26は、プリミティブデータを読み取り、データをアセンブルし、グラフィックス処理パイプライン24の他のグラフィックスパイプラインステージが使用するためのプリミティブにする場合がある。グラフィックス処理パイプライン24は、指定された演算を実行した後、レンダリングされたデータをディスプレイデバイスに関連するフレームバッファ16に出力する。
【００２４】
フレームバッファ16は、GPU12のための宛先ピクセルを記憶する。各宛先ピクセルは、一意のスクリーンピクセルロケーションに関連付けられ得る。いくつかの例では、フレームバッファ16は、宛先ピクセルごとの色成分および宛先アルファ値を記憶し得る。たとえば、フレームバッファ16は、ピクセルごとの赤(Red)、緑(Green)、青(Blue)、アルファ(Alpha)(RGBA)成分を記憶する場合があり、ここで、「RGB」成分は色値に対応し、「A」成分は宛先アルファ値に対応する。フレームバッファ16およびシステムメモリ10は別個のメモリユニットであるものとして示されているが、他の例では、フレームバッファ16はシステムメモリ10の一部であってもよい。
【００２５】
いくつかの例では、GPU12は、シェーダユニット46、グラフィックス処理パイプライン24、テクスチャパイプライン23、およびグラフィックスメモリ40を含む。1つまたは複数のシェーダプログラムは、GPU12内のシェーダユニット46上で実行し得る。シェーダユニット46は、プロセッサコア48を含む場合があり、プロセッサコア48の各々は、演算をフェッチおよび復号するための1つまたは複数の構成要素、算術計算を実行するための1つまたは複数の算術論理ユニット、1つまたは複数のメモリ、キャッシュ、およびレジスタを含む場合がある。
【００２６】
GPU12は、グラフィックス処理パイプライン24内の頂点シェーダステージ、ハルシェーダステージ、ドメインシェーダステージ、ジオメトリシェーダステージ、およびピクセルシェーダステージのうちの1つまたは複数を実行するコマンドをシェーダユニット46に送ることによって、頂点シェーディング、ハルシェーディング、ドメインシェーディング、ジオメトリシェーディング、ピクセルシェーディングなどの様々なシェーディング演算を実行するようにシェーダユニット46を指定し得る。いくつかの例では、GPUドライバ22は、1つまたは複数のシェーダプログラムをコンパイルし、コンパイルされたシェーダプログラムをGPU12内に含まれる1つまたは複数のプログラマブルシェーダユニット上にダウンロードするように構成され得る。シェーダプログラムは、たとえば、OpenGL Shading Language(GLSL)、High Level Shading Language(HLSL)、C for Graphics(Cg) shading languageなどの高レベルシェーディング言語で書かれる場合がある。コンパイルされたシェーダプログラムは、GPU12内のシェーダユニット46の演算を制御する1つまたは複数の命令を含み得る。たとえば、シェーダプログラムは、頂点シェーダステージの関数を実行するためにシェーダユニット46によって実行され得る頂点シェーダプログラム、ハルシェーダステージの関数を実行するためにシェーダユニット46によって実行され得るハルシェーダプログラム、ドメインシェーダステージの関数を実行するためにシェーダユニット46によって実行され得るドメインシェーダプログラム、ジオメトリシェーダステージの関数を実行するためにシェーダユニット46によって実行され得るジオメトリシェーダプログラム、および/またはピクセルシェーダの関数を実行するためにシェーダユニット46によって実行され得るピクセルシェーダプログラムを含み得る。頂点シェーダプログラムは、プログラマブル頂点シェーダユニットまたは統合シェーダユニットの実行を制御し、1つまたは複数の頂点単位演算を指定する命令を含む場合がある。
【００２７】
グラフィックスメモリ40は、GPU12の集積回路に物理的に統合されたストレージまたはメモリである。グラフィックスメモリ40は、シーンプリミティブ(たとえば、三角形)を階層的にグループ化するADSを記憶し得る。いくつかの例では、ADSは、システムメモリ10内、シェーダユニット46のシェーダメモリ内、または共有システム/グラフィックスメモリ(図示せず)内に記憶され得る。GPU12は、ADS内に複数のプリミティブを編成し得る。
【００２８】
テクスチャパイプライン23は、テクスチャ化機能を実行するハードウェアユニットのプログラム可能なパイプラインである。テクスチャパイプライン23は、各々が対応するシェーダプロセッサ48と通信している、いくつかのハードウェアテクスチャ化ユニットを含み得る。いくつかの例では、シェーダプロセッサ48と、テクスチャパイプライン23内の対応するハードウェアテクスチャ化ユニットとの間に1対1の対応がある。
【００２９】
シェーダプロセッサ48は、多くの命令を実行し得る。シェーダプロセッサ48は、命令の特定のサブフィールド内の演算コードを介して命令のうちのテクスチャ処理命令を検出するとき、テクスチャパイプライン23内の対応するテクスチャユニットに要求を送る。テクスチャパイプライン23内のテクスチャユニットは、対応するシェーダプロセッサ48からの要求を受け取ると、命令内の演算コードに基づいて実行すべきテクスチャ化演算のタイプを特定し、特に、テクスチャパイプライン23内の特殊な内積ハードウェア上で実行される内積の計算を全体的に含む演算を実行する。テクスチャパイプライン23は、内積をネイティブに実行する固定関数ハードウェアユニットを含む。いくつかの例では、パイプライン23は、最小演算および最大演算をネイティブに実行する固定関数ハードウェアユニットも含む。
【００３０】
本開示のいくつかの例では、特定のテクスチャタイプは、テクスチャパイプライン23内でレイ交差テストを実行するのに使用されるように定義される。この「テクスチャタイプ」は、文字通りのテクスチャタイプではないが、より正確にはバッファタイプである。いくつかの例では、対応するシェーダプロセッサ48は、レイ交差テストのバッファタイプまたはバッファへのインデックスを含む情報を、テクスチャパイプライン23内の対応するテクスチャユニットに送り、その情報は、レイと、レイと形状体との間に交点が存在するか否かをレイ交点が判定する形状体とに関する情報を含み得る。
【００３１】
本開示のいくつかの例では、テクスチャパイプライン23は、レイと形状体との間に交点が存在するか否かを判定し、テストの結果を対応するシェーダプロセッサ48に再び渡す。他の例では、テクスチャパイプライン23は、テスト全体ではなくテストの一部分を実行するか、またはテスト全体ではなくテストのいくつかの演算を実行する。いくつかの例では、テクスチャパイプライン23は、テクスチャパイプライン23内の特殊な固定関数内積ハードウェア内で1つまたは複数の内積を計算すること、ならびにテクスチャパイプライン23内の特殊な固定関数ハードウェア内で1つまたは複数の最小演算および/または最大演算を実行することなどの演算を実行することによって交差チェックを実行する。
【００３２】
いくつかの例では、形状体はボックスであり、テクスチャパイプライン23は、レイ-ボックス交差テストに使用され得る。いくつかの例では、レイ-ボックス交差テストに関する入力情報が、テクスチャパイプライン23に提供される。入力情報は、たとえば、バウンディングボックス情報を含み得る。いくつかの例では、バウンディングボックス情報は、バッファ26に記憶される場合があり、バッファ26は、いくつかの例では、多くのバウンディングボックスを記憶し得る、テクスチャパイプライン内の特殊なリニアバッファである。テクスチャパイプライン23は、バッファ26内のバウンディングボックスをインデックス付けし、必要なときにバッファ26から関連するバウンディングボックスを取り出す。
【００３３】
いくつかの例では、フィルタリングパイプの基本ブロックは、各RGBAピクセルに関して1つの4成分ベクトルを有する、2つの4成分ベクトルの内積を実行し得るDP4ユニットである。他の例では、パイプライン23に関する他のアーキテクチャが採用され得る。いくつかの例では、各DP4ユニットは、2つの4成分入力の内積を実行し、1つのDP4ユニットは、各々が2つの2成分入力の内積を実行する2つのDP2ユニットによって実装される。
【００３４】
テクスチャパイプライン23のいくつかの例は、4つのカラーチャネル、すなわち、赤、緑、青、およびアルファを採用する4成分ベクトルを使用する。
【００３５】
いくつかの例では、テクスチャパイプライン23は、双線形テクスチャフィルタリングを採用し、双線形フィルタは、4つのDP4ユニットを含む。
【００３６】
図3は、GPU12がレイトレーシングを実行し得る例示的なシーンを示すブロック図である。図3に示すように、シーン50は、プリミティブ52A〜52E(以下、「プリミティブ52」)を含む2Dシーンまたは3Dシーンである場合がある。レイトレーシング処理の一部として、GPU12は、2Dレイまたは3Dレイである場合がある、ソース55から発するレイ54に対して、レイ54が交差するシーン50の複数のプリミティブ52内のいくつかのプリミティブを特定し得る。
【００３７】
レイトレーシングは、レイ-三角形交点を特定するのに使用されるコンピュータグラフィックス技法である。入力レイと三角形のセットとを仮定すれば、アルゴリズムの目標は、どの三角形がレイによって交差されるかを判定することである。様々なタイプの交差クエリ、すなわち、最も近くで当たった(NH:Nearest-hit)交点、任意の当たった交点、および/またはすべての交点を作ることができる。レイトレーシング演算を加速させるために、三角形(プリミティブ)は、一般に、バウンディングボリューム階層(BVH)ツリー、KDツリー、グリッドなどの加速データ構造体(ADS)中に編成される。
【００３８】
BVHは、2つのタイプのノードを含む不平衡なバイナリツリーである。内部ノードは、軸平行バウンディングボックス(AABB:axis-aligned bounding box)によって記述された空間の領域を表し2つの子を有する、ノードである。リーフノードは、空間の領域も表すが子をまったく有しない、ノードである。代わりに、リーフノードは、バウンディングボックスに含まれる三角形のセットを参照する。
【００３９】
いくつかの例では、BVHツリーを介してレイを追跡するために、2つのタイプの演算、すなわち、レイ-ボックス交差テストと、レイ-三角形交差テストとが必要とされる。一般的なシーンでは、レイ-ボックス交差テストの数は、レイ-三角形交差テストの数よりも約5倍〜20倍多い。
【００４０】
GPU12は、シーン50を分割し、シーン50の分割された部分を階層的に配置し、シーン50の分割された部分の階層を再帰的に横断することによってレイ54が交差する複数のプリミティブ52内の1つのプリミティブを系統的に特定し得る。図4は、シーン50をバウンディングボリュームに区分することを示すブロック図である。図4に示すように、GPU12は、プリミティブ52をバウンディングボリューム56A〜56E(「バウンディングボリューム56」)に概念的に区分し得る。バウンディングボリューム56は、囲まれたプリミティブのすべての点が存在し得る最小領域を有するバウンディングボックスである場合がある、軸平行なバウンディングボックス(AABB)である場合がある。バウンディングボックスは、これらのボックスの辺が座標軸(たとえば、x軸、y軸、およびz軸)に平行であり得るように軸平行であり得る。
【００４１】
バウンディングボリューム56Aは、シーン50のすべてのプリミティブ52に境界をつけるバウンディングボックスである場合がある。バウンディングボリューム56Bおよび56Cは、バウンディングボリューム56Aによって縛られたシーン50の一部分のサブセットに境界をつけるという点で、バウンディングボリューム56Aのサブセットであり得る。バウンディングボリューム56Bは、プリミティブ52Aおよび52Bに境界をつける場合があり、バウンディングボリューム56Cは、プリミティブ52C、52D、および52Eに境界をつける(すなわち、空間的に取り囲む)場合がある。バウンディングボリューム56Dおよび56Eは、バウンディングボリューム56Cのサブセットである場合があり、バウンディングボリューム56Cによって境界をつけられたシーン50の一部分のサブセットに境界をつける場合がある。バウンディングボリューム56Dは、プリミティブ52Cおよび52Dに境界をつける場合があり、バウンディングボリューム56Eは、プリミティブ52Eに境界をつける場合がある。
【００４２】
図4に示す例では、GPU12は、プリミティブ52を5つのバウンディングボリューム56に区分し得る。GPU12は、5つよりも多いか、または少ないバウンディングボリューム56を使用し得る。たとえば、GPU12は、プリミティブ52Aおよび52Bにそれぞれ個別に境界をつけるためにバウンディングボリューム56Bのサブセットとして追加のバウンディングボリュームを形成し得る。いくつかの例では、CPU6は、プリミティブ52をバウンディングボリューム56に区分するように構成される場合もある。
【００４３】
図5は、図4に示すバウンディングボリューム56およびプリミティブ52に関連付けられたノードを有する例示的な階層データ構造体を示す。上記で説明したように、シーンのシーンプリミティブは、ADS41内に編成される場合があり、ADS41は、レイプリミティブ交点を特定するために横断される場合がある。GPU12は、グラフィックスメモリ40内にADS41を記憶し得る。図5に示すように、バウンディングボリューム56およびプリミティブ52は、シーン50に関連するバウンディングボリューム階層(BVH)ツリー60などのADS41のノードに関連付けられる場合がある。GPU12またはCPU6は、BVHツリー60がシーン50のバウンディングボリューム56およびプリミティブ52に関連付けられたノード62A〜62E(「ノード62」)を含むようにBVHツリー60を構成し得る。より具体的には、ルートノード62A、内部ノード62C、ならびにリーフノード62B、62D、および62Eは各々、複数のバウンディングボリューム56のうちの1つのバウンディングボリュームに関連付けられる場合がある。ルートノード62A以外のBVHツリー60のノードは、BVHツリー60の非ルートノードと呼ばれる場合がある。たとえば、内部ノード62C、ならびにリーフノード62B、62D、および62Eは、BVHツリー60の非ルートノードと呼ばれる場合がある。リーフノード62B、62D、および62Eは各々、複数のプリミティブ52のうちの少なくとも1つのプリミティブにリンクされ得る。たとえば、リーフノード62Bは、プリミティブ52Aおよび52Bにリンクされる場合があり、リーフノード62Dは、プリミティブ52Cおよび52Dにリンクされる場合があり、リーフノード62Eは、プリミティブ52Eにリンクされる場合がある。BVHツリー60は、不平衡なバイナリツリーと見なされる場合があるが、その理由は、階層データ構造体60の各非リーフノードが多くて2つの子ノードを有し、リーフノード62B、62D、および62Eが等しくない深さを有する場合があるからである。
【００４４】
バウンディングボリューム56Aがシーン50のすべてのプリミティブ52に境界をつけるので、GPU12は、ルートノード62Aをバウンディングボリューム56Aに関連付け得る。GPU12は、ルートノード62Aの子ノードであるノード62Bおよび62Cを、それぞれバウンディングボリューム56Bおよび56Cに関連付け得るが、その理由は、バウンディングボリューム56Bおよび56Cが各々、バウンディングボリューム56Aのサブセットであるからである。GPU12は、プリミティブ52Aおよび52Bをノード62Bにリンクさせる場合があるが、その理由は、ノード62Bに関連するバウンディングボリューム56Bがプリミティブ52Aおよび52Bに境界をつけ、バウンディングボリューム56Bのサブセットである追加のバウンディングボリュームが存在しないからである。
【００４５】
GPU12は、バウンディングボリューム56Dおよび56Eを、ノード62Cの子ノードであるノード62Dおよび62Eに関連付け得るが、その理由は、バウンディングボリューム56Dおよび56Eが各々、ノード62Cに関連するバウンディングボリューム56Cのサブセットであるからである。GPU12は、プリミティブ52Cおよび52Dをノード62Dにリンクさせる場合があるが、その理由は、ノード62Dに関連するバウンディングボリューム56Dがプリミティブ52Cおよび52Dに境界をつけ、バウンディングボリューム56Dのサブセットである追加のバウンディングボリュームが存在しないからである。GPU12は、プリミティブ52Eをノード62Eにリンクさせる場合もあるが、その理由は、ノード62Eに関連するバウンディングボリューム56Eがプリミティブ52Eに境界をつけ、バウンディングボリューム56Eのサブセットである追加のバウンディングボリュームが存在しないからである。
【００４６】
GPU12は、BVHツリー60のノード62に関連するバウンディングボリューム56に対してレイボックス交差テストを実行することによってレイ54に交差する複数のプリミティブ52のうちの1つのプリミティブを特定するようにBVHツリー60を横断し得る。GPU12は、ルートノード62Aに関連するバウンディングボリューム56Aに対してレイボックス交差テストを実行することによってBVHツリー60の横断を開始する場合がある。レイ54がバウンディングボリューム56Aに交差するとGPU12が判定した場合、GPU12は、ノード62BまでBVHツリー60を横断し続ける場合があり、GPU12は、ノード62Bに関連するバウンディングボリューム56Bに対してレイボックス交差テストを実行する場合がある。レイ54がバウンディングボリューム56Bに交差しないとGPU12が判定した場合、GPU12は、ノード62Aおよびさらに下にノード62CまでBVHツリーを再帰的に横断する場合があり、GPU12は、ノード62Cに関連するバウンディングボリューム56Cに対してレイボックス交差テストを実行する場合がある。レイ54がバウンディングボリューム56Cに交差するとGPU12が判定した場合、GPU12は、ノード62DまでBVHツリー60を横断し続ける場合があり、GPU12は、ノード62Dに関連するバウンディングボリューム56Dに対してレイボックス交差テストを実行する場合がある。レイ54がバウンディングボリューム56Dに交差するとGPUが判定した場合、GPU12は、ノード62Dにリンクされたプリミティブに対してレイプリミティブ交差テストを実行する場合がある。したがって、GPU12は、プリミティブ52Cに対してレイプリミティブ交差テストを実行する場合があり、プリミティブ52Dに対してレイプリミティブ交差テストを実行する場合もある。GPU12は、プリミティブ52Dに対するレイプリミティブ交差テストから、レイ54がプリミティブ52Dに交差すると判定し得る。レイ54がプリミティブ52Dに交差するとGPU12が判定した後、GPU12は、ノード62Cおよびさらに下に62EまでBVHツリー60を再帰的に横断し続ける場合があり、GPU12は、ノード62Eに関連するバウンディングボリューム56Eに対してレイボックス交差テストを実行する場合がある。GPU12は、レイボックス交差テストに基づいて、レイ54がバウンディングボリューム56Eに交差しないと判定し、それによって、レイ54に関するBVHツリー60の横断を終了する場合がある。
【００４７】
図6は、本開示の技法による、レイトレーシングの例示的なプロセス(630)を示す流れ図である。いくつかの例では、プロセス630は、第1のレイおよび第1の形状体に関するレイ交差テストを実行するためにGPUのテクスチャパイプラインハードウェアを使用するプロセスである。いくつかの例では、第1の形状体は、ボックス、矩形などであり得る。
【００４８】
開始ブロックの後、プロセスは、テクスチャパイプラインハードウェアを使用して複数の内積が計算される、ブロック631に進む。プロセスは、次いで、複数の内積に基づいて、第1のレイが第1の形状体に交差するかどうかが判定される、ブロック632に移動する。プロセスは、次いで、リターンブロックに進み、他の処理が再開される。
【００４９】
プロセス630の具体例は、以下でさらに詳細に説明する。
【００５０】
いくつかの例では、プロセス630は、レイがボックスに交差するか否かを判定するためにレイ-ボックス交差テストを実行するために採用される。しかしながら、本開示の技法は、そのように限定されず、他の例では、他の形状体が採用され得る。いくつかの例では、交差テストは、レイと矩形との間である。
【００５１】
いくつかの例では、テクスチャパイプラインハードウェアは、GPU(たとえば、シェーダプロセッサまたはGPUドライバ)からバウンディングボックス情報およびレイ定義を受け取り、内積演算および他の演算を実行する場合がある。いくつかの例では、テクスチャパイプラインハードウェアは、(もしあれば)渡されるべき任意のアプリケーションデータとともに、交差テストの結果(すなわち、第1のレイと第1の形状体とが交差するか否か)を出力する。いくつかの例では、交差テストの出力結果は、レイと形状体とが交差するか否かを表すブール値である。
【００５２】
いくつかの例では、レイは、レイ原点(o)と、レイの正規化方向ベクトル(d)とによって表される。レイ上の点は、r(t)=o+dtと表すことができ、ここで、tは[0.0f,+inf)からくる。いくつかの例では、方向ベクトルは、長さ1を有するように定義されることによって「正規化」される。
【００５３】
3D軸平行バウンディングボックスは、その反対の端点の2つ、すなわち、bbMin(Xmin,Ymin,Zmin)およびbbMax(Xmax,Ymax,Zmax)によって表される。いくつかの例では、bbMinおよびbbMaxは、2つの反対の端点であり、bbMinは、原点に最も近い、2つの反対の端点のうちの端点である。「原点」という用語は、「レイ原点」という用語と混同すべきではなく、「原点」は座標(0,0,0)の点を指すが、「レイ原点」または「レイの原点」という用語は、レイの開始点を指す。すなわち、幾何学的に、レイは、所与の点において開始し特定の方向に無限に進む線として定義され、この開始点は、座標(0,0,0)の点である「原点」とは異なる「レイの原点」と呼ばれるが、いくつかの状況では、レイの原点が偶然に原点と一致する可能性がある。
【００５４】
プロセス630では、レイ-形状体交差テストは、内積を使用するために公式化されたアルゴリズムによって実行され、アルゴリズムに使用される内積を実行するためにテクスチャパイプラインハードウェアが採用される。
【００５５】
レイ-ボックス交差テストのいくつかの例では、アルゴリズムへの入力は次の通りである。
rayOrig-レイの原点の座標
rayDirRcp-正規化レイ方向の反転
bbMin-バウンディングボックスの1つの端点の座標
bbMax-bbMinの反対のバウンディングボックスの端点の座標
【００５６】
いくつかの例では、次の距離は、次のアルゴリズムによって計算され得る。
【００５７】
【表１】
2017534976.tif 000003
【００５８】
いくつかの例では、バウンディングボックス情報は、多くのバウンディングボックスを記憶し得る、テクスチャパイプライン内の特殊なリニアバッファに記憶される場合がある。他の例では、特殊なリニアバッファは、システムメモリ、GPUメモリ、特殊なメモリなどの、テクスチャパイプライン以外の適切なロケーションに記憶され得る。テクスチャユニットは、バッファ内のバウンディングボックスをインデックス付けし、必要なときにバッファから関連するバウンディングボックスを取り出す。
【００５９】
いくつかの例では、レイ-ボックス交差テストは、シェーダプロセッサによって処理される命令を用いて最初に開始し得る。シェーダプロセッサは、命令の特定のサブフィールド内の演算コードに基づいて、その命令がテクスチャ化処理命令であると判定するとき、シェーダプロセッサに対応するテクスチャユニットに要求を送るが、ここで、テクスチャユニットはテクスチャパイプラインの一部分である。いくつかの例では、レイ-ボックス交差テストは、特別に定義されたテクスチャタイプ(すなわち、バッファタイプ)を採用する。シェーダプロセッサは、レイの原点、レイの方向、およびバッファに記憶されたバウンディングボックス情報へのインデックスなどのテクスチャユニット情報を送り得る。テクスチャパイプラインは、インデックスによって識別される情報にアクセスすることによって応答し、次いで、プロセス630の例を採用することによってレイ-ボックス交差を実行する場合がある。いくつかの例では、プロセス630は、レイとボックスとが交差するか否かを示すブール値などの、レイとボックスとが交差するか否かに関する指示をもたらす。いくつかの例では、テクスチャパイプラインは、ブール値をシェーダプロセッサに戻し、アプリケーション固有のデータなどの他の情報をシェーダプロセッサに戻す場合もある。いくつかの例では、アプリケーション固有のデータは、ツリー内の次の子へのポインタなどの、ADSを横断することに関連するデータを含み得る。
【００６０】
プロセス630の例は、テクスチャパイプライン内のフィルタパイプラインを活用する。いくつかの例では、フィルタリングパイプの基本ブロックは、2つの4成分ベクトルの内積を実行し得るDP4ユニットである。
【００６１】
図7は、図2のテクスチャパイプライン23の一部分の一例として採用され得るフィルタパイプライン723の一例を示す機能ブロック図である。フィルタパイプライン723は、内積ユニット771〜774、最小/最大ブロック775、最大ブロック776、および最小ブロック777を含む。
【００６２】
内積ユニット771〜774の各々は、内積を計算するように構成される。いくつかの例では、各内積ユニット771〜774は、固定関数内積ハードウェアユニットである。内積ユニット771〜774は、テクスチャパイプラインハードウェアを用いて複数の内積を計算するための手段として演算し得る。最小/最大ブロック775は、内積ユニット771〜774によって生成された内積に関する最小/最大関数を実行するように構成される。様々な例において実行され得る最小/最大関数のいくつかの例が存在し、最小/最大ブロック775によって実行される最小/最大関数の1つの例示的なバージョンを以下でさらに詳細に説明する。いくつかの例では、最小/最大ブロック775は、内積からtMin.xyzおよびtMax.xyzを生成するために最小/最大関数を実行する。最大ブロック776は、最小/最大ブロック775からの1つまたは複数の出力に基づいて最大関数を実行し、最小ユニット777は、最小/最大ブロック775からの1つまたは複数の出力に基づいて最小関数を実行する。最大ブロック776および最小ブロック777の出力は、いくつかの例では、レイと形状体との間に交点が存在するか否かを示すブール値などの、レイ-形状体交差テストの結果を判定するために使用される。ブロック775〜777は、内積ユニット771〜774によって計算される複数の内積に基づいてレイが形状体に交差するかどうかを判定するための手段としてともに演算し得る。
【００６３】
図7は4つの内積ユニット771〜774を示すが、他の例では、それより多いまたは少ない内積ユニットが採用され得る。いくつかの例では、4つではなく、3つの内積ユニットが採用され得る。
【００６４】
いくつかの例では、最大ブロック776は、tMin.xyzに対して最大関数を実行し、最大関数の結果としてtNearを出力する。同様に、いくつかの例では、最小ブロック777は、tMax.xyzに対して最小関数を実行し、最小関数の結果としてtFarを出力する。いくつかの例では、tNearおよびtFarは、レイと形状体との間に交点が存在するか否かを示すブール値を導出するために採用される。
【００６５】
いくつかの例では、テクスチャパイプラインは、ネイティブに内積を実行する固定関数ハードウェアユニットを含み、固定関数ハードウェアユニットは、いくつかの例では、内積ユニット771〜774に対応し得る。いくつかの例では、テクスチャパイプラインは、ネイティブに最小演算および最大演算を実行する固定関数ハードウェアユニットも含み、固定関数ハードウェアユニットは、いくつかの例では、ブロック775〜777に対応し得る。
【００６６】
いくつかの例では、レイ-ボックス交差テストに関するアルゴリズムが次のように実行され得る。
【００６７】
【数１】
2017534976.tif 000004
【００６８】
上記の例では、●演算子は、2つの2成分ベクトルの内積を表す。内積は、成分ごとに(すなわち、x成分、y成分、およびz成分に関して別々に)適用される。スカラーバージョンを以下に示す。
【００６９】
【数２】
2017534976.tif 000005
【００７０】
わかるように、ベクトルt1のx成分は、2つのベクトルの内積を実行することによって計算されるが、第1のベクトルは、bbMinのx成分によって与えられた値を有するx成分と、レイ原点のx成分の負の値によって与えられた値を有するy成分とを有し、第2のベクトルは、正規化された反転レイ方向ベクトルのx成分によって与えられたx成分と正規化された反転レイ方向ベクトルのx成分によって与えられたy成分とを有する。ベクトルt1のy成分は、2つのベクトルの内積を実行することによって計算されるが、第1のベクトルは、bbMinのy成分によって与えられた値を有するx成分と、レイ原点のy成分の負の値によって与えられた値を有するy成分とを有し、第2のベクトルは、正規化された反転レイ方向ベクトルのy成分によって与えられたx成分と正規化された反転レイ方向ベクトルのy成分によって与えられたy成分とを有する。ベクトルt1のz成分は、2つのベクトルの内積を実行することによって計算されるが、第1のベクトルは、bbMinのz成分によって与えられた値を有するx成分と、レイ原点のz成分の負の値によって与えられた値を有するy成分とを有し、第2のベクトルは、正規化された反転レイ方向ベクトルのz成分によって与えられたx成分と正規化された反転レイ方向ベクトルのz成分によって与えられたy成分とを有する。
【００７１】
ベクトルt2は、bbMaxがbbMinの代わりに使用されることを除いて、ベクトルt1と同様に計算される。
【００７２】
上記に示したように、いくつかの例では、内積計算の後、ベクトルt1およびt2が得られる。いくつかの例では、最小演算および最大演算は、tMinおよびtMaxを生成するためにt1およびt2に関して実行される。値tMinは、各対応する成分の最小値に基づくベクトルとして生成されるが、値tMaxは、各対応する成分の最大値に基づくベクトルとして生成される。すなわち、tMinのx値は、t1およびt2のx座標のうちの小さい方であり、tMinのy値は、t1およびt2のy座標のうちの小さい方であり、tMinのzは、t1およびt2のz座標のうちの小さい方である。同様に、tMaxのx値は、t1およびt2のx座標のうちの大きい方であり、tMaxのy値は、t1およびt2のy座標のうちの大きい方であり、tMaxのz値は、t1およびt2のz座標のうちの大きい方である。
【００７３】
tNearおよびtFarの値は、最小および最大の判定に基づいてtMinおよびtMaxから導出される。値tNearは、ベクトルtMinの各成分の値の中から最大値となるスカラー値である。同様に、値tFarは、ベクトルtMaxの各成分の値の中から最小値となるスカラー値である。
【００７４】
このテストは、最後の比較によって完了される。tNearがtFarよりも大きいか、またはtFarが0よりも小さいかのいずれかの場合、結果は偽になり、レイとボックスとが交差しないことを示す。他の場合、結果は真になり、レイとボックスとが交差することを示す。
【００７５】
この最後の比較は、最大入口距離および最小出口距離が有効な間隔(すなわち、入口距離<出口距離)を形成するかどうかを判定するために最大入口距離と最小出口距離とを比較する。その間隔が有効であり、出口距離が入口距離よりも大きい場合、レイとボックスとが交差する。
【００７６】
テクスチャパイプラインハードウェアを利用するために、いくつかの例では、計算は、テクスチャパイプラインのフィルタパイプライン内のDP4ユニット上にマッピングされる。図7に示すように、以下のものが、いくつかの例では、次のようにレイ-ボックス交差テストに入力として使用され得る。
【００７７】
E=(bbMin,-rayOrigin)
【００７８】
F=(bbMax,-rayOrigin)
【００７９】
R=(rayDirRcp,rayDirRcp)
【００８０】
いくつかの例では、DP4ユニットのうちの1つまたは複数は、2つの4成分ベクトルの1つの内積を計算するだけでなく、2つの2成分ベクトルの2つの内積も計算するように機能する。いくつかの例では、スラブ距離を計算するために、DP4への入力のうちのいくつかが複製される場合があり、いくつかは使用されないままである場合がある。以下の表は、一例による、関連のつながりを示す。
【００８１】
【表２】
2017534976.tif 000006
【００８２】
いくつかの例では、レイ-ボックス交差テストを実行するために、テクスチャパイプは、2種類の入力データ、すなわち、バウンディングボックス情報およびレイ定義へのアクセスを受ける。
【００８３】
いくつかの例では、レイ定義およびBVHノードインデックスは、シェーダプロセッサレジスタに記憶され、各交差要求によってテクスチャパイプラインに渡される。いくつかの例では、ノードインデックスは、構築プロセス中に計算され、テクスチャパイプラインは、リニアアドレス指定を使用してノードアドレスを計算する。
【００８４】
上記で説明したように、バウンディングボックス情報は、BVHツリーの各ノードの内部に含まれる。いくつかの例では、バウンディングボックス情報は、各々が固定要素(ノード)サイズを有する線形化ツリーノードとしてメモリに記憶される。いくつかの例では、バウンディングボックス情報は、新規の「BVH」テクスチャタイプとしてテクスチャパイプラインによってアドレス指定可能である。バウンディングボックス情報は、それが実際にテクスチャでなく、より正確には、それがテクスチャタイプではなくバッファタイプと呼ばれる場合があっても、テクスチャタイプとしてアドレス指定される。
【００８５】
新規のテクスチャタイプに加えて、新規のテクスチャパイプライン「フィルタリング」モードは、レイ-ボックス交差テストを実行し得る。
【００８６】
テクスチャパイプラインは、BVHテクスチャタイプを受け入れるように構成され、フォーマットは、次の変数、すなわち、rayOrigin、rayDirRcp、textureID、およびノードインデックスに対応する。
【００８７】
いくつかの例では、レイ-ボックス交差テストの結果は、レイとボックスとが交差するか否かを表す1ビット真/偽値である。しかしながら、いくつかの例では、テクスチャパイプラインは、それよりも多いデータをシェーダプロセッサに返送する。
【００８８】
いくつかの例では、BVHノード構造体は、アプリケーション固有のデータを含むmiscフィールドを含む。miscフィールドは、一般に、次の子ノードがどこにあるのか、リーフノード内の三角形の数などに関する情報を指す。シェーダプロセッサは、ツリー横断のために、この情報を使用し得る。いくつかの例では、この情報は、レイ-ボックス交差テストの結果とともにシェーダプロセッサに返送される。
【００８９】
図8は、図6のプロセス630の一例として採用され得るレイトレーシングの例示的なプロセス(830)を示す流れ図である。
【００９０】
開始ブロックの後、プロセスは、GPUのシェーダプロセッサが命令をフェッチする、ブロック891に進む。プロセスは、次いで、フェッチされた命令がレイ-ボックス交差テスト命令であるかどうかが判定される、ブロック892に移動する。そうでない場合、プロセスは、リターンブロックに戻り、他の処理が再開される。
【００９１】
しかしながら、判定ブロック892における判定が肯定である場合、プロセスは、シェーダプロセッサが交差テスト情報をテクスチャパイプラインハードウェアに送る、ブロック893に進む。いくつかの例では、テクスチャパイプラインハードウェアに送られた交差テスト情報は、レイの原点、レイの方向、およびバッファに記憶されたバウンディングボックス情報へのインデックスなどの情報、ならびにレイ-ボックス交差テストに関する特別のバッファタイプへのインデックスなどの情報を含み得る。
【００９２】
プロセスは、次いで、テクスチャパイプラインハードウェアが複数の内積を計算する、ブロック831に進む。プロセスは、次いで、複数の内積に基づいて、レイがブロックに交差するかどうかをテクスチャパイプラインハードウェアが判定する、ブロック832に移動する。プロセスは、次いで、レイ-ボックス交差テストの結果がテクスチャパイプラインハードウェアからシェーダプロセッサまで送られる、ブロック833に進む。プロセスは、次いで、リターンブロックに進み、他の処理が再開される。
【００９３】
前に説明したように、命令がレイ-ボックス交差テストであるか否かに関して判定が行われる、判定ブロック892に関して、命令は、命令がテクスチャ命令であると識別する演算コードを有することによってレイ-ボックス交差テスト命令として識別され得る。命令がテクスチャ処理命令であることを示すものとして、命令内の演算コードが識別される場合、判定ブロック892における判定は肯定である。
【００９４】
図9は、図6のブロック632および/または図8のブロック832の一例として採用され得る、レイがボックスに交差するかどうかを判定するための例示的なプロセス(832)を示す流れ図である。開始ブロックの後、プロセスは、テクスチャパイプラインハードウェアが、各内積の成分ごとの最小値と、各内積の成分ごとの最大値とを特定する、ブロック981に進む。
【００９５】
たとえば、いくつかの例では、計算される内積は、各々の成分がx成分、y成分、およびz成分を有する、2つの3成分ベクトルである。ブロック981では、テクスチャパイプラインハードウェアは、tMinとして与えられる場合がある各内積の成分ごとの最小値を特定し、その結果、tMinのx成分は内積の各々のx成分の中からの最小値であり、tMinのy成分は内積の各々のy成分の中からの最小値であり、tMinのz成分は内積の各々のz成分の中からの最小値である。同様に、ブロック981では、テクスチャパイプラインハードウェアは、tMaxとして与えられる場合がある各内積の成分ごとの最大値を特定し、その結果、tMaxのx成分は内積の各々のx成分の中からの最大値であり、tMaxのy成分は内積の各々のy成分の中からの最大値であり、tMaxのz成分は内積の各々のz成分の中からの最大値である。
【００９６】
プロセスは、次いで、テクスチャパイプラインハードウェアが成分ごとの最小値の中からの最大値と、成分ごとの最大値の中からの最小値とを特定する、ブロック982に移動する。上記で説明したように、tMinとして与えられる場合がある各内積の成分ごとの最小値が(前のブロック981において)特定され、その結果、tMinのx成分は内積の各々のx成分の中からの最小値であり、tMinのy成分は内積の各々のy成分の中からの最小値であり、tMinのz成分は内積の各々のz成分の中からの最小値である。したがって、tMinは、x成分、y成分、およびz成分を有するベクトルである。ブロック982では、テクスチャパイプラインハードウェアは、tMinのx成分の値、tMinのy成分の値、およびtMinのz成分の値のうちの最大値が特定されたと判定し、最大入口距離に対応するtNearの値を割り当てる。
【００９７】
さらに、いくつかの例では、tMaxとして与えられる場合がある各内積の成分ごとの最大値が(前のブロック981において)特定され、その結果、tMaxのx成分は内積の各々のx成分の中からの最大値であり、tMaxのy成分は内積の各々のy成分の中からの最大値であり、tMaxのz成分は内積の各々のz成分の中からの最大値である。したがって、tMaxは、x成分、y成分、およびz成分を有するベクトルである。ブロック982では、テクスチャパイプラインハードウェアは、tMaxのx成分の値、tMaxのy成分の値、およびtMaxのz成分の値のうちの最小値を特定し、最小出口距離に対応する、tFarの値として最小値を割り当てる。
【００９８】
プロセスは、テクスチャパイプラインハードウェアが、有効な間隔が存在する(すなわち、tFarが0以上である)かどうかと、出口距離(tFar)が入口距離(tNear)よりも大きいかどうかとに関する判定を行う、判定ブロック983に移動する。そうである場合、プロセスは、レイとボックスとが交差することをテクスチャパイプラインハードウェアが示す、ブロック984に進む。プロセスは、次いで、リターンブロックに進み、他の処理が再開される。
【００９９】
しかしながら、判定ブロック983における判定が否定である場合、プロセスは、レイとボックスとが交差しないことをテクスチャパイプラインハードウェアが示す、ブロック985に進む。プロセスは、次いで、リターンブロックに進み、他の処理が再開される。
【０１００】
例に応じて、本明細書で説明する技法のいずれかのいくつかの行為またはイベントは異なる順序で実行されてもよく、一緒に追加され、統合され、または省略されてもよい(たとえば、説明される行為またはイベントのすべてが技法の実施のために必要とは限らない)ことを認識されたい。その上、いくつかの例では、行為またはイベントは、順次的にではなく、たとえばマルチスレッド処理、割り込み処理、または複数のプロセッサを通じて同時に実行され得る。
【０１０１】
1つまたは複数の例において、説明された機能は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せで実装され得る。ソフトウェアで実装される場合、機能は、1つまたは複数の命令またはコードとして、コンピュータ可読媒体上に記憶されるか、またはコンピュータ可読媒体を介して送信され、ハードウェアベースの処理ユニットによって実行され得る。コンピュータ可読媒体は、データ記憶媒体などの有形の媒体に対応するコンピュータ可読記憶媒体、または、たとえば、通信プロトコルに従って、ある場所から別の場所へのコンピュータプログラムの転送を容易にする任意の媒体を含む通信媒体を含んでもよい。
【０１０２】
このようにして、コンピュータ可読媒体は、一般に、(1)本質的に伝搬信号を含まない有形コンピュータ可読記憶媒体、または(2)信号もしくは搬送波などの通信媒体に対応し得る。データ記憶媒体は、本開示で説明される技法の実装のための命令、コードおよび/またはデータ構造を取り出すために1つもしくは複数のコンピュータまたは1つもしくは複数のプロセッサによってアクセスされ得る任意の利用可能な媒体であり得る。コンピュータプログラム製品がコンピュータ可読媒体を含んでもよい。
【０１０３】
限定ではなく例として、そのようなコンピュータ可読記憶媒体は、RAM、ROM、EEPROM、CD-ROMもしくは他の光ディスクストレージ、磁気ディスクストレージもしくは他の磁気記憶デバイス、フラッシュメモリ、または、命令もしくはデータ構造の形式の所望のプログラムコードを記憶するために使用され、コンピュータによってアクセスされ得る任意の他の媒体を含み得る。また、いかなる接続も適切にコンピュータ可読媒体と呼ばれる。たとえば、同軸ケーブル、光ファイバーケーブル、ツイストペア、デジタル加入者回線(DSL)、または赤外線、無線、およびマイクロ波などのワイヤレス技術を使用して、ウェブサイト、サーバ、または他のリモートソースから命令が送信される場合、同軸ケーブル、光ファイバーケーブル、ツイストペア、DSL、または赤外線、無線、およびマイクロ波などのワイヤレス技術は、媒体の定義に含まれる。
【０１０４】
ただし、コンピュータ可読記憶媒体およびデータ記憶媒体は、接続、搬送波、信号などを含まず、代わりに有形記憶媒体を対象とすることを理解されたい。本明細書で使用するディスク(disk)およびディスク(disc)は、コンパクトディスク(CD)、レーザーディスク(登録商標)、光ディスク、デジタル多用途ディスク(DVD)、フロッピー(登録商標)ディスクおよびブルーレイディスクを含み、ディスク(disk)は通常、データを磁気的に再生し、ディスク(disc)は、レーザーを用いてデータを光学的に再生する。上記の組合せは、コンピュータ可読媒体の範囲内に同じく含まれるものとする。
【０１０５】
命令は、1つまたは複数のデジタル信号プロセッサ(DSP)、汎用マイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブル論理アレイ(FPGA)、または他の等価の集積論理回路もしくは離散論理回路のような、1つまたは複数のプロセッサによって実行されてもよい。したがって、本明細書で使用される「プロセッサ」という用語は、前述の構造、または本明細書で説明される技法の実装に適した任意の他の構造のいずれかを指す場合がある。さらに、いくつかの態様では、本明細書で述べられた機能は、専用のハードウェア内で、かつ/または符号化および復号を行うように構成された、もしくは組み合わされたコーデックに組み込まれたソフトウェアモジュール内で提供することができる。さらに本技法は、1つまたは複数の回路または論理要素において完全に実施することもできる。
【０１０６】
本開示の技法は、ワイヤレスハンドセット、集積回路(IC)またはICのセット(たとえば、チップセット)を含む、多種多様なデバイスまたは装置において実装されてもよい。本開示では、開示する技法を実施するように構成されたデバイスの機能的側面を強調するために、様々な構成要素、モジュール、またはユニットが述べられているが、それらは、必ずしも異なるハードウェアユニットによる実現を必要とするとは限らない。そうではなくて、上記で述べたように、様々なユニットは、コーデックハードウェアユニットにおいて組み合わされるか、または適切なソフトウェアおよび/またはファームウェアと併せて、上記で述べたように1つまたは複数のプロセッサを含む、相互運用するハードウェアユニットの集合体により提供される場合がある。
【０１０７】
様々な例を説明してきた。これらおよび他の例は以下の特許請求の範囲内に入る。
【符号の説明】
【０１０８】
2  デバイス
3  トランシーバモジュール
4  ユーザインターフェース
6  中央処理ユニット、CPU
8  ディスプレイ
10  システムメモリ
12  グラフィックス処理ユニット、GPU
14  ディスプレイプロセッサ
16  フレームバッファ
18  ソフトウェアアプリケーション
20  グラフィックスAPI
22  GPUドライバ
23  テクスチャパイプライン
24  グラフィックス処理パイプライン
26  バッファ
40  グラフィックスメモリ
46  シェーダユニット
48  シェーダプロセッサ
50  シーン
52  プリミティブ
54  レイ
55  ソース
56  バウンディングボリューム
60  バウンディングボリューム階層(BVH)ツリー
62A  ルートノード
62B  リーフノード
62C  内部ノード
62D  リーフノード
62E  リーフノード
【図１】
2017534976.tif 000007
【図２】
2017534976.tif 000008
【図３】
2017534976.tif 000009
【図４】
2017534976.tif 000010
【図５】
2017534976.tif 000011
【図６】
2017534976.tif 000012
【図７】
2017534976.tif 000013
【図８】
2017534976.tif 000014
【図９】
2017534976.tif 000015
【手続補正書】
【提出日】平成29年4月18日(2017.4.18)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
レイトレーシングのための方法であって、
第1のレイと第1の形状体とに関するレイ交差テストを実行するためにグラフィックス処理ユニットのテクスチャパイプラインハードウェアを使用するステップを含み、前記使用するステップが、
前記テクスチャパイプラインハードウェアを用いて複数の内積を計算することと、
前記複数の内積に基づいて、前記第1のレイが前記第1の形状体に交差するかどうかを判定することとを含み、前記テクスチャパイプラインハードウェアがシェーダプロセッサとは別であり、前記テクスチャパイプラインハードウェアが、内積を実行するように構成された固定関数ハードウェアユニットを含む、方法。
【請求項２】
前記第1の形状体がボックスまたは矩形のうちの1つである、請求項1に記載の方法。
【請求項３】
前記第1の形状体が軸平行バウンディングボックスである、請求項1に記載の方法。
【請求項４】
前記複数の内積を計算することが、前記テクスチャパイプラインハードウェアの固定関数内積ハードウェアユニットを用いて前記複数の内積を計算することを含む、請求項1に記載の方法。
【請求項５】
前記複数の内積に基づいて少なくとも1つの最小計算および少なくとも1つの最大計算を実行するステップをさらに含み、前記第1のレイが前記第1の形状体に交差するかどうかに関する前記判定が、前記少なくとも1つの最小計算および前記少なくとも1つの最大計算に基づく、請求項1に記載の方法。
【請求項６】
複数の命令の各々に関してGPUのシェーダプロセッサを用いて、前記命令がレイ-ボックス交差テスト命令であるかどうかを判定するステップと、
レイ-ボックス交差テスト命令であると判定された各命令に関して、情報を前記テクスチャパイプラインハードウェアに送るステップであって、前記情報が少なくとも前記第1のレイおよび前記第1の形状体に基づく、ステップと
をさらに含む、請求項1に記載の方法。
【請求項７】
前記テクスチャパイプラインハードウェアを用いて、前記第1のレイが前記第1の形状体に交差するかどうかを判定するステップと、
前記第1のレイが前記第1の形状体に交差するかどうかを示す指示を前記テクスチャパイプラインハードウェアからシェーダプロセッサに送るステップと
をさらに含む、請求項1に記載の方法。
【請求項８】
レイトレーシングのためのデバイスであって、
グラフィックス処理ユニット(GPU)を含み、前記GPUが、
少なくとも1つのシェーダプロセッサと、
テクスチャパイプラインとを含み、前記テクスチャパイプラインが、
複数の内積を計算することと、
前記複数の内積に基づいて、第1のレイが第1の形状体に交差するかどうかを判定することと、
前記第1のレイが前記第1の形状体に交差するかどうかに関する前記判定に基づく情報を前記少なくとも1つのシェーダプロセッサに提供することとを行うように構成され、前記テクスチャパイプラインが前記少なくとも1つのシェーダプロセッサとは別であり、前記テクスチャパイプラインが、内積を実行するように構成された固定関数ハードウェアユニットを含む、デバイス。
【請求項９】
前記第1の形状体がボックスまたは矩形のうちの1つである、請求項8に記載のデバイス。
【請求項１０】
前記第1の形状体が軸平行バウンディングボックスである、請求項8に記載のデバイス。
【請求項１１】
前記複数の内積を計算することが、前記テクスチャパイプラインの固定関数内積ハードウェアユニットを用いて前記複数の内積を計算することを含む、請求項8に記載のデバイス。
【請求項１２】
前記テクスチャパイプラインが、
前記複数の内積に基づいて少なくとも1つの最小計算および少なくとも1つの最大計算を実行するようにさらに構成され、前記第1のレイが前記第1の形状体に交差するかどうかに関する前記判定が、前記少なくとも1つの最小計算および前記少なくとも1つの最大計算に基づく、請求項8に記載のデバイス。
【請求項１３】
前記少なくとも1つのシェーダプロセッサが、
複数の命令の各々に関して、前記命令がレイ-ボックス交差テスト命令であるかどうかを判定することと、
レイ-ボックス交差テスト命令であると判定された各命令に関して、情報を前記テクスチャパイプラインに送ることとを行うように構成され、前記情報が少なくとも前記第1のレイおよび前記第1の形状体に基づく、請求項8に記載のデバイス。
【請求項１４】
少なくとも1つのシェーダプロセッサと、
テクスチャパイプラインとを含み、前記テクスチャパイプラインが、
複数の内積を計算することと、
前記複数の内積に基づいて、第1のレイが第1の形状体に交差するかどうかを判定することと、
前記第1のレイが前記第1の形状体に交差するかどうかに関する前記判定に基づく情報を前記少なくとも1つのシェーダプロセッサに提供することとを行うように構成され、前記テクスチャパイプラインが前記少なくとも1つのシェーダプロセッサとは別であり、前記テクスチャパイプラインが、内積を実行するように構成された固定関数ハードウェアユニットを含む、グラフィックス処理ユニット(GPU)。
【請求項１５】
前記第1の形状体がボックスまたは矩形のうちの1つである、請求項14に記載のGPU。
【請求項１６】
前記第1の形状体が軸平行バウンディングボックスである、請求項14に記載のGPU。
【請求項１７】
前記複数の内積を計算することが、前記テクスチャパイプラインの固定関数内積ハードウェアユニットを用いて前記複数の内積を計算することを含む、請求項14に記載のGPU。
【請求項１８】
前記テクスチャパイプラインが、
前記複数の内積に基づいて少なくとも1つの最小計算および少なくとも1つの最大計算を実行するようにさらに構成され、前記第1のレイが前記第1の形状体に交差するかどうかに関する前記判定が、前記少なくとも1つの最小計算および前記少なくとも1つの最大計算に基づく、請求項14に記載のGPU。
【請求項１９】
前記少なくとも1つのシェーダプロセッサが、
複数の命令の各々に関して、前記命令がレイ-ボックス交差テスト命令であるかどうかを判定することと、
レイ-ボックス交差テスト命令であると判定された各命令に関して、情報を前記テクスチャパイプラインに送ることとを行うように構成され、前記情報が少なくとも前記第1のレイおよび前記第1の形状体に基づく、請求項14に記載のGPU。
【請求項２０】
レイトレーシングのためのデバイスであって、
第1のレイと第1の形状体とに関するレイ交差テストを実行するためにグラフィックス処理ユニット(GPU)のテクスチャパイプラインハードウェアを採用するための手段であって、
前記テクスチャパイプラインハードウェアを用いて複数の内積を計算するための手段と、
前記複数の内積に基づいて、前記第1のレイが前記第1の形状体に交差するかどうかを判定するための手段とを含み、前記テクスチャパイプラインハードウェアがシェーダプロセッサとは別であり、前記テクスチャパイプラインハードウェアが、内積を実行するように構成された固定関数ハードウェアユニットを含む、デバイス。
【手続補正書】
【提出日】平成29年4月25日(2017.4.25)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
グラフィックス処理におけるレイトレーシングのための方法であって、
第1の形状体と第1のレイとを定義する情報を受信するステップであって、前記第1の形状体がバウンディングボックスである、ステップと、
前記第1のレイと前記第1の形状体とに関するレイ交差テストを実行するためにグラフィックス処理ユニットのテクスチャパイプラインハードウェアを使用するステップであって、前記テクスチャパイプラインハードウェアがシェーダプロセッサとは別であり、前記テクスチャパイプラインハードウェアが、内積を計算するように構成された固定関数ハードウェアユニットを含み、前記レイ交差テストを実行することが、
前記第1の形状体と前記第1のレイとを定義する前記情報に基づいて、前記テクスチャパイプラインハードウェアを用いて複数の内積とともに複数の距離を計算することと、
前記計算された複数の距離に基づいて、前記第1のレイが前記第1の形状体に交差するかどうかを判定することとを含む、ステップと、
前記テクスチャパイプラインハードウェアを用いて、前記判定に基づいて前記第1のレイが前記第1の形状体に交差するか否かについての指示を出力するステップと
を含む、方法。
【請求項２】
前記第1の形状体がボックスまたは矩形のうちの1つである、請求項1に記載の方法。
【請求項３】
前記第1の形状体が軸平行バウンディングボックスである、請求項1に記載の方法。
【請求項４】
前記レイ交差テストを実行することが、前記複数の内積に基づいて少なくとも1つの最小計算および少なくとも1つの最大計算を実行することをさらに含み、前記第1のレイが前記第1の形状体に交差するかどうかに関する前記判定が、前記少なくとも1つの最小計算および前記少なくとも1つの最大計算に基づく、請求項1に記載の方法。
【請求項５】
複数の命令の各々に関してGPUのシェーダプロセッサを用いて、前記命令がレイ-ボックス交差テスト命令であるかどうかを判定するステップと、
レイ-ボックス交差テスト命令であると判定された各命令に関して、前記第1の形状体と前記第1のレイとを定義する前記情報を前記テクスチャパイプラインハードウェアに送るステップと
をさらに含む、請求項1に記載の方法。
【請求項６】
グラフィックス処理におけるレイトレーシングのためのデバイスであって、
グラフィックスデータを記憶するように構成されたメモリと、
グラフィックス処理ユニット(GPU)とを含み、前記GPUが、
バウンディングボックスである第1の形状体と第1のレイとを定義する情報を含む、前記グラフィックスデータに関する情報を処理するように構成された少なくとも1つのシェーダプロセッサと、
前記第1のレイと前記第1の形状体とに関するレイ交差テストを実行するように構成されたテクスチャパイプラインハードウェアであって、前記テクスチャパイプラインハードウェアが前記少なくとも1つのシェーダプロセッサとは別であり、前記テクスチャパイプラインハードウェアが、内積を計算するように構成された固定関数ハードウェアユニットを含む、テクスチャパイプラインハードウェアとを含み、
前記レイ交差テストを実行するために、前記テクスチャパイプラインハードウェアは、
バウンディングボックスである前記第1の形状体と前記第1のレイとを定義する前記情報を受信し、
前記第1の形状体と前記第1のレイとを定義する前記情報に基づいて、複数の内積とともに複数の距離を計算し、
前記計算された複数の距離に基づいて前記第1のレイが前記第1の形状体に交差するかどうかを判定し、
前記判定に基づいて前記第1のレイが前記第1の形状体に交差するか否かついての指示を、前記少なくとも1つのシェーダプロセッサに出力するようにさらに構成される、デバイス。
【請求項７】
前記第1の形状体がボックスまたは矩形のうちの1つである、請求項6に記載のデバイス。
【請求項８】
前記第1の形状体が軸平行バウンディングボックスである、請求項6に記載のデバイス。
【請求項９】
前記テクスチャパイプラインハードウェアが、
前記複数の内積に基づいて少なくとも1つの最小計算および少なくとも1つの最大計算を実行するようにさらに構成され、前記第1のレイが前記第1の形状体に交差するかどうかに関する前記判定が、前記少なくとも1つの最小計算および前記少なくとも1つの最大計算に基づく、請求項6に記載のデバイス。
【請求項１０】
前記少なくとも1つのシェーダプロセッサが、
複数の命令の各々に関して、前記命令がレイ-ボックス交差テスト命令であるかどうかを判定し、
レイ-ボックス交差テスト命令であると判定された各命令に関して、前記第1の形状体と前記第1のレイとを定義する前記情報を前記テクスチャパイプラインハードウェアに送るようにさらに構成される、請求項6に記載のデバイス。
【請求項１１】
バウンディングボックスである第1の形状体と第1のレイとを定義する情報を含む、グラフィックスデータに関する情報を処理するように構成された少なくとも1つのシェーダプロセッサと、
前記第1のレイと前記第1の形状体とに関するレイ交差テストを実行するように構成されたテクスチャパイプラインハードウェアであって、前記テクスチャパイプラインハードウェアが前記少なくとも1つのシェーダプロセッサとは別であり、前記テクスチャパイプラインハードウェアが、内積を計算するように構成された固定関数ハードウェアユニットを含む、テクスチャパイプラインハードウェアとを含み、
前記レイ交差テストを実行するために、前記テクスチャパイプラインハードウェアは、
バウンディングボックスである前記第1の形状体と前記第1のレイとを定義する前記情報を受信し、
前記第1の形状体と前記第1のレイとを定義する前記情報に基づいて、複数の内積とともに複数の距離を計算し、
前記計算された複数の距離に基づいて前記第1のレイが前記第1の形状体に交差するかどうかを判定し、
前記判定に基づいて前記第1のレイが前記第1の形状体に交差するか否かついての指示を、前記少なくとも1つのシェーダプロセッサに出力するようにさらに構成される、
グラフィックス処理ユニット(GPU)。
【請求項１２】
前記第1の形状体がボックスまたは矩形のうちの1つである、請求項11に記載のGPU。
【請求項１３】
前記第1の形状体が軸平行バウンディングボックスである、請求項11に記載のGPU。
【請求項１４】
前記テクスチャパイプラインハードウェアが、
前記複数の内積に基づいて少なくとも1つの最小計算および少なくとも1つの最大計算を実行するようにさらに構成され、前記第1のレイが前記第1の形状体に交差するかどうかに関する前記判定が、前記少なくとも1つの最小計算および前記少なくとも1つの最大計算に基づく、請求項11に記載のGPU。
【請求項１５】
前記少なくとも1つのシェーダプロセッサが、
複数の命令の各々に関して、前記命令がレイ-ボックス交差テスト命令であるかどうかを判定することと、
レイ-ボックス交差テスト命令であると判定された各命令に関して、前記第1の形状体と前記第1のレイとを定義する前記情報を前記テクスチャパイプラインハードウェアに送ることとを行うように構成される、請求項11に記載のGPU。
【国際調査報告】
2017534976.tif 000016
2017534976.tif 000017