(57)【特許請求の範囲】
【請求項１】
レンダリングするための方法であって、
複数のスプラットのうちのスプラット間の1つまたは複数の不連続性を決定したことに応答して、少なくとも1つのプロセッサによって、前記1つまたは複数の不連続性をカバーするために前記複数のスプラットへの加入のための1つまたは複数のスプラットを生成するステップと、
前記少なくとも1つのプロセッサによって、蓄積パスを実施して、別個の可視性パスを実施することなく前記複数のスプラットをレンダリングするステップであって、
前記少なくとも1つのプロセッサによって、前記複数のスプラットのうちのスプラットのフラグメントに関連するフラグメント深度値を、画素に一番最近にレンダリングされた前記スプラットの以前のフラグメントに関連する以前のフラグメント深度値と比較することによって、前記フラグメント深度値が、フレームバッファに記憶されている画素に関連する深度値の非0オフセット内であるかどうかを決定するステップと、
前記スプラットの前記フラグメントに関連する前記フラグメント深度値が、前記画素に関連する前記深度値の前記非0オフセット内であるとの決定に応答して、前記少なくとも1つのプロセッサによって、前記スプラットの前記フラグメントに関連するデータに少なくとも部分的に基づいて、前記フラグメントに関連するフラグメント色値を含む前記画素についての更新済みデータを前記フレームバッファに出力するステップと
を行うことによって、前記複数のスプラットのうちの前記スプラットの前記フラグメントを前記画素にレンダリングすることを含む、ステップと
を含む方法。
【請求項２】
前記少なくとも1つのプロセッサによって、前記スプラットの前記フラグメントに関連する前記フラグメント深度値が、前記画素に関連する前記深度値の前記非0オフセット内であるかどうかを決定するステップがさらに、
前記少なくとも1つのプロセッサによって、前記スプラットの前記フラグメントに関連する前記フラグメント深度値が、前記画素に関連する前記深度値と前記非0オフセットとの合計以下であるかどうかを決定するステップを含む、請求項1に記載の方法。
【請求項３】
前記スプラットの前記フラグメントに関連する前記フラグメント深度値が、前記画素に関連する前記深度値の前記非0オフセット内でないとの決定に応答して、前記少なくとも1つのプロセッサによって、前記スプラットの前記フラグメントをさらなる処理から破棄するステップをさらに含む、請求項1に記載の方法。
【請求項４】
前記少なくとも1つのプロセッサによって、前記画素に関連する前記深度値を前記フレームバッファ中の深度バッファから取り出すステップをさらに含む、請求項1に記載の方法。
【請求項５】
前記フレームバッファの色バッファから前記少なくとも1つのプロセッサによって、前記画素の現在の色値を取り出すステップと、
前記少なくとも1つのプロセッサによって、前記画素の前記現在の色値を前記フラグメント色値とブレンドすることによって、前記画素についての更新済み色値を決定するステップと
をさらに含む、請求項1に記載の方法。
【請求項６】
前記少なくとも1つのプロセッサによって、前記スプラットの前記フラグメントに関連する前記データに少なくとも部分的に基づいて、前記画素に関連する前記更新済みデータを前記フレームバッファに出力するステップがさらに、
前記少なくとも1つのプロセッサによって、前記スプラットの前記フラグメントに関連する前記フラグメント深度値に基づいて、前記画素についての更新済み深度値を決定するステップと、
前記少なくとも1つのプロセッサによって、前記画素についての前記更新済み深度値を前記フレームバッファに出力するステップと
を含む、請求項1に記載の方法。
【請求項７】
グラフィックス処理のために構成されたデバイスであって、
フレームバッファと、
少なくとも1つのプロセッサとを備え、前記少なくとも1つのプロセッサが、
複数のスプラットのうちのスプラット間の1つまたは複数の不連続性を決定したことに応答して、前記1つまたは複数の不連続性をカバーするために前記複数のスプラットへの加入のための1つまたは複数のスプラットを生成するステップと、
蓄積パスを実施して、別個の可視性パスを実施することなく前記複数のスプラットをレンダリングするステップであって、
前記複数のスプラットのうちのスプラットのフラグメントに関連するフラグメント深度値を、画素に一番最近にレンダリングされた前記スプラットの以前のフラグメントに関連する以前のフラグメント深度値と比較することによって、前記フラグメント深度値が、フレームバッファに記憶されている画素に関連する深度値の非0オフセット内であるかどうかを決定するステップと、
前記スプラットの前記フラグメントに関連する前記フラグメント深度値が、前記画素に関連する前記深度値の前記非0オフセット内であるとの決定に応答して、前記スプラットの前記フラグメントに関連するデータに少なくとも部分的に基づいて、前記フラグメントに関連するフラグメント色値を含む前記画素についての更新済みデータを前記フレームバッファに出力するステップと
を行うことによって、前記複数のスプラットのうちの前記スプラットの前記フラグメントを前記画素にレンダリングすることを含む、ステップと
を行うように構成された、デバイス。
【請求項８】
前記少なくとも1つのプロセッサがさらに、
前記スプラットの前記フラグメントに関連する前記フラグメント深度値が、前記画素に関連する前記深度値と前記非0オフセットとの合計以下であるかどうかを決定するステップを行うように構成された、請求項7に記載のデバイス。
【請求項９】
前記少なくとも1つのプロセッサがさらに、
前記スプラットの前記フラグメントに関連する前記フラグメント深度値が、前記画素に関連する前記深度値の前記非0オフセット内でないとの決定に応答して、前記スプラットの前記フラグメントをさらなる処理から破棄するステップを行うように構成された、請求項7に記載のデバイス。
【請求項１０】
前記少なくとも1つのプロセッサがさらに、
前記画素に関連する前記深度値を前記フレームバッファ中の深度バッファから取り出すステップを行うように構成された、請求項7に記載のデバイス。
【請求項１１】
前記フレームバッファから、前記画素の現在の色値を取り出すステップと、
前記画素の前記現在の色値を前記フラグメント色値とブレンドすることによって、前記画素についての更新済み色値を決定するステップと
を行うように構成された、請求項7に記載のデバイス。
【請求項１２】
前記少なくとも1つのプロセッサがさらに、
前記スプラットの前記フラグメントに関連する前記フラグメント深度値に基づいて、前記画素についての更新済み深度値を決定するステップと、
前記画素についての前記更新済み深度値を前記フレームバッファに出力するステップと
を行うように構成された、請求項7に記載のデバイス。
【請求項１３】
命令が記憶されたコンピュータ可読記憶媒体であって、前記命令が実行されたとき、前記命令が、
複数のスプラットのうちのスプラット間の1つまたは複数の不連続性を決定したことに応答して、前記1つまたは複数の不連続性をカバーするために前記複数のスプラットへの加入のための1つまたは複数のスプラットを生成するステップと、
蓄積パスを実施して、別個の可視性パスを実施することなく前記複数のスプラットをレンダリングするステップであって、
前記複数のスプラットのうちのスプラットのフラグメントに関連するフラグメント深度値を、画素に一番最近にレンダリングされた前記スプラットの以前のフラグメントに関連する以前のフラグメント深度値と比較することによって、前記フラグメント深度値が、フレームバッファに記憶されている画素に関連する深度値の非0オフセット内であるかどうかを決定するステップと、
前記スプラットの前記フラグメントに関連する前記フラグメント深度値が、前記画素に関連する前記深度値の前記非0オフセット内であるとの決定に応答して、前記スプラットの前記フラグメントに関連するデータに少なくとも部分的に基づいて、前記フラグメントに関連するフラグメント色値を含む前記画素についての更新済みデータを前記フレームバッファに出力するステップと
を行うことによって、前記複数のスプラットのうちの前記スプラットの前記フラグメントを前記画素にレンダリングすることを含む、ステップと
を1つまたは複数のプロセッサに行わせる、コンピュータ可読記憶媒体。
【請求項１４】
前記スプラットの前記フラグメントに関連する前記フラグメント深度値が、前記画素に関連する前記深度値の前記非0オフセット内であるかどうかを決定するステップを、実行されたときに前記1つまたは複数のプロセッサに行わせる前記命令がさらに、
前記スプラットの前記フラグメントに関連する前記フラグメント深度値が、前記画素に関連する前記深度値と前記非0オフセットとの合計以下であるかどうかを決定するステップを、実行されたときに前記1つまたは複数のプロセッサにさらに行わせる命令を含む、請求項13に記載のコンピュータ可読記憶媒体。
【請求項１５】
前記命令が実行されたとき、前記命令がさらに、
前記スプラットの前記フラグメントに関連する前記フラグメント深度値が、前記画素に関連する前記深度値の前記非0オフセット内でないとの決定に応答して、前記スプラットの前記フラグメントをさらなる処理から破棄するステップを、前記1つまたは複数のプロセッサに行わせる、請求項13に記載のコンピュータ可読記憶媒体。
【請求項１６】
前記命令がさらに、
前記画素に関連する前記深度値を前記フレームバッファ中の深度バッファから取り出すステップを、前記1つまたは複数のプロセッサに行わせる命令を含む、請求項13に記載のコンピュータ可読記憶媒体。
【請求項１７】
前記命令がさらに、
前記フレームバッファから、前記画素の現在の色値を取り出すステップと、
前記画素の前記現在の色値を前記フラグメント色値とブレンドすることによって、前記画素についての更新済み色値を決定するステップと
を、実行されたときに前記1つまたは複数のプロセッサに行わせる命令を含む、請求項13に記載のコンピュータ可読記憶媒体。
【請求項１８】
前記スプラットの前記フラグメントに関連する前記データに少なくとも部分的に基づいて、前記画素に関連する前記更新済みデータを前記フレームバッファに出力するステップがさらに、
前記スプラットの前記フラグメントに関連する前記フラグメント深度値に基づいて、前記画素についての更新済み深度値を決定するステップと、
前記画素についての前記深度値を前記フレームバッファに出力するステップと
を含む、請求項13に記載のコンピュータ可読記憶媒体。
【請求項１９】
複数のスプラットのうちのスプラット間の1つまたは複数の不連続性を決定したことに応答して、前記1つまたは複数の不連続性をカバーするために前記複数のスプラットへの加入のための1つまたは複数のスプラットを生成するための手段と、
蓄積パスを実施して、別個の可視性パスを実施することなく前記複数のスプラットをレンダリングするための手段であって、
前記複数のスプラットのうちのスプラットのフラグメントに関連するフラグメント深度値を、画素に一番最近にレンダリングされた前記スプラットの以前のフラグメントに関連する以前のフラグメント深度値と比較することによって、前記フラグメント深度値が、フレームバッファに記憶されている画素に関連する深度値の非0オフセット内であるかどうかを決定するための手段と、
前記スプラットの前記フラグメントに関連する前記フラグメント深度値が、前記画素に関連する前記深度値の前記非0オフセット内であるとの決定に応答して、前記フラグメントに関連するフラグメント色値を含む前記スプラットの前記フラグメントに関連するデータに少なくとも部分的に基づいて、前記画素についての更新済みデータを前記フレームバッファに出力するための手段と
をさらに備える、前記複数のスプラットのうちの前記スプラットの前記フラグメントを前記画素にレンダリングするための手段を備える、手段と
を備えるデバイス。
【請求項２０】
前記スプラットの前記フラグメントに関連する前記フラグメント深度値が、前記画素に関連する前記深度値の前記非0オフセット内であるかどうかを決定するための前記手段がさらに、
前記スプラットの前記フラグメントに関連する前記フラグメント深度値が、前記画素に関連する前記深度値と前記非0オフセットとの合計以下であるかどうかを決定するための手段を備える、請求項19に記載のデバイス。
【請求項２１】
前記スプラットの前記フラグメントに関連する前記フラグメント深度値が、前記画素に関連する前記深度値の前記非0オフセット内でないとの決定に応答して、前記フラグメントをさらなる処理から破棄するための手段をさらに備える、請求項19に記載のデバイス。
【請求項２２】
前記画素に関連する前記深度値を前記フレームバッファ中の深度バッファから取り出すための手段をさらに備える、請求項19に記載のデバイス。
【請求項２３】
前記フレームバッファから、前記画素の現在の色値を取り出すための手段と、
前記画素の前記現在の色値を前記フラグメント色値とブレンドすることによって、前記画素についての更新済み色値を決定するための手段と
を備える、請求項19に記載のデバイス。
【請求項２４】
前記スプラットの前記フラグメントに関連する前記データに少なくとも部分的に基づいて、前記画素についての前記更新済みデータを前記フレームバッファに出力するための前記手段がさらに、
前記スプラットの前記フラグメントに関連する前記フラグメント深度値に基づいて、前記画素についての更新済み深度値を決定するための手段と、
前記画素についての前記更新済み深度値を前記フレームバッファに出力するための手段と
を備える、請求項19に記載のデバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、3次元表面の点ベースのレンダリングに関する。
【背景技術】
【０００２】
グラフィカルユーザインターフェースやビデオゲームのためのコンテンツなど、表示のための視覚的コンテンツは、グラフィックスプロセッシングユニット(GPU)によって生成されることがある。GPUは、2次元または3次元(3D)オブジェクトを、表示可能な2次元(2D)画素表現に変換することができる。
【０００３】
3次元表面の、点ベースのレンダリングは、3次元表面が点プリミティブのグループ(点群(point cloud)としても知られる)で構成され得るグラフィックスレンダリング技法である。3次元表面に対して、点群は、表面の、不均一な分散されたサンプルとすることができる。三角形プリミティブを利用する点群のレンダリング技法とは異なり、点ベースのレンダリングで利用される点プリミティブは、点プリミティブ間にどんな接続情報も含まない。
【０００４】
点ベースのレンダリングは、3次元走査のコンテキストで有用な場合がある。3次元走査デバイスは、大きい点群(たとえば何百万個もの点)を生成することがあるが、この点群を三角形プリミティブの接続されたセット(たとえば三角形メッシュ)に変換するのは、困難かつ計算的に高価であることがある。これらの三角形プリミティブは、次いで、後続のレンダリングのための入力として使用される。対照的に、点ベースのレンダリング技法は、3次元走査デバイスによって生み出された生データを入力として利用することができる。このようにして、点ベースのレンダリング技法は、いくつかの応用例では、三角形ベースのレンダリング技法よりも効率的な場合がある。
【発明の概要】
【課題を解決するための手段】
【０００５】
一般に、本開示の態様は、3次元表面およびオブジェクトをレンダリングするための、点群の単一パス表面スプラッティング(splatting)のための技法を対象とする。単一パス表面スプラッティング技法は、蓄積パス(accumulation pass)に先立つ、深度画像をフレームバッファにレンダリングする可視性パス(visibility pass)を実施するのを省略することができ、それにより、グラフィックスプロセッシングユニットのレンダリング性能を増大させることができる。この意味で、これらの技法は、表面スプラッティングのための可視性パスおよび蓄積パスではなく、単一パスで表面スプラッティングを実装することができる。
【０００６】
一態様では、本開示は、フラグメントをフレームバッファにレンダリングするための方法を対象とする。この方法は、少なくとも1つのプロセッサによって、画素に関連する深度値をフレームバッファから取り出すステップを含む。この方法はさらに、少なくとも1つのプロセッサによって、スプラット(splat)のフラグメントに関連するフラグメント深度値が、画素に関連する深度値の非0オフセット内であるかどうかを決定するステップを含む。この方法はさらに、スプラットのフラグメントに関連するフラグメント深度値が、画素に関連する深度値の非0オフセット内であるとの決定に応答して、少なくとも1つのプロセッサによって、スプラットのフラグメントに関連するデータに少なくとも部分的に基づいて、画素についての更新済みデータをフレームバッファに出力するステップを含む。
【０００７】
別の態様では、本開示は、デバイスを対象とする。このデバイスは、フレームバッファを備えることができる。このデバイスはさらに、少なくとも1つのプロセッサを備えることができ、このプロセッサは、画素に関連する深度値をフレームバッファから取り出すステップと、スプラットのフラグメントに関連するフラグメント深度値が、画素に関連する深度値の非0オフセット内であるかどうかを決定するステップと、スプラットのフラグメントに関連するフラグメント深度値が、画素に関連する深度値の非0オフセット内であるとの決定に応答して、スプラットのフラグメントに関連するデータに少なくとも部分的に基づいて、画素についての更新済みデータをフレームバッファに出力するステップとを行うように構成される。
【０００８】
別の態様では、本開示は、命令が記憶されたコンピュータ可読記憶媒体を対象とする。これらの命令が実行されたとき、これらの命令は、画素に関連する深度値をフレームバッファから取り出すステップと、スプラットのフラグメントに関連するフラグメント深度値が、画素に関連する深度値の非0オフセット内であるかどうかを決定するステップと、スプラットのフラグメントに関連するフラグメント深度値が、画素に関連する深度値の非0オフセット内であるとの決定に応答して、スプラットのフラグメントに関連するデータに少なくとも部分的に基づいて、画素についての更新済みデータをフレームバッファに出力するステップとを1つまたは複数のプロセッサに行わせる。
【０００９】
別の態様では、本開示は、デバイスを対象とする。このデバイスは、画素に関連する深度値をフレームバッファから取り出すための手段と、スプラットのフラグメントに関連するフラグメント深度値が、画素に関連する深度値の非0オフセット内であるかどうかを決定するための手段と、スプラットのフラグメントに関連するフラグメント深度値が、画素に関連する深度値の非0オフセット内であるとの決定に応答して、スプラットのフラグメントに関連するデータに少なくとも部分的に基づいて、画素についての更新済みデータをフレームバッファに出力するための手段とを備える。
【００１０】
本開示の1つまたは複数の態様の詳細を、添付の図面および以下の記述において示す。本開示の他の特徴、目的、および利点は、記述および図面から、また特許請求の範囲から明らかであろう。
【図面の簡単な説明】
【００１１】
【図１】本開示の1つまたは複数の態様を実装するように構成され得る例示的なコンピューティングデバイスを示すブロック図である。
【図２】図1の例示的なプロセッサ、例示的なGPU、および例示的なシステムメモリの、例示的な実装形態を示すブロック図である。
【図３】グラフィックス処理パイプラインのフォワードワーピングステージの例示的な動作をさらに詳細に示すブロック図である。
【図４】グラフィックス処理パイプラインのフィルタリング/シェーディングステージの例示的な動作をさらに詳細に示すブロック図である。
【図５Ａ】グラフィックス処理パイプラインの画像再構築ステージの例示的な動作をさらに詳細に示すブロック図である。
【図５Ｂ】グラフィックス処理パイプラインの画像再構築ステージの例示的な動作をさらに詳細に示すブロック図である。
【図６】GPUの例示的な動作を示すフローチャートである。
【発明を実施するための形態】
【００１２】
一般に、本開示の態様は、3次元表面およびオブジェクトをレンダリングするための、点群の単一パス表面スプラッティングのための技法を対象とする。
【００１３】
点群から3次元オブジェクトをレンダリングすることは、点プリミティブのセットを入力としてとること、点プリミティブを3次元空間から2次元空間にワープさせること、表面サンプルで構成される連続的な表面を点プリミティブから構築すること(表面サンプル間の穴などのアーチファクトを防止するために追加の表面サンプルを生成することを含む)、連続的な表面をフィルタリングすること、および、連続的な表面を出力位置においてサンプリングして、点群から3次元オブジェクトの表現をレンダリングすることを含むことができる。
【００１４】
3次元オブジェクトをレンダリングするための他の技法と同様、点群から3次元オブジェクトをレンダリングするには、グラフィックスプロセッシングユニット(GPU)が、深度テストを実施して、3次元オブジェクトが2次元画像空間にレンダリングされたときに3次元オブジェクトのどの部分が見え、3次元オブジェクトのどの部分が隠される(たとえば遮られる)かを決定することができる。3次元オブジェクトの特定のフラグメントが画素にレンダリングされるかどうかを決定するために、GPUは、特定のフラグメントの深度を、すでに画素にレンダリングされたいずれか他のフラグメントの深度と比較することができ、特定のフラグメントが、前に画素にレンダリングされた他のどんなフラグメントよりも、指定された視点に近い場合にのみ、GPUは、特定のフラグメントを画素にレンダリングすることができる。このようにして、GPUは、指定された視点から他の3次元表面の奥になるどんな3次元表面も、隠すことができる。
【００１５】
そのような深度テストを実施することは、三角形プリミティブを利用するレンダリング技法にとっては有用な場合がある。というのは、そのようなレンダリング技法では、同じ表面の近隣の三角形プリミティブは、重なるのではなく相互に接続するからである。対照的に、点ベースのレンダリングのための技法は、点プリミティブを利用し、これらの点プリミティブは、どんな接続性情報も含まない円盤形状および/または楕円形状のプリミティブであることがある。同じ表面の、近隣の点プリミティブは、それらの不均一な分散および非接続という性質に起因して、また、近隣の点プリミティブ間の不連続性(たとえば穴)を防止するために、重なることがある。
【００１６】
したがって、同じ表面の複数の点プリミティブのフラグメントが重なる場合、GPUは、これらの重なるフラグメントをブレンドして、表面のレンダリング表現の潜在的なアーチファクティングを防止することができる。しかし、これら複数の重なるフラグメントはわずかに異なる深度値を有することがあるので、GPUが点ベースのレンダリングを実施することの一部として前述の深度テストを実施する場合、GPUは、ある画素について、表面の一番前のフラグメントのみをレンダリングし、同じ表面の他のどんな重なるフラグメントのレンダリングも妨げることがあり、それにより、レンダリングされた表面にアーチファクティングを招く可能性がある。言い換えれば、GPUは、点プリミティブをブレンドするのではなく、1つの点プリミティブのみをレンダリングすることになり、それにより、レンダリングされた表面においてアーチファクトを招く可能性がある。
【００１７】
点ベースのレンダリングのための例示的な深度テスト技法の1つでは、GPUは、可視性パスを実施することができる。これは、3次元オブジェクトを、視点から離れたオフセットεで、深度画像としてフレームバッファ中にレンダリングすることによって実施することができ、したがって、3次元オブジェクトは、3次元空間におけるその指定された位置と比較して、オフセットε分だけ視点からさらに遠くにレンダリングされる。GPUは、3次元オブジェクトを深度画像としてレンダリングするとき、深度画像についてのどんな色値もフレームバッファの色バッファに書き込まず、深度画像の深度値をフレームバッファの深度バッファに書き込むことがある。可視性パスの実施に続いて、GPUは、蓄積パスを実施する。蓄積パスは、3次元オブジェクトの色値およびアルファ値をフレームバッファの色バッファに蓄積するが、画像の深度値で深度バッファを更新することはしない。このようにして、GPUは、蓄積パスの間、前述の深度テストを3次元オブジェクトに対して実施することができる。これは、その深度を、可視性パスの間に生成された深度画像の深度と比較することによって実施することができ、したがって、GPUは、フレームバッファ中の深度画像の対応する部分の奥にある、レンダリングされた3次元オブジェクトの部分を破棄する。しかし、そのような技法は、非効率的な場合がある。というのは、GPUは、可視性パスと蓄積パスという2つの別々のレンダリングパスを3次元オブジェクトに対して実施するからである。
【００１８】
蓄積パスの実施に続いて、GPUは、正規化パスを実施して、フレームバッファ中の画素の色値を正規化して視覚的アーチファクトを除去することができる。色の明るさの変動など、そのような視覚的アーチファクトは、特定の画素についての蓄積された色値のアルファ値の合計が1にならないときに生じることがある。したがって、正規化パスの間に、GPUは、フレームバッファ中の各画素につき、蓄積された色値を、アルファ値に記憶された重みの合計で割って、各目標画素についての最終的な色値を生み出すことができる。たとえば、蓄積された色値の各々がRGB値ならびにアルファ値を含むとすると、GPUは、関連するアルファ値に従って重み付けされたRGB値の加重合計を実施することができる。GPUは、RGB値の加重合計を、蓄積された色値のアルファ値の合計で割って、RGB値の最終的なセットを生み出すことができ、したがって、各目標画素についての最終的な色値は、目標画素とアルファ値1とについて計算されたRGB値の最終的なセットである。
【００１９】
この例では、GPUは、フレームバッファ中の各画素につき、可視性パスを実施することができる。フレームバッファ中の各画素につき可視性パスを実施するのに続いて、GPUは、フレームバッファ中の各画素につき、蓄積パスを実施することができる。フレームバッファ中の各画素につき蓄積パスを実施するのに続いて、GPUは、フレームバッファ中の各画素につき、正規化パスを実施することができる。
【００２０】
本開示の態様によれば、GPUは、フレームバッファの深度バッファから深度値を読み取ることができることにより、点群から画像をレンダリングするときに可視性パスをなくすことが可能であってよい。たとえば、GPUは、蓄積パスの一部として深度テストを実施することができる。より詳細に述べるように、GPUは、スプラットのフラグメントを画素にレンダリングするとき、画素に関連する深度値をフレームバッファから読み取ることができる。GPUは、レンダリングされることになるフラグメントの深度を、フレームバッファから取り出された深度値と比較し、フラグメントの深度が、画素に関連する深度値の非0オフセット内であるかどうかに基づいて、画素についての色値およびアルファ値をフレームバッファ中にレンダリングするかどうかを決定することができる。したがって、GPUは、画素に関連する深度値をフレームバッファから取り出すことができる。GPUは、フラグメントに関連するフラグメント深度値が、画素に関連する深度値の非0オフセット内であるかどうかを決定することができる。フラグメントに関連するフラグメント深度値が、画素に関連する深度値の非0オフセット内であるとの決定に応答して、GPUは、フラグメントに関連するデータに少なくとも部分的に基づいて、画素についての更新済みデータをフレームバッファに出力することができる。
【００２１】
図1は、本開示の1つまたは複数の態様を実装するように構成され得る例示的なコンピューティングデバイスを示すブロック図である。図1に示すように、コンピューティングデバイス2は、次のものに限定されないが、ビデオデバイス、メディアプレーヤ、セットトップボックス、ワイヤレスハンドセット(モバイル電話機やいわゆるスマートフォンなど)、パーソナルディジタルアシスタント(PDA)、デスクトップコンピュータ、ラップトップコンピュータ、ゲーミングコンソール、ビデオ会議ユニット、タブレットコンピューティングデバイス、などを含めたコンピューティングデバイスであってよい。図1の例では、コンピューティングデバイス2は、中央処理装置(CPU)6、システムメモリ10、およびGPU12を備えることができる。コンピューティングデバイス2はまた、表示プロセッサ14、トランシーバモジュール3、ユーザインターフェース4、および表示装置8を備えることもできる。トランシーバモジュール3および表示プロセッサ14は、両方とも、CPU6および/もしくはGPU12と同じ集積回路(IC)の一部であってもよく、または、両方とも、CPU6および/もしくはGPU12を含むICの外部にあってもよく、または、CPU6および/もしくはGPU12を含むICの外部のIC中で形成されてもよい。
【００２２】
コンピューティングデバイス2は、明確にするために図1に示されていない、追加のモジュールまたはユニットを備えることもできる。たとえば、コンピューティングデバイス2は、コンピューティングデバイス2がモバイルワイヤレス電話機である場合の例で電話通信を遂行するために、スピーカおよびマイクロフォン(いずれも図1には示されていない)を備えることができ、または、コンピューティングデバイス2がメディアプレーヤである場合に、スピーカを備えることができる。コンピューティングデバイス2はまた、ビデオカメラを備えることもできる。さらに、コンピューティングデバイス2中に示される様々なモジュールおよびユニットは、必ずしもコンピューティングデバイス2のあらゆる例において必要であるとは限らない。たとえば、コンピューティングデバイス2が、外部ユーザインターフェースまたは表示装置とインターフェースするように装備されたデスクトップコンピュータまたは他のデバイスである場合の例では、ユーザインターフェース4および表示装置8は、コンピューティングデバイス2の外部にあってもよい。
【００２３】
ユーザインターフェース4の例は、次のものに限定されないが、トラックボール、マウス、キーボード、および他のタイプの入力デバイスを含む。ユーザインターフェース4はまた、タッチスクリーンであってもよく、表示装置8の一部として組み込まれてよい。トランシーバモジュール3は、コンピューティングデバイス2と別のデバイスまたはネットワークとの間のワイヤレスまたは有線通信を可能にするための回路を含むことができる。トランシーバモジュール3は、有線または無線通信のための、変調器、復調器、増幅器、および他のそのような回路を含むことができる。
【００２４】
CPU6は、コンピュータプログラムの命令を実行に向けて処理するように構成された中央処理装置(CPU)などのマイクロプロセッサであってよい。CPU6は、コンピューティングデバイス2の動作を制御する汎用または専用プロセッサを含むことができる。ユーザは、コンピューティングデバイス2に入力を提供して、1つまたは複数のソフトウェアアプリケーションをCPU6に実行させることができる。CPU6上で実行されるソフトウェアアプリケーションは、たとえば、オペレーティングシステム、ワードプロセッサアプリケーション、電子メールアプリケーション、表計算アプリケーション、メディアプレーヤアプリケーション、ビデオゲームアプリケーション、グラフィカルユーザインターフェースアプリケーション、または別のプログラムを含むことができる。加えて、CPU6は、GPU12の動作を制御するためにGPUドライバ22を実行することができる。ユーザは、ユーザインターフェース4を介してコンピューティングデバイス2に結合された、キーボード、マウス、マイクロフォン、タッチパッド、または別の入力デバイスなど、1つまたは複数の入力デバイス(図示せず)を介して、コンピューティングデバイス2に入力を提供することができる。
【００２５】
CPU6上で実行されるソフトウェアアプリケーションは、表示装置8へのグラフィックスデータのレンダリングを引き起こすようCPU6に命令する1つまたは複数のグラフィックスレンダリング命令を含むことができる。いくつかの例では、ソフトウェア命令は、たとえば、Open Graphics Library (OpenGL(登録商標)) API、Open Graphics Library Embedded Systems (OpenGL ES) API、Direct3D API、X3D API、RenderMan API、WebGL API、Open Computing Language (OpenCL(商標))、または他の任意の公開もしくはプロプラエタリ標準GPU計算APIなど、グラフィックスアプリケーションプログラミングインターフェース(API)に従うことができる。グラフィックスレンダリング命令を処理するために、CPU6は、1つまたは複数のグラフィックスレンダリングコマンドをGPU12に(たとえばGPUドライバ22を介して)発行して、グラフィックスデータのレンダリングのいくらかまたはすべてをGPU12に実施させることができる。いくつかの例では、レンダリングされることになるグラフィックスデータは、グラフィックスプリミティブ、たとえば点、線、三角形、四辺形、三角形ストリップなど、のリストを含むことができる。
【００２６】
GPU12は、1つまたは複数のグラフィックスプリミティブを表示装置8にレンダリングするためのグラフィックス動作を実施するように構成されてよい。したがって、CPU6上で実行されるソフトウェアアプリケーションの1つがグラフィックス処理を必要とするとき、CPU6は、表示装置8へのレンダリングのために、グラフィックスコマンドおよびグラフィックスデータをGPU12に提供することができる。グラフィックスデータは、たとえば、描画コマンド、状態情報、プリミティブ情報、テクスチャ情報などを含むことができる。GPU12は、いくつかの事例では、複雑なグラフィック関連動作をCPU6よりも効率的に処理することをもたらす高度並列構造で構築されてよい。たとえば、GPU12は、複数の頂点または画素に並列方式で作用するように構成された複数の処理要素(シェーダユニットなど)を備えることができる。GPU12の高度並列な性質により、いくつかの事例では、GPU12は、CPU6を使用してシーンを表示装置に直接描画するよりも素早く、グラフィックス画像(たとえば、GUIならびに2次元(2D)および/または3次元(3D)グラフィックスシーン)を表示装置8上に描画することができる。
【００２７】
GPU12は、いくつかの事例では、コンピューティングデバイス2のマザーボードに統合されてよい。他の事例では、GPU12は、コンピューティングデバイス2のマザーボード中のポートにインストールされたグラフィックスカード上に存在してもよく、または、そうでない場合は、コンピューティングデバイス2と相互動作するように構成された周辺デバイス内に組み込まれてもよい。いくつかの例では、GPU12は、システムオンチップ(SOC)中などで、CPU6とオンチップであってよい。GPU12は、1つまたは複数のマイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、ディジタル信号プロセッサ(DSP)、または他の等価な集積もしくは離散ロジック回路など、1つまたは複数のプロセッサを含むことができる。GPU12はまた、1つまたは複数のプロセッサコアを含むこともでき、したがって、GPU12は、マルチコアプロセッサと呼ばれることがある。
【００２８】
いくつかの例では、グラフィックスメモリ40がGPU12の一部であってよい。したがって、GPU12は、バスを使用することなく、グラフィックスメモリ40に対してデータの読取りおよび書込みができる。言い換えれば、GPU12は、オフチップメモリの代わりにローカルストレージを使用して、データをローカルに処理することができる。そのようなグラフィックスメモリ40は、オンチップメモリと呼ばれることがある。これにより、GPU12は、GPU12がバスを介してデータを読み書きする必要をなくすことによって、より効率的な方式で動作することができ、バスを介したデータの読み書きは、重いバストラフィックおよび関連する帯域幅競合を被ることがある。しかし、いくつかの事例では、GPU12は、別個のメモリを備えなくてもよく、その代わり、バスを介してシステムメモリ10を利用することができる。グラフィックスメモリ40は、1つまたは複数の揮発性または不揮発性メモリまたはストレージデバイス、たとえば、ランダムアクセスメモリ(RAM)、スタティックRAM(SRAM)、ダイナミックRAM(DRAM)、消去可能プログラム可能なROM(EPROM)、電気的に消去可能プログラム可能なROM(EEPROM)、フラッシュメモリ、磁気データ媒体、または光学ストレージ媒体など、を含むことができる。
【００２９】
いくつかの例では、GPU12は、完全に形成された画像をシステムメモリ10に記憶することができる。表示プロセッサ14は、画像をシステムメモリ10および/またはフレームバッファ16から取り出して、値を出力することができ、これらの値は、表示装置8の画素が照明して画像を表示するようにする。表示装置8は、GPU12によって生成された画像コンテンツを表示する、コンピューティングデバイス2の表示装置であってよい。表示装置8は、液晶表示装置(LCD)、有機発光ダイオード表示装置(OLED)、陰極線管(CRT)表示装置、プラズマ表示装置、または別のタイプの表示デバイスであってよい。
【００３０】
本開示の態様によれば、GPU12は、画素に関連する深度値をフレームバッファ16から取り出すことができる。GPU12は、フラグメントに関連するフラグメント深度値が、画素に関連する深度値の非0オフセット内であるかどうかを決定することができる。フラグメントに関連するフラグメント深度値が、画素に関連する深度値の非0オフセット内であるとの決定に応答して、GPU12は、フラグメントに関連するデータに少なくとも部分的に基づいて、画素についての更新済みデータをフレームバッファ16に出力することができる。
【００３１】
図2は、図1のCPU6、GPU12、およびシステムメモリ10の、例示的な実装形態を示すブロック図である。図2に示すように、CPU6は、少なくとも1つのソフトウェアアプリケーション18およびGPUドライバ22を実行することができ、これらの各々は、1つまたは複数のソフトウェアアプリケーションまたはサービスであってよい。
【００３２】
CPU6およびGPU12が利用可能なメモリは、システムメモリ10およびフレームバッファ16を含むことができる。フレームバッファ16は、システムメモリ10の一部であってもよく、またはシステムメモリ10とは別個であってもよい。フレームバッファ16は、画素データなどのレンダリングされる画像データ、ならびに他の任意のデータを記憶することができる。いくつかの例では、フレームバッファ16は、表示装置8に出力されることになる各画素に関連するデータのセットを記憶することができる。各画素につき、関連するデータセットは、赤、緑、青、およびアルファ成分など1つまたは複数の色値、1つまたは複数の深度値、などを含むことができる。
【００３３】
ソフトウェアアプリケーション18は、GPU12の機能性を利用する任意のアプリケーションであってよい。たとえば、ソフトウェアアプリケーション18は、GUIアプリケーション、オペレーティングシステム、ポータブルマッピングアプリケーション、工学もしくは芸術の応用例のためのコンピュータ支援設計プログラム、ビデオゲームアプリケーション、または、2Dもしくは3Dグラフィックスを使用する別のタイプのソフトウェアアプリケーションであってよい。
【００３４】
ソフトウェアアプリケーション18は、グラフィカルユーザインターフェース(GUI)および/またはグラフィックスシーンをレンダリングするようGPU12に命令する1つまたは複数の描画命令を含むことができる。たとえば、描画命令は、GPU12によってレンダリングされることになる1つまたは複数のグラフィックスプリミティブ(点など)のセットを定義する命令を含むことができる。いくつかの例では、描画命令は、GUIにおいて使用される複数のウィンドウイング表面のすべてまたは一部を、まとめて定義することができる。追加の例では、描画命令は、アプリケーションによって定義されるモデル空間内またはワールド空間内の1つまたは複数のグラフィックスオブジェクトを含むグラフィックスシーンのすべてまたは一部を、まとめて定義することができる。
【００３５】
ソフトウェアアプリケーション18は、1つまたは複数のグラフィックスプリミティブを表示可能グラフィックス画像にレンダリングするために、GPUドライバ22を呼び出して1つまたは複数のコマンドをGPU12に発行することができる。たとえば、ソフトウェアアプリケーション18は、GPUドライバ22を呼び出して、プリミティブ定義をGPU12に提供することができる。いくつかの事例では、プリミティブ定義は、点群を構成する点プリミティブのリストの形で、GPU12に提供されてよい。点群中の各点プリミティブは、小さい近傍中の表面を記述する表面要素(サーフェル(surfel))であってよい。サーフェルは、位置および色を有する。いくつかの例では、サーフェルはまた、法線や半径などを有することもできる。したがって、各点についてのプリミティブ定義は、関連する点についての位置、色、法線、半径などを指定することができる。
【００３６】
ソフトウェアアプリケーション18によってGPUドライバ22に発行された命令に基づいて、GPUドライバ22は、点プリミティブのセットをレンダリングするためにGPU12が実施することになる1つまたは複数の動作を指定する1つまたは複数のコマンドを策定することができる。GPU12がコマンドをCPU6から受け取ると、シェーダユニット46の1つまたは複数のシェーダプロセッサが、グラフィックス処理パイプライン50を実行してコマンドを復号することができ、コマンド中で指定された動作を実施するようグラフィックス処理パイプライン50を構成することができる。たとえば、グラフィックス処理パイプライン50は、データを読み取って点プリミティブに組み立てることができる。指定された動作を実施した後、グラフィックス処理パイプライン50は、点プリミティブを処理、ラスタ化、およびレンダリングすることができ、表示デバイスに関連するフレームバッファ16にレンダリング済みデータを出力することができる。いくつかの例では、グラフィックス処理パイプライン50は、シェーダユニット46などのプログラマブルシェーダコア上で実行されてよい。
【００３７】
フレームバッファ16は、深度バッファ24、色バッファ26、および蓄積バッファ28、のうちの1つまたは複数など、GPU12に対する目標画素を記憶する1つまたは複数のバッファを含むことができる。各目標画素は、一意の画面画素場所に関連してよい。いくつかの例では、フレームバッファ16は、各目標画素についての色値を記憶する色バッファ26を含むことができる。色値は、各目標画素につき、色成分および目標アルファ値を含むことができる。たとえば、フレームバッファ16の色バッファ26は、各画素につき、赤、緑、青、アルファ(RGBA)成分を記憶することができ、ここで、「RGB」成分は、赤、緑、および青の色値にそれぞれ対応し、「A」成分は、目標アルファ値に対応する。フレームバッファ16はまた、各目標画素についての深度値を記憶する深度バッファ24を含むこともできる。深度バッファ24によって記憶される深度値は、特定の視点に対する目標画素の相対的な距離を示すことができる。たとえば、深度値は、0と1の間の浮動小数点数であってよく、相対的により小さい深度値は、目標画素が視点に対して相対的により近いことを示す。
【００３８】
フレームバッファ16はまた、各目標画素につきフレームバッファ16に書き込まれる複数のRGBA成分を蓄積する蓄積バッファ28を含むこともできる。たとえば、上で論じたように、同じ表面を表す複数の点のフラグメントは同じ画素に重なることがあるので、蓄積バッファ28は、各目標画素につき、同じ表面を表し同じ目標画素に重なる複数の点のフラグメントの各々からのRGBA成分を記憶することができる。フレームバッファ16とシステムメモリ10は別々のメモリユニットとして示されているが、他の例では、フレームバッファ16はシステムメモリ10の一部であってもよい。さらに、いくつかの例では、フレームバッファ16はまた、画素以外の任意の適切なデータを記憶することが可能であってもよい。
【００３９】
グラフィックスメモリ40は、GPU12の集積回路チップに物理的に統合されたオンチップストレージまたはメモリを含むことができる。グラフィックスメモリ40がオンチップである場合、GPU12は、システムバスを介してシステムメモリ10に対して値の読取りまたは書込みを行うよりも素早く、グラフィックスメモリ40に対して値の読取りまたは書込みを行うことが可能であってよい。
【００４０】
いくつかの例では、グラフィックス処理パイプライン50は、フォワードワーピングステージ52、フィルタリング/シェーディングステージ54、および画像再構築ステージ56、のうちの1つまたは複数を含むことができる。いくつかの例では、グラフィックス処理パイプラインのこれらのステージは、シェーダステージと考えることができる。これらのシェーダステージは、GPU12中のシェーダユニット46上で実行される1つまたは複数のシェーダプログラムとして実装されてよい。シェーダユニット46は、処理コンポーネントのプログラム可能パイプラインとして構成されてよい。いくつかの例では、シェーダユニット46は、「シェーダプロセッサ」または「ユニファイドシェーダ」と呼ばれることがあり、フォワードワーピングステージ52、フィルタリング/シェーディングステージ54、および/または画像再構築ステージ56の一部として、ジオメトリ、頂点、フラグメント、または他のシェーディング動作を実施して、グラフィックスをレンダリングすることができる。シェーダユニット46は、1つまたは複数のシェーダプロセッサを含むことができ、各シェーダプロセッサは、特殊化されたマイクロプロセッサであってよく、これらの特殊化されたマイクロプロセッサは、フェッチ動作および復号動作のための1つまたは複数のコンポーネントと、算術計算を実施するための1つまたは複数のALUと、1つまたは複数のメモリと、キャッシュと、レジスタとを備える。
【００４１】
GPU12は、頂点シェーダプログラム、ハル(hull)シェーダプログラム、ドメインシェーダプログラム、ジオメトリシェーダプログラム、およびフラグメントシェーダプログラムのうちの1つまたは複数を実行するコマンドをシェーダユニット46に送ることによって、頂点シェーディング、ハルシェーディング、ドメインシェーディング、ジオメトリシェーディング、フラグメントシェーディングなどの様々なシェーディング動作を実施するようシェーダユニット46に指示することができる。いくつかの例では、GPUドライバ22は、1つまたは複数のシェーダプログラムをコンパイルしてコンパイル済みシェーダプログラムをGPU12内に含まれる1つまたは複数のプログラム可能シェーダユニットにダウンロードすることを、CPU6上で実行されるコンパイラに行わせることができる。シェーダプログラムは、高水準シェーディング言語、たとえば、OpenGL Shading Language(GLSL)、High Level Shading Language(HLSL)、C for Graphics(Cg)シェーディング言語、OpenGL Cカーネルなどで書かれてよい。コンパイルされたシェーダプログラムは、グラフィックス処理パイプライン50を実行するように、かつ他の様々なグラフィックス関連動作を実施するようにGPU12内のシェーダユニット46の動作を制御する、1つまたは複数の命令を含むことができる。
【００４２】
本開示の一態様によれば、シェーダユニット46は、グラフィックス処理パイプライン50を実行して、点プリミティブのセットから3次元表面をレンダリングすることができる。グラフィックス処理パイプライン50は、フォワードワーピングステージ52、フィルタリング/シェーディングステージ54、および画像再構築ステージ56を含むことができる。いくつかの例では、グラフィックス処理パイプライン50は、図2に示されていない追加のステージを含むこともできる。いくつかの例では、グラフィックス処理パイプライン50はまた、フォワードワーピングステージ52、フィルタリング/シェーディングステージ54、および画像再構築ステージ56、のうちの1つまたは複数を省略することもできる。いくつかの例では、シェーダユニット46は、頂点シェーダやフラグメントシェーダなど、1つまたは複数のシェーダプログラムを実行して、フォワードワーピングステージ52、フィルタリング/シェーディングステージ54、および画像再構築ステージ56を実施し、点プリミティブのセットから3次元表面をレンダリングすることができる。
【００４３】
フォワードワーピングステージ52を実施するために、シェーダユニット46は、点群中の各点の透視投影を実施して、各点を3次元オブジェクト空間から2次元画面空間にワープさせ、それにより、点群によって表される3次元オブジェクトの2次元表現を作成することができる。3次元オブジェクト空間から2次元画面空間への点群のそのようなワーピングは、三角形頂点を画像空間に投影することに似ていることがある。フォワードワーピングステージ52については、図3に関してさらに詳細に論じる。
【００４４】
フィルタリング/シェーディングステージ54を実施するために、シェーダユニット46は、フォワードワーピングステージ52の結果であるワープさせた点プリミティブの各々を、シェーディングおよびフィルタリングすることができる。たとえば、シェーダユニット46は、ワープさせた点プリミティブの各々にアルファマスクを適用して、スプラットプリミティブを生成することができる。シェーダユニット46はまた、スプラットプリミティブをフィルタリングして、アンチエイリアシングを防止することもできる。フィルタリング/シェーディングステージ54については、図4に関してさらに詳細に論じる。
【００４５】
画像再構築ステージ56を実施するために、シェーダユニット46は、スプラットプリミティブから連続的な3次元表面を再構築することができる。たとえば、シェーダユニット46は、スプラットプリミティブのセットの間の不連続性を埋めることができ、スプラットプリミティブのセットをラスタ化することができる。シェーダユニット46は、蓄積パスを実施して、点プリミティブのセットをフラグメントごとにフレームバッファ16にレンダリングすることができる。蓄積パスを実施することは、各フラグメントに対して可視性テストを実施し、可視性テストに合格したフラグメントの色値をフレームバッファ16に蓄積することを含むことができる。言い換えれば、可視性パスと蓄積パスを別々に実装するのではなく、可視性テストが蓄積パスに組み込まれてよく、これにより、スプラッティングの単一パス技法が可能である。画像再構築ステージ56については、図5Aおよび図5Bに関してさらに詳細に論じる。
【００４６】
図3は、グラフィックス処理パイプライン50のフォワードワーピングステージ52の例示的な動作をさらに詳細に示すブロック図である。図3に示すように、グラフィックス処理パイプライン50のフォワードワーピングステージ52では、シェーダユニット46は、点群中の各点の透視投影を実施して、各点を3次元オブジェクト空間58から2次元画面空間70にワープさせることができる。3次元表面を点群として表す際、点群中の各点は、表面要素(サーフェル)によって表されてよく、このサーフェルは、3次元表面の小さい近傍を記述する点レンダリングプリミティブである。したがって、各サーフェルは、表面エリアに関連してよい。たとえば、3次元表面60は、点のセットを表す円盤形状のサーフェルのセット59によって表されてよい。各サーフェルは、少なくとも位置および色に関連してよい。たとえば、サーフェルのセット59のうちのサーフェル62は、位置64および色に関連してよい。いくつかの例では、各サーフェルはまた、法線および半径にも関連してよい。たとえば、サーフェル62はまた、法線66および半径68にも関連してよい。
【００４７】
シェーダユニット46は、サーフェルの位置、半径、および/または法線に少なくとも部分的に基づいて、視点72から見られるサーフェルをオブジェクト空間58から画面空間70に投影することができる。たとえば、シェーダユニット46は、サーフェル62の位置64、法線66、および/または半径68に基づいて、サーフェル62をオブジェクト空間から画面空間70に投影することができ、したがって、画面空間70におけるサーフェル62は、楕円であってよい。
【００４８】
図4は、グラフィックス処理パイプライン50のフィルタリング/シェーディングステージ54の例示的な動作をさらに詳細に示すブロック図である。図4に示すように、シェーダユニット46は、シェーダユニット46がフォワードワーピングステージ52を実施する結果として得られたサーフェルのセットの、点ごとのシェーディングを実施することができる。そのようなシェーディングは、フォン(phong)シェーディングなど、従来のシェーディングモデルを含むことができる。シェーダユニット46は、各サーフェルにつき、アルファマスクを色と結合することによってスプラットプリミティブを作成することができる。たとえば、色値cを有するサーフェル80が与えられた場合に、シェーダユニット46は、2次元ガウス関数など、アルファ値w(x,y)のセットを有するアルファマスク82をサーフェル80に適用することができ、その結果、色およびアルファ値c*w(x,y)を有するスプラット84が得られる。アルファ値は位置依存なので、アルファマスク82についてのアルファ値は、アルファマスク82上の特定の(x,y)位置に基づいて異なることがあり、それに対応して、スプラット84もまた、スプラット84の特定の(x,y)位置に基づいて異なるアルファ値を有することがある。したがって、シェーダユニット46は、フォワードワーピングステージ52を実施する結果として得られたサーフェルのセットを、色とアルファ値のセットとの両方を有するスプラットのセットに変換することができる。加えて、シェーダユニット46はまた、スプラットのアンチエイリアシングを実施して、エイリアシングアーチファクトを除去することもできる。
【００４９】
図5Aおよび図5Bは、グラフィックス処理パイプライン50の画像再構築ステージ56の例示的な動作をさらに詳細に示すブロック図である。画像再構築ステージ56では、シェーダユニット46は、フォワードワーピングステージ52およびフィルタリング/シェーディングステージ54中で処理された結果であるスプラットから、画像空間中の連続的な表面を再構築することができ、再構築された表面をフレームバッファ16にレンダリングすることができる。
【００５０】
点群中の点は空間中で不均一に分散されているので、また2次元画面空間中のスプラットは楕円形状であることがあるので、スプラット間には不連続性があることがある。したがって、画像再構築ステージ56中で、シェーダユニット46は、スプラットのセットが連続的な表面を表すことができるように、スプラット間のそのような不連続性をカバーするための追加のスプラットを生成することができる。図5Aの例に示すように、スプラット90は、不連続性92を含むことがある。シェーダユニット46は、画像再構築ステージ56中で、スプラット90が不連続性92を含むと決定することができ、それに応答して、スプラット94が不連続性92をカバーするように、指定された半径を有し指定された位置にあるスプラット94を生成することができ、したがって、スプラットのセットは、連続的な表面を表すことができる。
【００５１】
3次元表面をレンダリングする際、種々の表面が、または表面の種々の部分が、視点に対して種々の深度にあることがあり、それにより、ある表面部分が、より視点に近い別の表面部分によって遮られることがある。したがって、画像再構築ステージ56中で、シェーダユニット46はまた、画像空間中のスプラットの可視性を決定して、各画素につき、画像空間中でこの画素に位置決めされるスプラットのフラグメントがフレームバッファ16中にレンダリングされるかどうか、または、スプラットのフラグメントがさらなる処理から破棄されるべきかどうか、を決定することができる。
【００５２】
スプラットのセットは深度に基づいてソートされないので、シェーダユニット46は、最初に、画像空間中で特定画素に位置決めされる第1のスプラットに遭遇し、その後、画像空間中で第1のスプラットと同じ特定画素にやはり位置決めされるが第1のスプラットに対して相対的に現在の視点からより遠い深度の第2のスプラットに遭遇することが、時としてある。シェーダユニット46が第1のスプラットおよび第2のスプラットに対して深度テストを実施しない場合、シェーダユニット46は、第2のスプラットが、フレームバッファ16中の特定画素について第1のスプラットよりも現在の視点から遠い深度を有し、したがって第1のスプラットによって現在の視点から遮られるべきであるにもかかわらず、この特定画素において第2のスプラットを第1のスプラットの上にレンダリングすることがある。
【００５３】
図5Bに示すように、表面96および98はそれぞれ、スプラットのセットで構成されてよい。視点100から見ると、表面98を構成するすべてのスプラットは、表面96の奥にあるものとすることができる。さらに、視点100から見ると、スプラット102、104、および106の各々は、同じ特定画素と交差するものとすることができる。具体的には、スプラット102のフラグメント103、スプラット104のフラグメント105、およびスプラット106のフラグメント107は、視点100に対して、それぞれ同じ画素にレンダリングされる可能性がある。シェーダユニット46は任意の順序でスプラット102、104、および106に遭遇してこれらを処理することがあるので、シェーダユニット46は、フラグメント103、105、および107によって交差される特定画素に対して深度テストを実施して、スプラット102、104、および106の各々がどれくらい画素の色値に寄与するかを決定することができる。
【００５４】
いくつかの例では、画素に対して、シェーダユニット46は、一番前のフラグメントからの深度オフセットを決定することができ、したがって、一番前のフラグメントから深度オフセットよりも奥にないフラグメントは視界から遮られない。その代わり、一番前のフラグメントの深度から深度オフセット内の深度を有するフラグメントは、視点100から一番前のフラグメントの奥にあったとしても、一番前のフラグメントとともに画素の色値に寄与することができる。たとえば、前述のように、場合によっては、さらに背後にあるフラグメントが破棄されるのではなく、重なるフラグメントの色値がブレンドされることがある。2つのフラグメントが深度オフセット内かどうかを決定することによって、シェーダユニット46は、どのフラグメントをブレンドし、どのフラグメントをさらなる処理から破棄するかを決定することが可能であってよい。
【００５５】
図5Bの例では、シェーダユニット46は、フラグメント103が、フラグメント105および107から離れて一番前のフラグメントであると決定することができる。シェーダユニット46は深度オフセット108を決定することもでき、それにより、視点100から深度オフセット108以下の深度でフラグメント103の奥にあるフラグメントは、なお画素の色値に寄与することができる。図5Bの例に示すように、フラグメント107は、視点100からフラグメント103の奥にあり、フラグメント103から深度オフセット108内にない。したがって、シェーダユニット46はフラグメント107を破棄することができ、それにより、フラグメント107は画素の色値に寄与しない。一方、フラグメント105は、視点100からフラグメント103の奥にあるが、フラグメント103から深度オフセット108内にある。したがって、フラグメント105は、画素の色値に寄与することができる。たとえば、シェーダユニット46は、画素についてのフラグメント105の色値をフレームバッファ16に出力することができる。具体的には、シェーダユニット46は、画素についてのフラグメント103および105の色値を、蓄積バッファ28に蓄積することができる。
【００５６】
シェーダユニット46は、スプラットのセットをラスタ化し、フラグメントシェーダコードを実行してスプラットのセットをフラグメントごとにフレームバッファ16中にレンダリングすることによって、画像再構築ステージ56を実施することができる。シェーダユニット46によって処理される各フラグメントは、スプラットの一部であってよく、スプラットの一部を構成する画素の1つまたは複数を含むことができる。いくつかの例では、各フラグメントは、スプラットの単一画素部分であってよい。
【００５７】
シェーダユニット46は、各フラグメントにつき、フラグメントをフレームバッファ16中にレンダリングするかどうかを決定することができ、フラグメントをフレームバッファ16中にレンダリングするとの決定に応答して、フラグメントに基づいてフレームバッファ16中の1つまたは複数の関連する画素を更新することができる。フラグメントをフレームバッファ16中にレンダリングすることは、フラグメントに関連する1つまたは複数の画素の、フレームバッファ16中の1つまたは複数のデータ値を修正することを含むことができる。たとえば、シェーダユニット46は、色バッファ中の1つまたは複数の画素に関連する色値、深度バッファ中の1つまたは複数の画素に関連する深度値、などを更新することができる。
【００５８】
上で論じたように、シェーダユニット46がスプラット間の不連続性(たとえば穴)をカバーするためにスプラットを生成するなどのせいで、スプラットは相互に重なることがあるので、複数のスプラットフラグメントが画像空間中で単一の画素に重なることがある。したがって、フラグメントをフレームバッファ16中にレンダリングするかどうかを決定する際、シェーダユニット46は、フラグメントに対して深度テストを実施して、特定のフラグメントの深度が、フラグメントに対応するフレームバッファ16中の目標画素にすでにレンダリングされているフラグメントの深度のオフセット内であるかどうかを決定することができ、そうである場合は、フレームバッファ16の色バッファ中の目標画素に関連する色値を修正することができる。
【００５９】
そのような深度テストは、あらかじめ3次元オブジェクトを深度画像としてオフセット深度でフレームバッファ16中にレンダリングして深度画像に対して深度テストを実施する(したがって深度画像に対する深度テストに合格したスプラットのフラグメントのみが可視と見なされてフレームバッファ16中にレンダリングされる)ことなく、実施されてよい。その代わり、シェーダユニット46は、フラグメントシェーダコードを実行することができ、このフラグメントシェーダコードは、フレームバッファ16の深度バッファから深度値を読み取って、目標画素に対して、目標画素に対応する特定のフラグメントの深度が、シェーダユニット46によってフレームバッファ16の深度バッファから取り出された目標画素に関連する深度値のオフセット内であるかどうかを決定する。
【００６０】
本開示の態様によれば、シェーダユニット46は、スプラットのフラグメントをフレームバッファ16中の画素にレンダリングするかどうかを決定することの一部として、スプラットのフラグメントに対応する画素に関連する深度値をフレームバッファ16から取り出すことができる。たとえば、シェーダユニット46は、スプラットのフラグメントに対応する目標画素に関連する深度値を、フレームバッファ16に含まれる深度バッファ24から取り出すことができる。画素に関連する深度値を取り出すことは、画素に一番最近にレンダリングされたスプラットのフラグメントの深度値を取り出すことを含むことができ、この深度値は、gl_LastFragDepth()関数を実行することによってシェーダユニット46によって取り出されてよく、この関数により、シェーダユニット46上で実行されるフラグメントシェーダコードは、画素に一番最近にレンダリングされたスプラットのフラグメントの深度値をフレームバッファ16から読み取ることができる。いくつかの例では、深度値は0と1の間であってよく、深度値は、画素の色と視点との間の相対的な距離を示すことができる。たとえば、深度値が小さいほど、関連する画素は視点に近いものとすることができる。
【００６１】
シェーダユニット46は、スプラットのフラグメントに関連するフラグメント深度値が、画素に関連する深度値の非0オフセット内であるかどうかを決定することができる。フラグメントは、2次元画像空間中の画素に位置決めされるスプラットの少なくとも一部であってよい。このようにして、スプラットのフラグメントは、フレームバッファ16中の目標画素場所に対応することができる。たとえば、非0オフセットε、および深度値の範囲0〜1(ここで、深度値0は、関連する画素が視点に最も近いことを表す)が与えられた場合に、シェーダユニット46は、スプラットのフラグメントに関連するフラグメント深度値が、フレームバッファ16から取り出された画素に関連する深度値とεとの合計以下である場合は、深度値がオフセット内であると決定することができる。反対に、シェーダユニット46は、スプラットのフラグメントに関連するフラグメント深度値が、フレームバッファ16から取り出された画素に関連する深度値とεとの合計よりも大きい場合は、深度値がオフセット内でないと決定することができる。
【００６２】
スプラットのフラグメントに関連するフラグメント深度値が、画素に関連する深度値のオフセット内であるとの決定に応答して、シェーダユニット46は、フラグメントに関連するデータに少なくとも部分的に基づいて、画素に関連する更新済みデータをフレームバッファに出力することができる。たとえば、フラグメントに関連するフラグメント深度値が、深度バッファ24に現在記憶されている深度値よりも小さい(それにより、フラグメントが、前に同じ画素にレンダリングされた他のどんなフラグメントよりも視点に相対的に近いことを示す)とシェーダユニット46が決定した場合、シェーダユニット46は、フラグメントに関連するフラグメント深度値をフレームバッファ16に出力して、画素に現在関連し深度バッファ24に記憶されている深度値を置き換えることができる。シェーダユニット46はまた、フラグメントに関連する色値(たとえば、アルファ値とともに、赤、緑、および青の成分値)をフレームバッファ16に出力することもでき、したがって、フレームバッファ16は、色値を蓄積バッファ28に蓄積することができる。このようにして、フレームバッファ16は、各目標画素につき、深度テストに合格した各フラグメントのRGBA値を蓄積することができる。
【００６３】
いくつかの例では、シェーダユニット46は、フラグメントに関連する色値に少なくとも部分的に基づいて更新済み色値を生成することによって、画素に関連する更新済みデータをフレームバッファに出力することができる。シェーダユニット46は、フラグメントに関連する色値を、フレームバッファ16から取り出された画素に関連する色値とブレンドして、画素の色値を正規化して視覚的アーチファクトを除去することができる。シェーダユニット46は、フレームバッファ16中にあるかまたはフレームバッファ16に関連する色バッファ26から、画素に関連する色値を取り出すことができる。
【００６４】
たとえば、シェーダユニット46は、gl_LastFragData()関数を実行することによって、色値をフレームバッファ16から取り出すことができ、この関数により、シェーダユニット46上で実行されるフラグメントシェーダコードは、フレームバッファ16に記憶された画素の色値(たとえばRGBA値)をフレームバッファ16から読み取ることができる。シェーダユニット46は、フラグメントに関連する色値を、フレームバッファ16から取り出された画素の色値とブレンドして、ブレンドされた色値を生み出すことができ、ブレンドされた色値を、画素についての色値として、フレームバッファ16中にあるかまたはフレームバッファ16に関連する色バッファ26に出力することができる。たとえば、蓄積された色値の各々がRGB値ならびにアルファ値を含むとすると、シェーダユニット46は、フラグメントのRGB値と、関連するアルファ値に従って重み付けされた、フレームバッファ16から取り出された画素のRGB値との加重合計を実施することができる。シェーダユニット46は、RGB値の加重合計を、フラグメントの色値のアルファ値と、画素の色値との合計で割って、RGB値の更新済みセットを生み出すことができ、したがって、目標画素についての更新済み色値は、目標画素とアルファ値1とについて計算されたRGB値の更新済みセットである。シェーダユニット46は、画素についてのRGBA値をフレームバッファ16に記憶することができる。
【００６５】
このようにして、シェーダユニット46は、フラグメントの色値を、特定の画素に対する深度テストに合格した他のフラグメントによって寄与される画素の色とブレンドすることができ、画素についてのブレンドされた色値をフレームバッファに記憶することができる。さらに、本明細書に開示される技法を使用して、シェーダユニット46は、特定のフラグメントについて、スプラットのフラグメントに関連するフラグメント深度値が、画素に関連する深度値のオフセット内であるかどうか決定することができ、そうである場合は、連続して、画素に関連する色値をフレームバッファに出力することができる。このようにして、シェーダユニット46は、スプラットのフラグメントに関連するフラグメント深度値が、画素に関連する深度値のオフセット内であるとの決定に応答して、またシェーダユニット46が他のフラグメントに対するどんな介在する深度テストも実施することなく、画素に関連する色値をフレームバッファに出力することができる。
【００６６】
フラグメントに関連するフラグメント深度値が、画素に関連する深度値の非0オフセット内でないとの決定に応答して、シェーダユニット46はフラグメントを破棄することができ、したがって、シェーダユニット46は、フラグメントをフレームバッファ16中にレンダリングしない。シェーダユニット46は、たとえば、フラグメントに関連するフラグメント深度値が、画素に関連する深度値と非0オフセットとの合計よりも大きい場合は、フラグメントに関連するフラグメント深度値が、画素に関連する深度値の非0オフセット内でないと決定することができる。
【００６７】
図6は、GPU12の例示的な動作をさらに詳細に示すフローチャートである。図6に示すように、GPU12は、画素に関連する深度値をフレームバッファ16から取り出すことができる(602)。GPU12はさらに、スプラットのフラグメントに関連するフラグメント深度値が、画素に関連する深度値の非0オフセット内であるかどうかを決定することができる(604)。GPU12は、スプラットのフラグメントに関連するフラグメント深度値が、画素に関連する深度値の非0オフセット内であるとの決定に応答して、スプラットのフラグメントに関連するデータに少なくとも部分的に基づいて、画素に関連する更新済みデータをフレームバッファ16に出力することができる(606)。
【００６８】
いくつかの例では、GPU12は、スプラットのフラグメントに関連するフラグメント深度値が、画素に関連する深度値と非0オフセットとの合計以下であるかどうかを決定することによってさらに、スプラットのフラグメントに関連するフラグメント深度値が、画素に関連する深度値の非0オフセット内であるかどうかを決定することができる。いくつかの例では、GPU12は、スプラットのフラグメントに関連するフラグメント深度値が、画素に関連する深度値の非0オフセット内でないとの決定に応答して、スプラットのフラグメントをさらなる処理から破棄することができる。いくつかの例では、GPU12は、画素に関連する深度値をフレームバッファ16の深度バッファ24から取り出すことによって、画素に関連する深度値をフレームバッファ16から取り出すことができる。
【００６９】
いくつかの例では、GPU12は、スプラットのフラグメントに関連する色値に基づいて、画素についての更新済み色値を決定することができ、画素についての更新済み色値をフレームバッファ16に出力することができる。いくつかの例では、GPU12は、スプラットのフラグメントに関連するフラグメント深度値に基づいて、画素についての更新済み深度値を決定することができ、画素についての更新済み深度値をフレームバッファ16に出力することができる。
【００７０】
1つまたは複数の例では、述べた機能は、ハードウェア、ソフトウェア、ファームウェア、またはこれらの任意の組合せにおいて実装されてよい。ソフトウェアにおいて実装される場合、機能は、1つまたは複数の命令またはコードとして、コンピュータ可読媒体に記憶されるかまたはコンピュータ可読媒体を介して伝送されてよい。コンピュータ可読媒体は、ある場所から別の場所へのコンピュータプログラムの転送を容易にする任意の媒体を含めた、コンピュータデータストレージ媒体または通信媒体を含むことができる。データストレージ媒体は、本開示に記載の技法を実装するための命令、コード、および/またはデータ構造を取り出すために1つもしくは複数のコンピュータまたは1つもしくは複数のプロセッサによってアクセスできる、任意の利用可能な媒体であってよい。限定ではなく例として、そのようなコンピュータ可読媒体は、RAM、ROM、EEPROM、CD-ROM、または他の光学ディスクストレージ、磁気ディスクストレージ、または他の磁気ストレージデバイスを含むことができる。ディスク(disk)およびディスク(disc)は、本明細書においては、コンパクトディスク(CD)、レーザディスク、光学ディスク、ディジタル多用途ディスク(DVD)、フロッピーディスク、およびBlu-ray(登録商標)ディスクを含み、ディスク(disk)は通常、データを磁気的に再生し、一方、ディスク(disc)は、データをレーザで光学的に再生する。上記の組合せも、コンピュータ可読媒体の範囲内に含まれるべきである。
【００７１】
コードは、1つまたは複数のディジタル信号プロセッサ(DSP)、汎用マイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブルロジックアレイ(FPGA)、または他の等価な集積もしくは離散ロジック回路など、1つまたは複数のプロセッサによって実行されてよい。したがって、「プロセッサ」という用語は、本明細書においては、本明細書に記載の技法を実装するのに適した、前述の構造のいずれかまたは他の任意の構造を指すことができる。加えて、いくつかの態様では、本明細書に記載の機能性は、符号化および復号のために構成された専用ハードウェアおよび/もしくはソフトウェアモジュール内で提供されてもよく、または結合されたコーデックに組み込まれてもよい。また、これらの技法は、1つまたは複数の回路またはロジック要素において完全に実装されることも可能である。
【００７２】
本開示の技法は、ワイヤレスハンドセット、集積回路(IC)、またはICのセット(すなわちチップセット)など、幅広いデバイスまたは装置において実装されてよい。開示される技法を実施するように構成されたデバイスの機能的態様を強調するために、本開示では様々なコンポーネント、モジュール、またはユニットが記載されているが、これらは、必ずしも異なるハードウェアユニットによって実現される必要はない。そうではなく、前述のように、様々なユニットは、コーデックハードウェアユニット中で結合されてもよく、または、適切なソフトウェアおよび/もしくはファームウェアとともに、前述のような1つもしくは複数のプロセッサを含めた相互動作ハードウェアユニットの集合によって提供されてもよい。
【００７３】
本開示の様々な態様について述べた。これらおよび他の態様は、後続の特許請求の範囲内である。
【符号の説明】
【００７４】
2  コンピューティングデバイス
3  トランシーバモジュール
4  ユーザインターフェース
6  CPU
8  表示装置
10  システムメモリ
12  GPU
14  表示プロセッサ
16  フレームバッファ
18  ソフトウェアアプリケーション
22  GPUドライバ
24  深度バッファ
26  色バッファ
28  蓄積バッファ
40  グラフィックスメモリ
46  シェーダユニット
50  グラフィックス処理パイプライン
52  フォワードワーピングステージ
54  フィルタリング/シェーディングステージ
56  画像再構築ステージ
58  3次元オブジェクト空間
59  サーフェルのセット
60  3次元表面
62  サーフェル
64  位置
66  法線
68  半径
70  2次元画面空間
72  視点
80  サーフェル
82  アルファマスク
84  スプラット
90  スプラット
92  不連続性
94  スプラット
96  表面
98  表面
100  視点
102  スプラット
103  フラグメント
104  スプラット
105  フラグメント
106  スプラット
107  フラグメント
108  深度オフセット
【図１】
0006325756.tif 000002
【図２】
0006325756.tif 000003
【図３】
0006325756.tif 000004
【図４】
0006325756.tif 000005
【図５Ａ】
0006325756.tif 000006
【図５Ｂ】
0006325756.tif 000007
【図６】
0006325756.tif 000008