JP2019509561A - グラフィックス処理におけるシャドーレイのツリー横断のための開始ノード決定 - Google Patents

グラフィックス処理におけるシャドーレイのツリー横断のための開始ノード決定 Download PDF

Info

Publication number
JP2019509561A
JP2019509561A JP2018544304A JP2018544304A JP2019509561A JP 2019509561 A JP2019509561 A JP 2019509561A JP 2018544304 A JP2018544304 A JP 2018544304A JP 2018544304 A JP2018544304 A JP 2018544304A JP 2019509561 A JP2019509561 A JP 2019509561A
Authority
JP
Japan
Prior art keywords
data structure
node
hierarchical data
display
bounding
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2018544304A
Other languages
English (en)
Other versions
JP6571884B2 (ja
Inventor
ユライ・オバート
Original Assignee
クアルコム,インコーポレイテッド
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by クアルコム,インコーポレイテッド filed Critical クアルコム,インコーポレイテッド
Publication of JP2019509561A publication Critical patent/JP2019509561A/ja
Application granted granted Critical
Publication of JP6571884B2 publication Critical patent/JP6571884B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/06Ray-tracing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/50Lighting effects
    • G06T15/80Shading
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/08Volume rendering
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2207/00Indexing scheme for image analysis or image enhancement
    • G06T2207/20Special algorithmic details
    • G06T2207/20016Hierarchical, coarse-to-fine, multiscale or multiresolution image processing; Pyramid transform

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Computer Graphics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Image Generation (AREA)
  • Audiology, Speech & Language Pathology (AREA)
  • Computational Linguistics (AREA)
  • Health & Medical Sciences (AREA)
  • Human Computer Interaction (AREA)
  • Acoustics & Sound (AREA)
  • Multimedia (AREA)
  • Artificial Intelligence (AREA)

Abstract

少なくとも1つのプロセッサが、階層データ構造内でシーンの複数のプリミティブを編成することができ、複数のバウンディングボリュームが階層データ構造の複数のノードに関連付けられる。少なくとも1つのプロセッサは、複数のバウンディングボリュームの各々の表示をメモリ内のオフスクリーンレンダリングターゲットにラスタライズし得る。少なくとも1つのプロセッサは、シーン内のレイにマッピングするオフスクリーンレンダリングターゲット内のピクセルに少なくとも部分的に基づいて、階層データ構造の横断を開始するための開始ノードとして、ピクセルに関連する階層データ構造の非ルートノードを決定し得る。少なくとも1つのプロセッサは、シーン内のレイが複数のプリミティブのうちの1つと交差するかどうかを判断するために、開始ノードから開始して階層データ構造を横断し得る。

Description

本開示は、シャドーレイトレーシングのレイプリミティブ交点を決定するために階層データ構造を横断することを含む、グラフィックス処理に関する。
コンピュータグラフィックスでは、シャドーレンダリングは、3次元(3D)シーンの特定のロケーションが光源によって照らされるかどうかに基づいて、シーンにシャドーが追加される技法である。グラフィックス処理ユニット(GPU)は、3Dシーンの特定のロケーションに対するそのようなシャドーレンダリングを、そのロケーションから光源に向けてシャドーレイと呼ばれるベクトルを放射することによって実行し得る。シャドーレイがシーンジオメトリにおけるプリミティブと交差するとGPUが判断した場合、GPUは、ソースロケーションが影にあり、光源によって照らされないと判断し得る。
シャドーレイプリミティブ交点を見つけるプロセスを加速させるために、GPUは、シーンプリミティブ(たとえば、三角形)を階層的にグループ化する加速データ構造(ADS: acceleration data structure)内に、3Dシーンのシーンジオメトリを配置し得る。GPUは、シャドーレイがシーンのプリミティブと交差するかどうかを判断するために、シーンプリミティブの階層に対してシャドーレイ交差テストを実行することによって、ADSを再帰的に横断し得る。ADSの横断に基づいて、特定のロケーションから放射されたシャドーレイがプリミティブと交差するとGPUが判断した場合、GPUは、特定のロケーションが少なくともそのプリミティブによって光源から遮られると判断し得る。
一態様では、本開示は、方法を対象とする。方法は、少なくとも1つのプロセッサによって、階層データ構造内でシーンの複数のプリミティブを編成するステップであって、複数のバウンディングボリュームが階層データ構造の複数のノードに関連付けられる、ステップを含む。方法は、少なくとも1つのプロセッサによって、複数のバウンディングボリュームの各々の表示をオフスクリーンレンダリングターゲットにラスタライズするステップをさらに含む。方法は、少なくとも1つのプロセッサによって、またオフスクリーンレンダリングターゲット内の第1のレイと交差するピクセルに少なくとも部分的に基づいて、階層データ構造の横断を開始するための開始ノードとして、ピクセルに関連する階層データ構造の非ルートノードを決定するステップをさらに含む。方法は、少なくとも1つのプロセッサによって、シーン内の第2のレイが複数のプリミティブのうちの1つと交差するかどうかを判断するために、開始ノードから開始して階層データ構造を横断するステップをさらに含む。
別の態様では、本開示は、グラフィックスデータを処理するように構成された装置を対象とする。装置は、メモリを含む。装置は、階層データ構造内でシーンの複数のプリミティブを編成することであって、複数のバウンディングボリュームが階層データ構造の複数のノードに関連付けられる、編成することと、複数のバウンディングボリュームの各々の表示をメモリ内のオフスクリーンレンダリングターゲットにラスタライズすることと、オフスクリーンレンダリングターゲット内の第1のレイと交差するピクセルに少なくとも部分的に基づいて、階層データ構造の横断を開始するための開始ノードとして、ピクセルに関連する階層データ構造の非ルートノードを決定することと、シーン内の第2のレイが複数のプリミティブのうちの1つと交差するかどうかを判断するために、開始ノードから開始して階層データ構造を横断することとを行うように構成された少なくとも1つのプロセッサをさらに含む。
別の態様では、本開示は、装置を対象とする。装置は、階層データ構造内でシーンの複数のプリミティブを編成するための手段であって、複数のバウンディングボリュームが階層データ構造の複数のノードに関連付けられる、手段を含む。装置は、複数のバウンディングボリュームの各々の表示をオフスクリーンレンダリングターゲットにラスタライズするための手段をさらに含む。装置は、オフスクリーンレンダリングターゲット内の第1のレイと交差するピクセルに少なくとも部分的に基づいて、階層データ構造の横断を開始するための開始ノードとして、ピクセルに関連する階層データ構造の非ルートノードを決定するための手段をさらに含む。装置は、シーン内の第2のレイが複数のプリミティブのうちの1つと交差するかどうかを判断するために、開始ノードから開始して階層データ構造を横断するための手段をさらに含む。
別の態様では、本開示は、命令を記憶するコンピュータ可読記憶媒体を対象とする。命令は、実行されたとき、1つまたは複数のプログラマブルプロセッサに、階層データ構造内でシーンの複数のプリミティブを編成することであって、複数のバウンディングボリュームが階層データ構造の複数のノードに関連付けられる、編成することと、複数のバウンディングボリュームの各々の表示をメモリ内のオフスクリーンレンダリングターゲットにラスタライズすることと、オフスクリーンレンダリングターゲット内の第1のレイと交差するピクセルに少なくとも部分的に基づいて、階層データ構造の横断を開始するための開始ノードとして、ピクセルに関連する階層データ構造の非ルートノードを決定することと、シーン内の第2のレイが複数のプリミティブのうちの1つと交差するかどうかを判断するために、開始ノードから開始して階層データ構造を横断することとを行わせる。
本開示の1つまたは複数の態様の詳細が、添付の図面および下記の説明において記載される。本開示の他の特徴、目的、および利点は、説明および図面から、また特許請求の範囲から明らかになるであろう。
本開示の1つまたは複数の態様を実装するように構成され得る例示的なコンピューティングデバイスを示すブロック図である。 図1のCPU、GPU、およびシステムメモリの例示的な実装形態をさらに詳細に示すブロック図である。 GPUがシャドーレイトレーシングを実行し得る例示的なグラフィックスシーンおよびバウンディングボリュームへのグラフィックスシーンの例示的な区分を示す概念図である。 図3に示す例示的なバウンディングボリュームおよびプリミティブに関連付けられるノードを有する例示的な階層データ構造を示す図である。 例示的なオフスクリーンレンダリングターゲットにラスタライズされたバウンディングボリュームの例示的な表示を示すブロック図である。 シャドーレイプリミティブ交点を見つけるために例示的な階層ツリー構造を横断するための開始ノードを決定するための例示的なプロセスを示すフローチャートである。
一般に、本開示は、GPUが、グラフィックスシーンの光源に向けられたシャドーレイが、ADSなどの階層データ構造内に配置されたプリミティブと交差するかどうかを判断することによって、シーンに対するシャドーレンダリングをより効率的に実行するための技法について説明する。GPUは、ルートノードから階層データ構造を横断するのではなく、代わりに、ルートノード以外のノードから階層データ構造の横断を開始し、それによって、GPUが実行し得るレイ交差テストの数を低減し得る。GPUは、階層データ構造の内部ノードおよびリーフノードに関連するバウンディングボリュームのサブセットをオフスクリーンレンダリングターゲットにラスタライズするために、そのグラフィックス処理パイプラインからシェーダユニットを利用することによって横断を開始する、階層データ構造の非ルートノードを決定し得る。GPUは、オフスクリーンレンダリングターゲットから、階層データ構造の横断を開始する内部非ルートノードを決定し、それによって、階層データ構造を横断するためにGPUが実行し得るシャドーレイ交差テストの数を低減し得る。オフスクリーンレンダリングターゲットにラスタライズすることは、レイ交差テストを実行することよりも計算コストが比較的低いので、GPUは、ルートノードから階層データ構造を横断することと比較して、オフスクリーンレンダリングターゲットにラスタライズすることと、階層データ構造の横断を開始する内部非ルートノードを決定することとによって、シャドーレンダリングパフォーマンスの大幅な向上を実現し得る。
本開示の態様によれば、GPUは、階層データ構造内でシーンの複数のプリミティブを編成することができ、複数のバウンディングボリュームが階層データ構造の複数のノードに関連付けられる。GPUはさらに、複数のバウンディングボリュームの各々の表示をメモリ内のオフスクリーンレンダリングターゲットにラスタライズし得る。GPUはさらに、オフスクリーンレンダリングターゲット内の第1のレイと交差するピクセルに少なくとも部分的に基づいて、階層データ構造の横断を開始するための開始ノードとして、ピクセルに関連する階層データ構造の非ルートノードを決定し得る。GPUはさらに、シーン内の第2のレイが複数のプリミティブのうちの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つまたは複数のグラフィックスレンダリング命令を含み得る。いくつかの例では、ソフトウェアアプリケーション命令は、グラフィックスアプリケーションプログラミングインターフェース(API)、たとえば、オープングラフィックスライブラリ(OpenGL(登録商標))API、オープングラフィックスライブラリ組込みシステム(OpenGL ES)API、Direct3D API、X3D API、RenderMan API、WebGL 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は、オンチップメモリと呼ばれる場合がある。このグラフィックスメモリ40は、重いバストラフィックを経る場合があるバスを介してGPU12がデータを読み書きする必要性を除去することによって、GPU12がより効率的に動作することを可能にする。しかし、場合によっては、GPU12は、別個のメモリを含まなくてもよく、その代わり、バスを介してシステムメモリ10を利用することができる。グラフィックスメモリ40は、1つまたは複数の揮発性または不揮発性メモリまたは記憶デバイス、たとえば、ランダムアクセスメモリ(RAM)、スタティックRAM(SRAM)、ダイナミックRAM(DRAM)、消去可能プログラマブルROM(EPROM)、電気的消去可能プログラマブルROM(EEPROM)、フラッシュメモリ、磁気データ媒体、または光学記憶媒体など、を含むことができる。
いくつかの例では、GPU12は、十分に形成された画像をシステムメモリ10に記憶し得る。ディスプレイプロセッサ14は、画像を表示するためにディスプレイ8のピクセルを照明させる、システムメモリ10からの画像および出力値を取り出す場合がある。ディスプレイ8は、GPU12によって生成された画像コンテンツを表示するデバイス2のディスプレイである場合がある。ディスプレイ8は、液晶ディスプレイ(LCD)、有機発光ダイオードディスプレイ(OLED)、陰極線管(CRT)ディスプレイ、プラズマディスプレイ、または別のタイプのディスプレイデバイスである場合がある。
本開示の態様によれば、GPU12は、階層データ構造内でシーンの複数のプリミティブを編成することができ、複数のバウンディングボリュームが階層データ構造の複数のノードに関連付けられる。GPU12はさらに、複数のバウンディングボリュームの各々の表示をメモリ内のオフスクリーンレンダリングターゲットにラスタライズし得る。GPU12はさらに、オフスクリーンレンダリングターゲット内の第1のレイと交差するピクセルに少なくとも部分的に基づいて、階層データ構造の横断を開始するための開始ノードとして、ピクセルに関連する階層データ構造の非ルートノードを決定し得る。GPU12はさらに、シーン内の第2のレイが複数のプリミティブのうちの1つと交差するかどうかを判断するために、開始ノードから開始して階層データ構造を横断し得る。
図2は、図1のCPU6、GPU12、およびシステムメモリ10の例示的な実装形態をさらに詳細に示すブロック図である。図2に示すように、CPU6は、各々がCPU6上で実行される1つまたは複数のソフトウェアアプリケーションまたはサービスである場合がある、少なくとも1つのソフトウェアアプリケーション18、グラフィックスAPI20、およびGPUドライバ22を含み得る。
CPU6およびGPU12が利用可能なメモリは、システムメモリ10およびフレームバッファ16を含み得る。フレームバッファ16は、システムメモリ10の一部である場合があるか、またはシステムメモリ10とは別である場合があり、レンダリングされた画像データを記憶する場合がある。
ソフトウェアアプリケーション18は、GPU12の機能を利用する任意のアプリケーションであり得る。たとえば、ソフトウェアアプリケーション18は、GUIアプリケーション、オペレーティングシステム、ポータブルマッピングアプリケーション、工学用アプリケーションもしくは芸術用アプリケーションのためのコンピュータ支援設計プログラム、ビデオゲームアプリケーション、または2Dグラフィックスもしくは3Dグラフィックスを使用する別のタイプのソフトウェアアプリケーションである場合がある。
ソフトウェアアプリケーション18は、グラフィカルユーザインターフェース(GUI)および/またはグラフィックスシーンをレンダリングするようGPU12に命令する1つまたは複数の描画命令を含み得る。たとえば、描画命令は、GPU12によってレンダリングされるべき1つまたは複数のグラフィックスプリミティブのセットを定義する命令を含み得る。いくつかの例では、描画命令は、GUIにおいて使用される複数のウィンドウ処理サーフェスの全部または一部をまとめて定義してもよい。追加の例では、描画命令は、アプリケーションによって定義されたモデル空間またはワールド空間内に1つまたは複数のグラフィックスオブジェクトを含むグラフィックスシーンの全部または一部をまとめて定義してもよい。
ソフトウェアアプリケーション18は、グラフィックスAPI20を介して、1つまたは複数のグラフィックスプリミティブを表示可能なグラフィックス画像にレンダリングするための1つまたは複数のコマンドをGPU12に発行するようにGPUドライバ22を起動し得る。たとえば、ソフトウェアアプリケーション18は、グラフィックスAPI20を介して、プリミティブ定義をGPU12に提供するようにGPUドライバ22を起動し得る。場合によっては、プリミティブ定義は、描画プリミティブ、たとえば、三角形、矩形、三角形ファン、三角形ストリップなどのリストの形でGPU12に提供され得る。
GPU12に提供されるプリミティブ定義は、レンダリングされるべきプリミティブに関連する1つまたは複数の頂点を指定する頂点仕様を含み得る。頂点仕様は、頂点ごとの位置座標と、場合によっては、たとえば、色座標、法線ベクトル、およびテクスチャ座標など、頂点に関連する他の属性とを含んでもよい。プリミティブ定義はまた、プリミティブタイプ情報(たとえば、三角形、矩形、三角形ファン、三角形ストリップなど)、スケーリング情報、回転情報などを含んでもよい。
ソフトウェアアプリケーション18によってGPUドライバ22に発行された命令に基づいて、GPUドライバ22は、プリミティブをレンダリングするためにGPU12が実行する1つまたは複数の演算を指定する1つまたは複数のコマンドを策定し得る。GPU12がCPU6からコマンドを受信すると、プロセッサクラスタ46は、コマンドを復号化するようにグラフィックス処理パイプラインを実行することができ、コマンドに指定された演算を実行するようにグラフィックス処理パイプラインを構成することができる。たとえば、グラフィックス処理パイプラインのコマンドエンジンは、プリミティブデータを読み取り、データをアセンブルし、グラフィックス処理パイプラインの他のグラフィックスパイプライン段階が使用するためのプリミティブにする場合がある。GPU12は、指定された演算を実行した後、レンダリングされたデータを、ディスプレイデバイスに関連するフレームバッファ16に出力する。
フレームバッファ16は、GPU12のための宛先ピクセルを記憶する。各宛先ピクセルは、一意のスクリーンピクセルロケーションに関連付けられ得る。いくつかの例では、フレームバッファ16は、宛先ピクセルごとの色成分および宛先アルファ値を記憶し得る。たとえば、フレームバッファ16は、ピクセルごとの赤、緑、青、アルファ(RGBA)成分を記憶し得るが、ここにおいて、「RGB」成分は色値に対応し、「A」成分は宛先アルファ値に対応する。フレームバッファ16は、宛先ピクセルごとの深度値を記憶することもできる。このようにして、フレームバッファ16は、グラフィックスデータ(たとえば、サーフェス)を記憶すると言われることがある。フレームバッファ16およびシステムメモリ10は別個のメモリユニットであるものとして示されているが、他の例では、フレームバッファ16は、システムメモリ10の一部である場合がある。GPU12がフレームのピクセルのすべてをフレームバッファ16内にレンダリングすると、フレームバッファは、完成したフレームを表示のためにディスプレイ8に出力し得る。
プロセッサクラスタ46は、1つもしくは複数のプログラマブル処理ユニット42および/または1つもしくは複数の固定機能処理ユニット44を含み得る。プログラマブル処理ユニット42は、たとえば、CPU6からGPU12上にダウンロードされる1つまたは複数のシェーダプログラムを実行するように構成されるプログラマブルシェーダユニットを含み得る。いくつかの例では、プログラマブル処理ユニット42は、「シェーダプロセッサ(shader processors)」または「統合シェーダ(unified shaders)」と呼ばれる場合があり、ジオメトリシェーディング動作、頂点シェーディング動作、ピクセルシェーディング動作、またはグラフィックスをレンダリングするための他のシェーディング動作を実行することができる。シェーダユニットは各々、動作をフェッチおよび復号化するための1つまたは複数の構成要素、算術計算を実践するための1つまたは複数のALU、1つまたは複数のメモリ、キャッシュ、およびレジスタを含み得る。
GPU12は、グラフィックス処理パイプライン内の頂点シェーダ段階、テッセレーション段階、ジオメトリシェーダ段階、ラスタ化段階、およびフラグメントシェーダ段階のうちの1つまたは複数を実行するコマンドをプログラマブル処理ユニット42に送ることによって、頂点シェーディング、ハルシェーディング、ドメインシェーディング、ジオメトリシェーディング、フラグメントシェーディングなどの様々なシェーディング動作を実行するように、プログラマブル処理ユニット42に指示し得る。いくつかの例では、GPUドライバ22は、CPU6上で実行されるコンパイラに、1つまたは複数のシェーダプログラムをコンパイルさせ、コンパイル済みシェーダプログラムをGPU12内に含まれるプログラマブル処理ユニット42にダウンロードさせることができる。
シェーダプログラムは、高水準シェーディング言語、たとえば、OpenGL Shading Language(GLSL)、High Level Shading Language(HLSL)、C for Graphics(Cg)シェーディング言語、OpenGL Cカーネルなどで書かれてよい。コンパイルされたシェーダプログラムは、GPU12内のプログラマブル処理ユニット42の動作を制御する1つまたは複数の命令を含み得る。たとえば、シェーダプログラムは、頂点シェーダ段階の機能を実行するようにプログラマブル処理ユニット42によって実行され得る頂点シェーダプログラム、テッセレーション段階の機能を実行するようにプログラマブル処理ユニット42によって実行され得るテッセレーションシェーダプログラム、ジオメトリシェーダ段階の機能を実行するようにプログラマブル処理ユニット42によって実行され得るジオメトリシェーダプログラム、および/またはフラグメントシェーダ段階の機能を実行するようにプログラマブル処理ユニット42によって実行され得るフラグメントシェーダプログラムを含み得る。頂点シェーダプログラムは、プログラマブル頂点シェーダユニットまたは統合シェーダユニットの実行を制御し、1つまたは複数の頂点ごとの動作を指定する命令を含み得る。
プロセッサクラスタ46は、固定機能処理ユニット44も含み得る。固定機能処理ユニット44は、いくつかの機能を実行するように配線接続されるハードウェア論理回路を含み得る。固定機能処理ユニット44は、たとえば1つまたは複数の制御信号を介して、異なる機能を実行するように構成可能であり得るが、固定機能ハードウェアは通常、ユーザによりコンパイルされるプログラムを受け取ることが可能なプログラムメモリを含まない。いくつかの例では、プロセッサクラスタ46中の固定機能処理ユニット44は、たとえば、グラフィックス処理パイプラインのラスタ化段階の機能を実行するように、たとえば、深度試験、シザー試験、アルファブレンディング、低解像度深度試験などのようなラスタ演算を実行する処理ユニットを含み得る。
グラフィックスメモリ40は、GPU12の集積回路に物理的に統合されたオンチップストレージまたはメモリであり得る。グラフィックスメモリ40はオンチップであるので、GPU12は、システムバスを介してシステムメモリ10から値を読み取り、またはシステムメモリ10に値を書き込むよりも素早く、グラフィックスメモリ40から値を読み取り、またはグラフィックスメモリ40に値を書き込むことが可能であり得る。
本開示の態様によれば、プロセッサクラスタ46は、モデル空間またはワールド空間内に1つまたは複数のグラフィックスオブジェクトを含む3次元(3D)グラフィックスシーンをレンダリングする(3Dシーン内の1つまたは複数のグラフィックスオブジェクトを構成する複数のプリミティブをレンダリングすることを含む)ようにグラフィックス処理パイプラインを実行するために上記で説明した動作を実行し得る。プロセッサクラスタ46はまた、3Dグラフィックスシーンのどのピクセルが光源によって照らされるかを判断するために、3Dグラフィックスシーンのピクセルを通る光源からの光の経路を追跡することによって、3Dグラフィックスシーンのレイトレーシングを実行し得る。
3Dグラフィックスシーンのレイトレーシングを実行する一環として、プロセッサクラスタ46は、光源によって照らされない(したがって影にある)3Dグラフィックスシーンのサーフェスを決定するために、3Dグラフィックスシーンのシャドーレンダリングを実行し得る。そのようなサーフェスは、1つまたは複数の他の固体サーフェス(solid surface)が、光源によって放出された光線がそれらのサーフェスに達するのを阻止するので、影にあり得る。3Dグラフィックスシーン内の特定のロケーションがサーフェスによって光源から隠されるかどうかを判断するために、プロセッサクラスタ46は、特定のロケーションからシャドーレイと呼ばれるベクトルを光源の方向に投げかけ得る。そのロケーションから投げかけられたシャドーレイが、そのロケーションと光源との間に位置するプリミティブと交差するとプロセッサクラスタ46が判断した場合、プロセッサクラスタ46は、シャドーレイが発生したロケーションを、光源から遮られるものと見なし得る。
3Dグラフィックスシーンの特定のロケーションから発生した、3Dグラフィックスシーンの光源に向けられた特定のシャドーレイが、3Dグラフィックスシーン内のプリミティブと交差するかどうかを判断するために、GPU12は、3Dグラフィックスシーン内のプリミティブを、加速データ構造(ADS)41など、シーンプリミティブ(たとえば、三角形)を階層的にグループ化する階層構造内に編成し得る。GPU12は、グラフィックスメモリ40、システムメモリ10内、プロセッサクラスタ46のシェーダメモリ(図示せず)内、または共有システム/グラフィックスメモリ(図示せず)内にADS41を記憶し得る。GPU12がシャドーレイプリミティブ交点を決定するためにADS41を使用する方法の詳細は、図3および図4に関してさらに詳しく述べる。
図3は、GPU12がシャドーレイトレーシングを実行し得る例示的なグラフィックスシーンおよびバウンディングボリュームへのグラフィックスシーンの例示的な区分を示す概念図である。図3に示すように、グラフィックスシーン50は、プリミティブ52A〜52E(以下、「プリミティブ52」)を含む2Dグラフィックスシーンまたは3Dグラフィックスシーンである場合がある。シャドーマッピングプロセスの一環として、GPU12は、グラフィックスシーン50内の特定のロケーションに関して、特定のロケーションから発生し光源に向けられたシャドーレイがプリミティブ52のうちの1つと交差するかどうかを判断し得る。光源とシャドーレイが発生したロケーションとの間に位置するプリミティブとシャドーレイが交差するとGPU12が判断した場合、シャドーレイが発生したロケーションは、交差したプリミティブによって光源から遮られるので、光源によって照らされない。
GPU12は、グラフィックスシーン50を分割し、グラフィックスシーン50の分割された部分を階層的に配置し、グラフィックスシーン50の分割された部分の階層を再帰的に横断することによって、プリミティブ52内の1つのプリミティブが特定のシャドーレイと交差するかどうかを系統的に判断し得る。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のサブセットである場合があり、バウンディングボリューム56Bによって境界をつけられたシーン50の一部分のサブセットに境界をつける場合がある。バウンディングボリューム56Dは、プリミティブ52Cおよび52Dに境界をつける場合があり、バウンディングボリューム56Eは、プリミティブ52Eに境界をつける場合がある。
図3に示す例では、GPU12は、プリミティブ52を5つのバウンディングボリューム56A〜56Eに区分し得る。GPU12は、5つのバウンディングボリューム56A〜56Eに制限されず、シーンおよびシーン内のプリミティブの数に応じて、5つのバウンディングボリューム56A〜56Eよりも多いまたは少ないバウンディングボリュームを使用してよい。いくつかの例では、GPU12は、プリミティブ52Aおよび52Bにそれぞれ個別に境界をつけるためにバウンディングボリューム56Bのサブセットとして追加のバウンディングボリュームを形成し得る。いくつかの例では、CPU6が、同様に、プリミティブ52をバウンディングボリューム56に区分するように構成されてもよい。
バウンディングボリューム56は階層構造内に、考えられるシャドーレイプリミティブ交点を決定するためにGPU12が階層構造を横断し得るように配置され得る。図4は、図3に示すバウンディングボリューム56およびプリミティブ52に関連付けられるノードを有する例示的な階層データ構造を示す。上記で説明したように、シーンのシーンプリミティブは、ADS41などの階層構造内に編成される場合があり、GPU12は、考えられるシャドーレイプリミティブ交点を決定するためにADS41を横断する場合がある。図4に示すように、ADS41の一例は、バウンディングボリューム階層(BVH)ツリー60であってよく、グラフィックスシーン50のバウンディングボリューム56およびプリミティブ52に関連するBVHツリー60のノード62A〜62E(「ノード62」)が、ツリーのような構造内に階層的に配置される。
具体的には、GPU12は、別のバウンディングボリュームを囲むバウンディングボリュームに関連するノードが、囲まれたバウンディングボリュームに関連するノードの親ノードとなり得るように、BVHツリー60を構成し得る。図3の例では、バウンディングボリューム56Cがバウンディングボリューム56Cのサブセットであるバウンディングボリューム56Dおよび56Eを囲んでいるので、バウンディングボリューム56Cに関連するノード62Cは、それぞれバウンディングボリューム56Dおよび56Eに関連するノード62Dおよび62Eの親ノードであり得る。したがって、ルートノード62Aはバウンディングボリューム56Aに関連付けられてよく、内部ノード62Cはバウンディングボリューム56Cに関連付けられてよく、リーフノード62B、62D、および62Eはそれぞれバウンディングボリューム56B、56D、および56Eに関連付けられてよい。
ルートノード62A以外のBVHツリー60のノードは、BVHツリー60の非ルートノードと呼ばれる場合がある。たとえば、内部ノード62C、ならびにリーフノード62B、62D、および62Eは、BVHツリー60の非ルートノードと呼ばれる場合がある。リーフノード62B、62D、および62Eは各々、プリミティブ52のうちの少なくとも1つのプリミティブにリンクされる場合がある。たとえば、リーフノード62Bに関連するバウンディングボリューム56Bがプリミティブ52Aおよび52Bを囲んでいるので、リーフノード62Bはプリミティブ52Aおよび52Bにリンクされる場合があり、リーフノード62Dに関連するバウンディングボリューム56Dがプリミティブ52Cおよび52Dを囲んでいるので、リーフノード62Dはプリミティブ52Cおよび52Dにリンクされる場合があり、リーフノード62Eに関連するバウンディングボリューム56Eがプリミティブ52Eを囲んでいるので、リーフノード62Eはプリミティブ52Eにリンクされる場合がある。BVHツリー60は、不平衡なバイナリツリー(unbalanced binary tree)と見なされる場合があるが、その理由は、階層データ構造60の各非リーフノードが多くて2つの子ノードを有し、リーフノード62B、62D、および62Eが等しくない深度を有する場合があるからである。
GPU12は、BVHツリー60のノード62に関連するバウンディングボリューム56に対してレイボックス交差テストを実行することによって、シャドーレイがプリミティブ52のうちの1つのプリミティブと交差するかどうかを判断するためにBVHツリー60を横断し得る。GPU12は、ルートノード62Aに関連するバウンディングボリューム56Aに対してレイボックス交差テストを実行することによってBVHツリー60の横断を開始する場合がある。シャドーレイがバウンディングボリューム56Aと交差するとGPU12が判断した場合、GPU12は、ノード62BまでBVHツリー60を横断し続ける場合があり、GPU12は、ノード62Bに関連するバウンディングボリューム56Bに対してレイボックス交差テストを実行する場合がある。
シャドーレイがバウンディングボリューム56Bと交差しないとGPU12が判断した場合、GPU12は、ノード62Aおよびさらに下にノード62CまでBVHツリーを再帰的に横断する場合があり、GPU12は、ノード62Cに関連するバウンディングボリューム56Cに対してレイボックス交差テストを実行する場合がある。シャドーレイがバウンディングボリューム56Cと交差するとGPU12が判断した場合、GPU12は、ノード62DまでBVHツリー60を横断し続ける場合があり、GPU12は、ノード62Dに関連するバウンディングボリューム56Dに対してレイボックス交差テストを実行する場合がある。シャドーレイがバウンディングボリューム56Dと交差するとGPUが判断した場合、GPU12は、ノード62Dにリンクされたプリミティブに対してレイプリミティブ交差テストを実行する場合がある。
したがって、GPU12は、シャドーレイがプリミティブ52Cまたはプリミティブ52Dと交差するかどうかを判断するために、プリミティブ52Cに対してレイプリミティブ交差テストを実行する場合があり、プリミティブ52Dに対してレイプリミティブ交差テストを実行する場合もある。GPU12は、プリミティブ52Dに対するレイプリミティブ交差テストから、シャドーレイがプリミティブ52Dと交差すると判断し得る。シャドーレイがプリミティブ(たとえば、プリミティブ52D)と交差すると判断すると、GPU12は、シャドーレイが発生したグラフィックスシーン50内のロケーションが光源から遮られると判断し得る。
シャドーレイがプリミティブ52Dと交差しないとGPU12が判断した場合、GPU12は、ノード62Cおよびさらに下に62EまでBVHツリー60を再帰的に横断し続ける場合があり、GPU12は、ノード62Eに関連するバウンディングボリューム56Eに対してレイボックス交差テストを実行する場合がある。GPU12は、レイボックス交差テストに基づいて、シャドーレイがバウンディングボリューム56Eと交差するかどうかを判断する場合があり、判断を行うと、シャドーレイのBVHツリー60の横断を終える場合がある。
内部ノード62Cまたはリーフノード62B、62D、および62Eのうちの1つなどの非ルートノードから開始してBVHツリー60を横断することができる場合、GPU12は、ルートノード62AからBVHツリー60の横断を開始することと比較して、GPU12が実行するレイ交差テストの数を低減し、それによって、レイが交差するプリミティブを決定する効率を高める場合がある。GPU12は、特定のシャドーレイがBVHツリー60の非ルート(内部)ノードに関連するバウンディングボリュームと交差すると判断することによって、BVHツリー60の非ルートノードからBVHツリー60の横断を開始する場合がある。GPU12は、バウンディングボリューム56の少なくともサブセットを、グラフィックスメモリ40内のオフスクリーンレンダリングターゲットにラスタライズし得る。GPU12は、複数のバウンディングボリューム56をオフスクリーンレンダリングターゲットにラスタライズすることに基づいて、BVHツリー60の横断を開始するためのBVHツリー60内の開始ノードとしてBVHツリー60の非ルートノードを決定し得る。GPU12は、レイ54が交差するプリミティブを決定するために開始ノードから開始してBVHツリー60を横断し得る。
シャドーレイを使用して、グラフィックスシーン50などのグラフィックスシーンのシャドーレンダリングを実行するために、GPU12は、グラフィックスシーン50の光源の観点からBVHツリー60のバウンディングボリューム56の少なくとも一部分の表示をレンダリングし得る。バウンディングボリューム56の少なくとも一部分の表示が光源の観点からレンダリングされるとき、GPU12は、グラフィックスシーン50内のロケーションが、それらのロケーションから発生したシャドーレイがプリミティブ52のうちの1つのプリミティブと交差する場合に、光源によって照らされないと判断することができる。
上記で説明したように、GPU12は、グラフィックスシーン50内の特定のロケーションから発生したシャドーレイがプリミティブ52のうちの1つのプリミティブと交差するかどうかを判断するために、BVHツリー60などの階層構造を横断し得る。GPU12がBVHツリー60の横断を介して、シャドーレイがプリミティブ52のうちの1つのプリミティブと交差すると判断した場合、GPU12は、シャドーレイが発生したグラフィックスシーン50内の特定のロケーションがグラフィックスシーン50の光源によって照らされないと判断し得る。GPU12は通常、特定のロケーションがシーン50の光源によって照らされるかどうかを判断するために、シャドーレイとノード52に関連するバウンディングボリューム56との間のレイボックス交差テストおよび/またはシャドーレイとプリミティブ52との間のレイ交差テストを実行することによって、ルートノード62AからBVHツリー60を横断し得る。
ただし、BVHツリーは、多くの複数のレベルの深度であり得る。たとえば、BVHツリーが16個のレベルを含む場合、GPU12は、BVHツリーの横断を、BVHツリーのルートから開始する代わりにBVHツリーの非ルートノードから開始することによって、シャドーレイがプリミティブと交差するかどうかをより効率的に判断することが可能であり得る。GPU12は、ピクセルをオフスクリーンレンダリングターゲットに素早くラスタライズするために、またオフスクリーンレンダリングターゲット内のピクセルを素早くサンプリングするために、プロセッサクラスタ46上で実行されているピクセルシェーダプログラムおよび/または頂点シェーダプログラムを使用し得るので、GPU12は、BVHツリーの横断を開始する非ルートノードを決定するために、これらのシェーダプログラムのパフォーマンス特性を利用し得る。
図5は、例示的なオフスクリーンレンダリングターゲットにラスタライズされたバウンディングボリュームの例示的な表示を示すブロック図である。GPU12は、BVHツリーの上位レベルの指定された数に関して、光源の視点から、BVHツリーのノードに関連するバウンディングボリュームの表示をグラフィックスメモリまたはシステムメモリ10内のオフスクリーンレンダリングターゲットにラスタライズするために、プロセッサクラスタ46上で実行されているそのグラフィックス処理パイプラインのピクセルシェーダおよび/または頂点シェーダを使用する場合がある。GPU12がグラフィックスシーン50の特定の光源の視点からバウンディングボリュームの表示をラスタライズするように、GPU12は投射行列によりバウンディングボリュームの表示を変換し得る。
グラフィックスシーン50が複数の光源を含む場合、GPU12は、オフスクリーンレンダリングターゲットへのバウンディングボリュームの表示のそのようなラスタ化を複数回、光源ごとに1回実行し得る。GPU12は、各光源の視点からバウンディングボリュームの表示がラスタライズされるように、光源ごとに異なる投影行列により、そのようなラスタ化を実行し得る。
いくつかの例では、16レベルのBVHツリーを仮定すると、GPU12がBVHツリーの上位、たとえば5〜6個のレベルのみに関連するバウンディングボリュームの表示をラスタライズし得るように、GPU12は、BVHツリーの指定された上位レベルのみをオフスクリーンレンダリングターゲットにラスタライズし得る。したがって、GPU12は、いくつかの例では、BVHツリーの非ルートノードのすべてよりも少ない非ルートノードに関連するバウンディングボリュームの表示をオフスクリーンレンダリングターゲット64にラスタライズし得る。
図5に示すように、GPU12は、グラフィックスシーン50の光源の観点から、BVHツリー60のノード62B〜62Eに関連するグラフィックスシーン50のバウンディングボリューム56B〜56Eの表示66A〜66D(「表示66」)をオフスクリーンレンダリングターゲット64にラスタライズし得る。GPU12は、透視行列(perspective matrix)により表示66をラスタライズし得る。GPU12は、グラフィックスメモリ40、システムメモリ10、または任意の他の好適なメモリにオフスクリーンレンダリングターゲット64を記憶し得る。
GPU12は、バウンディングボリューム56B〜56Eを投影する場合があり、GPU12のプロセッサクラスタ46のシェーダユニットは、BVHツリー60の非ルートノード62B〜62Eに関連するバウンディングボリューム56B〜56Eの表示を、多角形、立方体などの、2次元表示または3次元表示としてラスタライズする場合がある。たとえば、GPU12のハードウェアラスタライザは、バウンディングボリューム56の各々を、レンダリングターゲット64内のピクセル内にスキャンコンバートし得る。一例では、GPU12は、バウンディングボリューム56B〜56Eの表示66として、複数のフラットシェーディングされた立方体をオフスクリーンレンダリングターゲット64にラスタライズし得る。GPU12はまた、光源の視点から表示66がラスタライズされるように、透視行列を介して表示66の各々をスケーリングし移動し得る。いくつかの例では、GPU12は、グラフィックスシーン50内のバウンディングボリューム56B〜56Eよりも比較的低い解像度でバウンディングボリューム56B〜56Eの表示66をラスタライズし得る。このように、GPU12は、レイプリミティブ交点を決定する際に、そのパフォーマンスをさらに向上させる場合がある。
GPU12は、異なる色値をBVHツリー60のノード62の各々に関連付けることができ、バウンディングボリューム56の各バウンディングボリュームに関して、表示66のバウンディングボリュームの関連する表示として、それぞれのバウンディングボリュームに関連付けられるBVHツリー60のノードに関連する色値を有するピクセルのブロックをラスタライズすることができる。このように、GPU12は、表示66の各々の色がBVHツリー60内の関連のノードを示すノードインデックスを表し得るように、異なる色でバウンディングボリューム56B〜56Eの表示66の各々をラスタライズし得る。
GPU12は、投影されたバウンディングボリューム56B〜56Eの標準深度試験を実行することによって、また、投影されたバウンディングボリューム56B〜56Eの様々な深度を表す表示66のピクセルに様々な色値を割り当てることによって、表示66の色を決定し得る。GPU12は、表示66のピクセルに割り当てられた色値をBVHツリー60のノード62に関連付け得る。このように、GPU12は、ピクセルの色値をサンプリングすることによって、レンダリングターゲット64内のピクセルに関連するBVHツリー60内のノードを決定し得る。表示66をレンダリングターゲット64にラスタライズする一環として、GPU12は、レンダリングターゲット64内のピクセルに関して、GPU12がそれを、ロケーション72Aから発生したシャドーレイ70Aまたは位置72Bから発生したシャドーレイ70Bなどの1つまたは複数のシャドーレイと交差する可能性があるものとしてマッピングし得るように、レンダリングターゲット64内のピクセルへのシャドーレイのマッピングを決定し得る。いくつかの例では、レンダリングターゲット64は、ピクセルとシャドーレイとの間の1対1マッピングを有し得る。他の例では、ターゲット64をレンダリングするために(対応するバウンディングボリューム56の解像度と比較して)比較的低い解像度で表示66がラスタライズされる場合、ピクセルは、複数のシャドーレイにマッピングされ得る。
グラフィックスシーン内の特定のロケーションから発生した特定のシャドーレイに関する潜在的なシャドーレイプリミティブ交点を決定するために、GPU12は、レイごとに、シャドーレイにマッピングするレンダリングターゲット64内のピクセルロケーションを決定し得る。1つの起点および1つの方向を有するシャドーレイを仮定すると、GPU12は、光源の投影行列に基づいて、レンダリングターゲット64内のピクセルロケーションにシャドーレイをマッピングし得る。そのピクセルロケーションに関して、GPU12は、ピクセルの色値をサンプリングし、BVHツリー60の横断を開始するための開始ノードとして、サンプリングされた色値に関連するノードを決定し得る。
図5の例では、GPU12は、ピクセル76Aが、シャドーレイ70Aにマッピングされるレンダリングターゲット64内のピクセルであると判断し得る。GPU12は、レンダリングターゲット64内のピクセル76Aをサンプリングして、ピクセル76Aの色値を決定し、ピクセル76Aのサンプリングされた色値が、ノード62Bのノードインデックスに関連する色値と同じであると判断する場合があり、それによって、そのピクセル76Aをノード62Bに関連付ける場合がある。したがって、GPU12は、BVHツリー60を横断するための開始ノードとしてノード62Bを設定する場合があり、ノード62BからBVHツリー60の横断を開始する場合がある。
GPU12がノード62Bから開始してBVHツリー60を横断するとき、GPU12は、ノード62Bに関連するバウンディングボリューム56Bに対してシャドーレイボックス交差テストを最初に実行し得る。シャドーレイ70Aがバウンディングボリューム56Bと交差するとGPU12が判断した場合、GPU12は、ノード62Bにリンクされたプリミティブ52Aに対してレイプリミティブ交差テストを実行する場合がある。シャドーレイ70Aがプリミティブ52Aと交差しないとGPU12が判断した場合、GPU12は、ノード62BまでBVHツリー60を再帰的に横断する場合があり、ノード62Bにリンクされたプリミティブ52Bに対してレイプリミティブ交差テストを実行する場合がある。GPU12は、プリミティブ52Bに対するレイプリミティブ交差テストから、シャドーレイ70Aがプリミティブ52Bと交差しないと判断し得る。GPU12は、内部ノード62BからBVHツリー60の横断を開始し、シャドーレイ70Aがプリミティブ52Aまたはプリミティブ52Bのいずれとも交差しないと判断しているので、GPU12は、シャドーレイ70AのBVHツリー60の横断を終えることができる。したがって、GPU12は、シャドーレイ70Aがシーン50内のいずれのプリミティブとも交差しないので、ロケーション72Aが、シャドーレイ70Aがグラフィックスシーン50の光源によって照らされる(また光源から遮られない)ロケーションであると判断し得る。わかるように、プリミティブがシャドーレイ70Aと交差するかどうかを判断するためのBVHツリー60の横断は、GPU12がルートノードから開始してBVHツリー60を横断するように要求される場合とは対照的に、比較的少ないレイボックス交差テストを実行することを含み得る。
いくつかの例では、視野角に応じて、任意の2つのノードのバウンディングボリュームの表示が、スクリーン上に投影されるときに重複する場合がある。この場合、BVHツリー60の横断は、ルートノードではない場合がある、2つの重複するバウンディングボリュームの最も近い共通祖先(lowest common ancestor)から開始する場合がある。バウンディングボリュームの2つの表示が重複する場合、かつ2つのバウンディングボリュームの重複した領域内でレイが交差する場合、GPU12は、バウンディングボリュームに関連するノードのうちの最も近い共通祖先ノードを決定する場合があり、2つの重複する表示によって表示されたバウンディングボリュームに関連するノードのうちの最も近い共通祖先ノードからBVHツリー60の横断を開始する場合がある。たとえば、表示66をレンダリングターゲット64にラスタライズする一方で、GPU12は、表示66Cおよび表示66Dがエリア69において重複すると判断する場合があり、この場合、表示66Cがノード62Dに関連付けられ、表示66Dがノード62Eに関連付けられ、ノード62Dおよびノード62EがBVHツリー60内で同じレベルにある。GPU12は、ノード62Dおよび62Eのうちの最も近い共通祖先ノードに関連する色値を決定する場合があり、エリア69(すなわち、重複の領域)内のピクセルの色値を、ノード62Dおよび62Eのうちの最も近い共通祖先ノードに関連する同じ色値に設定する場合がある。この例では、GPU12は、ノード62Cがノード62Dおよび62Eのうちの最も近い共通祖先ノードであると判断する場合があり、エリア69内のピクセルの色値を、ノード62Cに関連付けられる表示66Bの色値に設定する場合がある。特定のレイがエリア69内のピクセルロケーションにマッピングする場合、GPUは、考えられるレイプリミティブ交点を決定するために、ルートノード62Aではなくノード62CからBVHツリー60の横断を開始し得る。
たとえば、ロケーション72Bから放射されシャドーレイ70Bが、エリア69内にあるピクセル76BにマッピングするとGPU12が判断した場合、GPU12は、マッピングされたピクセル76Bの色をサンプリングすることと、サンプルピクセルの色値がノード62Cに関連する色値と同じであると判断することとによって、ルートノード62Aではないノード62CからBVHツリー60の横断を開始することを決定し得る。ノード62Cがレンダリングターゲット64内の表示66Bによって表示されるバウンディングボリューム56Cに関連付けられるので、GPU12は、ノード62Cに関連するバウンディングボリューム56Cに対してレイボックス交差テストを実行し得る。
シャドーレイ70Bがバウンディングボリューム56Cと交差するとGPU12が判断した場合、GPU12は、ノード62DまでBVHツリー60を横断する場合がある。GPU12は、ノード62Dに関連するバウンディングボリューム56Dに対してレイボックス交差テストを実行する場合がある。シャドーレイ70Bがバウンディングボリューム56Dと交差するとGPUが判断した場合、GPU12は、ノード62Dにリンクされたプリミティブ52Cに対してレイプリミティブ交差テストを実行する場合がある。シャドーレイ70Bがプリミティブ52Cと交差しないとGPUが判断した場合、GPU12は、ノード62DまでBVHツリー60を再帰的に横断する場合があり、ノード62Dにリンクされたプリミティブ52Dに対してレイプリミティブ交差テストを実行する場合がある。GPU12は、プリミティブ52Dに対するレイプリミティブ交差テストから、シャドーレイ70Bがプリミティブ52Dと交差すると判断し得る。
シャドーレイ70Bがプリミティブ52のうちの1つと交差するとGPU12が判断したとき、GPU12は、ロケーション72Bが、シャドーレイ70Bがグラフィックスシーン50の光源から遮られる(光源によって照らされない)ロケーションであると判断することができ、シャドーレイ70BのBVHツリー60の横断を終えることができる。わかるように、GPU12は、グラフィックスシーン50の表示をレンダリングターゲット64にレンダリングすることと、BVHツリー60の横断を開始する非ルートノードを決定するためにレンダリングターゲット64からのピクセルをサンプリングすることとによって、BVHツリー60の横断を加速させることができる。
図6は、シャドーレイプリミティブ交点を見つけるために例示的な階層ツリー構造を横断するための開始ノードを決定するための例示的なプロセスを示すフローチャートである。図6に示すように、プロセスは、CPU6またはGPU12などの少なくとも1つのプロセッサによって、階層データ構造(たとえば、BVHツリー60)内でグラフィックスシーン(たとえば、グラフィックスシーン50)の複数のプリミティブ52を編成することを含むことができ、複数のバウンディングボリューム56が階層データ構造のノード62に関連付けられる(702)。プロセスは、CPU6またはGPU12によって、複数のバウンディングボリューム56の各々の表示をオフスクリーンレンダリングターゲット64にラスタライズすることをさらに含み得る(704)。プロセスは、CPU6またはGPU12によって、またグラフィックスシーン50内のレイにマッピングするオフスクリーンレンダリングターゲット64内のピクセルに少なくとも部分的に基づいて、階層データ構造の横断を開始するための開始ノードとして、ピクセルに関連する階層データ構造の非ルートノードを決定することをさらに含み得る(706)。プロセスは、CPU6またはGPU12によって、グラフィックスシーン50内のレイが複数のプリミティブ52のうちの1つと交差するかどうかを判断するために、開始ノードから開始して階層データ構造のノードのセットを横断することをさらに含み得る(708)。
少なくとも1つのプロセッサは、グラフィックスシーン50内の複数のロケーションに対するシャドーレンダリングを、複数のロケーションの各々からシャドーレイを放射することと、上述のプロセスに従ってシャドーレイの各々に関する考えられるシャドーレイプリミティブ交点を決定することとによって実行し得る。グラフィックスシーン50内の特定のロケーションが、特定のロケーションから放射されたシャドーレイがグラフィックスシーン50内のプリミティブと交差するので、光源から遮られると少なくとも1つのプロセッサが判断した場合、少なくとも1つのプロセッサは、その特定のロケーションのピクセル値を変更し得る。たとえば、少なくとも1つのプロセッサは、特定のロケーションの色値を、特定のロケーションが光源から遮られることを示す黒色値または別の好適な色値に変更し得る。
さらに、複数のバウンディングボリューム56の各々の表示をオフスクリーンレンダリングターゲット64にラスタライズすることと、シャドーレイにマッピングするオフスクリーンレンダリングターゲット64内のピクセルに基づいて、階層データ構造の横断を開始する階層データ構造の非ルートノードを決定することとによって、プロセスは、非ルート開始ノードを決定し、それによって少なくとも1つのプロセッサがシーンに対するシャドーレンダリングをより効率的に実行できるようにすることによって、階層データ構造をより効率的に横断する方法のグラフィックス処理の底辺にある技術的問題に対する技術的解決策を提供する。
いくつかの例では、複数のバウンディングボリューム56の各々の表示をオフスクリーンレンダリングターゲット64にラスタライズすることは、CPU6またはGPU12によって、複数の色値のうちの異なる1つを階層データ構造の複数のノード62の各々に関連付けることと、複数のバウンディングボリューム56の各バウンディングボリュームに関して、CPU6またはGPU12によって、それぞれのバウンディングボリュームに関連付けられる階層データ構造のノードのうちの1つに関連する異なる色値のうちの1つを有するピクセルのブロックをラスタライズすることとをさらに含み得る。
いくつかの例では、階層データ構造の横断を開始するための開始ノードとして、ピクセルに関連する階層データ構造の非ルートノードを決定することは、CPU6またはGPU12によって、ピクセルのピクセル色値に関連付けられる階層データ構造のノードを決定することと、CPU6またはGPU12によって、階層データ構造の横断を開始するための開始ノードとして、ピクセル色値に関連付けられる階層データ構造のノードを設定することとをさらに含み得る。
いくつかの例では、プロセスは、CPU6またはGPU12により、バウンディングボリュームのうちの第1のバウンディングボリュームの第1の表示がバウンディングボリュームのうちの第2のバウンディングボリュームの第2の表示と重複すると判断することであって、第1のバウンディングボリュームは階層データ構造の第1のノードに関連付けられ、第2のバウンディングボリュームは階層データ構造の第2のノードに関連付けられる、判断することと、CPU6またはGPU12によって、第1の表示および第2の表示の重複の領域内の1つまたは複数のピクセルの色値を、第1のノードおよび第2のノードの最も近い共通祖先ノードに関連するノード色値に設定することとをさらに含み得る。
いくつかの例では、プロセスは、レイが複数のプリミティブ52のうちの1つと交差するとの判断に応答して、CPU6またはGPU12によって、レイが光源に向けて放射されるグラフィックスシーン50内のロケーションが光源から遮られると判断することをさらに含むことができ、レイはシャドーレイを含む。いくつかの例では、複数のバウンディングボリューム56の各々の表示をオフスクリーンレンダリングターゲット64にラスタライズすることは、CPU6またはGPU12によって、階層データ構造の非ルートノードのすべてよりも少ない非ルートノードに関連する複数のバウンディングボリューム56の表示をオフスクリーンレンダリングターゲット64にラスタライズすることをさらに含み得る。
いくつかの例では、複数のバウンディングボリューム56の各々の表示をオフスクリーンレンダリングターゲット64にラスタライズすることは、CPU6またはGPU12によって、複数のバウンディングボリューム56の各々の表示として、複数のフラットシェーディングされた立方体をオフスクリーンレンダリングターゲット64にラスタライズすることと、CPU6またはGPU12によって、複数のフラットシェーディングされた立方体の各々を、それぞれのバウンディングボリュームの形状と合致するようにスケーリングし移動することとをさらに含み得る。いくつかの例では、プロセスは、シーンをディスプレイデバイスによる表示のためにレンダリングすることをさらに含み得る。
1つまたは複数の例では、説明された機能は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せで実装され得る。ソフトウェアで実装される場合、機能は、1つもしくは複数の命令またはコードとして、コンピュータ可読媒体上に記憶されてもよく、またはコンピュータ可読媒体を介して送信されてもよい。コンピュータ可読媒体は、コンピュータデータ記憶媒体、またはコンピュータプログラムを1つの場所から別の場所に転送することを容易にする任意の媒体を含む通信媒体を含むことができる。データ記憶媒体は、本開示で説明する技法の実装のための命令、コードおよび/またはデータ構造を取り出すために、1つもしくは複数のコンピュータまたは1つもしくは複数のプロセッサによってアクセスされ得る任意の利用可能な媒体であり得る。限定ではなく例として、そのようなコンピュータ可読媒体は、RAM、ROM、EEPROM、CD-ROMもしくは他の光ディスクストレージ、磁気ディスクストレージもしくは他の磁気記憶デバイス、または命令もしくはデータ構造の形式の所望のプログラムコードを搬送もしくは記憶するために使用可能であり、コンピュータによってアクセス可能な任意の他の媒体を含み得る。さらに、任意の接続をコンピュータ可読媒体と呼ぶことは適正である。たとえば、ソフトウェアが、同軸ケーブル、光ファイバケーブル、より対線、デジタル加入者線(DSL)、または、赤外線、無線、およびマイクロ波などのワイヤレス技術を使用してウェブサイト、サーバ、または他のリモートソースから送信される場合、同軸ケーブル、光ファイバケーブル、より対線、DSL、または、赤外線、無線、およびマイクロ波などのワイヤレス技術は、媒体の定義に含まれる。本明細書で使用するディスク(disk)およびディスク(disc)は、コンパクトディスク(disc)(CD)、レーザーディスク(登録商標)(disc)、光ディスク(disc)、デジタル多用途ディスク(disc)(DVD)、フロッピーディスク(登録商標)(disk)およびBlu-ray(登録商標)ディスク(disc)を含み、ディスク(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ドライバ
40 グラフィックスメモリ
41 加速データ構造(ADS)
42 プログラマブル処理ユニット
44 固定機能処理ユニット
46 プロセッサクラスタ
50 グラフィックスシーン、シーン
52 プリミティブ
52A プリミティブ
52B プリミティブ
52C プリミティブ
52D プリミティブ
52E プリミティブ
54 レイ
56 バウンディングボリューム
56A バウンディングボリューム
56B バウンディングボリューム
56C バウンディングボリューム
56D バウンディングボリューム
56E バウンディングボリューム
60 バウンディングボリューム(BVH)ツリー、階層データ構造
62 ノード
62A ルートノード、ノード
62B リーフノード、ノード、内部ノード
62C ノード、内部ノード
62D ノード、リーフノード
62E ノード、リーフノード
64 オフスクリーンレンダリングターゲット、ターゲット
66 表示
66A 表示
66B 表示
66C 表示
66D 表示
69 エリア
70A シャドーレイ
70B シャドーレイ
72A ロケーション
72B 位置、ロケーション
76A ピクセル
76B ピクセル

Claims (30)

  1. 少なくとも1つのプロセッサによって、階層データ構造内でシーンの複数のプリミティブを編成するステップであって、複数のバウンディングボリュームが前記階層データ構造のノードに関連付けられる、ステップと、
    前記少なくとも1つのプロセッサによって、前記複数のバウンディングボリュームの各々の表示をオフスクリーンレンダリングターゲットにラスタライズするステップと、
    前記少なくとも1つのプロセッサによって、またレイにマッピングする前記オフスクリーンレンダリングターゲット内のピクセルに少なくとも部分的に基づいて、前記階層データ構造の横断を開始するための開始ノードとして、前記ピクセルに関連する前記階層データ構造の非ルートノードを決定するステップと、
    前記少なくとも1つのプロセッサによって、前記シーン内の前記レイが前記複数のプリミティブのうちの1つと交差するかどうかを判断するために、前記開始ノードから開始して前記階層データ構造のノードのセットを横断するステップと
    を含む方法。
  2. 前記複数のバウンディングボリュームの各々の前記表示を前記オフスクリーンレンダリングターゲットにラスタライズするステップは、
    前記少なくとも1つのプロセッサによって、複数の色値のうちの異なる1つを前記階層データ構造の前記複数のノードの各々に関連付けるステップと、
    前記複数のバウンディングボリュームの各バウンディングボリュームに関して、前記少なくとも1つのプロセッサによって、前記それぞれのバウンディングボリュームに関連付けられる前記階層データ構造の前記ノードのうちの1つに関連する前記異なる色値のうちの1つを有するピクセルのブロックをラスタライズするステップと
    をさらに含む、請求項1に記載の方法。
  3. 前記階層データ構造の横断を開始するための前記開始ノードとして、前記ピクセルに関連する前記階層データ構造の前記非ルートノードを決定するステップは、
    前記少なくとも1つのプロセッサによって、前記ピクセルのピクセル色値に関連付けられる前記階層データ構造の前記ノードのうちの1つを決定するステップと、
    前記少なくとも1つのプロセッサによって、前記階層データ構造の横断を開始するための前記開始ノードとして、前記ピクセルの前記ピクセル色値に関連付けられる前記階層データ構造の前記ノードを設定するステップと
    をさらに含む、請求項2に記載の方法。
  4. 前記少なくとも1つのプロセッサによって、前記バウンディングボリュームのうちの第1のバウンディングボリュームの第1の表示が前記バウンディングボリュームのうちの第2のバウンディングボリュームの第2の表示と重複すると判断するステップであって、前記第1のバウンディングボリュームは前記階層データ構造の前記ノードのうちの第1のノードに関連付けられ、前記第2のバウンディングボリュームは前記階層データ構造の前記ノードのうちの第2のノードに関連付けられる、ステップと、
    前記少なくとも1つのプロセッサによって、前記第1の表示および前記第2の表示の重複の領域内の1つまたは複数のピクセルの色値を、前記第1のノードおよび前記第2のノードの最も近い共通祖先ノードに関連するノード色値に設定するステップと
    をさらに含む、請求項2に記載の方法。
  5. 前記レイが前記複数のプリミティブのうちの1つと交差するとの判断に応答して、前記少なくとも1つのプロセッサによって、前記レイが光源に向けて放射される前記シーン内のロケーションが前記光源から遮られると判断するステップであって、前記レイはシャドーレイを含む、ステップ
    をさらに含む、請求項1に記載の方法。
  6. 前記複数のバウンディングボリュームの各々の前記表示を前記オフスクリーンレンダリングターゲットにラスタライズするステップは、
    前記少なくとも1つのプロセッサによって、光源の視点から、前記複数のバウンディングボリュームの各々の前記表示を前記オフスクリーンレンダリングターゲットにラスタライズするステップ
    をさらに含む、請求項1に記載の方法。
  7. 前記複数のバウンディングボリュームの各々の前記表示を前記オフスクリーンレンダリングターゲットにラスタライズするステップは、
    前記少なくとも1つのプロセッサによって、前記複数のバウンディングボリュームの各々の前記表示として、複数のフラットシェーディングされた立方体を前記オフスクリーンレンダリングターゲットにラスタライズするステップと、
    前記少なくとも1つのプロセッサによって、前記複数のフラットシェーディングされた立方体の各々を、それぞれのバウンディングボリュームの形状と合致するようにスケーリングし移動するステップと
    をさらに含む、請求項1に記載の方法。
  8. 前記少なくとも1つのプロセッサによって、前記シーンをディスプレイデバイスによる表示のためにレンダリングするステップ
    をさらに含む、請求項1に記載の方法。
  9. グラフィックスデータを処理するように構成された装置であって、
    メモリと、
    少なくとも1つのプロセッサと
    を備え、前記少なくとも1つのプロセッサは、
    階層データ構造内でシーンの複数のプリミティブを編成することであって、複数のバウンディングボリュームが前記階層データ構造のノードに関連付けられる、編成することと、
    前記複数のバウンディングボリュームの各々の表示を前記メモリ内のオフスクリーンレンダリングターゲットにラスタライズすることと、
    前記シーン内のレイにマッピングする前記オフスクリーンレンダリングターゲット内のピクセルに少なくとも部分的に基づいて、前記階層データ構造の横断を開始するための開始ノードとして、前記ピクセルに関連する前記階層データ構造の非ルートノードを決定することと、
    前記シーン内の前記レイが前記複数のプリミティブのうちの1つと交差するかどうかを判断するために、前記開始ノードから開始して前記階層データ構造のノードのセットを横断することと
    を行うように構成される、装置。
  10. 前記少なくとも1つのプロセッサは、
    複数の色値のうちの異なる1つを前記階層データ構造の前記複数のノードの各々に関連付けることと、
    前記複数のバウンディングボリュームの各バウンディングボリュームに関して、前記それぞれのバウンディングボリュームに関連付けられる前記階層データ構造の前記ノードのうちの1つに関連する前記異なる色値のうちの1つを有するピクセルのブロックをラスタライズすることと
    を行うようにさらに構成される、請求項9に記載の装置。
  11. 前記少なくとも1つのプロセッサは、
    前記ピクセルのピクセル色値に関連付けられる前記階層データ構造の前記ノードのうちの1つを決定することと、
    前記階層データ構造の横断を開始するための前記開始ノードとして、前記ピクセルの前記ピクセル色値に関連付けられる前記階層データ構造の前記ノードを設定することと
    を行うようにさらに構成される、請求項10に記載の装置。
  12. 前記少なくとも1つのプロセッサは、
    前記バウンディングボリュームのうちの第1のバウンディングボリュームの第1の表示が前記バウンディングボリュームのうちの第2のバウンディングボリュームの第2の表示と重複すると判断することであって、前記第1のバウンディングボリュームは前記階層データ構造の前記ノードのうちの第1のノードに関連付けられ、前記第2のバウンディングボリュームは前記階層データ構造の前記ノードのうちの第2のノードに関連付けられる、判断することと、
    前記第1の表示および前記第2の表示の重複の領域内の1つまたは複数のピクセルの色値を、前記第1のノードおよび前記第2のノードの最も近い共通祖先ノードに関連するノード色値に設定することと
    を行うようにさらに構成される、請求項10に記載の装置。
  13. 前記少なくとも1つのプロセッサは、
    前記レイが前記複数のプリミティブのうちの1つと交差するとの判断に応答して、前記レイが光源に向けて放射される前記シーン内のロケーションが前記光源から遮られると判断することであって、前記レイはシャドーレイを含む、判断すること
    を行うようにさらに構成される、請求項9に記載の装置。
  14. 前記少なくとも1つのプロセッサは、
    光源の視点から、前記複数のバウンディングボリュームの各々の前記表示を前記オフスクリーンレンダリングターゲットにラスタライズする
    ようにさらに構成される、請求項9に記載の装置。
  15. 前記少なくとも1つのプロセッサは、
    前記複数のバウンディングボリュームの各々の前記表示として、複数のフラットシェーディングされた立方体を前記オフスクリーンレンダリングターゲットにラスタライズすることと、
    前記複数のフラットシェーディングされた立方体の各々を、それぞれのバウンディングボリュームの形状と合致するようにスケーリングし移動することと
    を行うようにさらに構成される、請求項9に記載の装置。
  16. ディスプレイデバイスをさらに含み、
    前記少なくとも1つのプロセッサは、
    前記シーンを前記ディスプレイデバイスによる表示のためにレンダリングする
    ようにさらに構成される、請求項9に記載の装置。
  17. 階層データ構造内でシーンの複数のプリミティブを編成するための手段であって、複数のバウンディングボリュームが前記階層データ構造のノードに関連付けられる、手段と、
    前記複数のバウンディングボリュームの各々の表示をオフスクリーンレンダリングターゲットにラスタライズするための手段と、
    前記シーン内のレイにマッピングする前記オフスクリーンレンダリングターゲット内のピクセルに少なくとも部分的に基づいて、前記階層データ構造の横断を開始するための開始ノードとして、前記ピクセルに関連する前記階層データ構造の非ルートノードを決定するための手段と、
    前記シーン内の前記レイが前記複数のプリミティブのうちの1つと交差するかどうかを判断するために、前記開始ノードから開始して前記階層データ構造のノードのセットを横断するための手段と
    を含む装置。
  18. 前記複数のバウンディングボリュームの各々の前記表示を前記オフスクリーンレンダリングターゲットにラスタライズするための前記手段は、
    複数の色値のうちの異なる1つを前記階層データ構造の前記複数のノードの各々に関連付けるための手段と、
    前記複数のバウンディングボリュームの各バウンディングボリュームに関して、前記それぞれのバウンディングボリュームに関連付けられる前記階層データ構造の前記ノードのうちの1つに関連する前記異なる色値のうちの1つを有するピクセルのブロックをラスタライズするための手段と
    をさらに含む、請求項17に記載の装置。
  19. 前記階層データ構造の横断を開始するための前記開始ノードとして、前記ピクセルに関連する前記階層データ構造の前記非ルートノードを決定するための前記手段は、
    前記ピクセルのピクセル色値に関連付けられる前記階層データ構造の前記ノードのうちの1つを決定するための手段と、
    前記階層データ構造の横断を開始するための前記開始ノードとして、前記ピクセルの前記ピクセル色値に関連付けられる前記階層データ構造の前記ノードを設定するための手段と
    をさらに含む、請求項18に記載の装置。
  20. 前記バウンディングボリュームのうちの第1のバウンディングボリュームの第1の表示が前記バウンディングボリュームのうちの第2のバウンディングボリュームの第2の表示と重複すると判断するための手段であって、前記第1のバウンディングボリュームは前記階層データ構造の前記ノードのうちの第1のノードに関連付けられ、前記第2のバウンディングボリュームは前記階層データ構造の前記ノードのうちの第2のノードに関連付けられる、手段と、
    前記第1の表示および前記第2の表示の重複の領域内の1つまたは複数のピクセルの色値を、前記第1のノードおよび前記第2のノードの最も近い共通祖先ノードに関連するノード色値に設定するための手段と
    をさらに含む、請求項18に記載の装置。
  21. 前記レイが前記複数のプリミティブのうちの1つと交差するとの判断に応答して、前記レイが光源に向けて放射される前記シーン内のロケーションが前記光源から遮られると判断するための手段であって、前記レイはシャドーレイを含む、手段
    をさらに含む、請求項17に記載の装置。
  22. 前記複数のバウンディングボリュームの各々の前記表示を前記オフスクリーンレンダリングターゲットにラスタライズするための前記手段は、
    光源の視点から、前記複数のバウンディングボリュームの各々の前記表示を前記オフスクリーンレンダリングターゲットにラスタライズするための手段
    をさらに含む、請求項17に記載の装置。
  23. 前記複数のバウンディングボリュームの各々の前記表示を前記オフスクリーンレンダリングターゲットにラスタライズするための前記手段は、
    前記複数のバウンディングボリュームの各々の前記表示として、複数のフラットシェーディングされた立方体を前記オフスクリーンレンダリングターゲットにラスタライズするための手段と、
    前記複数のフラットシェーディングされた立方体の各々を、それぞれのバウンディングボリュームの形状と合致するようにスケーリングし移動するための手段と
    をさらに含む、請求項17に記載の装置。
  24. 実行されたとき、1つまたは複数のプログラマブルプロセッサに、
    階層データ構造内でシーンの複数のプリミティブを編成することであって、複数のバウンディングボリュームが前記階層データ構造のノードに関連付けられる、編成することと、
    前記複数のバウンディングボリュームの各々の表示を前記メモリ内のオフスクリーンレンダリングターゲットにラスタライズすることと、
    前記シーン内のレイにマッピングする前記オフスクリーンレンダリングターゲット内のピクセルに少なくとも部分的に基づいて、前記階層データ構造の横断を開始するための開始ノードとして、前記ピクセルに関連する前記階層データ構造の非ルートノードを決定することと、
    前記シーン内の前記レイが前記複数のプリミティブのうちの1つと交差するかどうかを判断するために、前記開始ノードから開始して前記階層データ構造のノードのセットを横断することと
    を行わせる命令を記憶したコンピュータ可読記憶媒体。
  25. 前記複数のバウンディングボリュームの各々の前記表示を前記オフスクリーンレンダリングターゲットにラスタライズすることは、
    複数の色値のうちの異なる1つを前記階層データ構造の前記複数のノードの各々に関連付けることと、
    前記複数のバウンディングボリュームの各バウンディングボリュームに関して、前記それぞれのバウンディングボリュームに関連付けられる前記階層データ構造の前記ノードのうちの1つに関連する前記異なる色値のうちの1つを有するピクセルのブロックをラスタライズすることと
    をさらに含む、請求項24に記載のコンピュータ可読記憶媒体。
  26. 前記階層データ構造の横断を開始するための前記開始ノードとして、前記ピクセルに関連する前記階層データ構造の前記非ルートノードを決定することは、
    前記ピクセルのピクセル色値に関連付けられる前記階層データ構造の前記ノードのうちの1つを決定することと、
    前記階層データ構造の横断を開始するための前記開始ノードとして、前記ピクセルの前記ピクセル色値に関連付けられる前記階層データ構造の前記ノードを設定することと
    をさらに含む、請求項25に記載のコンピュータ可読記憶媒体。
  27. 実行されたとき、1つまたは複数のプログラマブルプロセッサに、
    前記バウンディングボリュームのうちの第1のバウンディングボリュームの第1の表示が前記バウンディングボリュームのうちの第2のバウンディングボリュームの第2の表示と重複すると判断することであって、前記第1のバウンディングボリュームは前記階層データ構造の前記ノードのうちの第1のノードに関連付けられ、前記第2のバウンディングボリュームは前記階層データ構造の前記ノードのうちの第2のノードに関連付けられる、判断することと、
    前記第1の表示および前記第2の表示の重複の領域内のピクセルの色値を、前記第1のノードおよび前記第2のノードの最も近い共通祖先ノードに関連するノード色値に設定することと
    を行わせる命令をさらに記憶した、請求項25に記載のコンピュータ可読記憶媒体。
  28. 実行されたとき、1つまたは複数のプログラマブルプロセッサに、
    前記レイが前記複数のプリミティブのうちの1つと交差するとの判断に応答して、前記レイが光源に向けて放射される前記シーン内のロケーションが前記光源から遮られると判断することであって、前記レイはシャドーレイを含む、判断すること
    を行わせる命令をさらに記憶した、請求項24に記載のコンピュータ可読記憶媒体。
  29. 前記複数のバウンディングボリュームの各々の前記表示を前記オフスクリーンレンダリングターゲットにラスタライズすることは、
    光源の視点から、前記複数のバウンディングボリュームの各々の前記表示を前記オフスクリーンレンダリングターゲットにラスタライズすること
    をさらに含む、請求項24に記載のコンピュータ可読記憶媒体。
  30. 前記複数のバウンディングボリュームの各々の前記表示を前記オフスクリーンレンダリングターゲットにラスタライズすることは、
    前記複数のバウンディングボリュームの各々の前記表示として、複数のフラットシェーディングされた立方体を前記オフスクリーンレンダリングターゲットにラスタライズすることと、
    前記複数のフラットシェーディングされた立方体の各々を、それぞれのバウンディングボリュームの形状と合致するようにスケーリングし移動することと
    をさらに含む、請求項24に記載のコンピュータ可読記憶媒体。
JP2018544304A 2016-02-25 2017-01-04 グラフィックス処理におけるシャドーレイのツリー横断のための開始ノード決定 Active JP6571884B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/053,930 US9818221B2 (en) 2016-02-25 2016-02-25 Start node determination for tree traversal for shadow rays in graphics processing
US15/053,930 2016-02-25
PCT/US2017/012130 WO2017146820A1 (en) 2016-02-25 2017-01-04 Start node determination for tree traversal for shadow rays in graphics processing

Publications (2)

Publication Number Publication Date
JP2019509561A true JP2019509561A (ja) 2019-04-04
JP6571884B2 JP6571884B2 (ja) 2019-09-04

Family

ID=57868379

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2018544304A Active JP6571884B2 (ja) 2016-02-25 2017-01-04 グラフィックス処理におけるシャドーレイのツリー横断のための開始ノード決定

Country Status (7)

Country Link
US (1) US9818221B2 (ja)
EP (1) EP3420536A1 (ja)
JP (1) JP6571884B2 (ja)
KR (1) KR102003655B1 (ja)
CN (1) CN108701366B (ja)
BR (1) BR112018017344A2 (ja)
WO (1) WO2017146820A1 (ja)

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107403461B (zh) * 2012-01-16 2020-12-22 英特尔公司 使用随机光栅化生成随机采样分布的采样设备和方法
DE112016007098T5 (de) * 2016-07-26 2019-04-18 Hewlett-Packard Development Company, L.P. Indexierung von voxeln für das 3d-drucken
US20200211259A1 (en) * 2018-12-28 2020-07-02 Intel Corporation Apparatus and method for acceleration data structure refit
US11069123B2 (en) * 2018-12-28 2021-07-20 Intel Corporation Cloud-based realtime raytracing
US10740953B2 (en) * 2018-12-28 2020-08-11 Intel Corporation Early termination in bottom-up acceleration data structure refit
TWI767179B (zh) * 2019-01-24 2022-06-11 宏達國際電子股份有限公司 混合實境中偵測真實世界光源的方法、混合實境系統及記錄媒體
US10853994B1 (en) * 2019-05-23 2020-12-01 Nvidia Corporation Rendering scenes using a combination of raytracing and rasterization
CN110580734B (zh) * 2019-09-12 2023-04-25 浙江科澜信息技术有限公司 一种三维场景渲染方法、装置、设备及可读存储介质
US11017581B1 (en) * 2020-01-04 2021-05-25 Adshir Ltd. Method for constructing and traversing accelerating structures
CN111476877B (zh) * 2020-04-16 2024-01-26 网易(杭州)网络有限公司 一种阴影渲染的方法及装置、电子设备、存储介质
US11521308B2 (en) * 2020-04-30 2022-12-06 Advanced Micro Devices, Inc. Ambient occlusion using bounding volume hierarchy bounding box tests
US11282260B2 (en) * 2020-06-09 2022-03-22 Qualcomm Incorporated Bounded volume hierarchy (BVH) tree traversal using spatial division
CN112164401B (zh) * 2020-09-18 2022-03-18 广州小鹏汽车科技有限公司 语音交互方法、服务器和计算机可读存储介质
CN112819940B (zh) * 2021-01-29 2024-02-23 网易(杭州)网络有限公司 渲染方法、装置和电子设备
CN113674389B (zh) * 2021-10-25 2022-03-01 深圳须弥云图空间科技有限公司 场景渲染方法、装置、电子设备及存储介质
CN116912395B (zh) * 2023-09-14 2024-01-12 武汉蜂鸟龙腾软件有限公司 基于OpenGL的图形混合渲染方法、装置及存储介质

Family Cites Families (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8411088B2 (en) 2000-06-19 2013-04-02 Nvidia Corporation Accelerated ray tracing
US8188997B2 (en) 2000-06-19 2012-05-29 Mental Images Gmbh Accelerated ray tracing using shallow bounding volume hierarchies
US7499053B2 (en) 2000-06-19 2009-03-03 Mental Images Gmbh Real-time precision ray tracing
US7002571B2 (en) 2002-06-04 2006-02-21 Intel Corporation Grid-based loose octree for spatial partitioning
US7519899B2 (en) 2004-05-03 2009-04-14 Microsoft Corporation Planar mapping of graphical elements
US7340711B2 (en) * 2004-06-04 2008-03-04 Cadence Design Systems, Inc. Method and apparatus for local preferred direction routing
US7289119B2 (en) 2005-05-10 2007-10-30 Sony Computer Entertainment Inc. Statistical rendering acceleration
US20080024489A1 (en) 2006-07-28 2008-01-31 Robert Allen Shearer Cache Utilization Optimized Ray Traversal Algorithm with Minimized Memory Bandwidth Requirements
US7830379B2 (en) 2006-09-19 2010-11-09 Caustic Graphics, Inc. Architectures for parallelized intersection testing and shading for ray-tracing rendering
US7773087B2 (en) 2007-04-19 2010-08-10 International Business Machines Corporation Dynamically configuring and selecting multiple ray tracing intersection methods
US8212816B1 (en) * 2007-12-17 2012-07-03 Nvidia Corporation System, method, and computer program product for parallel ray tracing traversal and intersection utilizing a single instruction multiple data (SIMD) processing architecture
US8502819B1 (en) 2007-12-17 2013-08-06 Nvidia Corporation System and method for performing ray tracing node traversal in image rendering
US8253730B1 (en) 2008-08-29 2012-08-28 Adobe Systems Incorporated System and method for construction of data structures for ray tracing using bounding hierarchies
CN102165465B (zh) 2008-09-23 2014-02-19 美国医软科技公司 用于在医学影像中交互式标记管状结构的方法
US8379022B2 (en) 2008-09-26 2013-02-19 Nvidia Corporation Fragment shader for a hybrid raytracing system and method of operation
US8570322B2 (en) 2009-05-12 2013-10-29 Nvidia Corporation Method, system, and computer program product for efficient ray tracing of micropolygon geometry
US8692825B2 (en) 2010-06-24 2014-04-08 International Business Machines Corporation Parallelized streaming accelerated data structure generation
US8797323B2 (en) 2011-01-18 2014-08-05 Intel Corporation Shadowing dynamic volumetric media
US8791945B2 (en) * 2011-05-18 2014-07-29 Intel Corporation Rendering tessellated geometry with motion and defocus blur
US8638331B1 (en) 2011-09-16 2014-01-28 Disney Enterprises, Inc. Image processing using iterative generation of intermediate images using photon beams of varying parameters
CN103765481B (zh) * 2011-08-05 2016-06-29 想象技术有限公司 用于3-d场景加速结构创建和更新的系统和方法
KR20130092055A (ko) 2012-02-10 2013-08-20 삼성전자주식회사 영상 처리 장치 및 방법
JP5545307B2 (ja) 2012-02-21 2014-07-09 コニカミノルタ株式会社 画像処理装置及び画像処理方法
US10242481B2 (en) * 2012-03-15 2019-03-26 Qualcomm Incorporated Visibility-based state updates in graphical processing units
US9424685B2 (en) * 2012-07-31 2016-08-23 Imagination Technologies Limited Unified rasterization and ray tracing rendering environments
US9224235B2 (en) 2013-03-20 2015-12-29 Nvidia Corporation System, method, and computer program product for compression of a bounding volume hierarchy
US9286649B2 (en) * 2013-05-31 2016-03-15 Qualcomm Incorporated Conditional execution of rendering commands based on per bin visibility information with added inline operations
US9501860B2 (en) 2014-01-03 2016-11-22 Intel Corporation Sparse rasterization
US9697640B2 (en) 2014-04-21 2017-07-04 Qualcomm Incorporated Start node determination for tree traversal in ray tracing applications
GB2525636B (en) * 2014-04-30 2020-08-19 Geomerics Ltd Graphics processing systems
KR102219289B1 (ko) 2014-05-27 2021-02-23 삼성전자 주식회사 레이 트레이싱 시스템에서의 가속 구조 탐색 장치 및 그 탐색 방법
KR20150136348A (ko) * 2014-05-27 2015-12-07 삼성전자주식회사 레이 트레이싱 시스템에서의 가속 구조 탐색 장치 및 그 탐색 방법

Also Published As

Publication number Publication date
WO2017146820A1 (en) 2017-08-31
CN108701366B (zh) 2020-03-17
BR112018017344A2 (pt) 2018-12-26
CN108701366A (zh) 2018-10-23
US9818221B2 (en) 2017-11-14
JP6571884B2 (ja) 2019-09-04
EP3420536A1 (en) 2019-01-02
US20170249779A1 (en) 2017-08-31
KR102003655B1 (ko) 2019-07-24
KR20180098690A (ko) 2018-09-04

Similar Documents

Publication Publication Date Title
JP6571884B2 (ja) グラフィックス処理におけるシャドーレイのツリー横断のための開始ノード決定
JP6273380B2 (ja) レイトレーシングアプリケーションにおけるツリー横断のための開始ノード決定
JP6219552B1 (ja) 内積ベースの固定関数論理を使用したレイ−ボックス交差テスト
CN107408312B (zh) 光线追踪应用中的有效层次结构遍历
US9773340B2 (en) Rendering using ray tracing to generate a visibility stream
CN108701367B (zh) 单遍次包围体阶层光栅化
JP6325756B2 (ja) 単一パスの表面スプラッティング
JP2018510405A (ja) グラフィックス処理におけるハイブリッドレンダリング
JP6386692B1 (ja) グラフィックス処理のためのゼロピクセルカリング
US11282260B2 (en) Bounded volume hierarchy (BVH) tree traversal using spatial division
US20190087930A1 (en) Adding metadata to texture surfaces for bandwidth compression

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180822

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20180822

A871 Explanation of circumstances concerning accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A871

Effective date: 20180822

A975 Report on accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A971005

Effective date: 20181217

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20190128

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20190424

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20190712

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20190808

R150 Certificate of patent or registration of utility model

Ref document number: 6571884

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250