(57)【特許請求の範囲】
【請求項１】
プロセッサでグラフィックをレンダリングする方法であって、
仮想空間内の場面に複数のオブジェクトをセットアップするステップであって、前記オブジェクトのそれぞれは、頂点のセットで画定されるステップと、
前記オブジェクトのそれぞれに独特のオブジェクト識別子を割り当てるステップと、
前記オブジェクトを描く１つまたは複数のドローコールを発行するステップと、
出力頂点パラメータ値を生成するために、前記頂点のパラメータ値を操作するステップと、
前記頂点から複数のプリミティブをセットアップするステップであって、前記プリミティブのそれぞれは、前記頂点の１つまたは複数のセットで画定され、前記プリミティブのそれぞれは前記オブジェクトの１つまたは複数に属するステップと、
複数の画素に対して前記プリミティブのそれぞれをラスター化するステップと、
Ｚバッファに前記画素のそれぞれの深度を書き込むステップであって、前記Ｚバッファは第１解像度を有するステップと、
１つまたは複数の前記オブジェクト識別子を、前記Ｚバッファ内の各画素がＩＤバッファ内のオブジェクト識別子と関連するように、少なくとも１つの前記ＩＤバッファに書き込むステップと、
カラーバッファ内のカラー値のセットを決定するために、前記ラスター化されたプリミティブのそれぞれに対して前記画素を処理するステップであって、前記カラーバッファは前記第１解像度よりも低い第２解像度を有するステップと、
前記カラーバッファ内の前記カラー値と前記ＩＤバッファ内の前記識別子とを使用して前記Ｚバッファの前記解像度で、出力フレームに対して表示画素のセットを決定するステップとを含む、方法。
【請求項２】
プロセッサ、及び、
前記プロセッサに連結されたメモリを備え、
前記プロセッサは、グラフィックをレンダリングする方法を実行するように構成されるシステムであって、前記方法は、
仮想空間内の場面に複数のオブジェクトをセットアップするステップであって、前記オブジェクトのそれぞれは、頂点のセットで画定されるステップと、
前記オブジェクトのそれぞれに独特のオブジェクト識別子を割り当るステップと、
前記オブジェクトを描く１つまたは複数のドローコールを発行するステップと、
出力頂点パラメータ値を生成するために、前記頂点のパラメータ値を操作するステップと、
前記頂点から複数のプリミティブをセットアップするステップであって、前記プリミティブのそれぞれは、前記頂点の１つまたは複数のセットで画定され、前記プリミティブのそれぞれは前記オブジェクトの１つまたは複数に属するステップと、
複数の画素に対して前記プリミティブのそれぞれをラスター化するステップと、
Ｚバッファに前記画素のそれぞれの深度を書き込むステップであって、前記Ｚバッファは第１解像度を有するステップと、
１つまたは複数の前記オブジェクト識別子を、前記Ｚバッファ内の各画素がＩＤバッファ内のオブジェクト識別子と関連するように、少なくとも１つの前記ＩＤバッファに書き込むステップと、
カラーバッファ内のカラー値のセットを決定するために、前記ラスター化されたプリミティブのそれぞれに対して前記画素を処理するステップであって、前記カラーバッファは前記第１解像度よりも低い第２解像度を有するステップと、
前記カラーバッファ内のカラー値と前記ＩＤバッファ内の前記識別子とを使用して前記Ｚバッファの前記解像度で、出力フレームに対して表示画素のセットを決定するステップとを含む、システム。
【請求項３】
前記プロセッサは、中央処理ユニット（ＣＰＵ）及びグラフィック処理ユニット（ＧＰＵ）を有する、請求項２のシステム。
【請求項４】
更に、ディスプレイ装置を備え、
前記方法は、前記ディスプレイ装置にグラフィックを表示するステップをさらに含む、請求項２のシステム。
【請求項５】
前記表示画素のセットを前記決定するステップは、前記カラーバッファ及び／または前記Ｚバッファと共に前記ＩＤバッファ内の１つまたは複数のオブジェクト識別子を使用して、空間及び／または時間的アンチエイリアス処理を施すことを包含する、請求項２のシステム。
【請求項６】
前記ＩＤバッファは、識別子の格納専用の専用ＩＤバッファである、請求項２のシステム。
【請求項７】
前記ＩＤバッファは、共有バッファである、請求項２のシステム。
【請求項８】
前記ＩＤバッファは、複数の専用ＩＤバッファである、請求項２のシステム。
【請求項９】
前記独特のオブジェクト識別子を前記割り当てるステップは、オブジェクト識別子及びプリミティブ識別子を付加することを包含する、請求項２のシステム。
【請求項１０】
前記独特のオブジェクト識別子を前記割り当てるステップは、オブジェクト識別子とプリミティブ識別子との間で論理ＯＲを実行することを包含する、請求項２のシステム。
【請求項１１】
前記方法は、
独特のプリミティブ識別子を前記プリミティブのそれぞれに割り当て、前記プリミティブ識別子を前記ＩＤバッファに書き込むステップをさらに含む、請求項２のシステム。
【請求項１２】
前記表示画素のセットを前記決定するステップは、前記カラーバッファ及び／またはＺバッファと組合わせて、前記ＩＤバッファ内の前記オブジェクト識別子及び前記プリミティブ識別子を使用して空間及び／または時間的にアンチエイリアス処理を適用することを包含する、請求項１１のシステム。
【請求項１３】
前記少なくとも１つのＩＤバッファは、オブジェクト識別子の格納専用の専用オブジェクトＩＤバッファ、及び、プリミティブ識別子の格納専用の専用プリミティブＩＤバッファを包含する、請求項２のシステム。
【請求項１４】
前記少なくとも１つのＩＤバッファは、オブジェクト識別子及びプリミティブ識別子の格納専用の専用ＩＤバッファである、請求項２のシステム。
【請求項１５】
前記頂点のパラメータ値を前記操作するステップは、前記パラメータ値を頂点シェーダで操作し、前記ＩＤバッファに最終的に書き込むためのプリミティブＩＤを生成することを包含する、請求項２のシステム。
【請求項１６】
前記独特のオブジェクト識別子を前記割り当てるステップは、頂点シェーダでインスタンス化されたオブジェクトに対してオブジェクト識別子を割り当てることを包含する、請求項２のシステム。
【請求項１７】
前記独特のオブジェクト識別子を前記割り当てるステップは、前記インスタンス化されたオブジェクトに対してインスタンス識別子を決定するために、オブジェクト識別子及びプリミティブ識別子から逆戻りすることにより、頂点シェーダでインスタンス化されたオブジェクトに対してオブジェクト識別子を割り当てることを包含する、請求項２のシステム。
【請求項１８】
前記頂点のパラメータ値を前記操作するステップは、ジオメトリシェーダでジオメトリシェーダ計算を実行することを包含し、
前記独特のプリミティブ識別子を前記割り当てるステップは、
前記ジオメトリシェーダ計算の前に、前記ジオメトリシェーダ計算のジオメトリック増幅の最大量でインクリメントするプリミティブＩＤを生成し、
前記プリミティブＩＤを前記ジオメトリシェーダで受け取り、
前記プリミティブＩＤを、前記ジオメトリシェーダ計算中に前記ジオメトリシェーダで生成されたそれぞれ新しい出力プリミティブにインクリメントすることを包含する、請求項１１のシステム。
【請求項１９】
前記頂点のパラメータ値を前記操作するステップは、ジオメトリシェーダでジオメトリシェーダ計算を実行することを包含し、
前記独特のプリミティブ識別子を前記割り当てるステップは、
前記ジオメトリシェーダ計算中に前記ジオメトリシェーダでプリミティブＩＤを生成することを包含する、請求項１１のシステム。
【請求項２０】
前記プリミティブのそれぞれに独特のプリミティブ識別子を前記割り当てるステップは、前記頂点のパラメータ値を前記操作する前に、
プリミティブＩＤを生成するために、プリミティブ処理演算を実行し、
前記プリミティブ処理演算がパッチを出力する毎に、前記プリミティブＩＤをインクリメントすることを包含する、請求項１１のシステム。
【請求項２１】
前記頂点のパラメータ値を前記操作するステップは、テッセレーションユニットでテッセレーション計算を実行することを包含し、
前記独特のプリミティブ識別子を前記割り当てるステップは、
前記テッセレーション計算の前に、プリミティブＩＤを生成し、
前記プリミティブＩＤを前記テッセレーションユニットで受け取り、
前記テッセレーション計算中に、前記テッセレーションユニットで生成された各出力プリミティブに前記プリミティブＩＤをインクリメントすることを包含する、請求項１１のシステム。
【請求項２２】
前記方法は、ジオメトリシェーディング処理を実行するステップをさらに含み、１つまたは複数の出力プリミティブが、１つまたは複数の入力プリミティブから生成される、請求項２のシステム。
【請求項２３】
前記方法は、ジオメトリシェーディング処理を実行するステップをさらに含み、１つまたは複数の出力プリミティブが、１つまたは複数の入力プリミティブから生成され、前記ジオメトリシェーディング処理の実行は、前記ジオメトリシェーディング処理で生成された１つまたは複数のプリミティブに対して、プリミティブ識別子を生成することを包含する、請求項２のシステム。
【請求項２４】
前記方法は、１つまたは複数の出力プリミティブが１つまたは複数の入力プリミティブから生成されるジオメトリシェーディング処理を実行するステップをさらに含み、前記ジオメトリシェーディング処理の実行は、前記入力プリミティブに関連するオブジェクトでサポートされた出力プリミティブのジオメトリック増幅の最大量で、入力プリミティブのそれぞれに対してプリミティブ識別子をインクリメントすることにより、前記ジオメトリシェーディング処理で生成された１つまたは複数のプリミティブに対してプリミティブ識別子を生成することを包含する、請求項２のシステム。
【請求項２５】
前記ラスター化されたプリミティブのそれぞれの前記画素に対する前記処理は、画素シェーダで画素パラメータ値を操作することを包含し、
前記画素シェーダで前記画素パラメータ値を前記操作することは、前記画素シェーダで１つまたは複数の前記プリミティブ識別子を読み込むことを包含する、請求項２のシステム。
【請求項２６】
前記出力フレームに続く少なくとも１つの続くフレームに対して、オブジェクト識別子がフレーム間で一貫してオブジェクトに割り当てられるように、前記複数のオブジェクト識別子を追跡するステップをさらに含む、請求項２のシステム。
【請求項２７】
前記複数のオブジェクトをセットアップするステップは、前記独特のオブジェクト識別子を、前記オブジェクトのそれぞれに割り当て、前記オブジェクト識別子をＩＤバッファに書き込むことを包含する、請求項２のシステム。
【請求項２８】
前記ドローコールを前記発行するステップは、前記独特のオブジェクト識別子を前記オブジェクトのそれぞれに割り当て、前記オブジェクト識別子をＩＤバッファに書き込むことを包含し、これにより、複数のオブジェクト識別子が存在する、請求項２のシステム。
【請求項２９】
前記独特のオブジェクト識別子をオブジェクトのそれぞれに前記割り当てるステップは、同じオブジェクト識別子を、同じフレームまたは２つ以上の異なるフレーム内の同じオブジェクトの２つ以上のインスタンスに割り当てることを包含する、請求項２のシステム。
【請求項３０】
前記表示画素のセットを前記決定するステップは、前記１つまたは複数のオブジェクト識別子を使用して、いずれのプリミティブまたは画素がいずれのオブジェクトに属するか追跡を維持する、請求項２のシステム。
【請求項３１】
前記表示画素のセットを前記決定するステップは、先のフレーム内の同じオブジェクトにおける同じ画素に対する画素値を繰り返すことにより、１つのフレーム内の画素に対して画素値を設けるため、１つまたは複数の前記オブジェクト識別子を使用することを包含する、請求項２のシステム。
【請求項３２】
前記表示画素のセットを前記決定するステップは、１つまたは複数オブジェクト識別子を用いることを包含し、同じオブジェクトは、所与のフレーム内で多数回再度描かれる、請求項２のシステム。
【請求項３３】
前記方法は、オブジェクト識別子を使用して、フレームからフレームへのオブジェクトの流れの追跡を維持するステップをさらに含む、請求項２のシステム。
【請求項３４】
ＩＤモジュールを備えるグラフィック処理ユニット（ＧＰＵ）であって、このＩＤモジュールは、
仮想空間内の場面の複数のオブジェクトに対応する情報を受け取るステップであって、前記オブジェクトはそれぞれ頂点のセットで画定されるステップと、
前記複数内の前記オブジェクトのそれぞれに対して、命令バッファ内のオブジェクト識別子を受け取り、ＩＤバッファに前記オブジェクト識別子を書き込むステップとを実行するように構成され、
前記ＧＰＵは、更に、
出力頂点パラメータ値を生成するために、前記頂点のパラメータ値を操作するステップと、
前記頂点から複数のプリミティブをセットアップするステップであって、前記プリミティブは、１つまたは複数の前記頂点のセットで画定され、前記プリミティブは１つまたは複数の前記オブジェクトに属するステップと、
複数の画素に対して前記プリミティブのそれぞれをラスター化するステップと、
Ｚバッファに前記画素のそれぞれの深度を書き込むステップであって、前記Ｚバッファは第１解像度を有するステップと、
１つまたは複数の前記オブジェクト識別子を、前記Ｚバッファ内の各画素がＩＤバッファ内のオブジェクト識別子と関連するように、少なくとも１つの前記ＩＤバッファに書き込むステップと、
カラーバッファ内のカラー値のセットを決定するために、前記ラスター化されたプリミティブのそれぞれに対して前記画素を処理するステップであって、前記カラーバッファは前記第１解像度よりも低い第２解像度を有するステップと、
前記カラーバッファ内の前記カラー値と前記ＩＤバッファ内の前記識別子とを使用して前記Ｚバッファの前記解像度で、出力フレームに対して表示画素のセットを決定するステップとを実行するように構成される、ＧＰＵ。
【請求項３５】
前記ＩＤモジュールは、ハードウェアモジュールである、請求項３４のＧＰＵ。
【請求項３６】
プロセッサ実行可能な命令を内部に組み込んだ、非一時的コンピュータ可読媒体であって、プロセッサによる命令の実行は、請求項１に記載のように、プロセッサでグラフィックをレンダリングする方法を前記プロセッサに実行させる、非一時的コンピュータ可読媒体。
【請求項３７】
プロセッサで１つまたは複数グラフィックフレームをレンダリングする方法であって、前記１つまたは複数のグラフィックフレームは、複数のオブジェクトを表し、この方法は、
ａ）独特のオブジェクト識別子を前記オブジェクトのそれぞれに割り当てるステップと、
ｂ）前記フレームのそれぞれに対し、仮想空間内で前記オブジェクトのそれぞれの頂点を操作するステップであって、前記オブジェクトのそれぞれは、１つまたは複数のプリミティブを有するステップと、
ｃ）前記フレームのそれぞれに対し、前記仮想空間からスクリーン空間に前記オブジェクトの前記プリミティブを変換するステップであって、前記スクリーン空間は、複数の深度サンプルと複数のカラーサンプルとを有するステップと、
ｄ）前記フレームのそれぞれに対し、スクリーン空間内で前記カラーサンプルのそれぞれの最終カラー値とスクリーン空間内の前記深度サンプルのそれぞれの最終深度値とを決定するステップであって、前記最終深度値は、深度バッファ内に格納され、前記最終カラー値はカラーバッファ内に格納され、前記深度バッファは前記カラーバッファよりも高解像度であるステップと、
ｅ）前記フレームのそれぞれに対し、少なくとも１つの前記オブジェクト識別子をＩＤバッファ内に格納するステップであって、前記深度バッファ内の前記最終深度値のそれぞれは、前記ＩＤバッファ内の少なくとも１つの前記オブジェクト識別子に関連するステップと、
ｆ）前記フレームのそれぞれに対し、前記カラーバッファ内の前記カラー値及び前記ＩＤバッファ内の前記オブジェクト識別子を用いて、前記深度バッファの前記高解像度で表示画素の最終セットを決定するステップとを含む、方法。
【発明の詳細な説明】
【技術分野】
【０００１】
［関連出願の相互参照］
本願は、本願と同日出願のＴｏｂｉａｓ  Ｂｅｒｇｈｏｆｆに対する「ＭＥＴＨＯＤ  ＦＯＲ  ＥＦＦＩＣＩＥＮＴ  ＣＯＮＳＴＲＵＣＴＩＯＮ  ＯＦ  ＨＩＧＨ  ＲＥＳＯＬＵＴＩＯＮ  ＤＩＳＰＬＡＹ  ＢＵＦＦＥＲＳ」と題する同一出願人による同時継続の米国特許出願番号１４／２４６０６４（代理人整理番号ＳＣＥＡ１３０５５ＵＳ００）に関し、参照することにより、その全体の内容がここに包含される。
【０００２】
本願は、２０１４年４月５日出願のＭａｒｋ  Ｅｖａｎ  Ｃｅｒｎｙに対する「ＧＲＡＤＩＥＮＴ  ＡＤＪＵＳＴＭＥＮＴ  ＦＯＲ  ＴＥＸＴＵＲＥ  ＭＡＰＰＩＮＧ  ＴＯ  ＮＯＮ−ＯＲＴＨＯＮＯＲＭＡＬ  ＧＲＩＤ」と題する同一出願人による同時継続の米国特許出願番号１４／２４６，０６８（代理人整理番号ＳＣＥＡ１３０５７ＵＳ００）に関し、参照することにより、その全体の内容がここに包含される。
【０００３】
本願は、２０１４年４月５日出願のＴｏｂｉａｓ  Ｂｅｒｇｈｏｆｆに対する「ＶＡＲＹＩＮＧ  ＥＦＦＥＣＴＩＶＥ  ＲＥＳＯＬＵＴＩＯＮ  ＢＹ  ＳＣＲＥＥＮ  ＬＯＣＡＴＩＯＮ  ＢＹ  ＣＨＡＮＧＩＮＧ  ＡＣＴＩＶＥ  ＣＯＬＯＲ  ＳＡＭＰＬＥ  ＣＯＵＮＴ  ＷＩＴＨＩＮ  ＭＵＬＴＩＰＬＥ  ＲＥＮＤＥＲ  ＴＡＲＧＥＴＳ」と題する同一出願人による同時継続の米国特許出願番号１４／２４６０６１（代理人整理番号ＳＣＥＡ１３０５８ＵＳ００）に関し、参照することにより、その全体の内容がここに包含される。
【０００４】
本願は、２０１４年４月５日出願のＭａｒｋ  Ｅｖａｎ  Ｃｅｒｎｙに対する「ＶＡＲＹＩＮＧ  ＥＦＦＥＣＴＩＶＥ  ＲＥＳＯＬＵＴＩＯＮ  ＢＹ  ＳＣＲＥＥＮ  ＬＯＣＡＴＩＯＮ  ＢＹ  ＡＬＴＥＲＩＮＧ  ＲＡＳＴＥＲＩＺＡＴＩＯＮ  ＰＡＲＡＭＥＴＥＲＳ」と題する同一出願人による同時継続の米国特許出願番号１４／２４６０６３（代理人整理番号ＳＣＥＡ１３０５９ＵＳ００）に関し、参照することにより、その全体の内容がここに包含される。
【０００５】
本願は、２０１４年４月５日出願のＭａｒｋ  Ｅｖａｎ  Ｃｅｒｎｙに対する「ＶＡＲＹＩＮＧ  ＥＦＦＥＣＴＩＶＥ  ＲＥＳＯＬＵＴＩＯＮ  ＢＹ  ＳＣＲＥＥＮ  ＬＯＣＡＴＩＯＮ  ＩＮ  ＧＲＡＰＨＩＣＳ  ＰＲＯＣＥＳＳＩＮＧ  ＢＹ  ＡＰＰＲＯＸＩＭＡＴＩＮＧ  ＰＲＯＪＥＣＴＩＯＮ  ＯＦ  ＶＥＲＴＩＣＥＳ  ＯＮＴＯ  ＣＵＲＶＥＤ  ＶＩＥＷＰＯＲＴ」と題する同一出願人による同時継続の米国特許出願番号１４／２４６０６６（代理人整理番号ＳＣＥＡ１３０６０ＵＳ００）に関し、参照することにより、その全体の内容がここに包含される。
【０００６】
本願は、２０１４年４月５日出願のＭａｒｋ  Ｅｖａｎ  Ｃｅｒｎｙに対する「ＧＲＡＤＩＥＮＴ  ＡＤＪＵＳＴＭＥＮＴ  ＦＯＲ  ＴＥＸＴＵＲＥ  ＭＡＰＰＩＮＧ  ＦＯＲ  ＭＵＬＴＩＰＬＥ  ＲＥＮＤＥＲ  ＴＡＲＧＥＴＳ  ＷＩＴＨ  ＲＥＳＯＬＵＴＩＯＮ  ＴＨＡＴ  ＶＡＲＩＥＳ  ＢＹ  ＳＣＲＥＥＮ  ＬＯＣＡＴＩＯＮ」と題する同一出願人による同時継続の米国特許出願番号１４／２４６０６２（代理人整理番号ＳＣＥＡ１３０６１ＵＳ００）に関し、参照することにより、その全体の内容がここに包含される。
【０００７】
［技術分野］
本発明は、コンピュータグラフィック処理に関する。
【背景技術】
【０００８】
コンピュータグラフィック処理は、ディスプレイ上に提示するために仮想コンテンツを描写する画像を作成するために用いられる複雑な処理である。現代の３Ｄグラフィックスは、コンピュータグラフィック演算に効果的に設計された専門のアーキテクチャを有する優秀なグラフィック処理ユニット（ＧＰＵ）を使用して処理することが多い。ＧＰＵは、ディスプレイに出力することを意図したフレームバッファ内に画像の作成を加速するように設計された専門の電子回路であり、ＧＰＵは、大きなデータブロックの処理を平行して行うアルゴリズムのための汎用ＣＰＵよりも、より効率的なＧＰＵとする高度に平行処理するアーキテクチャを有することが多い。ＧＰＵは、埋め込みシステム、携帯電話、パーソナルコンピュータ、タブレットコンピュータ、携帯ゲーム装置、ワークステーション及びゲームコンソール等の種々のコンピューティングシステムに使用されている。
【０００９】
ビデオゲーム及び他のリアルタイムアプリケーション用の多くの現代のコンピュータグラフィック処理は、ディスプレイ上に提示される画素値の最終配列を決定する入力データの処理を実行する多くの異なるステージを有するレンダリングパイプラインを用いる。グラフィックレンダリングパイプラインのいくつかの実行では、処理は、ＣＰＵとＧＰＵとの間で連携することができる。アプリケーションプログラミングインターフェース（ＡＰＩ）を通じてＧＰＵに発行される一連の描画呼び出しを介して、アプリケーション（例えば、ＣＰＵで実行されるビデオゲーム）の現在の状態に基づいて、中央処理ユニット（ＣＰＵ）により、入力データがセットアップされることができ、描画コマンドが発行されることができ、これはグラフィックフレーム毎に多数回生じることがあり、そしてＧＰＵは、対応してパイプラインの種々のステージを実行することあり、結果的に画像を描画する。
【００１０】
パイプラインの多くのステージは、種々の処理ステージを通してデータが流れるにつれて入力と出力とが好適に画定されており、いくらかの特定の実行は、所要の視覚効果にしたがって種々のステージを包含しまたは省略しても良い。グラフィックパイプライン内の種々の固定された機能演算が、ＧＰＵ内にハードウェアモジュールとして実行され、一方、プログラム可能なシェーダは典型的には、色、ライティング、テクスチャ座標、及び、画像内のオブジェクト及び画素に関連する他の視覚的値を決定するシェーディング計算の多くを実行することがあるが、ハードウェア、ソフトウェアまたはこれらの組合わせのパイプラインの種々のステージを実行することができる。古いＧＰＵは、計算がＧＰＵの個々のハードウェアモジュール内に固定されて、ほとんど固定された機能のパイプラインを使用していたが、しかし、シェーダの出現及びプログラム可能なパイプラインの増加で、より多くの動作をソフトウェアプログラムで実行させるようになり、レンダリングプロセスについて、開発者により大きな柔軟性及びより大きな制御を提供する。
【００１１】
一般的に言うと、パイプラインの初期ステージは、仮想空間（「場面空間」と称することもある）内のジオメトリで実行される計算を包含し、この空間は、二次元、または、より一般的には、三次元の仮想世界を表しても良い。仮想空間内のオブジェクトは、典型的には、パイプラインの初期段階に対する入力としてセットアップされたポリゴンメッシュとして表され、その頂点は、典型的には三角形であるが更に点、線及び他の多角形形状を有しても良い画像内の一連のプリミティブに対応する。各プリミティブの頂点は、位置の値（例えば、Ｘ−Ｙ座標及びＺ深度値）、カラー値、照明値、テクスチャ座標等を含む一群のパラメータ値によって定義することができ、グラフィックスは初期ステージで、頂点ごとのベースで頂点のパラメータ値の演算を通じて処理しても良い。初期ステージにおける演算は、仮想空間内の頂点のパラメータを演算するための頂点シェーディング計算と同様に、アプリケーションステージで最初にセットアップしたものを超えて新しい場面のジオメトリを生成するために、場面の形状やジオメトリシェーディング計算を細分化するために、必要に応じてテッセレーションを包含しても良い。演算のいくつかは、基礎となる仮想空間の幾何学的形状にレンダリング計算を実行するために、頂点ごとのベースで、プリミティブの頂点のパラメータ値を演算する頂点シェーダを含む、プログラマブルシェーダによって実行しても良い。
【００１２】
表示に適した仮想世界の画像を生成するためには、場面内のオブジェクトと、それらに対応するプリミティブが仮想空間からスクリーン空間に変換される。中間ステージは、スクリーン空間を画定する２次元平面に対してプリミティブのマッピングを決定するために様々な動作を含んでも良い。ラスタライズ処理は、ラスタライザのために画定されたスクリーン空間における離散画素の初期ステージから処理されたプリミティブをサンプリングするため、及び、ラスタライザのサンプルによってカバーされたプリミティブのフラグメントを生成するために使用される。画面スペースに対する場面のラスタライズに関連したこれらの中間演算は、更に、隠されまたは最終画像で見ることのできないプリミティブの不必要な画素ごとの計算となることがあるフラグメントの処理を避けるための最適化として、現在のビューの視推台の外側のプリミティブのクリッピング、及び、現在のビューから見えない後ろ向きのプリミティブのカリング等の演算を包含しても良い。各フラグメントの入力値として使用されるパラメータ値は、典型的には、フラグメントの対応する画素の位置にフラグメントを形成するサンプリングされたプリミティブの頂点のパラメータを補間することにより決定され、この画素の位置は、典型的には画素の中心または画素内の異なるサンプル位置であるが、特定の状況では、他の補間位置を使用しても良い。
【００１３】
その後、パイプラインはフラグメント及びその補間された入力パラメータ値を、更に処理するためにパイプラインの下流に渡すことができる。これらの後のステージの際、フラグメント毎の演算は、例えば画素毎またはサンプル毎のベースで各フラグメントに対するカラー値、深度値、照明及びテクスチャ座標等の入力された補間パラメータ値を更に演算するために、画素シェーダ（「フラグメントシェーダ」としても知られていることがある）を呼び出すことにより実行しても良い。スクリーン空間内の各フラグメントの座標は、それらを生成したラスター化で画定される画素座標及び／またはサンプル座標に対応する。
【００１４】
最も簡単なケースでは、単一のサンプルが画素中心に対応する画素毎に使用され、単一のフラグメントが画素中心をカバーするプリミティブに対して処理される。例えば、同じスクリーン空間位置で他のプリミティブで閉塞されておらず、フラグメントが深度テストを通過すると、画素シェーダで計算されたフラグメントの出力カラー値がこれらの画素座標に対するカラーバッファに書き込まれ、画素シェーダが深度値をエキスポートするようにプログラムされている場合には、出力深度値が深度バッファに書き込まれることがある。
【００１５】
ときには、アンチエイリアス処理のために複数のサブピクセルサンプルが使用され、これは、カラーバッファ内の所定の画素が、異なるサブピクセルサンプルをカバーする異なるプリミティブから計算した異なるフラグメントからの出力カラー値のブレンドを選択することを可能とすることにより、サンプリングしたテクスチャの高周波数アーティファクトの出現を減少し、更に、プリミティブの境界におけるギザギザの縁部を滑らかにすることができる。複数のサンプルが使用される場合、各フラグメントの出力は、それを生成したプリミティブでカバーされる１つまたは複数のサブピクセルサンプルに適用してもよい。
【００１６】
従来のスーパーサンプリングが使用される場合、各サブピクセルサンプル用の画素シェーダでユニークフラグメントが処理され、その出力は、サンプル座標でカラーバッファに書き込まれ、ミニピクセル状のサンプルを本質的に処理し、より高い解像度でレンダリングする。より高い解像度のカラーバッファは、ダウンサンプリングし、表示バッファ内で表示解像度に、フィルタを通して低下させても良い。ユニークフラグメントは、それぞれカバーされるサンプルに対して、画素シェーダにより処理されることが必要であるため、プロセスはコンピュータ的に要求し、重要なシェーダオーバヘッドが導入される。
【００１７】
従来のマルチサンプリングは、画素シェーダで単一フラグメントを処理し、その値をカラーバッファの多数のカバーされたサンプルに適用することにより、スーパーサンプリングの欠点をある程度緩和する。最も単純なマルチサンプリングは、カラー及び深度の双方の各サンプルを用い、スーパーサンプリングにおけると同様にサンプル毎に深度を計算し、書き込み、画素ごとに単一出力カラーを、各画素の全てのカバーされたサンプルに複製する。最近、付加的な深度サンプルを追加することで被ることになるオーバーヘッドを追加することなく、ラスタライザの画素の境界内のプリミティブ縁部の範囲をより正確にサンプリングするため、カバレージサンプリングアンチエイリアス（ｃｏｖｅｒａｇｅ  ｓａｍｐｌｉｎｇ  ａｎｔｉ−ａｌｉａｓｉｎｇ）（ＣＳＡＡ）及びエンハンストクオリティアンチエイリアス（ｅｎｈａｎｃｅｄ  ｑｕａｌｉｔｙ  ａｎｔｉ−ａｌｉａｓｉｎｇ）（ＥＱＡＡ）等の新しいマルチサンプリング技術が出現し、これは深度サンプルからカラーサンプルのいくつかを分離するものである。これらのマルチサンプリング技術で、典型的には、画素内の深度サンプルよりもカラーサンプルがより多く（すなわち、いくつかのサンプルはカラー用にのみ使用される）、フラグメントは、画素内の少なくとも１つのサンプルがカバーされるときはいつでも、プリミティブに対する画素シェーダにより処理され、フラグメントの出力カラー値はカラーバッファ内の各カバーされたサンプルに適用することができる。
【発明の概要】
【発明が解決しようとする課題】
【００１８】
いくつかの新しいマルチサンプリング技術は、更に、カラーサンプルを深度サンプルから分離することを可能とし、より正確な深度情報を、カラーバッファデータのサイズを増大することなく、生成することが可能である。しかし、これらの技術は、深度情報のみを有するサンプルがシェーディングされるサンプルと考え、カラーサンプルがカバーされておらず、出力カラーが不要なときでも、任意のサンプルがカバーされる任意のフラグメントに対する画素シェーダが呼び出される。不都合なことに、画素シェーダの演算は計算的に高価であり、フラグメントの出力値が描画される画像における最終的に表示する画素値に寄与しないときはいつでも、無駄な計算的オーバーヘッドを導入する。ビデオゲーム及び他のリアルタイムグラフィック処理の例では、計算的必要性を減少させ、描画タスクに対する計算的効率を向上させることは、描画される画像のクオリティ及びディテールの向上を達成するための重要な目標である。更に、最近の４０００画素のオーダーの水平解像度を有する超高精細（「ｕｌｔｒａ  ＨＤ」または「４ｋ」）ディスプレイの出現で、ディスプレイ技術の進歩について行くことができるより効果的なグラフィック処理方法が必要とされている。
【００１９】
この文脈の範囲内で、本開示の態様が生じる。
【課題を解決するための手段】
【００２０】
本開示の技術は、添付図面を参照する以下の詳細な説明を考慮することにより、容易に理解することが可能である。
【図面の簡単な説明】
【００２１】
【図１Ａ−１Ｂ】図１Ａ〜図１Ｂは、第１の従来のエイリアシング手法にしたがうグラフィックレンダリングプロセスを示す概略図である。
【図２Ａ−２Ｂ】図２Ａ〜図２Ｂは、第２の従来のアンチエイリアシング手法にしたがうグラフィックレンダリングプロセスを示す概略図である。
【図３Ａ−３Ｃ】図３Ａ〜図３Ｃは、本開示の態様によるグラフィックレンダリングプロセスを示す概略図である。
【図４】本開示の態様によるグラフィックのレンダリング方法を示す流れ図である。
【図５】本開示の態様によるグラフィックレンダリングパイプラインを示す流れ図である。
【図６】本開示の態様によるグラフィックレンダリングシステムを示す概略図である。
【図７Ａ−７Ｄ】図７Ａ〜図７Ｄは、本開示の態様にしたがうラスタライズ処理及び表示バッファの概略図である。
【図８Ａ−８Ｄ】図８Ａ〜図８Ｄは、本開示にしたがうグラフィック処理の概略図である。
【図９Ａ−９Ｂ】図９Ａ〜図９Ｂは、開示の態様によるグラフィック処理部材の独特の識別子の実施例を示す概略図である。
【図１０Ａ−１０Ｃ】図１０Ａ〜図１０Ｃは、本開示の態様によるグラフィック処理における独特のオブジェクト識別子を使用する実施例を示す概略図である。
【図１１Ａ−１１Ｂ】図１１Ａ〜図１１Ｂは、本開示の態様によるグラフィック処理における独特のプリミティブ識別子を使用する実施例を示す概略図である。
【図１２】本開示の態様によるグラフィックレンダリングパイプラインを示す流れ図である。
【図１３】本開示の態様によるグラフィックレンダリングシステムを示すブロック図である。
【図１４】本開示の態様によるグラフィックパイプラインを通してオブジェクト及びプリミティブＩＤを生成及び伝達する方法の実施例を示す流れ図である。
【発明を実施するための形態】
【００２２】
以下の詳細な説明は、例示の目的のための多くの特定の詳細を含むが、当業者であれば、本発明の範囲内で、以下の細部に多くの変形及び変更が存在することが理解される。したがって、以下に説明する本発明の例示的な実施形態は、請求の範囲に記載の発明に対して普遍性を喪失させるものではなく、制限を付するものでもない。
【００２３】
本開示の態様は、レンダリングパイプラインの効率を向上するために、画素シェーダの呼び出しを最小とすることができるグラフィック処理システム及び方法を説明する。本開示の実施形態では、複数のサンプルはプリミティブ内で取得することができる。サンプルは深度及びカラーサンプルの双方を包含することができ、深度サンプル数は、各画素内でカラーサンプル数よりも多い。サンプルの少なくとも１つがカバーされるときに、プリミティブでカバーされるサンプルの性質が、シェーディング計算を実行するために画素シェーダを呼び出す前に考慮される。少なくとも１つのサンプルがプリミティブでカバーさるが、いずれもカラーサンプルではないとき、画素シェーダに対する呼び出しは、特定の状況で回避することができる。
【００２４】
従来のレンダリングパイプラインでは、プリミティブでカバーされたサンプルの形式に関わらず、画素シェーダが呼び出される。したがって、フラグメントシェーディング計算が実行され、フラグメントに対する画素シェーダで計算されたカラー値は、そのフラグメントを生成したプリミティブでカバーされるすべての深度サンプルと関連するカラーサンプルに適用される。サンプリングスキームが、カラーにのみ使用されるいくつかのサンプルを有する従来のラスター化の際に使用される場合、画素シェーダは、プリミティブでカバーされたサンプルが深度サンプルだけの場合でも、呼び出され、計算されたカラー値は、サンプルが関連する論理に基づいてカバーされてないサンプルに適用される。
【００２５】
本開示の特定の態様をより良く理解するために、グラフィック処理に対する第１の従来の手法を図１Ａ〜１Ｂに示してある。図１Ａ〜１Ｂに示す実施例は、画素ごとの単一サンプル位置のみを用い、これは、画素の最終セット内で目立ったエイリアシングアーチファクトとなることがある。
【００２６】
図１Ａは、それぞれが描画される画像内のジオメトリの一部を形成するプリミティブとなりえる複数の三角形１０２ａ，１０２ｂ、および、プリミティブに重なる一組のスクリーン空間画素１０４（または、スクリーン空間画素境界）を示す。図１Ａでは、各スクリーン空間画素は、単一位置でサンプリングしただけのものであり、これは図示の実施例では画素１０４の中心である。このサンプルは、カラー、深度または他のパラメータを含むスクリーン画素のそれぞれのパラメータを決定するために使用することができる。画素内のサンプルがプリミティブでカバーされている場合、すなわち、この実施例でスクリーン空間画素の中心がカバーされている場合、フラグメントは、サンプルをカバーするプリミティブに対して生成することができ、フラグメントは更に、そのスクリーン空間画素の最終値が決定される前に、処理することができる。
【００２７】
図１Ｂは、プリミティブ１０２ａ及び１０２ｂのそれぞれのサンプリングから生成されたフラグメント１０６ａ及び１０６ｂを示す。すなわち、図１Ｂは、基となるプリミティブのために生成された少なくとも１つのフラグメントのための画素を示す。図１Ｂに示すように、フラグメント１０６ａは、プリミティブ１０２ａから生成され、これは、これらの対応する画素の中心のサンプルがその三角形でカバーされ、フラグメント１０６ｂ及びプリミティブ１０２ｂについても同様だからである。フラグメント１０６ａ，１０６ｂのパラメータ値は、フラグメントの位置にフラグメントを生成したそれぞれのプリミティブ１０２ａ，１０２ｂの頂点のパラメータを補間することにより、決定しても良い。例えば、三角形１０２ａのそれぞれの頂点のパラメータ値は、各フラグメント１０６ａの中心に補間し、これらのフラグメント１０６ａのそれぞれのパラメータ値のセットを決定しても良く、同様なプロセスを、三角形１０２ｂの頂点のパラメータ値を使用してフラグメント１０６ｂのそれぞれに実行しても良い。このパラメータは、テクスチャ座標、法線、接線、照明値、カラー値、位置（深度値を含む）等を含んでも良い。
【００２８】
それぞれのフラグメント１０６ａ，１０６ｂ及びその補間されたパラメータ値は、最終的に描画される画像内の対応するこれらの最終画素値を決定する前に、更に処理しても良い。これらの計算のいくつかは、フレーム内の画素のカラー値を決定する前に、カラー、テクスチャまたは他のフラグメントパラメータ値を追加的にフラグメント毎に演算するために画素シェーダを呼び出すことにより実行される画素シェーディング計算を含む。
【００２９】
図１Ｂの説明から、この第１の従来の手法のサンプリングスキームは、プリミティブ１０２ａ，１０２ｂの境界で特定のエイリアシングアーチファクトを生じることがある。図示の実施例で見られるように、いくつかの画素はプリミティブの縁部に位置することがあり、これらの縁部画素の画定された境界は、これらのプリミティブがその画素のスクリーン空間座標にマッピングされたときに（例えば、投影され／変形され）、多数のプリミティブで実際にカバーされ得る。しかし、各画素は単一の位置でサンプリングされるだけであるため、フラグメントは双方ではなく、プリミティブの一方または他方で生成される。すなわち、カバレッジは、単一のサンプル位置だけに基づいて決定される。これは、最終画像のカラー及び他のパラメータにギザギサな効果（「ジャギー」と称されることもある）を作り出すこともあり、これは、三角形１０２ａ及び１０２ｂ間の対角状に配向された境界のフラグメント１０６ａ及び１０６ｂの階段状の外観を参照して理解することが可能である。換言すると、その境界がプリミティブ１０２ａ及び１０２ｂの縁部と交差する、縁部画素のそれぞれについて、図１Ａ〜１Ｂの従来のエイリアシングされた実施例では、フレームバッファ内の縁部画素の最終値は、サンプルをカバーするのはいずれのプリミティブであるかに基づいて、双方ではなく、プリミティブ１０２ａまたは１０２ｂに生成されたフラグメントで決定され、これは、最終画像にエイリアシングアーチファクトが存在する結果となることがある。
【００３０】
図１Ａ〜１Ｂを参照する上述のエイリアシング手法に関連する欠点を克服するため、画素毎の複数のサンプルがしばしば画像のエイリアス除去に使用される。画素の境界がプリミティブの縁部にあるときに、異なるサブピクセルのサンプルが別のプリミティブでカバーされることがあり、ディスプレイ画素の最終値は、従来、最終的表示バッファ内の単一の画素のカラー値を決定するためにカバーされたサンプルで重み付けされる異なるサブピクセルサンプル値を組み合わせることで決定される異なるプリミティブからの値の組み合わせである。
【００３１】
従来のアンチエイリアススキームの例が図２Ａ〜２Ｂに記載され、図１Ａ〜１Ｂの従来のエイリアシング処理された実施例と同様に、図２Ａ〜２Ｂの従来の実施例は同じ画素１０４及びプリミティブ１０２ａ，１０２ｂを用いる。図２Ａに示すように、図１Ａの実施例のように各画素１０４のそれぞれの中心で単一のサンプルを抽出しているのではなく、複数のサンプルが各画素の領域全体で抽出されている。図示の実施例では、サンプルは、ラスタライザのために画定された各スクリーン画素１０４の境界内の４つの異なる位置から抽出され、典型的には、そのサンプルの少なくとも１つが所定のプリミティブでカバーされる場合には、少なくとも１つのフラグメントがスクリーン画素１０４における所定のプリミティブから生成される。すなわち、スクリーン空間に投影されたときに、プリミティブの領域が、スクリーン空間で画定される画素のサンプルをカバーしたときに、少なくとも１つのフラグメントが更に処理するために生成されることがある。
【００３２】
図２Ｂは、それぞれプリミティブ１０２ａ及び１０２ｂのサンプリングから生成されたフラグメント２０６ａ及び２０６ｂを示す。すなわち図示のフラグメント２０６ａは、基となるプリミティブ１０２ａのために少なくとも１つのフラグメントが処理されるこれらのスクリーン画素境界であり、図示のフラグメント２０６ｂは、基となるプリミティブ１０２ｂのために少なくとも１つのフラグメントが処理されるこれらのスクリーン画素境界である。第１実施例におけるように、フラグメントは、少なくとも１つの画素サンプルがプリミティブでカバーされたときにプリミティブのために生成され、各フラグメントは、それを生成したプリミティブの頂点のパラメータ値からフラグメントの位置に補間されたパラメータ値を有する。更に、第１実施例と同様に、フラグメントのための最終カラー値出力に作用するため、フラグメントのパラメータを演算することのできる更なるフラグメント毎の画素シェーディング計算のために、フラグメントのそれぞれに対して画素シェーダが呼び出される。
【００３３】
伝統的なスーパーサンプリングが使用される場合、多数のカラーフラグメントがそれぞれカバーされたサンプルに生成され、個々のカラーフラグメントは独自にシェーディング処理され、その対応するサンプルに適用される。この場合、各フラグメントの出力カラー値は、本質的により高い解像度のカラーバッファであるスクリーン空間の対応するサンプルに書き込まれ、この後、低下（ｄｏｗｎ）フィルタ処理され、特定のスクリーン空間画素１０４の最終画素値を決定する。各サンプルは本質的に、スーパーサンプリングにおける小画素（ｍｉｎｉ−ｐｉｘｅｌ）状に処理されるため、画素シェーダは、対応するサンプル位置に補間されるパラメータ値を各フラグメントの入力として使用しても良い。これは、良好な結果を達成する一方、画素シェーダが個々のサンプルに対して一度呼び出されるため、大量のシェーダオーバヘッドを導入する。
【００３４】
伝統的なマルチサンプリングが使用される場合、画素座標における単一のカラーフラグメントは、プリミティブ内に入るサンプルの数に関わりなく、少なくとも１つのサンプルがプリミティブでカバーされるときはいつでも、所定のプリミティブに対して生成され、画素シェーダの同じ出力値はその後、それぞれカバーされたサンプルに提供され、例えば、３つのサンプルがカバーされる場合、１つのフラグメントが処理されることがあり、その出力値がカバーされたサンプルのそれぞれに対して複製されることがある。頂点のパラメータ値は、全てのサンプルのフラグメントに対する入力として、スクリーン空間画素の中心に補間しても良い（しかし、画素中心がプリミティブ縁部の外側となる場合、補間される値は外挿しても良く、または、プリミティブの境界内に補間される値を使用するために図心サンプリングを使用しても良い）。画素シェーダはそれぞれカバーされたプリミティブに対して画素毎に一度呼び出すことが必要なだけであるため、多数のサンプルがカバーされる状況では、マルチサンプリングはシェーダオーバヘッドを大きく減少することができる。
【００３５】
その２つのハイブリッド（マルチサンプリング／スーパーサンプリングハイブリッド）のいくつかを使用して、画素内で繰り返す設定可能な画素シェーダを提供することができ、ここでは、画素シェーダはスクリーン画素に対して複数回呼び出され（例えば、多数のカラーフラグメントは画素シェーダで処理される）、この後、各カラーフラグメント出力が更に１つより多くのサンプルに適用される。例えば、４つが「シェーディングされた（ｓｈａｄｅｄ）」カラーサンプルで、４つが「格納された」カラーサンプルである、８つのカラーサンプルを抽出することができる。画素シェーダは、使用する４つのシェーディングされたカラーサンプルのそれぞれに対して一度呼び出すことができ、この結果、シェーディングされたカラーサンプルのそれぞれに対して独特のシェーディングされたカラー値となる。この後、各シェーディングされたカラーフラグメントの出力を、シェーディングされたカラーサンプル及び１つまたは複数の「格納された」カラーサンプルに適用することができる。
【００３６】
これらの技術に関わらず、この従来の実施例では、縁部画素２０８に対して、少なくとも１つのフラグメントが、プリミティブ２０６ａ及びプリミティブ２０６ｂの双方の各画素で生成される。これは、縁部画素位置２０８に対するフラグメント２０６ａが、三角形１０２ａの頂点値から補間されたパラメータ値で処理され、一方、これらの同じスクリーン空間画素位置におけるフラグメント２０６ｂが、三角形１０２ｂの頂点値から補間されたパラメータ値を取ることを意味する。フラグメント２０６ａ及び２０６ｂのそれぞれは、画素シェーダに対する別個の呼び出しで処理され、これは、対応して、フラグメントの数の増加により、図１Ａ〜１Ｂのエイリアシングされた実施例と比較して計算負荷が増加することがある。しかし、サンプル抽出されたパラメータに対するエイリアシングアーチファクトは、減少し、最終的な画像の質は改善することができ、これは、縁部画素２０８のそれぞれの最終ディスプレイ画素値が、例えばサンプルカバレッジに基づいて重み付けされ、異なるプリミティブからのカラー値の組み合わせを採用することができるからである。この実施例では、説明のために隣接する前面の三角形として２つの三角形を簡単に示してあるが、しかし、各サンプルの深度値も、個々のサンプル位置で前面に存在する画素をカバーする三角形を、サブピクセルの精度でより正確に決定するために使用することができ、したがって、サンプルのカバレッジだけから決定することができる場合よりも、より正確な重みを決定する。
【００３７】
処理されたフラグメント値は、この後、これを生成したプリミティブ内に入るサンプル位置に適用され、プリミティブの外側となるサンプルに対しては廃棄される。例として、三角形２０６ａでカバーされる３つのサンプル及び三角形２０６ｂでカバーされる１つのサンプル（図２Ｂの説明における三角形１０２ｂの上−左角部にマッピングされたフラグメント等）を有する縁部画素２０８の所定の１つに対して、対応するディスプレイ画素におけるカラーの最終値は、対応するフラグメント２０６ａの計算値に向けて７５％（例えば、プリミティブ１０２ａに対してサンプルのカバレッジ３／４）、対応するフラグメント２０６ｂの計算値に向けて２５％（例えば、プリミティブ１０２ｂに対してサンプルのカバレッジ１／４）の重み付けでブレンドすることができる。これは、最終画像のプリミティブの縁部のエイリアシングアーチファクトを減少させることができ、サンプリングされたプリミティブが大きく異なるカラーまたは深度パラメータを有するときに、最も目立つことがある。例えば、２つのプリミティブが異なるオブジェクトに属し、一方のプリミティブが前面にあり、一方、他方のプリミティブが離隔した背景にある場合、異なるプリミティブからのパラメータは大きく異なり、エイリアシングアーチファクトはより目立つことになる。画素内の複数の異なる位置からサンプルを取ることによるアンチエイリアス処理は、画素が、画素の異なる領域にマッピングされたプリミティブの値を取ることを可能とすることにより、移行部を滑らかにすることができる。
【００３８】
図２Ａ〜２Ｂに示す実施例では、サンプル位置の数は説明のために４つとして記載してあるが、他のサンプル数としても良い。一般的に言うと、サンプル数が大きくなるとアンチエイリアス処理の質を向上することができるが、しかし、計算に必要な費用が増大する。図２Ａ〜２Ｂの従来の実施例では、サンプルのそれぞれが同じタイプであり、少なくともカラー及び深度に使用され、ラスター化に画定される画素１０４は、ディスプレイを走査する表示バッファ内の最終画素値と１対１に対応する。
【００３９】
図３Ａ〜３Ｃに移ると、本開示の実施態様が記載されている。図示の実施態様では、深度サンプルよりも少ないカラーサンプルが画素１０４毎に本開示の態様にしたがって取られ、カラーバッファよりも高い解像度の深度バッファとなる。本開示の特定の態様にしたがい、これは、フル表示バッファの解像度でのカラーバッファを必要とすることなく、表示バッファを、深度バッファの解像度で再構築することを可能とする。これは、任意の表示解像度に対するより効果的なレンダリングのための時間的及び空間的アンチエイリアス処理を含む多くの利点を提供することができる。なお、カラーサンプルは、例えば、メモリバンド幅、シェーダオーバヘッド等、一般的に、深度サンプルよりも大きな計算要求を伴うことに注意を要する。本開示の特定の実施態様は、この事実を利用し、カラーサンプルよりも高いスクリーンの空間精度を有する深度サンプルからの情報を使用して効果的に画像を描画することができる。
【００４０】
図３Ａは、図２Ａ〜２Ｂ及び図１Ａ〜１Ｂの先の実施例と同様に、同じスクリーン空間画素１０４にマッピングした同じプリミティブ１０２ａ，１０２ｂを示す。図２Ａと同様に、各画素１０４は、画素全体における複数の異なる位置でサンプリングされている。しかし、図２Ａの実施例とは対照的に、画素はそれぞれ、深度サンプルよりもより少ない数のカラーサンプルを有する。換言すると、各画素１０４のカラーサンプル数は深度またはｚサンプル数よりも少ない。図３Ａ〜３Ｃに記載の実施例は、カラー及び深度の方法に使用される２つのカラーサンプルと、深度のみに使用される２つのサンプルとを有するが、しかし、他のサンプリングパターンを使用しても良い。本開示のより一般的な実施態様は、１つまたは複数のカラーサンプルと複数の深度サンプルとを画素毎にサンプリングする画素のセットを有する任意のサンプリングスキームを使用しても良い。
【００４１】
この実施例では、各画素に複数のカラーサンプルがあるが、本開示の実施態様は、単一のカラーサンプルのみを取る状況にも適用可能であることに注意を要する。更に、この実施例では、サンプリングは図示の画素のそれぞれに対して均等に実行され、各画素はそれぞれのタイプの同数のサンプルを同じ位置で有するが、しかし、特定の実施態様は、更に、異なる画素に対して非均等なサンプリングを使用することもできる。例えば、異なる画素に対して異なるサンプル位置及び／または異なるサンプル数等、異なる画素に異なるサンプリングパターンを使用することができる。更に、図３Ａ〜３Ｃの実施例の各カラーサンプルは深度にも使用される一方、カラーにのみ使用するいくつかのサンプル有することができる。より一般的には、本開示の態様は、全画素列が１セットの画素を備え、このセットの各画素が１つまたは複数のカラーサンプルと複数の深度サンプルとを有し、セット内の各画素に対する深度サンプルの数はカラーサンプルの数よりも多い、任意の体系に対して適用することができる。
【００４２】
図３Ｂに移ると、各画素内の１つまたは複数のカラーサンプル及び各画素内の複数の深度サンプルを有するサンプリング技術を使用して、それぞれプリミティブ１０２ａ及び１０２ｂのサンプリングからフラグメント３０６ａ及び３０６ｂを生成することができる。すなわち、図３Ｂの図内のフラグメント３０６ａは、プリミティブ１０２ａに対して少なくとも１のフラグメントが生成されるこれらのスクリーン画素の境界であり、フラグメント３０６ｂは、プリミティブ１０２ｂに対して少なくとも１つのフラグメントが生成されるこれらのスクリーン画素の境界である。複数の異なる位置で各スクリーン空間画素１０４内に複数のサンプルを取ることは、この実施例では、隣接するプリミティブ１０２ａ，１０２ｂの双方でカバーされるサンプルを有する縁部画素３０８ａ，３０８ｂのセットを生じる。図３Ｂの図示の実施例では、所定のプリミティブで少なくとも１つの画素のサンプルがカバーされたときに、所定のプリミティブから所定の画素で更に処理するために、少なくとも１つのフラグメントが生成される。図３Ｂの図示の実施例では、縁部画素３０８ａにおいて、プリミティブ１０２ａ及び１０２ｂの双方でフラグメントが生成され、これは、これらの画素のそれぞれに対し、プリミティブがスクリーン空間に投影されたときに、プリミティブにより少なくとも１つのサンプルがカバーされるためである。
【００４３】
図３Ｂの実施例に対するサンプリングパターンは従来のものではないが、フラグメントが生成され、画素シェーダで処理される態様は従来のものであることに注意を要する。すなわち、図３Ｂの実施例では、フラグメントが生成され、サンプルのタイプに関わらず、少なくとも１つのサンプルがプリミティブでカバーされたときにいつでも、それに応じて画素が呼び出される。しかし、図示の実施例における縁部画素３０８ａ，３０８ｂのそれぞれに対して、少なくとも１つの深度サンプルが、プリミティブ１０２ａ及び１０２ｂのそれぞれでカバーされるが、しかし、同じ図示された縁部画素に対して、カラーサンプルが、双方ではなく、一方または他方のプリミティブ内に全体的に包含されることに注意することが重要である。特に、図３Ｂの図示の実施例では、縁部画素３０８ａに対して、カラーサンプルがプリミティブ１０２ｂではなく、プリミティブ１０２ａでカバーされ、一方、縁部画素３０８ｂに対しては、カラーサンプルが、プリミティブ１０２ａではなく、プリミティブ１０２ｂでカバーされる。
【００４４】
画素シェーダは、通常呼び出され、フラグメントに対する出力が、そのサンプルタイプにしたがってフラグメントで生成されたプリミティブでカバーされるサンプルに対して適用される。これは、フラグメントが画素で処理されるが、深度サンプルだけがカバーされる図３Ｂに記載のこれらの縁部画素に対して、カラー値ではなく、画素シェーダで計算されたｚ深度またはステンシル値が、カバーされた深度サンプルに適用することができることを意味する。ｚ深度値を画素シェーダで計算することが可能である一方、これは比較的まれであり、多くの状況では発生せず、これは、画素シェーダの主たる目的が、通常は、例えばカラー値演算、照明値演算等のフラグメントのカラー値に影響するシェーディング計算を実行することだからである。したがって、これらの状況における従来のラスター化及び画素シェーダ呼び出し技術の使用は、単に、廃棄される計算結果となり、ＧＰＵによる非効率な画素シェーダの使用となり、これはレンダリングパイプラインの計算効率を低下させる。
【００４５】
本開示の実施態様は、これを認識し、フラグメントに対して画素シェーダを呼び出す前に、カバーされたサンプルの性質を考慮することにより、レンダリングパイプラインの効率を改善することができる。本開示の実施態様の説明は、図３Ｃに示してある。
【００４６】
図示の実施例では、サンプルカバレッジは通常、カラーフラグメント３０６ａ，３０６ｂが、図３Ｂに於けるようにスクリーン画素と同じセットに対し、プリミティブ１０２ａ，１０２ｂから生成されることを示す。しかし、本開示の態様にしたがい、図３Ｃにグレーで表示したボックスが、少なくとも１つのサンプルがプリミティブ内に入っても、これらのサンプルがカラーサンプルでない（すなわち、深度サンプルのみがカバーされている）ために、基となるプリミティブに対して画素シェーダの呼び出しを行わないフラグメント／画素を示す。この実施例では、画素シェーダは、プリミティブ１０２ｂではなくプリミティブ１０２ａの各縁部画素３０８ａに対して少なくとも一度呼び出される。同様に、画素シェーダは、プリミティブ１０２ａではなくプリミティブ１０２ｂの各縁部画素３０８ｂに対して少なくとも一度呼び出される。これは、本開示の特定の実施態様において、カラーサンプルカバレッジだけが、ラスター化及び画素処理中に画素シェーダに対して呼び出しを指示できるためである。
【００４７】
残りのフラグメント（すなわち、図３Ｃに白／グレー表示されていないフラグメント）について、画素シェーダは通常と同様にまだ呼び出すことができる。これらのフラグメントのそれぞれに対して、これは、フラグメントの補間されたパラメータ値上の画素シェーディング計算を包含することができ、これは、画素カバレッジの構成及び、場合によっては潜在的性質にしたがって、画素中心、サンプル位置または画素の他の位置に対して生成されたプリミティブの頂点パラメータ値から補間することができる。画素中心がプリミティブの外側（少なくとも１つのサンプルがプリミティブ内に入っても）となる場合、補間された値は実際に外挿とすることができ、または、図心サンプリングを使用して、値がプリミティブ内の位置に補間されることを確保しても良い。代替的に、いくつかの他の補間の形態を使用しても良い。
【００４８】
深度サンプルだけが、それを生成したプリミティブ内にあるグレー表示したフラグメントについて、深度値をラスター化ステージの際に適用しても良いが、画素シェーダをこれらのフラグメントに対してバイパスしても良い。深度値は、プリミティブの頂点から補間した値としても良い。それぞれのプリミティブからのこれらの深度値は、深度テスト（及び、更にステンシルまたは他のテスト）に使用しても良く、これは、例えば早期深度テスト（例えば、ＥａｒｌｙＺ）または階層的な深度テスト（例えば、Ｈｉ−Ｚ）でも良く、深度値は深度バッファに書き込むか、または、深度テストにしたがって廃棄しても良い。カラー及び深度サンプルが、それを生成したプリミティブ内にあるフラグメントについて、ラスター化ステージの際の早期深度テストは、深度−ステンシルテストに失敗したサンプルを除去し、しばしば、深度サンプルだけを包含する追加フラグメントを作成しても良く、この場合、画素シェーダの呼び出しを避けても良い。
【００４９】
本開示の実施態様は、例えば早期深度テストが構成される状況で、レンダリング効率を向上させることに注意を要する。一般的に言うと、早期深度テストが構成される場合、各深度サンプルの深度値は、ラスター化の際にチェックされ、この深度値は深度バッファに書き込まれるかまたは廃棄される。このケースの場合、その深度サンプルの全ての有益な作業が提供され、任意の深度のみのフラグメントは、これらのフラグメントが画素シェーダ呼び出しのためにパックされる前に、廃棄することができる。
【００５０】
しかし、いくつかの状況では、「Ｒｅ−Ｚ」または「Ｌａｔｅ−Ｚ」深度−ステンシルが構成される。ポスト画素シェーディング深度−ステンシルテスト及び書き込みは、特定の状況で、深度、ステンシルまたはサンプルカバレッジマスク値を変更することにより、そのテストの結果を変更することのできる画素シェーダ出力をサポートするために使用される。これらの場合、画素シェーダが出力深度、ステンシルまたはサンプルカバレッジマスク値の出力を作成するために、画素シェーダは、深度のみのフラグメントに対しても呼び出される。
【００５１】
画素シェーダから出力されるシェーディング値（ｓｈａｄｅｄ  ｖａｌｕｅ）は、その後、画素処理ステージで各サンプルに適用しても良い。サンプル値はこの後、システム及びレンダリングパイプラインの構成にしたがって、異なる方法で使用しても良い。いくつかの実施態様では、多数のサンプルを、空間的及び／または時間的アンチエイリアス処理に使用しても良い。他の実施態様では、深度サンプル値はフル解像度深度バッファに格納しても良く、カラーサンプル値を、例えば、サンプルの数に対応する解像度を有する部分解像度カラーバッファに格納しても良く、最終表示画像は、その後、最近のステージのフレームバッファ／表示バッファ演算中にカラー値派生の部分解像度カラーバッファを使用して、フルｚ解像度の表示バッファについて決定される。更に他の実施態様では、これらのいくつかの組み合わせを使用しても良い。
【００５２】
画素シェーダ内のｚ深度、サンプルカバレッジマスクまたはステンシル値の変更を回避することが望ましいことがあるため、深度サンプルだけがプリミティブでカバーされた画素におけるこれらのカバーされたプリミティブに対して、画素シェーダ及びその関連するシェーディング計算に対する計算的に高価な呼び出しを回避することができる。フレーム内のプリミティブ縁部に入る多くの画素が存在する場合があり、カラーサンプルが１つの可視プリミティブにのみ入るにも関わらず、これらの縁部画素の多くは異なる可視プリミティブに入る異なるサンプル位置を有するため、画素シェーダを呼び出す前に、サンプルのタイプを考慮することにより、レンダリングパイプラインにおける多くの計算を回避することができる。本開示のいくつかの実施態様では、全体の効果は、効率において１０〜２０％改善することができる。
【００５３】
画素が深度サンプルのみを有して、プリミティブでカバーされているカラーサンプルを有していない場合でも、画素シェーダを呼び出すべきいくつかの例が存在することに注意を要する。例えば、いくつかの例では、画素シェーダは、フラグメントに対して「ｐｉｘｅｌ  ｋｉｌｌ」（または、ｆｒａｇｍｅｎｔ  ｋｉｌｌ）を実行するように構成しても良い（例えば、出力アルファブレンドファクタテストに基づいて）。他の例では、画素シェーダは、フラグメントについてＺまたはステンシル値をエキスポートするように構成しても良く、これは、画素シェーダがこのＺ／ステンシル値をカバーされた深度サンプルに書き込むために呼び出すことが必要なことがあることを意味する。更に他の例では、画素シェーダは、サンプルマスクを変更するように構成しても良い。これの３つの状態のいずれにおいても、画素シェーダをやはり呼び出すべきである。しかし、これらの条件が存在しない場合は、この後、画素シェーダの呼び出し及び関連する計算は、本質的に無用である。
【００５４】
図４は、本開示の態様にしたがうグラフィックを処理する実施例の方法４００を示す。この方法４００は、グラフィックレンダリングパイプライン内で、図３Ｃに関する上記に示したものと同様な状況で、画素シェーダの呼び出しを回避するために実行しても良い。
【００５５】
４２１で示すように、この方法は、各スクリーン空間画素に対して複数のサンプルを使用するプリミティブのサンプリングを含んでも良い。複数のサンプルは、１つまたは複数のカラーサンプルと複数の深度サンプルとを有しても良い。特定の実施態様では、１つのカラーサンプルと複数の深度サンプルが各画素について取られる。他の実施態様では、方法４００が適用される各画素について、複数のサンプルが、複数のカラーサンプルと複数の深度サンプルとの双方を有し、この場合、画素のそれぞれのカラーサンプル数は、深度サンプル数よりも少なくすべきである。いくつかの実施態様では、スクリーンは、非均等にサンプリングしても良く、異なるスクリーン空間画素は、異なるサンプル数及び／または異なるサンプル位置を有しても良い。したがって、ラスター化するスクリーン空間内に画定される少なくともいくつかの画素のセットで、各スクリーン空間画素が複数のサンプルを有する限り、４２１において、あらゆるスクリーン画素が複数のサンプルを有することは、厳格な必要条件ではない。特定の実施態様では、４２１で決定されたサンプルカバレッジは、各画定されたスクリーン空間画素におけるスクリーン空間に投影されたサンプルプリミティブに対して、グラフィックレンダリングパイプラインのラスター化ステージでスキャンコンバータにより実行される。
【００５６】
サンプルの抽出は、４２３に示すように、そのサンプルがプリミティブでカバーされた画素のセットとしても良い。図４の説明では、それぞれ所与のプリミティブに対してカバーされた画素４２３は、プリミティブでカバーされた少なくとも１つのサンプルを有するこれらの画素のみをいう。プリミティブの縁部が画素境界内に交差する場合、サンプルのいくつかに対してのみ、例えば図１〜３に関する上述の説明のように、所与のプリミティブでカバーすることができる。更に、いずれのサンプルも三角形でカバーされることなく、三角形の境界を画素の境界と交差することが可能である。しかし、これは、いずれにしろ、通常画素シェーダの呼び出しを招くことはないため、この状況は説明のために無視される。
【００５７】
４２６に示すように、早期深度テストは、所与のプリミティブでカバーされた各深度サンプルに対して実行しても良い。これは、例えば、所与のプリミティブの頂点からそれぞれのサンプルの補間された深度を、これらのサンプル座標に対する現在の深度値と比較することを包含しても良い。深度テストに失敗した深度サンプルのそれぞれは、４３１に示すように廃棄され、一方、合格した深度サンプル、例えば存続している深度サンプルは、４３２に示すように、深度バッファに深度値を書き込むことによりカバーされた画素の深度サンプルに適用しても良い。
【００５８】
深度テストに合格したプリミティブでカバーされるサンプルが存在する場合は、方法４００は、４２５に示すように、画素シェーダを呼び出す前に、存続するカバーされたサンプルの性質を更に決定しても良い。従来、早期深度テストが用いられる場合でも、画素シェーダは、少なくとも１つの画素のサンプルが深度テストに合格するといつでも、呼び出される。しかし、図４に示す実施態様の説明では、システムは、深度テストを乗り切ったサンプルのいずれかがカラーサンプルかどうかチェックしても良い。プリミティブでカバーされたカラーサンプルが残っていないことが決定される場合は、画素のフラグメントは、４３３に示すように、破棄されても良く、画素シェーダは呼び出されない。
【００５９】
結局、早期テストで全ての存続するサンプルが決定されると、所与のプリミティブでカバーされた少なくとも１つの存続するカラーサンプルが存在し、この後、４３４に示すように、生成された画素フラグメントに対して画素シェーダを呼び出すことができる。画素シェーディング計算は、画素シェーダの呼び出しにしたがって実行することができ、画素シェーダの出力は、４３５に示すように、例えばカラーバッファ内のカラーサンプル位置で１つまたは複数の描画ターゲットに適用することができる。この処理は、上述の態様でカバーされた少なくとも１つのサンプルを有する、それぞれのカバーされた画素に対して実行することができる。特定の状況では、これは、画素の深度サンプルが所与のプリミティブでカバーされかつ全ての深度−ステンシルテストを合格した場合でも、画素シェーダの呼び出し及び関連する画素シェーダ計算は、所与のプリミティブに対する画素に対して回避できることを意味する。多数の三角形が画素境界に重なる場面では、これは、性能及びレンダリング効率の大きな促進を提供することができる。
【００６０】
ステンシルテスト及びステンシル書き込みは、説明のために上記から省略してあるが、しかし、早期テストについて、深度サンプルでステンシル値を比較し、ステンシル値について、それに応じて書き込まれるサンプルに適用することが可能であることにも、注意を要する。
【００６１】
サンプルカバレッジの性質にしたがって画素シェーダを呼び出すかどうかの決定のプロセスは、所与のプリミティブにおけるそれぞれのカバーされた画素に対して実行しても良く、同様に、場面内の各プリミティブでカバーされた画素に対して実行しても良い。カバーされた画素の異なるものに対する演算は、処理ユニット、例えば、ＧＰＵで並列に実行しても良いことに注意を要する。
【００６２】
本開示の態様によると、所与のカバーされた画素のために画素シェードを呼び出すか、呼び出さないかの考慮は、早期深度テストを合格したカバーされたカラーサンプルがいくらか存在するか否かのみ以外の他の考察を考慮しても良い。例えば、カバーされたカラーサンプルがない場合（例えば深度サンプルだけがカバーされている）でも、所与のフラグメントでカバーされるサンプルを有する画素に対し、所与のフラグメントに対して画素シェーダを呼び出しても良い、いくつかの状況が存在する。いくつかの実施態様では、画素シェーダを呼び出すか否かの決定は、画素シェーダがカバーされた画素を削除（または、フラグメントを削除）するように構成されているかどうか決定することを包含しても良い。いくつかの実施態様では、画素シェーダを呼び出すか否かの決定は、更に、画素シェーダがカバーされた深度サンプルについて、Ｚまたはステンシル値をエキスポートするように構成されているか否か決定することを包含しても良い。いくつかの実施態様では、画素シェーダを呼び出すか否かの決定は、更に、画素シェーダがサンプルマスクを変更するように構成されているか否か決定することを包含する。これらの実施態様では、早期深度テストは省略しても良く、例えば、深度テストは、それぞれカバーされたサンプルに対する画素シェーダの後に実行しても良い。これらの状況では、画素シェーダは、通常の態様で呼び出しても良い。
【００６３】
いくつかの実施態様では、画素シェーダを呼び出すか否かの決定は、画素シェーダがカバーされた画素を削除する（または、フラグメントを削除）ように構成されているかどうか決定することを包含しても良い。いくつかの実施態様では、画素シェーダを呼び出すか否かの決定は、更に、画素シェーダがカバーされた深度サンプルについて、Ｚまたはステンシル値をエキスポートするように構成されているか否か決定することを包含しても良い。いくつかの実施態様では、画素シェーダを呼び出すか否かの決定は、更に、画素シェーダがサンプルマスクを変更するように構成されているか否か決定することを包含する。これらの実施態様では、早期深度テストは省略しても良く、例えば、深度テストは、それぞれカバーされたサンプルに対する画素シェーダの後に実行しても良い。これらの状況では、画素シェーダは、通常の態様で呼び出しても良い。
【００６４】
図５は、本開示の態様を実施するように構成されたレンダリングパイプラインによる例示的なグラフィック処理方法５００を示す。図５の例示的なレンダリングパイプラインは、本開示の態様にしたがって画素シェーダの呼び出しを最小にするための図４の方法４００を包含しても良い。
【００６５】
レンダリングパイプライン５００は、潜在的には二次元ジオメトリであるが、好ましくは仮想空間（ここでは、「場面空間」と称することもある）内で三次元ジオメトリを有しても良い場面を示すイメージとして画像を描画するように構成しても良い。レンダリングパイプラインの全体を通じて、データは１つまたは複数のメモリユニットからデータから読み出し及び書き込むことができ、これはグラフィックメモリ５２０として、図５に全体的に示してある。グラフィックメモリは、ビデオメモリ及び／またはハードウェアステートメモリを有しても良く、これは、レンダリングパイプラインに使用される種々のバッファ及び／またはグラフィック資源を包含する。グラフィックメモリ５２０の１つまたは複数の個々のメモリユニットは、レンダリングの特定のステージにおけるデータの性質にしたがって、１つまたは複数のビデオランダムアクセスメモリユニット（複数を含む）、１つまたは複数のキャッシュ、１つまたは複数のプロセッサレジスタ等として実現しても良い。したがって、グラフィックメモリ５２０は、グラフィックレンダリングパイプライン内で使用される任意のプロセッサアクセス可能メモリと称すると理解される。専門化したＧＰＵ等の処理ユニットは、パイプライン中の種々の演算を実行するように構成され、グラフィックメモリ５２０に読み／書きしても良い。
【００６６】
パイプラインの早期ステージは、場面がラスター化され、画素表示装置に出力するのに適した個別のピクチャエレメントのセットとして、スクリーン空間に変換される前に、場面空間で実行される動作を包含しても良い。パイプラインの全体を通して、グラフィックメモリ５２０に包含される種々の資源は、パイプラインのステージで利用され、ステージに対する入出力は、イメージの最終値が決定される前に、グラフィックメモリに包含されるバッファに一時的に格納しても良い。
【００６７】
レンダリングパイプラインは入力データ５２２で作動することができ、これは、場面空間にセットアップされかつこの場面の座標に関して画定されたジオメトリを有する頂点のセットで画定される１つまたは複数の仮想オブジェクトを包含しても良い。このレンダリングパイプライン５００に使用する入力データ５２２は、その頂点が本開示の態様にしたがうレンダリングパイプラインで処理されるプリミティブに対応する、場面ジオメトリのポリゴンメッシュモデルを有しても良く、初期頂点ジオメトリは、ＣＰＵで実行されるアプリケーションステージの際にグラフィックメモリにセットアップしても良い。
【００６８】
パイプラインの早期ステージは、プリミティブ処理５２３のいくつかの形態を包含しても良く、プリミティブを有する頂点インデックスが受け取られ、または、代替的に、ストリップ等の高次構造を有する頂点インデックスが受け取られ、三角形等のプリミティブに変換される。
【００６９】
プリミティブ処理５２３で作成される頂点インデックスのグループは、図５の頂点処理ステージ５２４のような広く分類されるものに移動しても良く、これは、場面空間ジオメトリ内のオブジェクトの頂点を処理するために種々の計算を包含してもよい。同じ頂点インデックスは多数のプリミティブに見ることができるため、独特の頂点インデックスを検出することが有益であり、頂点処理ステージ５２４は、所与の独特のインデックスが内部に包含されることのあるプリミティブの数に関わらず、独特のインデックス毎に、頂点に関連する計算が一度発生するのみであることを確保する独特のインデックス検出５２５を包含しても良い。この頂点処理ステージ５２４は、更に、頂点シェーディング計算５２６を包含しても良く、これは、位置値（例えば、Ｘ−Ｙ座標及びＺ深度値）、カラー値、証明値、テクスチャ座標等、場面内の頂点の種々のパラメータ値を操作しても良い。好ましくは、頂点シェーディング計算５２６は、１つまたは複数のプログラム可能な頂点シェーダで実行される。頂点処理ステージは、更に、選択的に、テッセレーション及びジオメトリシェーダ計算５２８等の追加頂点処理計算を含んでも良く、これは、プリミティブを細分割し、新しい頂点及び新しいジオメトリを場面空間内に生成するために使用しても良い。一度、頂点処理５２４と称されるステージが完了すると、このパイプラインのステージで、それぞれ頂点パラメータ値５４６のセットを有する頂点のセットで場面が画定され、これは、グラフィックメモリの頂点バッファに格納しても良い。
【００７０】
パイプライン５００は、この後、場面ジオメトリをスクリーン空間及びレンダリングパイプラインの際に使用する個別のピクチャエレメントすなわち画素のセットへの変換に関連するラスター化処理ステージ５３０に向かうが、しかし、画素という用語は、最終表示バッファ画像における表示画素値に対応する画素を必ずしも意味しないことに注意を要する。仮想空間ジオメトリは、スクリーン空間ジオメトリに変換されても良く、この変換は、本質的にオブジェクト及び頂点をスクリーン空間から、ラスタライザでサンプリングされた複数の個別のスクリーン空間画素から形成される場面の視界窓（または、ビューポート）への投影を計算しても良い演算を介して行われる。図５に示すラスター化処理ステージ５３０は、プリミティブ組み立て演算５３２を有しても良く、これは、場面内の頂点の各セットで画定されるプリミティブをセットアップしても良い。各頂点は、インデックスで画定しても良く、各プリミティブは、これらの頂点インデックスに関して画定しても良く、これは、グラフィックメモリ５２０内のインデックスバッファに格納しても良い。プリミティブは、それぞれポイントプリミティブ、ラインプリミティブ及び他の多角形形状を包含しても良いが３つの頂点で画定される少なくとも三角形を包含する必要がある。プリミティブの組み立てステージ５３２の際、特定のプリミティブを選択的に除外しても良い。例えば、そのインデックスが特定の巻取り順序を示すこれらのプリミティブは後ろ向きになると考慮し、場面から除外しても良い。
【００７１】
プリミティブを組み立てた後、ラスター化処理ステージは、スキャン変換演算５３４を有しても良く、これは、個々の画素でプリミティブをサンプリングし、サンプルがプリミティブでカバーされたときに、更に処理するためにプリミティブからフラグメントを生成しても良い。本開示の実施態様では、少なくともいくつかのスクリーン空間画素に対して、スキャン変換５３４は各画素内に複数のサンプルを取っても良い。これらの画素のそれぞれの中の複数のサンプルは、１つまたは複数のカラーサンプルと複数の深度サンプルとを有しても良い。特定の実施態様では、異なる画素は異なるサンプリングをしても良い。例えば、いくつかのエッジ画素は、中心画素よりも少ないサンプリング密度を有し、ヘッドマウントディスプレイ（ＨＭＤ）に対するレンダリングの特定の態様を最適にしても良い。本開示のいくつかの実施態様では、スキャン変換は更に画素シェーダ前深度テスト及びいくつかのレンダリング構成における深度更新を包含しても良い。これらの場合、深度サンプルがテストされ、その値は深度バッファ（及び、可能なステンシルバッファ）内の深度値に対してチェックしても良く、深度バッファ内の深度サンプル値５４９は、それらがテストに合格したときに更新しても良い（及び、可能な場合には、ステンシル値は、ステンシルテストに基づいてステンシルバッファ内で更新しても良い）。
【００７２】
スキャン変換５３４中にプリミティブから生成されるフラグメント（または、画素）は、それを作ったプリミティブの頂点の頂点パラメータ値５４６から画素の位置に補間しても良いパラメータ値を有しても良い。ラスター化ステージ５３０は、パラメータ補間演算ステージ５３６を有し、これらの補間されたフラグメントパラメータ値を計算５４８しても良く、これはパイプラインの後のステージで更に処理するための入力として使用しても良く、更に、パラメータ補間は、深度サンプルをカバーする頂点深度値プリミティブから、深度値の補間を包含しても良く、これは、構成にしたがって、画素シェーダに対する入力フラグメント値として使用しても良くまたは使用しなくても良い。
【００７３】
パイプライン５００は更に、図５に５４０で全体を示す画素処理演算を包含し、補間されたパラメータ値５４８を更に演算し、同時に、表示するための最終画素値にフラグメント及び／または補間された値をどのように寄与させるかについて決定する他の演算を実行しても良い。これらの画素処理タスクのいくつかは、フラグメントの補間されたパラメータ値５４８を更に演算するために使用しても良い画素シェーディング計算５４２を包含しても良い。画素シェーディング計算は、プログラム可能画素シェーダで実行しても良く、画素シェーダ呼び出し５３８は、ラスター化処理ステージ５３０の際のプリミティブのサンプリングに基づいて開始しても良い。本開示の実施態様では、画素シェーダ呼び出し５３８は図４の方法４００にしたがって決定されても良く、画素シェーダは、カバーされたサンプルがカラーサンプルでないときは、所定のカバーされた画素に対して呼び出されない。
【００７４】
画素シェーディング計算５４２は、グラフィックメモリ５２０の１つまたは複数のバッファに値を出力しても良く、描画ターゲットと称することもある。いくつかの実施態様では、多数の描画ターゲット（ＭＲＴ）を使用しても良く、その場合、画素シェーダは、画素毎またはサンプルごとの出力のそれぞれに対して複数の独立した値を出力することが可能であっても良い。画素処理５４０は、レンダリング出力演算５４４を包含しても良く、これは、ラスター演算（ＲＯＰ）として知られることがあるものを包含しても良い。レンダリング出力演算５４４は、フラグメント値が画素シェーダで処理されたかどうか確認するために、深度テスト、ステンシルテスト及び／または他の演算を包含しても良く、画素シェーダで処理されない補間された深度値がある場合は、カラーバッファ及び／または深度バッファに書き込むべきであり、レンダリング出力演算のいくつかは、画素シェーディング計算５４２の後または画素シェーディング計算５４２の前に最適化として実行しても良い。サンプル毎の最終的なカラー値及び深度値は、レンダリング出力演算５４４にしたがって決定しても良く、これは、１つまたは複数のバックバッファとして表示バッファ（「フレームバッファ」として知られていることもある）に格納しても良い。
【００７５】
特定の態様によると、方法５００は更に表示処理５５１を包含しても良く、これは、上述のステージにしたがってカラー／深度バッファ内で計算された全場面分の描画呼び出しを処理し、ディスプレイ上に表示するための完成したグラフィックフレーム５５４を構成することのできる表示画素値５５２の最終配列を決定しても良い。表示処理５５１は、前述のステージを介する多くの描画コマンドの流れの後に生じる最終ステップとしても良く、フルスクリーンパス（全画面を覆う小さな画面に整合した多角形）のレンダリング、または、カラー／深度サンプルバッファデータ５４９に直接作用することのできる計算ジョブを包含しても良い。特定の実施態様では、より高い解像度のカラーバッファ出力は、表示処理５５１の際の低解像度の深度バッファの使用から解決することができる。特定の態様により、このステージの際の空間的及び／または時間的アンチエイリアス処理を適用することも可能である。完成したフレーム５５４は、表示バッファに格納し、リアルタイムでディスプレイ装置に表示するために選択的に表示バッファをスキャンアウトしても良い。
【００７６】
パイプラインのいずれのステージも、ハードウェアモジュール、ソフトウェアモジュール（例えば、１つまたは複数の個々のまたは一体化したシェーダプログラム）またはこれらの組合わせにより、実装しても良いことに注意を要する。
【００７７】
図６に移動すると、本開示の態様によるグラフィックを描画するように構成されたコンピューティングシステム６００の例示的な実施例が記載されている。システム６００は、上記の態様で、アプリケーション６６５のためにグラフィックを描画するように構成しても良い。本開示の態様によると、システム６００は、組込みシステム、携帯電話、パーソナルコンピュータ、タブレットコンピュータ、携帯ゲーム装置、ワークステーション、ゲーム機等であっても良い。
【００７８】
システムは、一般的に、例えば、図４及び／または５の方法に共通の特徴を有する方法を実行することにより、本開示で実施された態様を実行するように構成されたプロセッサ及びメモリを有しても良い。図示の実施例では、プロセッサは中央処理ユニット（ＣＰＵ）６７０、グラフィック処理ユニット（ＧＰＵ）６７１、及び、メモリ６７２を有する。メモリ６７２は、選択的に、ＣＰＵ及びＧＰＵの双方にアクセス可能な主メモリユニットを有しても良く、主メモリの一部は、選択的にグラフィックメモリ６５０の一部を有しても良い。ＣＰＵ６７０およびＧＰＵ６７１は、それぞれ１つまたは複数プロセッサコア、例えば単一のコア、２つのコア、４つのコア、８つのコアまたはそれ以上を有しても良い。ＣＰＵ６７０とＧＰＵ６７１は、データバス６７６を使用して１つまたは複数ユニットにアクセスするように構成しても良く、いくつかの実施態様では、システム６００が２つまたはそれ以上の異なるバスを有することが有益となることがある。
【００７９】
メモリ６７２は、例えばＲＡＭ、ＤＲＡＭ等のアドレス指定可能なメモリを提供する集積回路の形態の１つまたは複数のメモリユニットを有しても良い。グラフィックメモリ６５０は、グラフィックレンダリングパイプライン用のグラフィック資源、グラフィックバッファ及び他のグラフィックデータを一時的に格納しても良い。グラフィックバッファは、例えば頂点パラメータ値を格納するための１つまたは複数の頂点バッファ、及び、頂点インデックスを格納するための１つまたは複数のインデックスバッファを有しても良い。グラフィックバッファは、更に、１つまたは複数の描画ターゲット６９３を有しても良く、これは、本開示の態様にしたがって計算された画素／サンプル値を保持するカラーバッファ６９４と深度バッファ６９６の双方を有しても良い。特定の実施態様では、カラーバッファ６９４及び／または深度バッファ６９６は、表示バッファ６９７に格納する表示画素カラー値の最終配列を決定するのに使用しても良く、これは、ディスプレイ上に表示することを意図する最終的に描画した画像を作り上げることができる。特定の実施態様では、表示バッファは、フロントバッファ及び１つまたは複数バックバッファを有しても良く、ＧＰＵ６７１は、ディスプレイ６８６上に表示するために、表示バッファ６９７のフロントバッファからグラフィックフレームをスキャンアウトするように構成されても良い。
【００８０】
ＣＰＵは、ＣＰＵコードを実行するように構成することができ、これは、描画グラフィック（ビデオゲーム等）、及び、アプリケーション６６５の状態に基づいてＧＰＵ６７１で実装されるプログラムに対する描画コマンドまたは描画呼び出しを発行するための対応するグラフィックＡＰＩ６６７を有するアプリケーション６６５を有しても良い。ＣＰＵコードは、更に、物理的シミュレーション及び他の機能を実装しても良い。
【００８１】
ＧＰＵは、本開示の例示的実施態様に関して上述したように動作するように構成しても良い。グラフィックのレンダリングをサポートするため、ＧＰＵはシェーダ６７３を実行しても良く、これには頂点シェーダ及び画素シェーダを包含しても良い。ＧＰＵは、例えばジオメトリシェーダ、テッセレーションシェーダ、演算シェーダ等の他のシェーダプログラムを実行しても良い。ＧＰＵは、更に、専門化したハードウェアモジュール６９８を有しても良く、これは、１つまたは複数のテクスチャマッピングユニット、及び／または、図５に示すパイプラインと同様なグラフィックパイプラインの１つまたは複数のステージで演算を実行するように構成された他のハードウェアモジュールを有しても良く、これは、固定された機能演算であっても良い。シェーダ６７３及びハードウェアモジュール６９８は、最終画素値がディスプレイに出力される前に、パイプラインの種々のステージで、メモリ６５０及びバッファ６９３内のデータとインターフェースをとっても良い。ここに記載したグラフィック処理技術の態様を実行するためにシステム６００のプロセッサで実行するように構成されたシェーダ６７３及び／または他のプログラムは、非一時的コンピュータ可読媒体に、命令として格納しても良い。ＧＰＵはラスタライザモジュール６９５を有しても良く、これは、選択的にＧＰＵ、シェーダ６７３またはこれらの組合わせたハードウェアモジュール６９８に組み込んでも良い。ラスター化モジュール６９５は、スクリーン空間画素のプリミティブの複数のサンプルを取得し、本開示の態様にしたがい、サンプルの性質にしたがって１つまたは複数の画素シェーダを呼び出すように構成しても良い。
【００８２】
システム６００は、周知のサポート機能６７７を有しても良く、これは、例えば、バス６７６を介してシステムの他の構成要素と通信しても良い。このようなサポート機能は、入出力（Ｉ／Ｏ）要素６７９、電源（Ｐ／Ｓ）６８０、クロック（ＣＬＫ）６８１及びキャッシュ６８２を包含しても良いが、これに制限するものではない。装置６００は、選択的に、ディスクドライブ、ＣＤ−ＲＯＭドライブ、フラッシュメモリ、テープドライブ、ブルーレイドライブまたはプログラム及び／またはデータを格納する同様のものなどの大容量記憶装置６８４を有しても良い。デバイス６００は、更に、描画したグラフィック６８７をユーザに提示するディスプレイユニット６８６、及び、装置６００とユーザとの間の対話を容易とするユーザインターフェースユニット６８８を有しても良い。ディスプレイユニット６８６は、フラットパネルディスプレイ、陰極線管（ＣＲＴ）スクリーン、タッチスクリーン、ヘッドマウントディスプレイ（ＨＭＤ）、または、テキスト、数字、グラフィックシンボル若しくは画像を表示可能な他のデバイスの形態としても良い。ディスプレイ６８６は、ここに記載の種々の技術で処理されたレンダリング処理されたグラフィック６８７を表示してもよい。ユーザインターフェース６８８は、キーボード、マウス、ジョイスティック，ライトペン、ゲームコントローラ、タッチスクリーン、及び／または、グラフィカルユーザインターフェース（ＧＵＩ）と結合して使用することができる他のデバイスなどの１つまたは複数の周辺装置としても良い。特定の実施態様では、アプリケーション６６０及びグラフィックの基となるコンテンツの状態は、少なくとも一部が、例えば、アプリケーション６６５がビデオゲームを包含するビデオゲームの導入で、ユーザインターフェース６８８を介するユーザの入力によって決定しても良い。
【００８３】
システム６００はネットワークインターフェース６９０を包含し、デバイスがネットワーク上で他のデバイスと通信するのを可能としても良い。ネットワークは、例えばローカルエリアネットワーク（ＬＡＮ）、インターネットのようなワイドエリアネットワーク、Ｂｌｕｅｔｏｏｔｈ（登録商標）ネットワークまたは他のタイプのネットワーク等のパーソナルエリアネットワークであっても良い。図示及び説明した種々の構成要素の各々は、ハードウェア、ソフトウェア、または、ファームウェア、または、これらの２つ以上のいくつかの組み合わせであっても良い。
【００８４】
図７Ａ〜７Ｄは、本開示の特定の実施態様にしたがってサンプリングパターンから計算することのできる対応する表示バッファと共に、サンプリングパターンの例示的な実施例を示す。図７Ａ〜７Ｄは、本開示の特定の実施態様における深度サンプルよりも数の少ないカラーサンプルを有する画素をサンプリングすることが、有益であることの理由の特定の態様を示す。
【００８５】
図７Ａに示すように、スクリーン空間は、例えばラスタライザのための画素境界または画素座標である複数の画素１０４で画定しても良く、これは、それぞれ本開示の特定の態様にしたがって複数のサンプルを有しても良い。複数のサンプルは、各画素１０４に対してとることができ、各サンプルは、本開示の特定の態様にしたがって、レンダリングプロセスの際に決定される関連する値を有しても良い。図７Ａに示すように、各スクリーン空間画素１０４の複数のサンプルは、深度サンプルよりも少ないカラーサンプルを有しても良い。すなわち、深度サンプル数は、各スクリーン空間画素１０４内でカラーサンプル数よりも多くしても良い。レンダリングの際、各サンプルに対してプリミティブのラスター化から計算された値、及び、対応するフラグメントの画素のシェーディングは、ここでは特定の原理にしたがって決定しても良く、図示のカラーサンプルだけを、レンダリングの際にカラー値をシェーディングするために使用しても良く、一方、深度サンプルのいくつかは深度のみに使用しても良い。
【００８６】
図７Ｂは、図７Ａに示すサンプリングプロセスを使用して計算しても良い高解像度の深度バッファ７１１を示す概略図である。図７Ｃは、図７Ａに示す同じサンプリングプロセスを使用して計算しても良いカラーバッファ７１３を示す。図に示すように、本開示の実施態様では、画素処理中にレンダリングされるカラーバッファ７１３は、レンダリングされる深度バッファ７１１よりも低い解像度を有しても良い。図７Ｄは、部分解像度のカラーバッファ７１３から派生したカラー値を使用するフル解像度の深度バッファ７１１から再構築することのできる最終表示バッファ７１５を示す。
【００８７】
大まかにいうと、深度バッファ７１１内の値は、レンダリングプロセス中、フル表示解像度７１５内の各表示画素に対する独特のカラー値をレンダリングすることなく、カラーバッファ７１３のどのカラー値をフル表示バッファ７１５内の画素に適用すべきかをフル空間精度で決定するために、使用することができる。好ましくは、フル表示解像度は、４ｋ解像度（例えば、３８４０ｘ２１６０）用の表示画素密度を有し、レンダリングされた表示画像は、超高精細ディスプレイとして一般に知られているものに適している。しかし、本開示の態様は、表示バッファ内の表示画素の数よりも少ないレンダリングされるカラーサンプルまたはカラー画素値を有する部分解像度カラーバッファを使用することにより、任意の表示バッファ解像度に対するレンダリング効率の改善に適用することができる。制限するものではない実施例として、フル表示解像度は、標準の高精細（例えば、２ｋのオーダーの水平解像度）であっても良く、グラフィックは、フルＨＤ解像度よりも低解像度カラーバッファを用いることにより効率を改善させた標準のＨＤ解像度にレンダリングしても良い。
【００８８】
メモリバンド幅の必要条件及びカラーサンプルに対する計算値に関連する計算オーバーヘッドは、一般に、深度に対するこれらよりも高いことに注意を要する。例えば、現在のレンダリング技術に対して、マルチプルレンダーターゲット（ＭＲＴ）を介して、画素毎の深度データよりも多くの画素毎のカラーデータをより多く出力すること（例えば、１６０ビットの合計カラーデータ対３２ビット深度）は、一般的であり、これは、レンダリングパイプラインの際に、所与のカラーバッファ解像度対比較可能な深度バッファ解像度で、メモリ資源により大きな負担をかける。更に、画素シェーダはカラーサンプルに対して一般的に呼び出されなければならないため、シェーディング計算及び関連するパラメータ値が計算されて、画素の境界内に入る各カラーサンプルに適用しなければならず、画素シェーダオーバヘッドは、図７Ｃに示すように、より少ないカラーサンプル及び対応して低い解像度のカラーバッファを使用し、これらのカラーサンプルを、対応する最終フレーム画像を包含するフル解像度の表示バッファに適用することにより、顕著に低減することができる。深度値が画素の処理中に画素シェーダで変更されないことがしばしばあり、所与のプリミティブに対してスクリーン空間画素の境界内にカラーサンプルが入らなければ、画素シェーダの呼び出しを回避することにより、図７Ａに示すサンプリングスキームを利用して所定の状況で、シェーダのオーバーヘッドを低減することができる。
【００８９】
本開示の特定の態様を説明するため、図８Ａは、図７Ａに示す実施例と同様なスクリーン空間画素全体のサンプリングパターンを使用し、一対のプリミティブ８１７ａ及び８１７ｂのラスター化に使用されるスクリーン空間画素１０４のセットの実施例を示す。図８Ａに示す実施例では、プリミティブ２１７ａは、フル解像度深度バッファが、例えば図７Ａ〜７Ｄに示すように部分解像度カラーバッファだけを使用するフル解像度表示バッファに対してカラー値を正確に再構成するために使用する方法の特定の態様を説明するために、前部三角形２１７ｂで部分的に閉塞された背景三角形である。この簡略化した実施例では、三角形８１７ａ及び８１７ｂは、場面内で他のプリミティブで閉塞されていないと仮定している。
【００９０】
図８Ａに示すように、スクリーン空間画素１０４ａの１つが、深度サンプルカバレッジに基づいてプリミティブ８１７ａ及び８１７ｂの双方でカバーされている。「カバーされた」は、プリミティブの境界がスクリーン空間に投影されたときに、サンプルがプリミティブの境界内に入ることをいう。しかし、１つのカラーサンプルだけがこのスクリーン空間画素１０４ａ（上左角部のカラー及び深度サンプル）で使用され、この実施例では、スクリーン空間画素１０４ａのカラーサンプルが三角形８１７ａだけでカバーされている。このカラーサンプルは他の点では閉塞されていないため、このサンプルの深度に基づいて、このサンプルは、カラーバッファのプリミティブ８１７ａに対して計算されたカラー値を取る。同様に、図示の実施例では、スクリーン空間画素１０４ｂに対して、三角形８１７ｂでカバーされた１つのカラーサンプル（上左角部）が取られる。カラーサンプルは、このサンプルの深度に基づいて、他の点で閉塞されていないため、このサンプルの深度に基づいて、このサンプルは、例えば図７Ｃに示すものと同様なカラーバッファであるカラーバッファ内のプリミティブ８１７ｂに対して計算されたカラー値を取る。同様に、これらの同じカラーサンプルのスクリーン空間座標に対する深度サンプルは、それぞれのプリミティブから計算された深度値を取る。
【００９１】
図８Ａに示すように、ラスタライザ画素１０４ａに対して、カラーサンプルよりも多くの深度サンプルが取られる。図示の実施例では、背景の三角形８１７ａは、ラスタライザ画素１０４ａの上右角部の深度サンプルにおける三角形８１７ｂで閉塞されている。これは、このサンプルが、三角形８１７ｂに対して計算された深度バッファの値を取ることを意味し、これは、三角形８１７ａでカバーされた深度サンプルが深度テストに失敗し、廃棄されるためである。この結果、値は、カラーサンプルが計算された上左の深度サンプルに対する値とは、大きく異なる（すなわち、低い深度／スクリーンにより近い）ことがある。更に、この深度サンプルは、三角形８１７ｂでカバーされたカラーサンプルの深度値と同様または同じことがある値を取る。
【００９２】
図８Ｂは、この情報が高解像度表示バッファを効果的に再構成するために使用することのできる方法を詳細に説明する。図８Ｂは、同じサンプルに重ねられるサンプルプリミティブ８１７ａ及び８１７ｂを示すが、今、ディスプレイ上に表示することを意図した、再構成された表示バッファ画素がこれらのサンプルに重なって示されている。この実施例では、表示バッファは、深度サンプルの配列を作り上げる深度バッファのフル解像度と等価の解像度を有する。三角形８１７ｂで閉塞された三角形８１７ａの一部に対応する表示バッファ画素８１９に対して、この表示画素が、閉塞された三角形８１７ａではなく前側の三角形８１７ｂから取られたカラーサンプルからそのカラー値を引き出すことが望ましい。この実施例では、これは、このサンプルが、他のカラーサンプルよりも、スクリーン空間で大きく離れていても（すなわち，Ｘ−Ｙスクリーン座標で垂直／水平方向に更に離隔する）、表示画素８１９が、８２１でカラーサンプルからそのカラー値を引き出すことができることを意味する。実際、それは、スクリーン空間内の完全に異なる位置で、フラグメントまたは４つのフラグメントから計算されることがある。しかし、表示画素の値を派生する好適なカラーサンプル８２１は、深度情報に基づいて決定してもよい。８１９及び三角形８１７ｂ内の深度は、周囲の領域と相違するため、三角形８１７ａからのカラーサンプルがスクリーン空間内でより近く（ｃｌｏｓｅｒ）かつこの実施例における画素に極めて隣接していても、これは、これらの表示画素のそれぞれのカラーは、例えば、この実施例におけるカラーサンプル８２１である異なる深度を有する領域内から派生すべきであることを示す。
【００９３】
本開示の特定の態様を更に説明するため、図８Ｃ〜８Ｄは、フル解像度表示バッファ値及び部分解像度カラーバッファ値を図８Ａに示すプリミティブからを計算するための簡略化した処理の流れの概略図を示す。図８Ｃは、プリミティブ８１７ａの説明的なプロセスを示し、一方、図８Ｂは、プリミティブ８１７ｂの説明的なプロセスを示す。図８Ｃ〜８Ｄのプロセスの流れの実施例は、図５のレンダリングパイプラインによる等のグラフィックパイプラインを介してデータがどのように流れるか簡略的に視覚化することができる。
【００９４】
図８Ｃに示すように、プリミティブ８１７ａは、スクリーン空間画素１０４ａ（または、ラスター化画素）の複数のサンプルでサンプリングされる。この単一の画素は、最終表示画像の単一の画素に必ずしも対応するものではないが、その画定された境界は、フル解像度グラフィックフレームが再構築されたときに、例えば、この実施例では４つである多数の表示画像画素を実際に囲んでも良い。ａ）で示すように、プリミティブがラスター化され、サンプルカバレッジが三角形で決定される。この実施例では、３つのサンプルが三角形、画素内で孤立したカラーサンプル及び３つの深度サンプルでカバーされる。図８Ｃのｂ）で示すように、値は、対応するパラメータに対してサンプル値のそれぞれについて計算され、すなわち、カラーパラメータ、及び／または、色に影響する他のパラメータをカバーされたカラーサンプルに対する画素シェーダで操作し、このサンプルに対するカラー値のセットを決定しても良く、一方、深度値は、３つの深度サンプルのそれぞれに対して計算しても良く、これらの値は、画素シェーダでエキスポートされた値でもよく、または、そうでなくても良い。値は、プリミティブの頂点から補間したパラメータを使用して計算しても良い。図８Ｃに示すように、ラスター化された画素の下右のサンプルはプリミティブでカバーされていないため、図８Ｃに示すように、この特定の三角形８１７ａから、このサンプルに深度値が適用されない。値はサンプル毎の操作を経ても良く、これは、フラグメント／画素からの最終サンプル値が深度バッファのサンプルに書き込まれる前に、各サンプルに対する深度テストを包含しても良い。図８Ｃのｃ）で示すように、この実施例では、上右のサンプルが深度テストに失敗し、その深度値は廃棄しても良く、これは、三角形８１７ｂに対する深度値で閉塞されるからである。深度テストは、図８Ｃでは最終サンプル値が計算された後であるように示されているが、選択的に前に実行しても良く、これは、テストを失敗して廃棄されることのあるサンプル／画素に対する不必要な計算を避ける最適化のためであることに注意を要する。図８Ｃのｄ）に示すように、計算されたサンプル値は、フル解像度深度バッファ及び部分解像度カラーバッファに書き込んでも良い。
【００９５】
図８Ｄに示すように、同様なプロセスがプリミティブ８１７ｂに適用される。図８Ｃにおけるように、プリミティブ８１７ｂは、各画素内の深度サンプルよりもカラーサンプルの数が少ないサンプリングスキームを使用してラスター化される。カラー及び深度値は各サンプルに対して計算され、表示バッファのカラーサンプル及び深度サンプルに書き込まれる前に、深度テストしても良い。この三角形８１７ｂは、このサンプルの多数の画素でカバーされているが、しかし、プリミティブは上画素内の深度サンプルだけをカバーし、画素シェーダ計算は、特定の状況でこの画素について省略しても良い。下画素は、唯一カバーされたカラーサンプルを包含し、このサンプルに画素シェーダを使用してシェーディングしても良い。ｃ）で示すように、サンプルは、図８Ｄに示すように、カラー／深度表示バッファ内に格納する前に深度テストしても良い。カラーサンプルのサンプル座標における深度値は、プリミティブでカバーされた全てのこれらの深度サンプルと同様であるため、最終表示画素のカラーは、全てのこれらの深度サンプル座標における画素のカラーサンプルから効果的に導きだすことができ、フル解像度でカラー値をシェーディングする必要を避ける深度サンプルにより提供される高空間精度を有する。
【００９６】
上記は、深度に対してのみ多くのサンプルを利用するサンプリングスキームの方法の実施例の詳細であり、このような多重サンプリングスキームは他の目的に使用することもできる。例えば、時間的なアンチエイリアス処理をフレーム間で実行し、異なるフレームの深度サンプルで導き出されたフル解像度カラーを再構成しても良い。多数のサンプルは、他のアンチエイリアス処理スキームに対しても有益とすることができる。
【００９７】
識別子
いくつかの状況では、上述のように深度値だけに基づいて最終表示バッファ画素値を決定することは困難なことがある。例えば、カラーバッファ内でカラーサンプルからどのようにディスプレイ画素がその値を導き出すか決定するときに使用される深度の区別として、地面下からほんの僅かに突出する岩石がオブジェクトである場合、岩石のＺ値と周囲背景のＺ値との間の明確な相違の欠如は、表示画素のための適正なカラー値を決定することを困難にする。したがって、本開示態様は、更に、表示画素のカラー値を明確に区別してより正確に再構成するために、レンダリングパイプラインの種々のステージを通して追跡することを可能とする独特の識別子を有する。
【００９８】
図９Ａ〜９Ｂは、再構成を容易とするため、本開示の態様による独特の識別子（ＩＤ）の実施例を示す。図９Ａに示すように、独特のオブジェクト識別子（オブジェクトＩＤ）（例えば、図９ＡのＯＩＤ１及びＯＩＤ２）は、レンダリングパイプラインを介するデータの流れとして、画素値をより明確に識別するために、レンダリングされたフレーム内のそれぞれオブジェクトに割り当てても良い。図９Ａに示すように、本開示の態様は、更に、レンダリング処理中に各プリミティブに割り当てても良い独特のプリミティブ識別子(プリミティブＩＤ)（例えば、ＰＩＤ１，ＰＩＤ２，ＰＩＤ３，．．．）を有する。図９Ｂに示すように、特定の実施態様では、オブジェクトＩＤ及び／またはプリミティブＩＤを含むＩＤを、例えば図９Ｂに示すように、フレームを横断して追跡することが可能である。
【００９９】
通常、プリミティブはラスター化され、その後、フラグメント／サンプルは、パイプラインの後のステージで個々に処理されるが、しかし、どのオブジェクトまたはどのプリミティブが特定の画素／サンプル値に属するか、他の点では認識することができない。結果として、従来の技術では、特定のフレームに対する最終的なカラーバッファまたは深度バッファは、実質的にただの値の配列である。いくつかの相違は、特定のインスタンスでは深度にのみ基づいて識別することもできるが、独特のオブジェクトＩＤ及び独特のプリミティブＩＤにより識別を極めて容易にすることができる。
【０１００】
図１０Ａに移動すると、本開示の態様によるグラフィック処理における独特のオブジェクト識別子を使用する例示的な実施例が示されている。図１０Ａは、本開示の種々の態様にしたがって計算することのできるカラー及び深度サンプル値の配列を示す。図１０Ａに示すように、表示画素１０１９に対して、そのカラーが同じ前オブジェクトに属し、スクリーン空間座標内の画素１０１９に実際に近接する他のカラーサンプルが閉塞されたオブジェクトに属するため、１０２１のカラーサンプルからそのカラー値を導きだすことが、その画素について望ましい。しかし、オブジェクト識別子がないと、Ｚ深度だけに基づいてこれを決定することは困難なことがあり、これは、閉塞し及び閉塞されるオブジェクトの深度値が互いに比較的近いことがあるためである。しかし、図１０Ｂに示すように、図１０Ｂに示すように、例えば画素１０１９に対するＯＩＤ２のように、独特のオブジェクトＩＤが画素／サンプル値のそれぞれに割り当てられ、メモリに格納される場合、これを容易に決定することができる。
【０１０１】
特定の実施態様では、フレームからフレームに、オブジェクト及び／またはプリミティブＩＤを追跡することが有益なことがある。図１０Ｃは、利点を更に説明するため、２つのフレーム、フレーム１及びフレーム２の例示的な実施例を示す。ＯＩＤ２は、フレームからフレームに位置を変更するため、最も好適なカラーサンプルをカバーしなくなる。ＯＩＤ２がその値を追跡されるときに、フレーム２に示すように、表示画素１０１９を表示するためにオブジェクトの先端で、先のフレームのカラーサンプル値を使用することが極めて容易となる。
【０１０２】
図１１Ａに移動すると、プリミティブＩＤ、例えば、三角形ＩＤまたは他のプリミティブのＩＤの使用の例示的な実施例が記載されている。プリミティブＩＤ（ＰＩＤ）が、オブジェクト１１３３を作り上げる個々のプリミティブに割り当てられる場合、スクリーン内のハードエッジについての詳細な認識がレンダリング処理中に決定ができる（図１１Ａには個々のプリミティブを示してないが、それぞれが独特のＰＩＤを有する個々の三角形のプリミティブが作り上げられると、考えることができる点に注意を要する）。更に、図１１Ｂに示すように、例えばＰＩＤ２である個々のプリミティブＩＤを追跡することは、場面内の流れについての詳細な知識を提供することができる。
【０１０３】
特定の実施態様では、オブジェクトＩＤ及び／またはプリミティブＩＤのフレームからフレームへの一貫性を有することが望ましい。したがって、同じオブジェクトに対して異なるオブジェクトＩＤが異なるドローコールで異なるフレームに呼び出されることになる、オブジェクトＩＤを単純にインクリメントすることよりも、オブジェクトＩＤは、例えばＧＰＵとの連携するＡＰＩを通して、プログラムで選択することができる。例えば、初期データがセットアップされ、ドローコールが発行されるパイプライン内のステージでのアプリケーションの処理中に、アプリケーションプログラミングが、コマンドバッファを介してオブジェクトＩＤをセットアップするように構成することができ、これはドローコール前に発生することがある。このように、同じオブジェクトが、フレームのシーケンス内で多数回再度描かれるときに、同じオブジェクトＩＤが割り当てられる。
【０１０４】
いくつかの実施態様では、オブジェクトＩＤは、プリミティブＩＤに付加され、したがって、オブジェクトＩＤとプリミティブＩＤは、付加の結果としてバッファに共に書き込まれる。
【０１０５】
いくつかの実施態様では、論理ＯＲ演算がオブジェクトＩＤとプリミティブＩＤとの間で実行され、したがって、オブジェクトＩＤ及びプリミティブＩＤは、論理ＯＲの結果としてバッファに共に書き込むことが可能である。図１２に移動すると、本開示の態様にしたがってグラフィックを描画するように構成されるコンピューティングシステム１２００の例示的な実施例を示してある。システム１２００は、図６のシステム６００とほぼ同じように構成される。図１２中、同じ参照番号が図６及び図１２に共通の部材を指す。関連する検討がすでに上記で行われているため、これらの共通の部材の検討は、簡略化するために省略してある。
【０１０６】
特定の実施態様では、ＧＰＵ６７１はＩＤトラッカモジュール１２６９を有し、これはハードウェアモジュール６９８の１つ、ＧＰＵの１つまたは複数プロセッサコア上で走るソフトウェア、または、この組合せとして実装しても良い。ＩＤトラッカモジュール１２６９は、本開示の態様にしたがって、オブジェクトＩＤ、プリミティブＩＤ、または、オブジェクト及びプリミティブＩＤの双方を格納する１つまたは複数の専用ＩＤバッファ１３９９に書き込むように構成される。ＩＤトラッカモジュール１２６９は、ソフトウェアで実行し、または、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）またはシステムオンチップ（ＳｏＣまたはＳＯＣ）等の専用ハードウェアを使用して実行することが可能である。
【０１０７】
ここで使用し、当業者に全体的に理解されるように、特定用途向け集積回路（ＡＳＩＣ）は、一般用途を対象としたものよりもむしろ、特定用途用にカスタマイズされた集積回路である。
【０１０８】
ここで使用し、当業者に全体的に理解されるように、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）は、製造後に顧客または設計者により設定される、したがって、「フィールドプログラマブル」用に設計された集積回路である。ＦＰＧＡ構造は、ＡＳＩＣに対して使用されるものと同様に、ハードウェア記述言語（ＨＤＬ）を使用して、全体的に規定される。
【０１０９】
ここで使用し、当業者に全体的に理解されるように、１つのチップ上のシステムまたはシステムオンチップ（ＳｏＣまたはＳＯＣ）は、コンピュータまたは他の電子システムの全ての構成要素を単一のチップに一体化する集積回路（ＩＣ）である。デジタル、アナログ、混合信号、及び、しばしば高周波機能を、全て単一のチップ基板に包含しても良い。典型的な用途は、組み込みシステムの領域内である。
【０１１０】
典型的なＳｏＣは、以下のハードウェア部材を包含する、つまり、
１つまたは複数プロセッサコア（例えば、マイクロコントローラ、マイクロプロセッサまたはデジタル信号プロセッサ（ＤＳＰ）コア。
メモリブロック、例えば、リードオンリーメモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、電気的消去可能プログラマブルリードオンリーメモリ（ＥＥＰＲＯＭ）及びフラッシュメモリ。
オシレータ、または、フェイズロックループなどのタイミングソース。
カウンタータイマ、リアルタイムタイマー、または、パワーオンリセットジェネレータ等の周辺装置。
外部インターフェース、例えば、ユニバーサルシリアルバス（ＵＳＢ）、ファイヤワイヤ、イーサネット（登録商標）、汎用同期/非同期型送受信器（ＵＳＡＲＴ）、シリアル周辺インタフェ-ス（ＳＰＩ）バス等の業界基準。
アナログディジタル変換器（ＡＤＣ）及びディジタルアナログ変換器（ＤＡＣ）を含むアナログインターフェース。
電圧レギュレータ及びパワーマネージメント回路。
【０１１１】
これらの構成部材は、プロプラエタリまたは業界標準バスのいずれかによって接続される。ダイレクトメモリアクセス（ＤＭＡ）コントローラは、プロセッサコアをバイパスして外部インターフェースとメモリとの間で直接データを送り、これにより、ＳｏＣのデータスループットを増大する。
典型的なＳｏＣは、上述のハードウェア構成部材と、プロセッサコア（複数を含む）、周辺及びインターフェースを制御する実行可能な命令（例えば、ソフトウェアまたはファームウェア）との双方を有する。
【０１１２】
システム１２００は、本開示の態様にしたがうグラフィックパイプラインを実行するように構成される。このような実行は、ソフトウェア、ハードウェア、または、ハードウェア及びソフトウェアの組み合わせで達成することが可能である。特定の実施態様では、例えばグラフィックメモリ６５０であるメモリ６７２は、ＩＤバッファ１３９９及びコマンドバッファ１２５９を有し、その作用を以下に図１３を参照して説明する。
【０１１３】
本開示の他の態様をよりよく理解するために、図１３にグラフィックレンダリングパイプライン１３００が記載されている。レンダリングパイプライン１３００は、選択的に、図５に示すレンダリングパイプラインに記載のいくつかの態様を有しても良く、図５のレンダリングパイプラインと選択的に共通にしても良いパイプラインの多くの態様が、上記の図５の説明中で使用したものと同じ参照番号を付してある。これらの共通の部材の考察は、関連する考察が上記で説明してあるため、簡略化するために省略する。図１３の説明の態様について、図１２に示すシステム１２００の部材を参照して以下に説明する。
【０１１４】
パイプライン１３００では、ＣＰＵによるアプリケーション処理１３０２の結果、ＧＰＵ６７１に対するドローコール１３０４となる。説明のためで制限するものではなく、アプリケーション６６５は、仮想空間の部分に仮想オブジェクトを含む物理シミュレーションを実行することができる。物理シミュレーションは、１つまたは複数の時間インスタンスにおける１つまたは複数のオブジェクトの位置に対応する値を作り出す。アプリケーション６６５は、仮想空間内の頂点の集合によりオブジェクトを表しても良い。これらのオブジェクトのグラフィカル表示をレンダリングするために、アプリケーション６６５は、例えば、オブジェクト及び／または頂点の仮想空間位置である関連する情報をグラフィックＡＰＩ６６７に送り、これは、ドローコール１３０４を発行可能である。いくつかの実施態様では、オブジェクトＩＤは、アプリケーション処理１３０２中に、コマンドバッファ１２５９を介して設定しても良い。これは、ドローコール１３０４の前に発生することができる。
【０１１５】
各ドローコールの一部として、グラフィックＡＰＩ６６７は、入力データ５２２を提供することができ、これは、頂点座標及び／または他の頂点情報を包含しても良い。特定の実施態様では、初期データにおける追加頂点情報は、入力データ５２２にセットアップされた独特のオブジェクトに対する独特のオブジェクトＩＤを包含する。オブジェクトＩＤは、コマンドバッファ１２５９を介してセットアップし、ＩＤバッファ１３９９に格納することができる。オブジェクトは、アプリケーション６６５により、同じオブジェクトがフレームの全シーケンスを通して多数回描かれるときに、オブジェクトが常に同じオブジェクトＩＤに関連するように、プログラムで画定される。
【０１１６】
特定の実施形態では、プリミティブ処理５２３は、各プリミティブに対して独特のプリミティブＩＤを生成する。実施例として、制限するものではないが、プリミティブＩＤ（ＰＩＤ）は、ゼロのプリミティブＩＤをオブジェクトの第１プリミティブに割り当てることにより、更に、オブジェクトのそれぞれ続くプリミティブに対してプリミティブＩＤをインクリメントすることにより、生成することが可能である。
【０１１７】
いくつかの実施態様では、頂点シェーディング計算５２６は、プリミティブＩＤを生成するために使用することができるが、しかし、これは独特のインデックス検出５２５を完全にまたは部分的に抑止する（ｄｉｓａｂｌｉｎｇ）必要があり、プリミティブ処理５２３でプリミティブＩＤの生成を実行することにより、多くの場合により高い性能を達成することができる。したがって、特定の実施形態では、プリミティブ処理ステージ５２３中にプリミティブＩＤを割り当てることが好ましいことがあり、これは、より高い性能を達成するために、ＧＰＵの専用ハードウェアモジュールを使用して実行することができる。
【０１１８】
特定の実施態様によると、頂点シェーディング計算５２６を実行する頂点シェーダは、オブジェクトＩＤを生成するように構成することができる。例えば、いくつかの状況では、インスタンス化されたジオメトリは、例えば、インスタンス化されたドローコールで、同時に、場面内の同じメッシュの基本的には多数のコピーであるものをレンダリングするために使用される。いくつかの頂点データをインスタンスの全体で複製しても良いが、各インスタンスが他の差分パラメータを有することが可能である。特定の実施態様では、インスタンス化されたジオメトリを使用してオブジェクトをレンダリングするときに、（例えば、同様な頂点ジオメトリまたはメッシュを有しても良い異なるインスタンス）インスタンス化されたドローコールに組み合わされた特定のインスタンスは、典型的にはフレームからフレームで変化する。この場合、頂点シェーダは、各インスタンスに対して、各インスタンスのために使用されるオブジェクトＩＤが、一連のフレーム内で整合する方法で、オブジェクトＩＤを生成することが可能である。各インスタンスが同様なメッシュから導き出されても、独特のオブジェクトＩＤを有する独特のオブジェクトとして各インスタンスで区別することが好ましいため、これは有益なことがある。
【０１１９】
いくつかの実施態様では、テッセレーションシェーダ計算１３２９がプリミティブＩＤの生成に寄与することができる。場面ジオメトリを細分するテッセレーション計算１３２９は、パッチと称することもある２つまたはそれ以上のプリミティブのより高レベルの組み合わせから、プリミティブＩＤを生成する工程に使用される情報を提供することができる。例えば、テッセレーションシェーダ１３２９は、それぞれ新しいパッチインスタンスに対して、例えばパッチ入力の各インスタンスに対するプリミティブ識別子ＰＩＤをインクリメントすることにより、１つまたは複数のプリミティブＩＤを生成することができる。これに代え、プリミティブ処理５２３は、この演算を実行し、または、各パッチ入力に対してプリミティブＩＤをインクリメントすることができる。
【０１２０】
他の実施態様では、アプリケーション６６５で最初にセットアップされたもの以外の新しい場面ジオメトリを生成するジオメトリシェーディング計算１３３１は、更に、プリミティブＩＤの生成に有益な情報を発生することが可能である。他の実施態様では、ジオメトリシェーダで受け入れられた各入力プリミティブに対するプリミティブＩＤは、入力プリミティブが属するオブジェクトでサポートされた出力プリミティブのジオメトリック増幅の最大量でインクリメントすることが可能であり、ジオメトリシェーダまたはプリミティブ処理５２３に関連する頂点シェーディング計算５２６は、続いてこの値をインクリメントすること可能である。更に他の実施態様では、ジオメトリシェーダに関連する頂点シェーディング計算５２６は、単独でプリミティブＩＤの生成に関与する。
【０１２１】
特定の実施態様では、画素シェーダは、画素シェーダ計算５４２中に、ＩＤバッファ１３９９からプリミティブＩＤ及び／またはオブジェクトＩＤにアクセスするように構成しても良い。ＩＤトラッカモジュール１２６９は、オブジェクト及びプリミティブに対するＩＤをフレーム内で、及び、フレームからフレームで追跡することが可能である。このような実施態様の全体的な流れは、図１４を参照することで理解することが可能であり、これは、本開示の態様にしたがうグラフィック処理方法１４００を示す。方法は、ハードウェアまたはソフトウェア、または、ハードウェアとソフトウェアとのいくつかの組み合わせのシステム１２００で実行することが可能である。
【０１２２】
方法１４００は、ディスプレイ装置６８６に表示すべきフレームのジオメトリ１４０２のセットアップを開始する。ジオメトリのセットアップは、典型的には、例えば、画像内にプリミティブを画定するために使用される頂点を有するポリゴンメッシュとして、表される仮想空間内のオブジェクトをセットアップするアプリケーション処理１３０２のこれらの部分を包含する。ジオメトリのセットアップは、フレームとして描画される視錐台の一部が仮想空間内のどのオブジェクト（または、オブジェクトの一部）であるか決定することができる。独特のオブジェクトＩＤが、フレームの一部である各オブジェクトに割り当てられている。いくつかの実施態様では、オブジェクトＩＤは、１４０４に示すように、ドローコールの前に割り当てられる。このような実施態様では、オブジェクトＩＤの割り当ては、アプリケーション６６５で実行されるアプリケーション処理１３０２の一部として実行することができる。他の実施態様では、オブジェクトＩＤは、１４１１，１４１３及び１４１５で示すように、ドローコールの一部として、または、後に割り当てられる。
【０１２３】
ドローコールは、１４０６で示すように発行される。グラフィック処理は、ほとんど通常の態様で、プリミティブ処理１４０８、頂点シェーダ計算１４１０、テッセレーションシェーダ計算１４１２、ジオメトリシェーダ計算１４１４、ラスター化／パラメータ補間１４１６、前画素シェーダＺ演算１４１８、画素シェーダ計算１４２０及び後画素シェーダＺ演算１４２２を介して処理することが可能である。いくつかの実施態様では、プリミティブＩＤは、例えばゼロのプリミティブＩＤを各オブジェクト内で第１プリミティブに割り当て、続く各プリミティブに対してプリミティブＩＤをインクリメントすることにより、プリミティブ処理１４０８の一部として生成しても良い。テッセレーション処理されたオブジェクトを処理する場合、プリミティブ処理１４０８は、ゼロのプリミティブＩＤを各オブジェクトで第１パッチに割り当て、続く各パッチに対してプリミティブＩＤをインクリメントすることにより、開始することができる。他の実施態様では、プリミティブＩＤは、１４１１，１４１３及び１４１５に示すように、後で、パイプライン中で割り当てられる。
【０１２４】
例えば、特定の実施態様では、頂点シェーダ計算１４１０は、１４１１におけるように、オブジェクトＩＤ及びプリミティブＩＤを生成することが可能である。具体的には、インスタンス化されたジオメトリを包含する場合（プリミティブがオブジェクトの一部として繰り返し描かれ、または、多数回描かれるが、フレームからフレームで位置が異なる場合）、これらのオブジェクトにＩＤを付与することにより、何度も繰り返して再度描かれるオブジェクトに対してフレーム間で一致することが望ましい。頂点シェーダ１４１０（これは、通常は、開発者のコントロール下にあるソフトウェアである）は、メモリに格納されたオブジェクトＩＤのテーブルを参照し、インデックスとしてインスタンスＩＤを使用することにより、これらのインスタンス化されたオブジェクトのそれぞれにオブジェクトＩＤを出力する。
【０１２５】
いくつかの実施態様では、頂点シェーダは、インスタンス化されたオブジェクトにインスタンス識別子を決定するために、オブジェクトＩＤ及びプリミティブ識別子から逆戻りすることが可能である。
【０１２６】
代替的実施態様では、プリミティブＩＤ及びオブジェクトＩＤは、１４１３で示すように、テッセレーション計算１４１２の一部として生成しても良い。特に、テッセレーション計算１４１２は、各パッチ入力に対し、プリミティブＩＤをインクリメントすることにより、プリミティブにプリミティブＩＤを生成しても良い。
【０１２７】
他の実施態様では、プリミティブＩＤ及びオブジェクトＩＤは、１４１５で示すように、ジオメトリシェーダ計算１４１４の一部として生成しても良い。特に、ジオメトリシェーダで受け入れられた各入力プリミティブに対するプリミティブＩＤは、入力プリミティブが属するオブジェクトでサポートされた出力プリミティブのジオメトリック増幅の最大量でインクリメントされることが可能であり、ジオメトリシェーダに関連する頂点シェーディング計算５２６またはプリミティブ処理５２３は、続いてこの値をインクリメントすることが可能である。更に他の実施態様では、ジオメトリシェーダに関連する頂点シェーディング計算５２６は、単独でプリミティブＩＤの生成に関与することができる。更に他の実施態様では、ジオメトリシェーダに関連する頂点シェーディング計算５２６は、単独でプリミティブＩＤの生成に関与することができる。
【０１２８】
頂点シェーダ計算１４１０、テッセレーションシェーダ計算１４１２及びジオメトリシェーダ計算１４１４の後、ラスター化／パラメータ補間１４１６が、プリミティブ内に包含されるスクリーン空間領域を決定する。いくつかの実施態様では、前画素シェーダＺ演算１４１８は、プリミティブＩＤ及び／またはオブジェクトＩＤをＩＤバッファ１３９９に、Ｚバッファ内に書き込まれたＺ値に１対１に対応して書き込む。
【０１２９】
画素シェーダ計算１４２０は、プリミティブＩＤ及び／またはオブジェクトＩＤを読み込んでも良い。これは種々の方法で使用しても良く、例えば、プリミティブＩＤがフレームを通してコヒーレントの場合、セルフシャドウイングの際に画素シェーダで受け取ってエイリアシングを低下させるように、Ｚバッファに関連するＩＤバッファをプリミティブＩＤと比較しても良い。これに代え、プリミティブＩＤは、画素シェーダで使用し、前プリミティブデータテーブルにアクセスしても良い。
【０１３０】
いくつかの実施態様では、後画素シェーダＺ演算１４２２は、Ｚバッファに書き込まれたＺ値と１対１に対応させてＩＤバッファ１３９９にプリミティブＩＤ及び／またはオブジェクトＩＤを書き込む。ＲＯＰ及びフレームバッファ演算１４２４は、画素シェーダ計算１４２０で作成されるカラー及び他の値をＭＲＴに書き込む。
【０１３１】
続いて、表示用に（例えば、表示バッファ）高解像度フレームバッファを生成するために、空間／時間分析１４２６が、Ｚバッファ値、カラー値、及び、ＩＤバッファ１３９９内の値を使用して実行される。いくつかの態様によると、分析１４２６は、オブジェクトＩＤ及びまたはプリミティブＩＤを使用して図１３の表示処理５５１中に実行しても良く、Ｚバッファ値及びカラー値は図１３のカラーサンプル値及び深度サンプル値５４９に対応しても良く、一方、表示用の高解像度フレームバッファは図１３の最終表示画素値５５２に対応しても良い。プリミティブ及び／またはオブジェクトＩＤは、どのサンプルがどのオブジェクトでカバーされているか追跡することが可能であり、したがって、フレーム内でより低い解像度のカラーバッファを有し、そのＺ値及びＩＤを分析することにより、カラーのないサンプルにカラーを割り当てることができる。フレーム間の一貫性によって、カラーが計算されていない現在のフレームサンプルに、先のフレームからのカラー値を使用することができる。
【０１３２】
追加態様
本開示の追加態様は、プロセッサでグラフィックをレンダリングする方法を包含し、この方法は、
仮想空間内の場面に複数のオブジェクトをセットアップし、前記オブジェクトのそれぞれは頂点のセットで画定され、
独特のオブジェクト識別子をオブジェクトそれぞれに割り当て、
オブジェクトを描くために、１つまたは複数のドローコールを発行し、
頂点のパラメータ値を操作して、出力頂点パラメータ値を生成し、
頂点から複数のプリミティブをセットアップし、前記プリミティブのそれぞれは頂点の１つまたは複数のセットで画定され、前記プリミティブは１つまたは複数のオブジェクトに属し、
複数の画素に対してプリミティブのそれぞれをラスター化し、
前記画素のそれぞれの深度をＺバッファに書き込み、このＺバッファは第１解像度を有し、
Ｚバッファ内の各画素がＩＤバッファ内のオブジェクト識別子に関連するように、１つまたは複数のオブジェクト識別子を少なくとも１つのＩＤバッファに書き込み、
ラスター化されたプリミティブのそれぞれに対し画素を処理して、カラーバッファ内のカラー値のセットを決定し、このカラーバッファは、第１解像度よりも低い第２解像度を有し、更に、
Ｚバッファの解像度で出力フレームに対する表示画素のセットを、カラーバッファ内のカラー値及びＩＤバッファ内の識別子を使用して決定すること、を包含する。
【０１３３】
上述の方法のいくつかの実施態様では、出力フレームはメモリに格納され、または、ディスプレイ装置に表示される。
【０１３４】
他の追加態様は、実行したときに上述の方法を実行するコンピュータ実行命令を組み込んだコンピュータ可読媒体である。
【０１３５】
更に他の態様は、通信ネットワークからダウンロード可能、及び／または、コンピュータ可読及び／またはマイクロプロセッサ実行可能媒体に格納されたコンピュータプログラム製品として、上述の方法を実行するためのプログラムコード命令を備えることに特徴がある。
【０１３６】
他の態様は、上述の方法を実行するための電磁または他の信号搬送コンピュータ可読命令である。
【０１３７】
上記は、本発明の好ましい実施形態の完全な説明であるが、種々の代替、変更及び等価なものを使用することが可能である。したがって、本発明の範囲は、上記説明を参照することではなく、代わりに、等価なものの全範囲と共に、添付の請求の範囲を参照することにより、決定されるべきものである。好ましいか否かに関わらず、ここに記載の特徴は、好ましいか否かに関わらず、ここに記載の任意の他の特徴と組合わせることができる。請求の範囲では、不定冠詞「ａ」または「ａｎ」は、明確に延べられている場合を除き、その冠詞に続く項目の１つまたは複数の量を指す。請求の範囲は、「ｍｅａｎｓ  ｆｏｒ」の語句を使用する所与の制限が所与の請求の範囲において明確に参照されていない限り、ｍｅａｎｓ−ｐｌｕｓ−ｆｕｎｃｔｉｏｎの限定を含むことを意図したものではない。
【図１Ａ】
0006374982.tif 000002
【図１Ｂ】
0006374982.tif 000003
【図２Ａ】
0006374982.tif 000004
【図２Ｂ】
0006374982.tif 000005
【図３Ａ】
0006374982.tif 000006
【図３Ｂ】
0006374982.tif 000007
【図３Ｃ】
0006374982.tif 000008
【図４】
0006374982.tif 000009
【図５】
0006374982.tif 000010
【図６】
0006374982.tif 000011
【図７Ａ】
0006374982.tif 000012
【図７Ｂ】
0006374982.tif 000013
【図７Ｃ】
0006374982.tif 000014
【図７Ｄ】
0006374982.tif 000015
【図８Ａ】
0006374982.tif 000016
【図８Ｂ】
0006374982.tif 000017
【図８Ｃ】
0006374982.tif 000018
【図８Ｄ】
0006374982.tif 000019
【図９Ａ】
0006374982.tif 000020
【図９Ｂ】
0006374982.tif 000021
【図１０Ａ】
0006374982.tif 000022
【図１０Ｂ】
0006374982.tif 000023
【図１０Ｃ】
0006374982.tif 000024
【図１１Ａ】
0006374982.tif 000025
【図１１Ｂ】
0006374982.tif 000026
【図１２】
0006374982.tif 000027
【図１３】
0006374982.tif 000028
【図１４】
0006374982.tif 000029