(57)【特許請求の範囲】
【請求項１】
テッセレータが、テッセレーションを実行する時間であるランタイムの前に、複数の異なるエッジ詳細度に対するプリミティブ領域の外周の内側のプリミティブ点の座標値を示すインナーテッセレーション値を予め演算する段階と、
パッチ分類部が、複数のパッチを同じエッジ詳細度ごとに、マルチコアプロセッサが有する別々のコアへ分類する段階と、
前記テッセレータが、前記ランタイムにおいて、予め演算された前記インナーテッセレーション値を使用して、前記マルチコアプロセッサが有する第１のコア上で、前記分類する段階で分類された第１のエッジ詳細度を有する複数のパッチをテッセレーションし、かつ前記マルチコアプロセッサが有する第２のコア上で、前記分類する段階で分類された第２の詳細度を有する複数のパッチをテッセレーションする段階と
を含む方法。
【請求項２】
ソフトウェアテッセレータを使用することを含む請求項１に記載の方法。
【請求項３】
前記インナーテッセレーション値に対する三角形分割を予め演算することを含む請求項１または請求項２に記載の方法。
【請求項４】
前記テッセレーションに対するプリミティブ領域として、四角形を使用することを含む請求項１から請求項３のいずれか１つに記載の方法。
【請求項５】
スレッド化及びベクトル化することを含む請求項１から請求項４のいずれか１つに記載の方法。
【請求項６】
ハルシェーダと
前記ハルシェーダと連結されたテッセレータとを備え、
前記テッセレータは、
テッセレーションを実行する時間であるランタイムの前に、複数の異なるエッジ詳細度に対するプリミティブ領域の外周の内側のプリミティブ点の座標値を示すインナーテッセレーション値を予め演算し、
複数のパッチを、同じ詳細度ごとに、マルチコアプロセッサの別々のコアへ分類し、
前記ランタイムにおいて、予め演算された前記インナーテッセレーション値を使用して、前記マルチコアプロセッサが有する第１のコア上で、分類された第１のエッジ詳細度を有する複数のパッチをテッセレーションし、かつ前記マルチコアプロセッサが有する第２のコア上で、分類された第２の詳細度を有する複数のパッチをテッセレーションする、装置。
【請求項７】
前記テッセレータは、ソフトウェアテッセレータである請求項６に記載の装置。
【請求項８】
前記テッセレータは、前記インナーテッセレーション値に対する三角形分割を予め演算する請求項６または請求項７に記載の装置。
【請求項９】
前記テッセレータは、プリミティブ領域として、四角形を使用する請求項６から請求項８のいずれか１つに記載の装置。
【請求項１０】
前記テッセレータは、スレッド化及びベクトル化を利用する請求項６から請求項９のいずれか１つに記載の装置。
【請求項１１】
第１バッファ及び第２バッファをそれぞれ含む少なくとも２つのコアを有するマルチコアプロセッサと、
同じ詳細度を有するパッチを同じコアに配置するべく、テッセレーションに対する複数のパッチをエッジ詳細度に基づいて分類するパッチ分類部と、
テッセレーションを実行する時間であるランタイムの前に、複数の異なるエッジ詳細度に対するプリミティブ領域の外周の内側のプリミティブ点の座標値を示すインナーテッセレーション値を予め演算し、前記ランタイムにおいて、予め演算された前記インナーテッセレーション値を使用して、前記マルチコアプロセッサが有する第１のコア上で、前記パッチ分類部によって分類された第１のエッジ詳細度を有する複数のパッチをテッセレーションし、かつ前記マルチコアプロセッサが有する第２のコア上で、前記パッチ分類部によって分類された第２の詳細度を有する複数のパッチをテッセレーションするテッセレータと
を備えるシステム。
【請求項１２】
スレッド化及びベクトル化を利用することを含む請求項１１に記載のシステム。
【請求項１３】
ソフトウェアテッセレータを含む請求項１１または請求項１２に記載のシステム。
【請求項１４】
前記テッセレータは、前記インナーテッセレーション値に対する三角形分割を予め演算する、請求項１１から請求項１３のいずれか１つに記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、グラフィックス処理に使用されるグラフィックスプロセッサ及び汎用プロセッサの使用を含むグラフィックス処理に関する。
【背景技術】
【０００２】
グラフィックスパイプラインは、ゲーム、コンピュータアニメーション、医療アプリケーション等のグラフィックスをレンダリングする役割を果たす。グラフィックスパイプラインに限界があることから、生成されるグラフィックス画像の詳細度（ＬＯＤ）は、理想よりも低くなっている。詳細度が上がるほど、グラフィックスの処理速度が遅くなる。したがって、処理速度とグラフィックスの詳細度とは、トレードオフの関係となっている。マイクロソフト（登録商標）社のＤｉｒｅｃｔＸ  １１のような新しいグラフィックス処理パイプラインは、テッセレーションの詳細度を上げることにより、幾何的詳細度を増加させている。
【０００３】
テッセレーション（Ｔｅｓｓｅｌｌａｔｉｏｎ）とは、粗いポリゴン（多角形）のモデルから開始して、オブジェクトの画像をレンダリングするための一連の複数の三角形を形成することである。パッチは、ある面に対する制御ケージ（ｃａｇｅ）を表す粗いレベルでの基本単位である。パッチは、曲線又は領域を表していてもよい。面は、パラメトリック関数として表現可能ないかなる種類の面であってもよい。制御ケージは、滑らかな面を生成するために、絵を描く者によって使用される低い解像度のモデルである。
【０００４】
テッセレーションの程度が高くなるほど、描かれるグラフィックの詳細度が高くなる。しかしながら、処理速度は、遅くなってしまうと考えられる。一般的に、処理時間は、画像の詳細度が増加すると、二次関数的に増加する。
【図面の簡単な説明】
【０００５】
【図１】一実施形態に係るグラフィックスパイプラインを概略的に示した図である。
【図２】一実施形態に係る、最大のインナーテッセレーション要素低減関数、及び１軸インナーテッセレーション要素軸低減を有するインナーテッセレーションを示した図である。
【図３】一実施形態に係る、平均のインナーテッセレーション要素低減関数及び１軸インナーテッセレーション要素軸低減を有するテッセレーションパターンを示した図である。
【図４】一実施形態に係る、最小のインナーテッセレーション要素低減関数を使用した１軸テッセレーションに対するテッセレーションパターンを示した図である。
【図５Ａ】一実施形態に係る、１軸インナーテッセレーション要素軸低減を示した図である。
【図５Ｂ】一実施形態に係る、図５Ａに示した詳細度とは異なる詳細度を上辺が有する１軸インナーテッセレーションを示した図である。
【図５Ｃ】一実施形態に係る、図５Ａ及び図５Ｂに示したテッセレーションとは異なる詳細度を左辺が有する１軸インナーテッセレーションを示した図である。
【図６】一実施形態に係る、ソフトウェアテッセレータにおける、１軸２のべき乗テッセレーションを使用した非線形関係及び線形関係を示した、詳細度対パッチ毎のサイクルの仮想グラフである。
【図７】本発明の一実施形態に係るフローチャートである。
【図８】一実施形態に係るマルチコアプロセッサの概略図である。
【発明を実施するための形態】
【０００６】
ある実施形態よれば、テッセレーション時間は、テッセレーションの量に対して一次関数的に増加する。従来技術では、テッセレーション時間は、テッセレーション詳細の量に対して二次関数的に増加する。したがって、ある実施形態によれば、テッセレーション時間を削減することができ、別の実施形態では、性能の高くないテッセレータを使用して、より詳細度の高いテッセレーションを実行することができる。
【０００７】
ある実施系形態では、テッセレーション時間を削減することができる、及び／又は、様々なエッジ詳細度について予め演算される一連のインナーテッセレーションを予め計算することにより、テッセレーション処理能力を、高めることができると考えられる。これにより、ランタイムで、インナーテッセレーションを再計算する必要がなくなる。
【０００８】
ある実施形態では、テッセレーションは、三角形の又は四角形のプリミティブ領域を使用してもよい。エッジ分割は、エッジ（境界）を複数の区間に分割することを含んでもよい。使用される区間の数が多ければ多いほど、より詳細度の高いテッセレーションが可能となる。したがって、エッジの詳細度を高くすると、生成されるテッセレーションの解像度が高くなると考えられる。
【０００９】
インナーテッセレーションとは、プリミティブ領域の外周の内側のプリミティブ点のテッセレーションのことである。アウターバンドは、プリミティブ領域の外周で形成されている。
【００１０】
図１に示すように、グラフィックスパイプラインは、スタンドアローンのグラフィックスプロセッサ、専用ＩＣ、ソフトウェア、ソフトウェアを実装した汎用プロセッサ、又はソフトウェア及びハードウェアの組み合わせに、実装されてもよい。
【００１１】
入力アセンブラ１２は、固定機能オペレーションを使用して、メモリから頂点を読み出し、幾何的配列を形成して、パイプライン作業アイテムを生成する。自動的に生成される識別子は、図１の右側の点線で示されているような、識別子固有の処理を可能とする。頂点識別子及びインスタンス識別子は、頂点シェーダ１４以降で利用可能となる。プリミティブ識別子は、ハル（ｈｕｌｌ）シェーダ１６以降で利用可能となる。制御点識別子は、ハルシェーダ１６でのみ利用可能である。
【００１２】
頂点シェーダ１４は、変換、スキニング（ｓｋｉｎｎｉｎｇ）、又はライトニング（ｌｉｇｈｔｎｉｎｇ）のようなオペレーションを実行する。１つの頂点が入力されると、１つの頂点が出力される。制御点の段階では、出力制御点毎に呼び出しが行われ、制御点識別子によってそれぞれが特定されて、頂点シェーダは、出力数とは別に、パッチに対する全ての入力制御点を読み出す能力を有する。ハルシェーダ１６は、呼び出し毎に、制御点を出力する。合計した出力が、次のハルシェーダの段階及びドメインシェーダ２０への共有入力となる。全ての入力制御点及び出力制御点の共有読み出し入力を有するパッチ毎に、パッチ定数段階が１回呼び出される。ハルシェーダ１６は、エッジテッセレーション係数及びその他のパッチ定数データを出力する。エッジテッセレーション係数とプリミティブドメインの１エッジあたりの区間の数を有するエッジの詳細度とは、本明細書では、交換可能な意味として使用されてもよい。コードは、セグメント化されて、ワークを独立して並行に行うことができるようになっており、最終段階で統合される。テッセレータ１８は、ハードウェア又はソフトウェアに実装されてもよい。ある有益な実施形態では、テッセレータは、ソフトウェア実装されたテッセレータであってもよい。上述したように、テッセレータのオペレーションを高速化するためには、テッセレータのオペレーションを担うコアは、その他のタスクに束縛されないようにする。
【００１３】
テッセレータ１８には、ハルシェーダから、どの程度テッセレートするかを規定する数字が入力される。テッセレータは、三角形又は四角形のようなプリミティブ、及び、点、線、又は三角形のようなトポロジー（接続形態）を生成する。テッセレータには、一実施形態では、パッチに対するハルシェーダの全出力のシェードされた読み出し専用の入力１つにつき、１つのドメインロケーションが入力される。そして、１つの頂点を出力してもよい。
【００１４】
ジオメトリシェーダ２２には、１つのプリミティブが入力され、最大４つまでのストリームを出力してもよく、それぞれのストリームが、ゼロ以上のプリミティブを独立して受け取る。ジオメトリシェーダの出力から生じたストリームによって、ラスタライザ（ｒａｓｔｅｒｉｚｅｒ）２４にプリミティブが供給され、最大４ストリームまで、バッファ３０に連結することができる。クリッピング（ｃｌｉｐｐｉｎｇ）、透視分割（ｐｅｒｓｐｅｃｔｉｖｅ  ｄｉｖｉｄｉｎｇ）、ビューポート（ｖｉｅｗ  ｐｏｒｔ）、切り取り選択（ｓｃｉｓｓｏｒ  ｓｅｌｅｃｔｉｏｎ）実装、及びプリミティブ設定を、ラスタライザ２４によって実装してもよい。
【００１５】
ピクセルシェーダ２６には、１つの画素が入力されて、同じ位置に１つの画素が出力される又は画素が出力されない。出力マージャ（ｏｕｔｐｕｔ  ｍｅｒｇｅｒ）２８は、固定関数ターゲットレンダリングオペレーション、ブレンディング（ｂｌｅｎｄｉｎｇ）オペレーション、奥行き（ｄｅｐｔｈ）オペレーション及びステンシル（ｓｔｅｎｃｉｌ）オペレーションを提供する。
【００１６】
図２には、プリミティブ領域が四角形である一実施形態が示されており、四角形３２は、上辺３２ｔ、右辺３２ｒ、下辺３２ｂ及び左辺３２ｌを有する。この例では、上辺３２ｔは１つの区間を有し、右辺３２ｒは８つの区間を有し、下辺３２ｂは４つの区間を有し、左辺３２ｌは２つの区間を有する。複数の区間は、エッジの詳細度及びテッセレーション係数に対応している。テッセレータ１８において、インナーテッセレーションは、最小、最大又は平均のうちの何れかの要素低減関数を使用してもよい。図２には、最大の低減関数が示されている。この場合、エッジ３２ｒが区間の最大数を有していることから、エッジ３２ｒを使用して、テッセレーションが実装される。この実施形態では、１つの最大値のみが演算される。別の実施形態では、プリミティブ領域として三角形が使用されてもよく、また、その他のインナーテッセレーション低減関数が使用されてもよい。
【００１７】
図３には、平均テッセレーション要素低減関数で処理した後の四角形が示されている。ここでは、平均値は、４辺の区間の平均の数に基づいている。そして、図４には、最小の数の辺、すなわち、上辺３２ｔを使用した最小のテッセレーション要素低減の結果が示されている。
【００１８】
次に、図５Ａ〜５Ｃを参照して、四角形を、アウターバンド３６ａとインナーテッセレーション３８とに分けられることを説明する。アウターバンド３６ａは、この例では四角形であるプリミティブ領域の外周に沿った全ての要素であり、インナーテッセレーションは、その他の全ての要素を指す。図５Ａ〜５Ｃには、１軸のインナーテッセレーション要素低減例が示されており、アウターテッセレーションの最大数が同じに保たれるかぎり、アウターバンドで使用される区間の数に関わらずインナーテッセレーションは同じになる。この例では、テッセレーション要素低減関数は、最大の場合のものであり、テッセレーション要素軸低減は１軸である。したがって、エッジの詳細度又はテッセレーション係数に関わらず、インナーテッセレーションは同じになる。したがって、様々に異なるエッジ詳細度に対するインナーテッセレーションを予め演算して、格納しておくことができ、ランタイムの間の必要な時に、単に適用するだけでよくなる。また、様々なエッジ詳細度についての予め演算されたインナーテッセレーションを再利用してもよく、ランタイム時に再計算する必要が無いため、計算速度を上げることができる。図６には、本発明の一実施形態を使用した場合の、テッセレーション時間が、テッセレーション詳細度が増加するに従って線形的に増加する様子が、斜交平行模様の棒グラフで表されている。別の技術では、斜線の棒グラフで示されるように、テッセレーション時間は、非テッセレーション詳細度が増加するのに従って線形的に又は二次関数的に増加する。図６に示されている例では、２のべき乗でエッジ分割し、最大のテッセレーション要素低減関数を使用した１軸のテッセレーション低減が利用されている。この例では、ソフトウェアベースのテッセレーションが使用された。非線形的な増加の例では、詳細度が高くなるにつれて、パッチ毎のサイクル数が急速に増大するが、本発明の一実施形態に係る例では、線形的に増加する。ハードウェアベースの方法を採用した場合には、予め演算されたインナーテッセレーションと予め演算されていないインナーテッセレーションとの間の差が、劇的ではなくなる。
【００１９】
本発明の一実施形態では、図７に示すように、テッセレータ１８はまず初めに、ブロック４０に示されるように、インナーテッセレーションのｕ及びｖの値を予め演算して格納する。ｕ及びｖの値は、例えば図５Ａに示すように、横軸ｕ及び縦軸ｖに沿った座標又は点の間隔であってもよい。また、ブロック４２に示すように、インナーテッセレーションに対する三角形分割（ｔｒｉａｎｇｕｌａｔｉｏｎ）は予め演算して格納しておいてもよい。一実施形態では、異なるエッジの詳細度の全てに対して、様々な点の予め演算した値及びインナーテッセレーションの生成された三角形分割を、予め規定して格納しておいてもよい。そして、ブロック４４に示されるように、ランタイムでは、プリミティブアウターバンドと共に、ｕ及びｖの値が計算される。また、ブロック４６に示されるように、アウターバンドに対する三角形分割は、ランタイムの間に演算される。そして、ランタイムの間に、テッセレータ１８は、適用可能な詳細度に基づいて、インナーテッセレーションの予め演算された適切な値を参照する。
【００２０】
ＤｉｒｅｃｔＸ  １１のようなある実施形態では、エッジの詳細度が６４段階存在する。その他の実施形態は、エッジの詳細度としてその他の段階数を使用してもよい。これらエッジの詳細度それぞれについてインナーテッセレーションを予め演算し、ランタイムに使用するために格納しておいてもよい。
【００２１】
ランタイムの間に、画像が処理される場合には、エッジの異なる詳細度が、画像の異なる領域に対して規定されてもよい。典型的には、カメラに近い物体（及び、スクリーン上で大きな空間を占める物体）は、カメラから遠い物体よりも、多くテッセレーションされる。例えば、パンチをする場面を描いたアニメーションでは、拳の詳細度が最も高く、拳から離れた領域では、低い詳細度が使用される。このように、ユーザーは、描写の中で関心が多く払われない領域に使用されている異なる詳細度について気を留めないと考えられるので、相対的に写実的なレンダリングを生成することができる。その結果、幅広いエッジ詳細度が発生すると考えられる。発生するインナーテッセレーションに対する詳細度のそれぞれをランタイムで計算する替わりに、ある実施形態では、これらを全て予め演算しておき、ランタイム時に参照してそのまま使用することによって、インナーテッセレーションの点及び接続性、又は三角形分割の値を決定するためのランタイム計算を遅延させることがない。
【００２２】
ある実施形態では、スレッド化及びベクトル化を使用して、インナーテッセレーション係数に基づいて、複数のパッチを分類してもよい。同じ詳細度を有する複数のパッチは、図８に示すように、マルチコアプロセッサ５０の同じ物理コアで、テッセレーションされる。パッチ分類部５２で、パッチを分類及びグループ化した後、同じインナーテッセレーション詳細度を有するテッセレーションされるべきパッチ全てを、同じコア５４又はコア５６に送信して、そのコアの全スレッドは、コアのレベル１キャッシュ５８及びレベル２キャッシュ６０における１つのコピーのみを使用してもよい。そして、後で、パッチプリミティブＩＤを使用して、複数の三角形を非分類化してもよい。三角形分割で生成される点の数においても、アウターバンドテッセレーションは、可変である。第１バッファ６２に、予め演算された既知のインナーテッセレーションを配置することにより、デュアルバッファ構成を利用してもよい。この場合、アウターテッセレーションの可変部分が計算されて、第２バッファ６４に格納される。図８には、コアが２つのみ示されているが、あらゆる数のコアを使用してもよい。
【００２３】
一実施形態では、次のように疑似コードを実装してもよい。
【表１】
0005224222.tif 000002
【００２４】
本明細書に記載されるグラフィックス処理技術は、様々なハードウェア構造に実装されてもよい。例えば、グラフィックス機能は、チップセット内に集積されていてもよい。これに替えて、グラフィックスプロセッサを別個、使用してもよい。また、別の実施形態として、グラフィックス機能は、マルチコアプロセッサを含む汎用プロセッサによって実装されてもよい。
【００２５】
本明細書で使用されている、「一実施形態」又は「ある実施形態」とは、実施形態に関連する特定の特徴、構造及び特性が、少なくとも本発明の実施形態の一つに含まれていることを意味する。したがって、本明細書中の「一実施形態において」又は「ある実施形態において」という表現は、必ずしも同一の実施形態を示していない。また、特定の特徴、構造及び特性を、記載した特定の実施形態以外の適切な形式で実装してもよく、このような全ての形式も、本願の特許請求の範囲に含まれる。
【００２６】
本発明が、限られた数の実施形態を参照して説明されたが、数多くの改良及び変更が可能であることは、当業者にとって明らかである。添付の特許請求の範囲は、本発明の精神及び範囲におけるこのような改良及び変更も含むことを意図している。
【図１】
0005224222.tif 000003
【図２】
0005224222.tif 000004
【図３】
0005224222.tif 000005
【図４】
0005224222.tif 000006
【図５Ａ】
0005224222.tif 000007
【図５Ｂ】
0005224222.tif 000008
【図５Ｃ】
0005224222.tif 000009
【図６】
0005224222.tif 000010
【図７】
0005224222.tif 000011
【図８】
0005224222.tif 000012