(57)【特許請求の範囲】
【請求項１】
コンピュータグラフィックスシステムにおいてテッセレーションを実行する方法であって、
１つ以上の入力パッチにおける各々の角の頂点の頂点テッセレーション係数を算出するステップと、
前記頂点テッセレーション係数を用いて前記１つ以上の入力パッチに対してテッセレーションを実行して、頂点により定義される複数のプリミティブを生成するステップであって、前記テッセレーションは、１つ以上の新しい頂点を追加することと、各々の新たに追加された頂点の変位係数を算出することとを含む、ステップと、
各頂点のワールド空間パラメータを、各頂点の対象ワールド空間パラメータを算出することと、頂点の対象ワールド空間パラメータを該頂点の変位係数を用いて修正することとによって、生成するステップと、
を含む方法。
【請求項２】
１つ以上の新しい頂点を追加することは、
パッチにおける隣接する頂点のペアの頂点テッセレーション係数を、閾値と比較することと、
少なくとも１つの頂点テッセレーション係数が前記閾値を超えると決定することに応答して、前記の２つの隣接する頂点の間のエッジを２つの部分に細分割する新しい子頂点を追加することであって、前記２つの隣接する頂点は、前記子頂点の親頂点である、ことと、
を含む、請求項１に記載の方法。
【請求項３】
前記新しい子頂点は、前記の２つの親頂点の間の前記エッジを二等分する、請求項２に記載の方法。
【請求項４】
各々の新たに追加された頂点の変位係数を算出することは、
頂点の変位係数を、該頂点の親頂点の頂点テッセレーション係数の関数として算出すること
を含む、請求項２又は３に記載の方法。
【請求項５】
前記１つ以上の入力パッチにおける各々の角の頂点の変位係数を、変位係数の最大値に設定するステップ、
をさらに含む請求項２乃至４のうちいずれか１項に記載の方法。
【請求項６】
頂点の対象ワールド空間パラメータを該頂点の変位係数を用いて修正することは、
前記頂点のワールド空間パラメータの開始状態を、前記頂点の親頂点のワールド空間パラメータ間で補間することによって生成することと、
前記頂点の変位係数を用いて、前記頂点のワールド空間パラメータの開始状態と前記頂点の対象ワールド空間パラメータとの間で補間することと、
を含む、請求項２乃至５のうちいずれか１項に記載の方法。
【請求項７】
１つ以上の新しい頂点を追加することは、
エッジにより接続され及びドメイン空間に定義された左頂点と右頂点とを含む最初のパッチについて、
前記左頂点の頂点テッセレーション係数及び前記右頂点の頂点テッセレーション係数を、閾値と比較することと、
前記左頂点及び右頂点の頂点テッセレーション係数のいずれも前記閾値を超えないと決定することに応答して、前記最初のパッチを説明するデータを出力することと、
前記左頂点及び右頂点の頂点テッセレーション係数のうちいずれかが前記閾値を超えると決定することに応答して、前記エッジを２つの部分に細分割する新しい頂点を形成することと、前記新しい頂点の頂点テッセレーション係数を算出することと、前記最初のパッチを分割して、前記左頂点及び前記新しい頂点を含む第１の新しいパッチと前記右頂点及び前記新しい頂点を含む第２の新しいパッチとを形成することと、前記の新たに形成されたパッチの各々における各頂点の頂点テッセレーション係数を低減させることと、
を含む、請求項１乃至６のうちいずれか１項に記載の方法。
【請求項８】
前記新しい頂点は前記エッジを二等分する、請求項７に記載の方法。
【請求項９】
１つ以上の新しい頂点を追加することは、
前記最初のパッチとして各々の新たに形成されたパッチを用いて当該方法を繰り返すこと、
をさらに含む、請求項７又は８に記載の方法。
【請求項１０】
前記新しい頂点の頂点テッセレーション係数を算出することは、
前記左頂点及び右頂点の頂点テッセレーション係数の平均値を算出することと、
前記新しい頂点の頂点テッセレーション係数を、前記の算出された平均値に等しく設定することと、
を含む、請求項７乃至９のうちいずれか１項に記載の方法。
【請求項１１】
前記最初のパッチは、２つの頂点、前記左頂点及び前記右頂点により定義される等値線パッチである、請求項７乃至１０のうちいずれか１項に記載の方法。
【請求項１２】
前記最初のパッチは三角形パッチであり、前記三角形パッチは、３つの頂点、すなわち、上頂点、前記右頂点、及び前記左頂点の、順序付けられたセットである、請求項７乃至１０のうちいずれか１項に記載の方法。
【請求項１３】
入力パッチを受け取るステップと、
前記入力パッチから１つ又は複数の最初のパッチを生成するステップと、
前記複数の最初のパッチの各々について、当該方法を繰り返すステップと、
をさらに含む請求項１２に記載の方法。
【請求項１４】
１つ又は複数の入力パッチにおける各々の角の頂点を定義するデータを受け取るように配置され、前記データは各々の角の頂点の頂点テッセレーション係数を含むハードウェアテッセレータであって、前記頂点テッセレーション係数を用いて前記複数の入力パッチに対してテッセレーションを実行して、頂点により定義される複数のプリミティブを生成し及び出力するように配置され、前記テッセレーションは１つ以上の新しい頂点を追加することを含むハードウェアロジック、を含み、前記ハードウェアテッセレータは、各々の新たに追加された頂点の変位係数を算出するように配置されたハードウェアロジックをさらに含む、ハードウェアテッセレータと、
各々の新たに追加された頂点について、頂点の受け取られた対象ワールド空間パラメータを該頂点の変位係数を用いて修正するように配置されたハードウェアブレンドシェーダと、
を含むグラフィックスパイプライン。
【請求項１５】
各々の角の頂点の頂点テッセレーション係数を算出し、前記頂点テッセレーション係数を前記ハードウェアテッセレータに出力するように配置された頂点シェーダと、
アウト頂点バッファであって、前記頂点テッセレーション係数を前記ハードウェアテッセレータに出力することは、前記頂点テッセレーション係数を前記アウト頂点バッファに記憶することを含む、アウト頂点バッファと、
各頂点の対象ワールド空間パラメータを算出し、前記対象ワールド空間パラメータを前記ハードウェアブレンドシェーダに出力するように配置されたドメインシェーダと、
のうち１つ以上をさらに含む請求項１４に記載のグラフィックスパイプライン。
【発明の詳細な説明】
【背景技術】
【０００１】
テッセレーションは、コンピュータグラフィックスにおいて使用される手法であり、あるシーンにおけるオブジェクトを表現する一組のサーフェスを、複数のより小さい、より簡素なピース（プリミティブと呼ばれる）へと分割する。このピースは、典型的には三角形であり、レンダリングにより適している。結果として生じるテッセレートされたサーフェスは、一般に、元のサーフェスに対する近似であるが、この近似の正確さは、生成されるプリミティブの数を増加させることによって向上させることができ、このことが今度は、大抵、プリミティブが小さくなることをもたらす。テッセレーション／細分割の量は、大抵、詳細レベル（level  of  detail；ＬＯＤ）によって決定される。したがって、より高い詳細レベルが必要とされる場合、典型的に、増加させた数のプリミティブが使用される。例えば、オブジェクトがビューアにより近いため、かつ／あるいは、オブジェクトがより入り組んだ形状を有するためなどである。しかしながら、多数の三角形の使用は、そのシーンをレンダリングするのに必要とされる処理労力を増大させる。
【０００２】
三角形プリミティブへの細分割は典型的にパッチに対して実行され、パッチは形状において四角く又は三角であり（すなわち、四角形又は三角形）、パッチを曲げて、該パッチが表現するオブジェクトのサーフェスにフィットさせ（ゆえに、「サーフェスパッチ」と呼ばれることがある）、かつ／あるいはディスプレースメントマッピングを適用させてもよい。しかしながら、細分割は、曲げられたパッチに対して実行されず、しかし代わって、２次元のパッチのドメインの中で実行され（すなわち、パッチは、多項式により定義されるというより、より平面的である）、上記ドメインは、（ｕ，ｖ）パラメータの観点において定義され、「パラメトリック空間」と呼ばれ得る。このことは、テッセレーション処理が、最終的なサーフェスに存在するいかなる湾曲からも独立であることを意味する。
【０００３】
テッセレーションは、前もって（例えば、あるシーンについての複数の異なるビューを、異なる詳細レベルにおいて及び／又は異なる視点から計算するように）実行されてもよく、あるいは、臨機応変に（on  the  fly）（例えば、連続的な又はビュー依存の詳細レベルを提供するように）実行されてもよい。いくつかの既存のテッセレーション方法を用いると、ユーザは、望まれない視覚的アーチファクトを体験する可能性があり、これにおいて、要求された詳細レベルは円滑に変更されるが、結果として生じるテッセレーションは非連続的な仕方において変化する。
【０００４】
以下に説明される実施形態は、単に例として提供され、テッセレーションを実行する既知の方法及び装置の欠点のうちいずれか又はすべてを解決する実施の限定ではない。
【発明の概要】
【発明が解決しようとする課題】
【０００５】
本発明の概要は、以下に詳細な説明においてさらに説明される概念のうち選択されたものを簡素化された形式で紹介するために提供される。本発明の概要は、請求される対象事項のうち重要な特徴又は必須の特徴を識別するものではなく、請求される対象事項の範囲の決定を支援するものとして使用されるべきものでもない。
【０００６】
パッチの各頂点について定義された頂点テッセレーション係数及び変位係数の双方を使用するテッセレーション方法が説明される。上記パッチは、四角形、三角形、又は等値線であり得る。上記方法は、コンピュータグラフィックスシステムにおいて実施され、１つ以上の入力パッチにおける各々の角の頂点の頂点テッセレーション係数を算出することを含む。それから、１つ以上の入力パッチに対して、頂点テッセレーション係数を用いて、テッセレーションが実行される。テッセレーション動作は、１つ以上の新しい頂点を追加することと、各々の新たに追加された頂点の変位係数を算出することとを含む。その後、各頂点のワールド空間パラメータが、各頂点の対象ワールド空間パラメータを算出することと、それから、頂点の対象ワールド空間パラメータを該頂点の変位係数を用いて修正することとによって決定される。
【０００７】
第１の態様は、コンピュータグラフィックスシステムにおいてテッセレーションを実行する方法を提供し、この方法は、１つ以上の入力パッチにおける各々の角の頂点の頂点テッセレーション係数を算出するステップと、上記頂点テッセレーション係数を用いて上記１つ以上の入力パッチに対してテッセレーションを実行して、頂点により定義される複数のプリミティブを生成するステップであって、上記テッセレーションは、１つ以上の新しい頂点を追加することと、各々の新たに追加された頂点の変位係数を算出することとを含む、ステップと、各頂点のワールド空間パラメータを、各頂点の対象ワールド空間パラメータを算出することと、頂点の対象ワールド空間パラメータを該頂点の変位係数を用いて修正することとによって、生成するステップと、を含む。
【０００８】
１つ以上の新しい頂点を追加することは：パッチにおける隣接する頂点のペアの頂点テッセレーション係数を、閾値と比較することと；少なくとも１つの頂点テッセレーション係数が上記閾値を超えると決定することに応答して、上記の２つの隣接する頂点の間のエッジを２つの部分に細分割する新しい子頂点を追加することであって、上記２つの隣接する頂点は、上記子頂点の親頂点である、ことと；を含み得る。上記新しい子頂点は、上記の２つの親頂点の間の上記エッジを二等分し得る。各々の新たに追加された頂点の変位係数を算出することは、頂点の変位係数を、該頂点の親頂点の頂点テッセレーション係数の関数として算出することを含み得る。上記頂点の親頂点の頂点テッセレーション係数の関数Ｇ（ＴＦ）は、
【数１】
0006736361.tif 000002
の場合、Ｇ（ＴＦ）＝（ＴＦｍａｘ−ＴＨＲＥＳ）／Δ
又は
【数２】
0006736361.tif 000003
の場合、Ｇ（ＴＦ）＝１
により与えられ得る。これにおいて、ＴＦｍａｘは親頂点の頂点テッセレーション係数の最大値であり、ＴＨＲＥＳは閾値であり、Δはある量であって、テッセレーションを実行するときに各反復においてΔずつ頂点テッセレーション係数が低減される。
【０００９】
上記方法は、上記１つ以上の入力パッチにおける各々の角の頂点の変位係数を、変位係数の最大値に設定するステップ、をさらに含み得る。
【００１０】
頂点の対象ワールド空間パラメータを該頂点の変位係数を用いて修正することは：上記頂点のワールド空間パラメータの開始状態を、上記頂点の親頂点のワールド空間パラメータ間で補間することによって生成することと；上記頂点の変位係数を用いて、上記頂点のワールド空間パラメータの開始状態と上記頂点の対象ワールド空間パラメータとの間で補間することと；を含み得る。頂点の変位係数が最小値に等しい場合、頂点のワールド空間パラメータは、頂点のワールド空間パラメータの開始状態に等しくなることがあり、頂点の変位係数が最大値に等しい場合、頂点のワールド空間パラメータは、頂点のワールド空間パラメータの対象状態に等しくなり得る。頂点の変位係数ｄｆを用いて、頂点のワールド空間パラメータの開始状態Ｍ’と頂点の対象ワールド空間パラメータＭ（ｕ３，ｖ３）との間で補間することは、（１−ｄｆ）＊Ｍ’＋ｄｆ＊Ｍ（ｕ３，ｖ３）を算出することを含み得る。頂点のワールド空間パラメータの開始状態Ｍ’を、該頂点の親頂点のワールド空間パラメータＭ（ｕ１，ｖ１）、Ｍ（ｕ２，ｖ２）間で補間することによって生成することは、
Ｍ’＝ＲＡＳＴ＿ＩＮＴＥＲＰ（Ｍ（ｕ１，ｖ１），Ｍ（ｕ２，ｖ２），Ａ）
を算出することを含み得る。これにおいて、ＲＡＳＴ＿ＩＮＴＥＲＰは、コンピュータグラフィックスシステムのラスタライザにより使用される補間関数であり、Ａは定数である。
【００１１】
１つ以上の新しい頂点を追加することは、エッジにより接続され及びドメイン空間に定義された左頂点と右頂点とを含む最初のパッチについて：上記左頂点の頂点テッセレーション係数及び上記右頂点の頂点テッセレーション係数を、閾値と比較することと；上記左頂点及び右頂点の頂点テッセレーション係数のいずれも上記閾値を超えないと決定することに応答して、上記最初のパッチを説明するデータを出力することと；上記左頂点及び右頂点の頂点テッセレーション係数のうちいずれかが上記閾値を超えると決定することに応答して、上記エッジを２つの部分に細分割する新しい頂点を形成することと、上記新しい頂点の頂点テッセレーション係数を算出することと、上記最初のパッチを分割して、上記左頂点及び上記新しい頂点を含む第１の新しいパッチと上記右頂点及び上記新しい頂点を含む第２の新しいパッチとを形成することと；上記の新たに形成されたパッチの各々における各頂点の頂点テッセレーション係数を低減させることと；を含み得る。
【００１２】
上記新しい頂点は、上記エッジを二等分し得る。１つ以上の新しい頂点を追加することは、上記最初のパッチとして各々の新たに形成されたパッチを用いて当該方法を繰り返すことをさらに含み得る。各々の新たに形成されたパッチについて、上記最初のパッチとして、当該方法を繰り返すことは、各パッチにおける左及び右頂点の頂点テッセレーション係数が閾値を超えなくなるまで、各々の新たに形成されたパッチについて、上記最初のパッチとして、当該方法を繰り返すことを含み得る。
【００１３】
上記新しい頂点の頂点テッセレーション係数を算出することは：上記左頂点及び右頂点の頂点テッセレーション係数の平均値を算出することと；上記新しい頂点の頂点テッセレーション係数を、上記の算出された平均値に等しく設定することと；を含み得る。左頂点及び右頂点の頂点テッセレーション係数の平均値は、
ＭＥＡＮ（ＬＥＦＴ．ＴＦ，ＲＩＧＨＴ．ＴＦ）＝ＭＩＮ（ＡＶＧ（ＬＥＦＴ．ＴＦ，ＲＩＧＨＴ．ＴＦ），ＭＩＮ（ＬＥＦＴ．ＴＦ，ＲＩＧＨＴ．ＴＦ）＋ＩＮＴＥＲＶＡＬ）
により与えられ得る。これにおいて、ＬＥＦＴ．ＴＦは左頂点の頂点テッセレーション係数であり、ＲＩＧＨＴ．ＴＦは右頂点の頂点テッセレーション係数であり、ＡＶＧ（）は括弧内の値の算術平均であり、ＭＩＮ（）は括弧内の値のリストのうちの最小であり、ＩＮＴＥＲＶＡＬは所定のパラメータである。
【００１４】
新たに形成されたパッチの各々における各頂点の頂点テッセレーション係数を低減させることは、各頂点テッセレーション係数を、所定のパラメータＩＮＴＥＲＶＡＬによって低減させることを含み得る。パラメータＩＮＴＥＲＶＡＬは、０．５であり得る。閾値はゼロであり得る。
【００１５】
上記最初のパッチは、２つの頂点、上記左頂点及び上記右頂点により定義される等値線パッチであり得る。
【００１６】
上記最初のパッチは、三角形パッチであることがあり、上記三角形パッチは、３つの頂点、すなわち、上頂点、上記右頂点、及び上記左頂点の、順序付けられたセットであり得る。分割されるパッチは、２つの新たに形成されるパッチに対する親パッチであることがあり、第１の新しいパッチは、３つの頂点、すなわち、親パッチに対して追加された新しい頂点である上頂点と、親パッチの左頂点である右頂点と、親パッチの上頂点である左頂点との、順序付けられたセットであり、第２の新しいパッチは、３つの頂点、すなわち、親パッチに追加された新しい頂点である上頂点と、親パッチの上頂点である右頂点と、親パッチの右頂点である左頂点との、順序付けられたセットである。上記方法は、入力パッチを受け取るステップと、上記入力パッチから１つ又は複数の最初のパッチを生成するステップと、上記複数の最初のパッチの各々について、当該方法を繰り返すステップと、をさらに含み得る。
【００１７】
入力パッチは、３つの頂点を有する三角形パッチであることがあり、１つ又は複数の最初のパッチを生成するステップは：３つの頂点の各々の頂点テッセレーション係数を閾値と比較することと；上記頂点テッセレーション係数のいずれも上記閾値を超えないと決定することに応答して、上記入力パッチを説明するデータを出力することと；上記頂点テッセレーション係数の少なくとも１つが上記閾値を超えると決定することに応答して、上記三角形の中心に新しい頂点を形成することと、上記新しい頂点の頂点テッセレーション係数を算出することと、上記入力パッチを分割して３つの最初のパッチを形成することであって、各々の最初のパッチは上頂点として上記新しい頂点を有する三角形パッチである、ことと、新たに形成された最初のパッチの各々における各頂点の頂点テッセレーション係数を低減させることと、を含み得る。新しい頂点は、三角形の重心に形成されてもよい。入力パッチの３つの頂点は、上頂点、左頂点、及び右頂点であることがあり、三角形の中心における新しい頂点の頂点テッセレーション係数は、ＭＩＤ．ＴＦ＝ＭＥＡＮ（ＴＯＰ．ＴＦ，ＬＥＦＴ．ＴＦ，ＲＩＧＨＴ．ＴＦ）を用いて算出され得る。これにおいて、ＭＩＤ．ＴＦは新しい頂点の頂点テッセレーション係数であり、ＴＯＰ．ＴＦは上頂点の頂点テッセレーション係数であり、ＬＥＦＴ．ＴＦは左頂点の頂点テッセレーション係数であり、ＲＩＧＨＴ．ＴＦは右頂点の頂点テッセレーション係数であり、ＭＥＡＮ（）は括弧内の値の平均値である。ＭＥＡＮ（ＴＯＰ．ＴＦ，ＬＥＦＴ．ＴＦ，ＲＩＧＨＴ．ＴＦ）は、
ＭＥＡＮ（ＴＯＰ．ＴＦ，ＬＥＦＴ．ＴＦ，ＲＩＧＨＴ．ＴＦ）＝ＭＩＮ（ＡＶＧ（ＴＯＰ．ＴＦ，ＬＥＦＴ．ＴＦ，ＲＩＧＨＴ．ＴＦ），ＭＩＮ（ＴＯＰ．ＴＦ，ＬＥＦＴ．ＴＦ，ＲＩＧＨＴ．ＴＦ）＋ＩＮＴＥＲＶＡＬ）
を用いて算出され得る。これにおいて、ＡＶＧ（）は括弧内の値の算術平均であり、ＭＩＮ（）は括弧内の値のリストのうちの最小であり、ＩＮＴＥＲＶＡＬは所定のパラメータである。
【００１８】
入力パッチは４つの頂点を有する四角形パッチであることがあり、１つ又は複数の最初のパッチを生成するステップは：四角形パッチの中心に新しい頂点を形成することと；新しい頂点の頂点テッセレーション係数を算出することと；入力パッチを分割して４つの最初のパッチを形成することであって、各々の最初のパッチは上頂点として上記新しい頂点を有する三角形パッチである、ことと；新たに形成された最初のパッチの各々における各頂点の頂点テッセレーション係数を低減させることと、を含み得る。
【００１９】
入力パッチは、４つの頂点及び中心テッセレーション係数を有する四角形パッチであることがあり、１つ又は複数の最初のパッチを生成するステップは：５つの新しい頂点を追加して、入力パッチを４つのサブ入力四角形パッチに細分割することと；５つの新たに追加された頂点の各々の頂点テッセレーション係数を算出することと；新たに形成された４つのサブ入力パッチにおける各頂点の頂点テッセレーション係数を低減させることと；各サブ入力パッチについて：四角形パッチの中心に新しい頂点を形成することと；新しい頂点の頂点テッセレーション係数を算出することと；入力パッチを分割して４つの最初のパッチを形成することであって、各々の最初のパッチは上頂点として上記新しい頂点を有する三角形パッチである、ことと；新たに形成された最初のパッチの各々における各頂点の頂点テッセレーション係数を低減させることと、を含み得る。
【００２０】
入力パッチは、３つの頂点及び中心テッセレーション係数を有する三角形パッチであることがあり、１つ又は複数の最初のパッチを生成するステップは：４つの新しい頂点を追加して、入力パッチを３つのサブ入力四角形パッチに細分割することと；５つの新たに追加された頂点の各々の頂点テッセレーション係数を算出することと；新たに形成された４つのサブ入力パッチにおける各頂点の頂点テッセレーション係数を低減させることと；各サブ入力パッチについて：四角形パッチの中心に新しい頂点を形成することと；上記新しい頂点の頂点テッセレーション係数を算出することと；入力パッチを分割して４つの最初のパッチを形成することであって、各々の最初のパッチは上頂点として上記新しい頂点を有する三角形パッチである、ことと；新たに形成された最初のパッチの各々における各頂点の頂点テッセレーション係数を低減させることと；を含み得る。
【００２１】
入力パッチの４つの頂点は、左上頂点、右上頂点、左下頂点、及び右下頂点であることがあり、三角形の中心における新しい頂点の頂点テッセレーション係数は、
ＭＩＤ．ＴＦ＝ＭＥＡＮ（ＴＬＥＦＴ．ＴＦ，ＴＲＩＧＨＴ．ＴＦ，ＢＬＥＦＴ．ＴＦ，ＢＲＩＧＨＴ．ＴＦ）
を用いて算出され得る。これにおいて、ＭＩＤ．ＴＦは新しい頂点の頂点テッセレーション係数であり、ＴＬＥＦＴ．ＴＦは左上頂点の頂点テッセレーション係数であり、ＴＲＩＧＨＴ．ＴＦは右上頂点の頂点テッセレーション係数であり、ＢＬＥＦＴ．ＴＦは左下頂点の頂点テッセレーション係数であり、ＢＲＩＧＨＴ．ＴＦは右下頂点の頂点テッセレーション係数であり、ＭＥＡＮ（）は括弧内の値の平均値である。
【００２２】
ＭＥＡＮ（ＴＬＥＦＴ．ＴＦ，ＴＲＩＧＨＴ．ＴＦ，ＢＬＥＦＴ．ＴＦ，ＢＲＩＧＨＴ．ＴＦ）は、
ＭＥＡＮ（ＴＬＥＦＴ．ＴＦ，ＴＲＩＧＨＴ．ＴＦ，ＢＬＥＦＴ．ＴＦ，ＢＲＩＧＨＴ．ＴＦ）＝ＭＩＮ（ＡＶＧ（ＴＬＥＦＴ．ＴＦ，ＴＲＩＧＨＴ．ＴＦ，ＢＬＥＦＴ．ＴＦ，ＢＲＩＧＨＴ．ＴＦ），ＭＩＮ（ＴＬＥＦＴ．ＴＦ，ＴＲＩＧＨＴ．ＴＦ，ＢＬＥＦＴ．ＴＦ，ＢＲＩＧＨＴ．ＴＦ）＋ＩＮＴＥＲＶＡＬ）
を用いて算出され得る。これにおいて、ＡＶＧ（）は括弧内の値の算術平均であり、ＭＩＮ（）は括弧内の値のリストのうちの最小であり、ＩＮＴＥＲＶＡＬは所定のパラメータである。
【００２３】
新たに形成された最初のパッチの各々における各頂点の頂点テッセレーション係数を低減させることは、所定のパラメータＩＮＴＥＲＶＡＬによって各頂点テッセレーション係数を低減させることを含み得る。
【００２４】
第２の態様がグラフィックスパイプラインを提供し、このグラフィックスパイプラインは：１つ又は複数の入力パッチにおける各々の角の頂点を定義するデータを受け取るように配置され、上記データは各々の角の頂点の頂点テッセレーション係数を含むハードウェアテッセレータであって、上記頂点テッセレーション係数を用いて上記複数の入力パッチに対してテッセレーションを実行して、頂点により定義される複数のプリミティブを生成し及び出力するように配置され、上記テッセレーションは１つ以上の新しい頂点を追加することを含むハードウェアロジック、を含み、上記ハードウェアテッセレータは、各々の新たに追加された頂点の変位係数を算出するように配置されたハードウェアロジックをさらに含む、ハードウェアテッセレータと；各々の新たに追加された頂点について、頂点の受け取られた対象ワールド空間パラメータを該頂点の変位係数を用いて修正するように配置されたハードウェアブレンドシェーダと；を含む。
【００２５】
グラフィックスパイプラインは、各々の角の頂点の頂点テッセレーション係数を算出し、上記頂点テッセレーション係数を上記ハードウェアテッセレータに出力するように配置された頂点シェーダ、をさらに含み得る。
【００２６】
グラフィックスパイプラインは、アウト頂点バッファをさらに含むことがあり、上記頂点テッセレーション係数を上記ハードウェアテッセレータに出力することは、上記頂点テッセレーション係数を上記アウト頂点バッファに記憶することを含む。
【００２７】
グラフィックスパイプラインは、各頂点の対象ワールド空間パラメータを算出し、上記対象ワールド空間パラメータを上記ハードウェアブレンドシェーダに出力するように配置されたドメインシェーダ、をさらに含み得る。グラフィックスパイプラインは、インドメインバッファをさらに含むことがあり、上記対象ワールド空間パラメータを上記ハードウェアブレンドシェーダに出力することは、上記対象ワールド空間パラメータを上記インドメインバッファに記憶することを含む。
【００２８】
２つの親頂点間のエッジを二等分する新しい頂点について、新たに追加された頂点の変位係数を算出するように配置された上記ハードウェアロジックは、新たに追加された頂点の変位係数を、該頂点の親頂点の頂点テッセレーション係数の関数として算出するように配置され得る。
【００２９】
新たに追加された頂点の変位係数を算出するように配置された上記ハードウェアロジックは、上記１つ又は複数の入力パッチにおける各々の角の頂点の変位係数を、変位係数の最大値に設定するように配置され得る。
【００３０】
上記ハードウェアブレンドシェーダは：頂点のワールド空間パラメータの開始状態を、該頂点の親頂点のワールド空間パラメータ間で補間することによって生成し；上記頂点の変位係数を用いて、上記頂点のワールド空間パラメータの上記生成された開始状態と上記頂点の受け取られた対象ワールド空間パラメータとの間で補間する；ように配置されたハードウェアロジックを含み得る。頂点の変位係数が最小値に等しい場合、頂点のワールド空間パラメータは頂点のワールド空間パラメータの開始状態に等しくなることがあり、頂点の変位係数が最大値に等しい場合、頂点のワールド空間パラメータは頂点のワールド空間パラメータの対象状態に等しくなり得る。
【００３１】
テッセレーションを実行するように構成された上記ハードウェアロジックは、エッジにより接続され及びドメイン空間に定義された左頂点と右頂点とを含む最初のパッチについて：上記左頂点の頂点テッセレーション係数及び上記右頂点の頂点テッセレーション係数を、閾値と比較し；上記左頂点及び右頂点の頂点テッセレーション係数のいずれも上記閾値を超えないと決定することに応答して、上記最初のパッチを説明するデータを出力し；上記左頂点及び右頂点の頂点テッセレーション係数のうちいずれかが上記閾値を超えると決定することに応答して、上記エッジを２つの部分に細分割する新しい頂点を形成し、上記新しい頂点の頂点テッセレーション係数を算出し、上記最初のパッチを分割して、上記左頂点及び上記新しい頂点を含む第１の新しいパッチと上記右頂点及び上記新しい頂点を含む第２の新しいパッチとを形成し、上記の新たに形成されたパッチの各々における各頂点の頂点テッセレーション係数を低減させる；ように配置され得る。
【００３２】
さらなる態様が、本明細書に説明されるとおりのグラフィックスパイプラインを定義するコンピュータ可読プログラムコードをエンコードさせたコンピュータ可読記憶媒体と、本明細書に説明されるとおりの方法を実行するように構成されたグラフィックスパイプラインを定義するコンピュータ可読プログラムコードをエンコードさせたコンピュータ可読記憶媒体とを提供する。
【００３３】
当業者に明らかであろうとおり、好適な特徴が、必要に応じて組み合わせられてもよく、本発明の態様のうち任意のものと組み合わせられてもよい。
【図面の簡単な説明】
【００３４】
本発明の実施形態が、例として、下記の図面を参照して説明される。同様の特徴を示すために、共通の参照番号が図面の全体にわたって使用される。
【図１】様々な既知のテッセレーション方法の使用の結果を示す。
【図２】小数区分化を用いた変位マップの使用を示す。
【図３】変位係数を使用する一例示的なテッセレーション方法のフロー図である。
【図４】親頂点間で補間することに使用され、変位係数を使用する、ブレンディング処理の２つの概略図を示す。
【図５】変位係数を用いてテッセレーション係数が増加するとき如何にしてジオメトリが変わるかを示す。
【図６】向上させたテッセレーション方法のフロー図である。
【図７】様々な入力パッチを示し、図６の方法の前処理段階を例示する、概略図である。
【図８】三角形入力パッチについての、図６の方法の前処理段階のフロー図である。
【図９】四角形入力パッチについての、図６の方法の前処理段階のフロー図である。
【図１０】前処理段階により出力される３つ又は４つの三角形パッチの各々に対する、又は入力等値線パッチに対する、アルゴリズムの再帰的適用のフロー図である。
【図１１】図１０の方法を例示する三角形を示す概略図である。
【図１２】本明細書に説明される向上させたテッセレーション方法を例示する三角形を示す概略図である。
【図１３】向上させたテッセレーション方法のさらなる例示的なフロー図であり、図６に示されるものに対するバリエーションである。
【図１４】図１３の方法を例示する概略図である。
【図１５】図１３の方法の追加的な前処理段階のフロー図である。
【図１６】図１３の方法を用いて得られる例示的な結果を示す。
【図１７】一例示的な向上させたＧＰＵパイプラインの概略図である。
【図１８】任意の形態のコンピューティング及び／又は電子装置として実施されることが可能であり、本明細書に説明される向上させたテッセレーション方法を実施するように構成されることが可能である一例示的なコンピューティングベース装置の様々なコンポーネントを例示する。
【発明を実施するための形態】
【００３５】
本発明の実施形態が、以下に、単に例として説明される。これら例は、出願人にとって現在分かっている本発明を実施するための最良の方法を表すが、このことを達成することができる方法はこれら例だけではない。本説明は、例の機能と例を構築し及び動作させるステップのシーケンスとを明記する。しかしながら、同一の又は均等の機能及びシーケンスが、異なる例によって達成され得る。
【００３６】
エッジテッセレーション係数（tessellation  factor；ＴＦ）を使用する多数の既知のテッセレーション方法が存在し、エッジＴＦは、パッチの（例えば、四角形（quad）又は三角形の）各エッジについて定義され、エッジ（及び、ゆえにパッチ）が何回細分割される（sub-divided）べきかを決定する。図１は、種々のエッジテッセレーション係数を、ただし各エッジについて同じテッセレーション係数で使用するときに、結果として生じる三角形が如何に異なるかを示す。
【００３７】
図１における始めの４つの例（ａ）〜（ｄ）は、
（ａ）整数区分化（Integer  partitioning）、すべての４つのエッジについてエッジＴＦ＝３
（ｂ）整数区分化、すべての４つのエッジについてエッジＴＦ＝４
（ｃ）２の累乗整数区分化（Power  of  two  integer  partitioning）、すべての４つのエッジについてエッジＴＦ＝３
（ｄ）２の累乗整数区分化、すべての４つのエッジについてエッジＴＦ＝４
を示す。
【００３８】
整数区分化と２の累乗整数区分化とを用いると、各エッジに沿った頂点は、常に、均等に間隔を空けられる。しかしながら、細分割レベルが変わり（詳細レベルが変化し）、三角形が小さくない場合、望まれない視覚的アーチファクト（ポッピングなどであり、以下に説明される）が発生する可能性が高い。ただし、小さいポリゴンがさらなるレンダリングオーバーヘッドを招くとき、ポリゴンをその小ささにすることは望ましくない。この効果は、２の累乗整数区分化について、ステップサイズがかなり大きくなり得るとき、特に劇的である。
【００３９】
図１における最後の４つの例（ｅ）〜（ｈ）は、（例（ａ）〜（ｄ）とは異なり、）様々なオフセットにおいて頂点を生成する小数区分化（fractional  partitioning）方法を示し、
ｆ）奇数（Odd）小数区分化、すべての４つのエッジについてエッジＴＦ＝３．０
ｇ）奇数小数区分化、すべての４つのエッジについてエッジＴＦ＝４．０
ｈ）偶数（Even）小数区分化、すべての４つのエッジについてエッジＴＦ＝３．０
ｉ）偶数小数区分化、すべての４つのエッジについてエッジＴＦ＝４．０
である。
【００４０】
いくつかの既知のシステムは、（例えば、例（ｅ）〜（ｈ）に図示されるとおり）「小数の」詳細レベルを許容することによって、エッジに沿って「ポッピング」アーチファクトを回避する。これにおいて、いかなる新しい頂点も、最初、既存の頂点の場所に作成され、こうした頂点が、詳細レベルが増加するとき、パラメータ空間におけるほんの１つのエッジについて図２（ａ）に図示されるとおり、位置へ徐々に「スライドする」。表現における突然のジャンプが大幅に除去されるが、こうしたスキームは、邪魔になる、不安定な「遊泳（swimming）／揺動（wobbling）」アーチファクトを被る可能性があり、該アーチファクトは、ディスプレースメントマッピング（displacement  mapping）の使用によって悪化させられる可能性があり、このことは図２（ｂ）及び（ｃ）を参照して説明され得る。
【００４１】
図２（ｂ）は、一例示的な変位マップ断面を示し、図２（ｃ）は、テッセレーション係数が変更されるとき、上記断面が如何にエッジ（例えば、図２（ａ）に示されるエッジ）に適用されるかを示す。矢印２０１〜２０４は、テッセレーション係数が４．０から５．０に（矢印２０１、２０２）、及び５．０から６．０に（矢印２０３、２０４）変わるとき、頂点の変位（displacement）が如何に変わるかを示す。
【００４２】
メッシュ内の頂点のパラメータを決定する向上させた方法が本明細書において説明され、該方法は変位係数（displacement  factors）を使用して、図２を参照して上記で説明されたポッピングと遊泳アーチファクトとの双方を軽減する。以下に詳細に説明されるとおり、メッシュにおける頂点のパラメータ（該パラメータは、「頂点メンバ値」と呼ばれることがあり、位置、法線、タンジェント等を含み得る）は、頂点の変位係数に基づいて、「対象の（target）」又は最終的な値から変位させられる（displaced）。このことは、新しい頂点がメッシュに対して追加されるとき、そのパラメータが該頂点の親頂点のパラメータの平均であり、それから、パラメータが、対象値に等しくなるまで徐々に変化するという効果を有する。このことは、頂点パラメータの値における急な変化を回避し、急な変化は、望まれない視覚的アーチファクトをもたらす可能性がある。
【００４３】
上記方法（及び、ゆえに変位係数）は任意のテッセレーション方法との組み合わせにおいて使用されてよく、上記任意のテッセレーション方法は、（ａ）ドメイン（例えば、四角形、三角形、又は等値線（isoline））の各々の角の頂点について定義されたテッセレーション係数を使用し、（ｂ）複数の新しい頂点を追加することを含み、各々の新しい頂点は、２つの既存の頂点を接続するエッジを２つの部分に細分割する、（ドメイン空間における）位置に追加される（いくつかの例において、上記２つの部分は等しい部分であることがあり、新しい頂点はエッジを二等分する）。新たに追加される頂点は子頂点と呼ばれることがあり、２つの既存の頂点は親頂点と呼ばれることがある。頂点についてのテッセレーション係数は、「頂点テッセレーション係数」と呼ばれ、これらは、上記で説明された既知の方法において使用されるエッジテッセレーション係数から区別される。頂点テッセレーション係数を使用する一例示的なテッセレーション方法が、図６〜図１６を参照して以下に説明される。
【００４４】
本説明において、サーフェスパッチは、通常有限の、Ｎ次元のサーフェス（又は、等値線の場合、Ｎ次元の曲線セグメント）を指し、このサーフェスは、四角形又は三角形のいずれかである境界を定められた２Ｄドメイン（又は、等値線の場合は１Ｄの線セグメント）への、パラメトリックマッピング関数の適用の結果である。結果として生じるサーフェス又は等値線は、デカルトの（又は、同種の）空間的位置決めのための３（又は４）次元だけでなく、テクスチャ座標などの他のパラメータをさらに含み得るので、Ｎ次元と見なされることができる。上記で説明されたとおり、サーフェスパッチを曲げて、該サーフェスパッチが表現するオブジェクトのサーフェスにフィットさせ、かつ／あるいはディスプレースメントマッピングを適用させてもよい。しかしながら、テッセレーション（すなわち、パッチの細分割）は「ワールド空間（world  space）」において実行されず（すなわち、テッセレーションは、曲げられたサーフェスパッチに対して実行されない）、しかし代わって、ドメイン空間において実行される（このドメイン空間はさらにパラメトリック空間又はパラメータ空間と呼ばれることがある）。上記ドメイン空間において、ドメイン内の任意の位置が、ドメイン空間座標として知られる２つの座標（ｕ，ｖ）によって説明されることができ、このことは、テッセレーション処理が最終的なサーフェスに存在するいかなる湾曲からも独立であることを意味する（しかしながら、ユーザは、テッセレーション係数を決定するとき、上記湾曲を考慮に入れてもよい）。
【００４５】
下記の説明においてテッセレーション方法を説明するとき、用語「パッチ」は、ドメインの境界を定める２つ、３つ、又は４つの頂点の順序付けられたセットを（等値線、三角形、又は四角形について、それぞれ、）指すように用いられる。ゆえに、用語「ドメイン」は、パッチの頂点により境界を定められた２次元の空間を指す。用語「頂点」は、概して、場所に加えて他の属性を説明するように用いられ、上記属性は、コンテキストに依存して異なる。例えば、ドメインシェーダ（domain  shader）からの入力制御点と出力頂点とは、３Ｄ位置に加えて他のパラメータ、例えば、法線、タンジェント、テクスチャなどを含み、一方、テッセレータ（tessellator）内の頂点（すなわち、テッセレーション方法内で使用される頂点）は、ドメイン空間座標と頂点テッセレーション係数とを含む。ゆえに、テッセレータ内の上記頂点は、入力制御点又は最終的な三角形を形成する結果的なＮ次元の頂点と同じでない。
【００４６】
図３は、変位係数を使用する一例示的なテッセレーション方法のフロー図である。この方法は、ＧＰＵパイプラインにおいて実施され得る３つのハイレベルの方法ブロックを示している。ＧＰＵパイプラインの例が、以下により詳細に説明される。
【００４７】
図３に示されるとおり、頂点テッセレーション係数が、１つ以上の入力パッチの各々の角の頂点について、例えば、カメラからの頂点の位置の関数として、算出される（ブロック３０２）。それから、上記入力パッチの各々は、パッチの角の頂点の頂点テッセレーション係数に基づいて、例えば、以下の２つの例示的な方法のうち１つ、又は代替的な方法を用いて、複数のプリミティブ（例えば、三角形又は線）に細分割される（ブロック３０４）。細分割の間、１つ以上の新しい頂点が追加され（ブロック３０５）、各々の新しい（「子」）頂点は、２つの既存の（「親」）頂点間の線を２つの部分に細分割する、ドメイン空間における位置に追加される。上記で説明されたとおり、２つの部分は等しいことがあり、子頂点は２つの親頂点間の線（又は、エッジ）を二等分し、あるいは、２つの部分の長さに差があることがあり、子頂点は２つの親頂点間でちょうどに置かれない。変位係数が、各々の新たに追加された頂点について算出され（ブロック３０６）、こうした変位係数は、後に（ブロック３０８において）、頂点のドメイン空間座標と共に使用されて、プリミティブにおける各頂点についての１つ以上のワールド空間頂点パラメータ、例えば、位置、法線、及びタンジェントなどが生成される。上記変位係数は、新しい頂点が追加されるとき、頂点（例えば、親頂点であるが、他の例において、子頂点の頂点ＴＦが追加的に又は代わって使用されてもよい）の頂点テッセレーション係数を用いて、（ブロック３０６において）算出される。上記頂点テッセレーション係数は、必ずしも、テッセレーション処理の終わりにおける頂点の頂点テッセレーション係数と同じでない。なぜならば、以下により詳細に２つの例示的なテッセレーション方法を参照して説明されるとおり、頂点テッセレーション係数は、テッセレーション処理の間に低減されることがあるからである。
【００４８】
頂点についての（ブロック３０８における）ワールド空間パラメータの生成は、以下により詳細に説明されるとおり、子頂点についての１つ以上の対象ワールド空間（target  world  space）パラメータと、その２つの親頂点についての対応するワールド空間パラメータとを生成すること（ブロック３１０）と、それから、「ブレンディング（blending）」を実行すること（ブロック３１２）とを含むことができ、子頂点の各ワールド空間パラメータについて、特定パラメータの対象値が、子頂点の変位係数と２つの親頂点の各々についての当該ワールド空間パラメータの生成された値とに基づいて修正される。例えば、パラメータがワールド空間位置である場合、ブレンディングは、子頂点についての対象ワールド空間位置とその２つの親頂点の各々のワールド空間位置とを取得し、子頂点の対象ワールド空間位置と、２つの親頂点の各々についての算出されたワールド空間位置（該位置は、以下に説明されるとおり、これら頂点の「対象」ワールド空間位置であることになる）と、子頂点の変位係数とに基づいて、子頂点の修正されたワールド空間位置を生成する。
【００４９】
頂点テッセレーション係数の（ブロック３０２における）算出は、例えば、頂点ごとに動作する頂点シェーダ内で（すなわち、メッシュトポロジの知識なしに）実施されてもよく、同時に、入力パッチの（ブロック３０４における）細分割と変位係数の（ブロック３０６における）算出とは、ハードウェアテッセレーションユニット（又は、テッセレータ）内で実施されてもよい。最後、各頂点についての（ブロック３０８における）ワールド空間パラメータの生成は、ＧＰＵにおける１つ以上のシェーダ内で実施されてもよい（例えば、ブレンディングがブレンドシェーダ内で実行されてもよく、ブレンドシェーダは、ハードウェアにおいて実施されてもよく、ドメインシェーダにより生成される対象ワールド空間パラメータを使用してもよく、ドメインシェーダは、ソフトウェアにおいて実施されてもよい）。
【００５０】
変位係数の使用は、本明細書において説明されるとおり、「ポッピング」と呼ばれる問題に対処する。ポッピングは、既知のテッセレーション方法において、詳細レベルが変わるとき（例えば、オブジェクトがカメラにより近くなり、ゆえに、より高い詳細レベルでレンダリングされる必要があるとき）、生じる。ポッピングは、しばしば、向きを突然に変えるプリミティブの視覚的アーチファクトを説明することに用いられるが、しかしながら、ポッピングは、頂点メンバにおける任意の不連続性を参照し得る（例えば、新しい頂点を追加することによる、メッシュの点上の法線における突然の変化は、ライティングを突然に変化させることになる）。このことは、主に、頂点が形成され、高さマップによってすぐに変位させられるとき、生じる。いくつかの既知の小数の方法は、新しい頂点を古い頂点の上に導入することと（このことは、頂点のすべての特性、例えば、位置、法線、タンジェント、テクスチャ座標等が、同じであることを保証する）、これらを、（図２を参照して上記で説明されたとおり）詳細レベルが増加するときに位置へ外にスライドすることとによって、上記の問題を克服する。しかしながら、こうした手法の使用は「遊泳」アーチファクトを導入し、これにおいて、頂点の動きは、結果として（図２に示され、上で説明されたとおり）、ゆらめき（shimmer）に見えるジオメトリ（geometry）をもたらす。
【００５１】
変位係数（ブロック３０６において算出されたとおりの）は、ゼロとイチとの間の値を有するように定義されることができ（すなわち、変位係数は、［０，１］内の値を有する）、頂点の変位係数の値は、頂点の「年齢」に依存して変化する。ポッピングを回避するために、変位係数は、（例えば、特定の詳細レベルにおいて）最初導入されるときの頂点について、ゼロである。それから、変位係数は、（詳細レベルが増加するとき）増加し、（詳細レベルがさらに増加するとき）頂点が親になる前に１でなければならない。
【００５２】
本明細書に説明される例は、ゼロから１に及ぶ変位係数を参照するが、他の例において、代替的な範囲が使用されてもよく、範囲は、より一般的に［ｄｆｍｉｎ，ｄｆｍａｘ］として指定されてもよい。これにおいて、ｄｆｍｉｎは、（新たに追加された頂点についての）最小のとり得る変位係数であり、ｄｆｍａｘは、（元の頂点及び親頂点についての）最大のとり得る変位係数である。
【００５３】
パッチにおける頂点の頂点テッセレーション係数は、このパッチがさらなる細分割を必要とするかを決定し（ブロック３０４において、以下により詳細に２つの例示的なテッセレーション方法を参照して説明されるとおり）、親頂点の頂点テッセレーション係数は、子頂点の年齢と、それがそれ自体親であり得るかとの指標として使用されることができる。複数の親頂点の頂点テッセレーション係数（又は、少なくとも１つの親頂点であり、この場合、細分割は、単一の頂点の頂点テッセレーション係数次第である）が、細分割の条件にちょうど合う場合、子頂点が新たに追加され、その変位係数はゼロである。複数の親頂点の頂点テッセレーション係数（又は、少なくとも１つの親頂点であり、この場合、細分割は、単一の頂点の頂点テッセレーション係数次第である）が、細分割の条件を大幅に超え、したがって２つ以上の細分割が必要とされる場合、子頂点は、それ自体、親頂点であることが可能であり、その変位係数は１である。変位係数の中間値（すなわち、ゼロより大きいが１より小さい）は、親頂点の頂点テッセレーション係数（又は、少なくとも１つの親頂点であり、この場合、細分割は、単一の頂点の頂点テッセレーション係数次第である）が細分割の基準を超えるほど十分大きい（すなわち、子頂点は新たに追加されず、ゆえに、変位係数は非ゼロである）が、さらなる細分割（子頂点の追加の域を越える）がトリガされ得るほど大きくない（すなわち、子頂点は親であり得ず、ゆえに、変位係数は１より小さい）状況に、対応する。
【００５４】
本明細書における議論は、詳細レベルが増加するとき、変位係数に対する変更に言及するが、上記方法は、詳細レベルが減少する（例えば、オブジェクトがカメラから離れる）状況にさらに適用され、ゆえに、頂点の変位係数は１で始まり、この場合は該係数が親であることが可能であり、それから減少し、その子頂点の除去の後、頂点がそれ自体削除されるときにゼロになる。
【００５５】
以下に説明される例示的なテッセレーション方法において、頂点のペアの頂点テッセレーション係数のうち一方又は双方が閾値ＴＨＲＥＳを超える場合、パッチ（又は、エッジ）の細分割が（ブロック３０４において）発生し、各細分割において、頂点テッセレーション係数は量Δだけ減少させられる。結果として、特定の子頂点の親頂点のうち一方又は双方が、ＴＨＲＥＳ＋Δを越える頂点テッセレーション係数を有する場合、複数レベルの細分割が発生し得る（及び、子頂点は、それ自体、親であることが可能である）。一方、特定の子頂点の親頂点のうち一方又は双方が、ＴＨＲＥＳをちょうど上回るだけである頂点テッセレーション係数を有する場合、ただ１レベルの細分割が発生することになり、子頂点が新たに作成されることになる。
【００５６】
Ｖ１及びＶ２が、頂点Ｖ３（子頂点）の親である２つの頂点であり、各頂点の頂点テッセレーション係数（ＴＦ）が、それぞれ、Ｖ１．ＴＦ、Ｖ２．ＴＦ、及びＶ３．ＴＦと表される場合、子頂点Ｖ３の変位係数Ｖ３．ＤＦは、
Ｖ３．ＤＦ＝Ｇ（ＭＡＸ（Ｖ１．ＴＦ，Ｖ２．ＴＦ））      （１）
によって与えられ得る。これにおいて、ＭＡＸ（）は、括弧内の数のうちの最大値であり（例えば、上記の式においてＶ１．ＴＦとＶ２．ＴＦとのうちの最大値であり、これは別法としてＴＦｍａｘと表され得る）、
【数３】
0006736361.tif 000004
の場合、Ｇ（ＴＦ）＝（ＴＦ−ＴＨＲＥＳ）／Δ      （２）
又は
そうでない場合、Ｇ（ＴＦ）＝１
である。これにおいて、
【数４】
0006736361.tif 000005
は、ＴＦがＴＨＲＥＳとＴＨＲＥＳ＋Δとの間の開区間内であるが、ＴＨＲＥＳ又はＴＨＲＥＳ＋Δのいずれにも等しくないことを表し、
ＴＦ＝ＭＡＸ（Ｖ１．ＴＦ，Ｖ２．ＴＦ）＝ＴＦｍａｘ
である。
【００５７】
関数ＭＡＸ（）は、上記で説明されたとおり、Ｖ１．ＴＦ又はＶ２．ＴＦのいずれかがＴＨＲＥＳを上回る場合にテッセレーションが（ブロック３０４）において発生するため、使用される。ゆえに、頂点は、ＭＡＸ（Ｖ１．ＴＦ，Ｖ２．ＴＦ）が最大でＴＨＲＥＳであるとき、消失する。Ｇ（ＴＦｍａｘ）は、ＴＨＲＥＳに等しいＴＦｍａｘ（すなわち、頂点がちょうど現れた）について０であり、ＴＨＲＥＳ＋Δを上回るＴＦｍａｘについて１である。ＴＦｍａｘは、Ｖ３が親であるためには、上記の境界より大きくなければならない。
【００５８】
とり得る変位係数の範囲が、（［０，１］というよりも）［ｄｆｍｉｎ，ｄｆｍａｘ］により与えられる場合、式（２）は、
Ｇ（ＴＦ）＝（１−α）＊ｄｆｍｉｎ＋α＊ｄｆｍａｘ      （３）
になり、これにおいて、
α＝（ＴＦ−ＴＨＲＥＳ）／Δ
である。
【００５９】
以下に説明される例示的なテッセレーション方法がブロック３０４において使用される場合、ＴＨＲＥＳは０．０であることが可能であり、四角形又は三角形パッチについてΔ＝ＩＮＴＥＲＶＡＬ、等値線パッチについてΔ＝２×ＩＮＴＥＲＶＡＬであることが可能であり、これにおいて、ＩＮＴＥＲＶＡＬは０．５であり得る（テッセレーション係数が対数の底２に対して指定されることを仮定する）。
【００６０】
頂点が常時存在することになる（及び、ゆえに常時十分に変位させられなければならない）とき、変位係数が１において固定されるいくつかの頂点が存在することになる。こうした頂点には、対象入力パッチの任意の頂点と、様々な例において（例えば、第１の例示的なテッセレーション方法が使用される場合）、四角形ドメインの中間頂点（middle  vertex）とが含まれる。
【００６１】
使用される具体的なテッセレーション方法に依存して、３つ以上の親頂点を有する頂点が存在し得る。例えば、入力三角形ドメインの中間頂点が、３つの親（上（ＴＯＰ）、左（ＬＥＦＴ）、及び右（ＲＩＧＨＴ）と表される）を有し、こうした一例において、中間頂点の変位係数は、
Ｇ（ＭＡＸ（ＴＯＰ．ＴＦ，ＬＥＦＴ．ＴＦ，ＲＩＧＨＴ．ＴＦ））      （４）
により与えられる。これにおいて、ＴＯＰ．ＴＦは、上頂点の頂点テッセレーション係数であり、ＬＥＦＴ．ＴＦは、左頂点の頂点テッセレーション係数であり、ＲＩＧＨＴ．ＴＦは、右頂点の頂点テッセレーション係数である。
【００６２】
ワールド空間頂点パラメータの（ブロック３０８と、特にブロック３１２とにおける）ブレンディングは、図４を参照して説明されることができる。上側の図４０１は、１つの特定の頂点パラメータ、ワールド空間位置、についてのブレンディングを例示し、下側の図４０２は、上記方法を拡張して、すべての頂点パラメータに関連する（該頂点パラメータはさらに頂点メンバ値と呼ばれることがある）。
【００６３】
上記で説明されたとおり、各々の新しい頂点は、（ブロック３０６において算出されたとおり）変位係数ｄｆを与えられ、ｄｆは、頂点がどれほど遠くに変位させられるべきかを説明する。０の変位係数は、頂点がちょうど導入されたところであり、ゆえにワールド空間におけるその「親」頂点を通る線上に存在すべきであることを示すべきである（開始位置）。１の変位係数は、頂点が親であり得ることと、ワールド空間におけるその正しい位置に設定されるべきであることを示すべきであり、該位置は、可能性として、高さマップにより（例えば、グレースケール画像をサンプリングすることによって）与えられ、あるいは、同等の情報の代替的なソース、例えば、ベジエサーフェスなどから決定される。
【００６４】
図４における上側の図４０１は、新しい頂点Ｖ３とその２つの親頂点Ｖ１及びＶ２とを示す。頂点の位置は（矢印４１０〜４１２により示されるとおり）ドメイン空間において図示されており、これにおいて、Ｖ３＝（Ｖ１＋Ｖ２）／２である。Ｈ（）は、任意の頂点についてのフルの（又は、対象の）変位を決定する高さ関数であり、Ｖ３’は、新しい頂点の開始位置であり、この開始位置は、２つの親頂点間の（ワールド空間における）中間点であり、すなわち、Ｖ３’＝（Ｈ（Ｖ１）＋Ｈ（Ｖ２））／２である。
【００６５】
Ｖ３の（ワールド空間における）変位させた（又は、修正された）位置は、その変位係数ｄｆの関数であり、Ｆ（Ｖ３，ｄｆ）と表され、下記の
Ｆ（Ｖ３，ｄｆ）＝（１−ｄｆ）＊Ｖ３’＋ｄｆ＊Ｈ（Ｖ３）      （５）
として、Ｖ３’とＨ（Ｖ３）との間で補間することによって決定される。
【００６６】
頂点が（上記の例におけるように２つというよりも）３つの親頂点を有する事象において、Ｖ３’は（Ｈ（Ｖ０）＋Ｈ（Ｖ１）＋Ｈ（Ｖ２））／３により与えられ、これにおいて、親頂点はＶ０、Ｖ１及びＶ２である。上記は、頂点が４つ以上の親頂点を有する事象において、さらに外挿されてもよい。
【００６７】
次に、図４における下側の図４０２を参照すると、この図は位置だけよりも多くに関連するので、１の変位係数は、頂点がその最終的な又は対象の状態（target  state）に設定されるべきであることを示すべきであり、一方、１より少ない変位係数について、各頂点メンバ値の値（例えば、位置、法線、タンジェント）は、変位値に基づいて対象値から修正される。
【００６８】
図４における図４０２は、２つの親頂点のドメイン空間座標として（ｕ１，ｖ１）及び（ｕ２，ｖ２）を、新しい（子）頂点のドメイン空間座標として（ｕ３，ｖ３）を示しており、これにおいて、ｕ３＝（ｕ１＋ｕ２）／２及びｖ３＝（ｖ１＋ｖ２）／２である。Ｍ（）は対象頂点メンバ値を算出する関数であり、ドメイン空間座標（ｕ，ｖ）を所与とし、Ｍ’は新しい（子）頂点の開始位置である。Ｍ’の値は、下記の、
Ｍ’＝ＲＡＳＴ＿ＩＮＴＥＲＰ（Ｍ（ｕ１，ｖ１），Ｍ（ｕ２，ｖ２），Ａ）      （６）
として決定され得る。これにおいて、ＲＡＳＴ＿ＩＮＴＥＲＰは、三角形ドメインにわたって（ＧＰＵパイプラインにおける）ラスタライザにより使用される補間関数であり、大抵、線形補間であり、Ａは定数である。子頂点がエッジを二等分する例において、Ａ＝０．５であり、子頂点がエッジを二等分しない場合、定数Ａは異なる値を有し得る。上記のＭ’の選択を用いて、任意の新しい頂点の状態は、（その親頂点間の中途である）画素がラスタライゼーションの後に有することになるものと同じメンバ値を有し、ゆえに、新しい頂点が導入されるときにジオメトリ又はライティングのポッピングがないことを確保する。
【００６９】
新しい頂点の現在の状態Ｆ（ｕ３，ｖ３，ｄｆ）を決定するために、上記方法は、Ｍ’とＭ（ｕ３，ｖ３）との間で、ｄｆによって、線形に、
Ｆ（ｕ３，ｖ３，ｄｆ）＝（１−ｄｆ）＊Ｍ’＋ｄｆ＊Ｍ（ｕ３，ｖ３）      （７）
によって補間する。
【００７０】
頂点が３つの親頂点を有する事象（例えば、以下に説明される第１の例示的なテッセレーション方法における三角形ドメインの中間頂点）において、Ｍ’は、代わって、
Ｍ’＝ＲＡＳＴ＿ＩＮＴＥＲＰ（Ｍ（１，０，０），Ｍ（０，１，０），Ｍ（０，０，１)，Ｃ，Ｄ，Ｅ）      （８）
によって重心座標において与えられ、これにおいて、Ｃ、Ｄ、及びＥは定数である。子頂点が重心に置かれる例において、Ｃ＝１／３、Ｄ＝１／３、Ｅ＝１／３であり、子頂点が正確に重心に置かれない場合、定数Ｃ、Ｄ、Ｅは異なる値を有し得る。
【００７１】
図５における画像は、（上記で説明されたとおりの）変位係数を用いてテッセレーション係数が増加するときジオメトリが如何に変化するかを論証する。ドメインが、テッセレートされていない（untessellated）三角形５０１として始まる。それから、細分割が必要とされるとすぐ、中間頂点５０２が導入される。しかしながら、すべての頂点が依然として三角形の平面内に存在する。テッセレーション係数が増加するとき、頂点は、後続の図により示されるとおり、頂点がその正しい位置に到達するまで、変位させられる。
【００７２】
上記で説明されたとおり、変位係数は、任意の互換的なテッセレーション方法（すなわち、頂点テッセレーション係数を使用し、複数の新しい頂点を追加することを含む方法であり、これにおいて、各々の新しい頂点は、２つの親頂点間のエッジを細分割するドメイン空間における点に追加される）と共に使用されることが可能である。一例示的なテッセレーション方法が以下に説明される。
【００７３】
テッセレーション方法を選択するとき、考慮には、視覚的アーチファクトを回避すること、及び、エッジテッセレーション設定の所与の組み合わせに対して生成される三角形の数（テッセレーションモデルのレンダリングコストが三角形の数に部分的に依存するため）だけでなく、さらに、こうした三角形のアスペクト比が含まれる。典型的に、グラフィックスシステム（ソフトウェアかハードウェアかのいずれか）は、最小の周囲長さ対面積比（perimeter  to  area  ratio）を暗に示す所与の画面面積（すなわち、画面画素）の「等辺の」三角形を、同じ面積をより大きい周囲長さ対面積比で有する（細長い）三角形より迅速に、レンダリングする。さらに、値、例えばシェーディングの結果などが頂点において計算され、三角形にわたって補間されるとき、より多くの等辺形状の三角形を有することは、より少ないアーチファクトをもたらすであろう。
【００７４】
さらなる検討は、三角形のパターンを生成するために使用されるアルゴリズムの複雑さである。アルゴリズムが、簡素及び／又は規則的に保たれることが可能である（例えば、違ったふうに取り扱われる必要がある多くの「特別なケース」を有することがない）場合、このことは、ハードウェア又はソフトウェア実装コストを低減させることができる。
【００７５】
最後の望ましい検討は、テッセレーションパターンにおける回転／反射対称性である。例えば、時計回りの順序などにおいて与えられた頂点ＡＢＣＤと適切なテッセレーション係数とを用いて定義された四角形のパッチが、ＢＣＤＡとしてリストアップされた頂点を有する「等辺の」四角形と同じ最終的な三角形メッシュを生じさせることは、好ましいであろう。いくつかの既存のテッセレーションスキームは、この特性を保証しない（例えば、図１の例（ｅ）及び（ｆ）における「奇数」テッセレーション方法の中間の四角を参照）。
【００７６】
一例示的なテッセレーション方法が、図６〜図１６を参照して説明されることができる。
【００７７】
図６は、向上させたテッセレーション方法のフロー図である。この方法は、パッチ（入力パッチと呼ばれる）がテッセレータに送り込まれるとき、始まる。テッセレータ（ハードウェアテッセレータであり得る）が入力パッチを受け取り（ブロック６０２）、これにおいて、上記入力パッチは、図７に示されるとおり、三角形パッチ７０２、四角形パッチ７０４、又は等値線パッチ７０６であり得る。四角形パッチ７０６は、ドメイン空間において（（０，０）、（１，０）、（０，１）、及び（１，１）に頂点を有する）四角であるが、これがワールド空間において（すなわち、３Ｄまた２Ｄ環境内で）表現する形状は、異なる形状であり得る。上記で説明されたとおり、テッセレーションは、ワールド空間においてでなく、ドメイン空間において実行される。
【００７８】
入力パッチが三角形パッチ又は四角形パッチである場合、パッチは、テッセレーションアルゴリズムが入力パッチ内の三角形パッチに再帰的に適用される（ブロック６０６）前、「前処理」段階を経験する（ブロック６０４）。前処理段階が使用されて、テッセレーションが向きから独立であり、結果として等値線パッチ７０６に対して必要とされないことを確保する（アルゴリズムが対称的に働くからであり、ゆえに、いずれの結果として生じるテッセレーションについても向き依存性がない）。
【００７９】
入力パッチが三角形パッチ７０２である場合、前処理段階（ブロック６０４）は、１つの三角形パッチ７０２（入力三角形パッチと同じであり、テッセレーションが必要とされない場合である）か、又は３つの三角形パッチ７０８〜７１０かのいずれかを出力する。入力パッチが四角形パッチ７０４である場合、前処理段階（ブロック６０４）は、４つの三角形パッチ７１２〜７１５を出力する。入力パッチが等値線パッチである場合、前処理は必要とされず（上記で提示された理由のため）、テッセレーションアルゴリズムは、入力等値線パッチに再帰的に適用される（ブロック６０８）。
【００８０】
図８〜図１１は、向上させたテッセレーション方法の段階をより詳細に示す。説明される方法は、下記の表記を使用する：
・ＴＨＲＥＳ  ‐  テッセレーションの閾値であり、例えば、頂点ＴＦが対数の底２に対するテッセレーションの量の値である場合、０．０又は０．５に設定され得る。
・ＶＥＲＴＥＸ．ＴＦ  ‐  頂点のテッセレーション係数であり、任意の実数であり得る（しかしながら、様々な例において、テッセレーション係数が非負の実数であるように、任意の負数がゼロに留められ得る）。様々な例において、頂点ＴＦは、少なくとも０．０（テッセレーションなし）及び最大で６．０（最大のテッセレーション）であり、対数の底２に対するテッセレーションの量の値、例えば、５．０のテッセレーション係数は、３２の細分割に対応する。しかしながら、別の例において、最大頂点ＴＦは６．０（又は、対数の底２が使用されない場合、６４）を超えてもよい。
・ＩＮＴＥＲＶＡＬ  ‐  非ゼロの量であり、各反復の後、ＶＥＲＴＥＸ．ＴＦがこの量ずづ減少され、例えば、頂点ＴＦが対数の底２に対するテッセレーションの量の値である場合、０．５に設定され得る。
・ＭＥＡＮ（）  ‐  ２つ、３つ、又は４つの頂点テッセレーション係数の「平均値（mean）」を与える対称関数である。これは、算術平均又は代替的な関数であってもよく、１つの代替物が、以下により詳細に説明される。
【００８１】
下記の説明を目的として、頂点ＴＦは、対数の底２に対する、テッセレーションの量である。しかしながら、頂点ＴＦは別法として、その実際の、フルの値として書かれてもよく、その場合、このことに従って、以下に提示される頂点ＴＦの算出とパラメータＴＨＲＥＳ及びＩＮＴＥＲＶＡＬの値とが修正されることが、十分理解されるであろう。しかしながら、対数の底２が使用される場合、ハードウェア実施がかなり速くなるので、テッセレータに対する入力が（対数の底２を用いるというよりも）実際の頂点ＴＦを含む例において、入力頂点ＴＦは、本明細書に説明される向上させたテッセレーション方法を実施する前に、対数の底２に対してコンバートされてもよい。
【００８２】
図８は、三角形入力パッチ７０２についての前処理段階６０４のフロー図であり、図７に示されるとおり、三角形パッチの頂点は、「上（ＴＯＰ）」、「右（ＲＩＧＨＴ）」、及び「左（ＬＥＦＴ）」とラベル付けされ得る。いずれの頂点が「上」であるかの選択は任意的であり、この前処理段階は、アルゴリズムが回転的に及び反射的に対称であることを確保する（すなわち、したがって、頂点が前処理段階において考慮される順序にかかわらず、同じテッセレーション結果が達成される）。
【００８３】
図８に示されるとおり、三角形パッチ（上、右、左）７０２がテッセレータに送り込まれ、任意の頂点テッセレーション係数が閾値ＴＨＲＥＳより大きいとき（ブロック８０２において“Ｙｅｓ”）、テッセレーションが発生する。“中間（ＭＩＤ）”と表される新しい頂点７１６が三角形の中心に（例えば、重心に）形成され（ブロック８０４）、新しい中間頂点の頂点ＴＦが、
ＭＩＤ．ＴＦ＝ＭＥＡＮ（ＴＯＰ．ＴＦ，ＬＥＦＴ．ＴＦ，ＲＩＧＨＴ．ＴＦ）      （９）
であるように（ブロック８０６において）算出される。これにおいて、ＭＩＤ．ＴＦは中間頂点の頂点ＴＦであり、ＴＯＰ．ＴＦは上頂点の頂点ＴＦであり、ＬＥＦＴ．ＴＦは左頂点の頂点ＴＦであり、ＲＩＧＨＴ．ＴＦは右頂点の頂点ＴＦである。それから、何らかのテッセレーションが発生したとき、すべての４つのテッセレーション係数（すなわち、ＴＯＰ．ＴＦ、ＬＥＦＴ．ＴＦ、ＲＩＧＨＴ．ＴＦ、及びＭＩＤ．ＴＦ）が、パラメータＩＮＴＥＲＶＡＬによって（すなわち、対数の底２表記が使用される場合、ＩＮＴＥＲＶＡＬを減算することによって）低減される（ブロック８０８）。
【００８４】
それから、３つの三角形パッチ（中間、右、左）７１０、（中間、左、上）７０９、及び（中間、上、右）７０８が形成され（ブロック８１０）、これら三角形パッチが、以下に説明されるとおり、（ブロック６０６において）テッセレーションアルゴリズムを用いてテッセレートされる。
【００８５】
頂点テッセレーション係数のいずれも、閾値ＴＨＲＥＳより大きくない場合（ブロック８０２において“Ｎｏ”）、テッセレーションは発生しない。この状況において、パッチは１つのプリミティブとしてテッセレータを単純に通過し（ブロック８１２）、本方法は過剰にテッセレートしない。
【００８６】
図９は、四角形入力パッチ７０４についての前処理段階６０４のフロー図であり、
図７に示されるとおり、四角形パッチの頂点は、「左上（ＴＬＥＦＴ）」（すなわちtop  left）、「右上（ＴＲＩＧＨＴ）」（すなわちtop  right）、「右下（ＢＲＩＧＨＴ）」（すなわちbottom  right）、及び「左下（ＢＬＥＦＴ）」（すなわちbottom  left）とラベル付けされ得る。いずれの頂点が「上」であり、いずれが「下」であるかの選択は任意的であり、この前処理段階は、アルゴリズムが回転的に及び反射的に対称であることを確保する（すなわち、したがって、頂点が前処理段階において考慮される順序にかかわらず、同じテッセレーション結果が達成される）。
【００８７】
図９に示されるとおり、四角形パッチ（左上、右上、左下、右下）７０４がテッセレータに送り込まれるとき、「中間」と表される新しい頂点７１８が四角形の中心に、すなわち、ドメイン空間座標（０．５，０．５）に形成され（ブロック９０４）、新しい中間頂点の頂点ＴＦは、
ＭＩＤ．ＴＦ＝ＭＥＡＮ（ＴＬＥＦＴ．ＴＦ，ＴＲＩＧＨＴ．ＴＦ，ＢＬＥＦＴ．ＴＦ，ＢＲＩＧＨＴ．ＴＦ)      （１０）
であるように（ブロック９０６において）算出される。これにおいて、ＭＩＤ．ＴＦは中間頂点の頂点ＴＦであり、ＴＬＥＦＴ．ＴＦは左上頂点の頂点ＴＦである、などである。それから、何らかのテッセレーションが発生したとき、すべての５つのテッセレーション係数（すなわち、ＴＬＥＦＴ．ＴＦ、ＴＲＩＧＨＴ．ＴＦ、ＢＬＥＦＴ．ＴＦ、ＢＲＩＧＨＴ．ＴＦ、及びＭＩＤ．ＴＦ）が、パラメータＩＮＴＥＲＶＡＬによって（すなわち、対数の底２表記が使用される場合、ＩＮＴＥＲＶＡＬを減算することによって）低減される（ブロック９０８）。
【００８８】
それから、４つの三角形パッチ（中間、左上、右上）７１２、（中間、右上、右下）７１３、（中間、右下、左下）７１４、及び（中間、左下、左上）７１５が形成され（ブロック９１０）、これら三角形パッチが、以下に説明されるとおり、（ブロック６０６において）テッセレーションアルゴリズムを用いてテッセレートされる。
【００８９】
図１０は、前処理段階により出力された３つ又は４つの三角形パッチの各々に対するアルゴリズムの再帰的適用のフロー図であり、このことは、図１１に示される三角形を参照して説明されることができる。図１１に示されるとおり、三角形パッチは、時計回り方向における３つの頂点（上、右、左）の順序付けられたセットである。第１の頂点が常に「上」頂点であり、（前処理段階により出力されるとおりの）最初の三角形パッチについて、この「上」頂点は、前処理（ブロック８０４、９０４）の間に追加される「中間」頂点７０８、７１８に対応することに留意する。
【００９０】
図１０に示されるとおり、三角形パッチ１１００（第１の反復において、最初のパッチ１０００である）を所与として、テッセレーションは、
ＬＥＦＴ．ＴＦ＞ＴＨＲＥＳ  又は  ＲＩＧＨＴ．ＴＦ＞ＴＨＲＥＳ      （１１）
である場合、及び、該場合に限り、発生する。これにおいて、ＬＥＦＴ．ＴＦは左頂点の頂点ＴＦであり、ＲＩＧＨＴ．ＴＦは右頂点の頂点ＴＦである（ブロック１００２において、“Ｙｅｓ”）。
【００９１】
ＬＥＦＴ．ＴＦ＞ＴＨＲＥＳ  又は  ＲＩＧＨＴ．ＴＦ＞ＴＨＲＥＳである場合（ブロック１００２において、“Ｙｅｓ”）、新しい頂点ＭＩＤ１１０２が（ブロック１００４において）形成され、この頂点ＭＩＤは、ドメイン空間における（矢印１１０４により示される）エッジ左‐＞右を２つの部分に分割する。それから、新しい中間頂点の頂点テッセレーション係数が、
ＭＩＤ．ＴＦ＝ＭＥＡＮ（ＬＥＦＴ．ＴＦ，ＲＩＧＨＴ．ＴＦ）      （１２）
であるように（ブロック１００６において）算出される。これにおいて、ＭＩＤ．ＴＦは中間頂点の頂点ＴＦであり、ＬＥＦＴ．ＴＦは左頂点の頂点ＴＦであり、ＲＩＧＨＴ．ＴＦは右頂点の頂点ＴＦである。慣習のため、ＭＩＤが細分割するエッジを定義する頂点左及び右は、ＭＩＤの「親」と表される。
【００９２】
多くの例において、新しい頂点ＭＩＤは、ドメイン空間におけるエッジ左‐＞右として、二等分器（bisector）として追加される。しかしながら、別の例において、新しい頂点ＭＩＤは、ドメイン空間においてエッジ左‐＞右の上であり、しかしこれを正確に二等分しない位置に、追加されてもよい。様々な例において、エッジに沿ったＭＩＤの位置は、例えば、親頂点の頂点ＴＦを用いて、重み付けされてもよい。
【００９３】
２つのサブ三角形パッチ（中間、左、上）１１０６及び（中間、上、右）１１０８が形成され（ブロック１００８及び１０１０）、各三角形パッチ１１０６、１１０８におけるすべてのテッセレーション係数が、パラメータＩＮＴＥＲＶＡＬによって（すなわち、対数の底２表記が使用される場合、ＩＮＴＥＲＶＡＬを減算することによって）低減される（ブロック１０１２）。それから、この方法は、上記パッチの各々に対して再帰する（recurses）。ブロック１００８又はブロック１０１０において作成された三角形パッチに対してこの方法を実行するとき、「上」頂点は、パッチを作成するために（ブロック１００４において）追加された「中間」頂点１１０２に対応し、上記「上」頂点は、親パッチの「上」頂点に対して異なることになる（例えば、パッチ１１００は、パッチ１１０６及び１１０８の親と考えられることができ、１１００の「上」頂点１１１０は、パッチ１１０６及び１１０８の各々の「上」頂点１１０２と同じでない）。
【００９４】
いかなる段階においてもテッセレーションが発生しない場合（ブロック１００２において“Ｎｏ”）、プリミティブ（パッチである）は、バッファに、例えば、インデックスバッファに追加される（ブロック１０１４）。
【００９５】
上記で説明されたとおり、図１０の方法は、前処理段階（ブロック６０４）により生成される３つ又は４つの三角形パッチの各々に、及び、上記の最初のパッチの細分割により作成される任意のパッチに再帰的に、適用される。
【００９６】
頂点テッセレーション係数が有限であり、ＩＮＴＥＲＶＡＬが定数及び非ゼロであるとき、最終的に、（すべての三角形パッチにおける）すべての頂点テッセレーション係数が、最大でＴＨＲＥＳであることになり、処理が終了することになる。
【００９７】
図１１から分かるであろうとおり、新たに追加される中間頂点は、（ブロック１００８及び１０１０において）形成される２つのパッチの双方における頂点であり、双方のパッチにおいて、この頂点は「上」頂点であると考えられる。新たに追加された中間頂点の頂点テッセレーション係数の現在の値は、サブパッチの双方へ再帰するとき、使用されなければならない。例示的な実施において、上記のことは、各サブパッチの頂点ＴＦを複製すること又はアルゴリズムに対して最終ステップを有することのいずれかによって確保されることができ、これにおいて、任意のパッチについて、その２つのサブパッチに対する再帰の後、各頂点ＴＦはパラメータＩＮＴＥＲＶＡＬによって増加される。
【００９８】
図１０において使用される同じアルゴリズムが、（ブロック６０８において）等値線パッチにさらに適用されてもよいが、上記で説明されたとおり、前処理は必要とされない。等値線パッチの場合、アルゴリズムは、図７を参照して説明され得るとおり、三角形ではなく線（すなわち、等値線及びサブ等値線（sub-isolines））に対して適用される。
【００９９】
等値線パッチ（左、右）７０６が（最初のパッチ１０００として）テッセレータに送り込まれる場合、線は、ＬＥＦＴ．ＴＦ又はＲＩＧＨＴ．ＴＦのいずれかがＴＨＲＥＳを上回る場合（ブロック１００２において“Ｙｅｓ”）、細分割される。ＬＥＦＴ．ＴＦ又はＲＩＧＨＴ．ＴＦのいずれかがＴＨＲＥＳを上回る場合（ブロック１００２において“Ｙｅｓ”）、新しい中間頂点７２０が追加され、頂点７２０は、ドメイン空間において、左‐＞右等値線７０６を細分割する（例えば、二等分する）（ブロック１００４）。新たに追加された中間頂点の頂点ＴＦは、
ＭＩＤ．ＴＦ＝ＭＥＡＮ（ＬＥＦＴ．ＴＦ，ＲＩＧＨＴ．ＴＦ）      （１３）
であるように（ブロック１００６において）算出される。これにおいて、ＭＩＤ．ＴＦは中間頂点の頂点ＴＦであり、ＬＥＦＴ．ＴＦは左頂点の頂点ＴＦであり、ＲＩＧＨＴ．ＴＦは右頂点の頂点ＴＦである。
【０１００】
中間頂点７２０の追加は、元の等値線７０６を２つのサブ等値線７２２、７２４に分割し（ブロック１００８及び１０１０において形成される）、各頂点ＴＦは、２＊ＩＮＴＥＲＶＡＬによって（例えば、対数の底２表記が使用される場合、２＊ＩＮＴＥＲＶＡＬを減算することによって）（ブロック１０１２において）低減される。このことは、三角形パッチについてよりも速く頂点ＴＦを低減させて、正しい量の細分割を生じさせることに留意する。それから、この方法は、上記サブ等値線の各々に対して再帰し、すべての頂点テッセレーション係数が最大でＴＨＲＥＳになるとき、終了する。
【０１０１】
上記で説明された向上させたテッセレーション方法は、ＭＥＡＮ（）関数を使用する。いくつかの例において、上記関数は、頂点テッセレーション係数の算術平均であることが可能であり、このことは、ある頂点から別の頂点に移動するときにジオメトリの円滑な導入をもたらすことになる一方、こうした関数は、しばしば、Ｔ接合（T-junctions）が現れることと、ゆえに特定の値の頂点ＴＦについてのクラッキング（cracking）とをもたらすことになる（例えば、パッチにわたる頂点ＴＦにおける差がかなり極端である場合）。結果として、多くの例において、代替的な関数が、ＭＥＡＮ（）について、下記の
ＭＥＡＮ（ＴＦ１，ＴＦ２，…）＝ＭＩＮ（ＡＶＧ（ＴＦ１，ＴＦ２，…），ＭＩＮ（ＴＦ１，ＴＦ２，…）＋ＩＮＴＥＲＶＡＬ）      （１４）
として使用される。これにおいて、ＡＶＧ（）は、カッコ内の値のリストの算術平均であり（例えば、上記の例における、頂点ＴＦ１、頂点ＴＦ２、…）、ＭＩＮ（）は、カッコ内の値のリストのうちの最小である（例えば、上記の例における、頂点ＴＦ１、頂点ＴＦ２、…）。
【０１０２】
上記で与えられたＭＥＡＮ（）関数は、クラッキングがないことを確保する算術平均に最も近い関数であり、このことは、以下に提示されるときに論証され得る。
【０１０３】
上記で説明されたとおり、テッセレーション内のＴ接合は、結果としてクラッキングをもたらす可能性があり、ゆえに、ドメインの内側の中で又は２つのドメインにより共有されるエッジに沿ってのいずれかで、Ｔ接合が生じ得ないことを確保することが望まれる場合がある。本明細書に説明される向上させたテッセレーション方法は、このことを、任意のエッジの細分割がエッジ端部頂点のテッセレーション係数によってもっぱら定義される（及び、他によってはされない）ことを保証することにより、確保する。ゆえに、エッジが２つのドメイン（すなわち、２つの隣接のドメイン）により共有される場合、これらドメインは、その２つの端部頂点（及び、それらの頂点テッセレーション係数）を共有し、同じ細分割が生じさせられることになる。
【０１０４】
上記で説明されたとおり、細分割は、端部頂点テッセレーション係数が閾値を超えるときに限り発生し、ゆえに、余分な（extra）細分割は発生し得ない。ただあり得る問題は、前のレベルの細分割が前もって起きていないことに起因して、細分割が発生すべきときに発生しない場合である。ゆえに、この問題を回避するために、下記の条件に合うことが必要であり、この条件は、図１１に示されるとおりラベル付けされた頂点を有する三角形パッチ１１００を参照し、
上‐＞左エッジ上に必要とされるテッセレーションは、左‐＞右エッジ上で起こされるテッセレーションを暗に示し、
すなわち、（ＴＯＰ．ＴＦ＞ＴＨＲＥＳ  又は  ＬＥＦＴ．ＴＦ＞ＴＨＲＥＳ）
＝＞（ＬＥＦＴ．ＴＦ＋ＩＮＴＥＲＶＡＬ＞ＴＨＲＥＳ  又は  ＲＩＧＨＴ．ＴＦ＋ＩＮＴＥＲＶＡＬ＞ＴＨＲＥＳ）
である。上記条件は、一般性を失うことなく、対称性に起因して左手のエッジだけを考慮する。
【０１０５】
それから、上記で指定されたＭＥＡＮ（）関数がこの条件を満足することが論証され得る。
【０１０６】
ケース１：ＬＥＦＴ．ＴＦ＞ＴＨＲＥＳである場合、ＬＥＦＴ＞ＴＦ＋ＩＮＴＥＲＶＡＬ＞ＴＨＲＥＳである。
【０１０７】
ケース２：ＴＯＰ．ＴＦ＞ＴＨＲＥＳが、下記の２つのサブケースを有する。
【０１０８】
ケース２．１：（ＴＯＰが、図１１のパッチ１１００に示されるとおりのパッチの中間頂点であり、これが、図７における頂点７１６又は７１８に対応する、）すなわち、ＴＯＰ．ＴＦ＝ＭＥＡＮ（ＬＥＦＴ．ＴＦ，ＲＩＧＨＴ．ＴＦ，…））であり、ゆえに
ＴＨＲＥＳ＜ＴＯＰ．ＴＦ
＝ＭＩＮ（ＡＶＧ（ＬＥＦＴ．ＴＦ，ＲＩＧＨＴ．ＴＦ，…），ＭＩＮ（ＬＥＦＴ．ＴＦ，ＲＩＧＨＴ．ＴＦ，…）＋ＩＮＴＥＲＶＡＬ）
＜＝ＭＩＮ（ＬＥＦＴ．ＴＦ，ＲＩＧＨＴ．ＴＦ，…）＋ＩＮＴＥＲＶＡＬ
＜＝ＬＥＦＴ．ＴＦ＋ＩＮＴＥＲＶＡＬ
ゆえに  ＬＥＦＴ．ＴＦ＋ＩＮＴＥＲＶＡＬ＞ＴＨＲＥＳ  である。
【０１０９】
ケース２．２（ＴＯＰが、図１２のパッチ１２００に示されるとおり、端部頂点としてＬＥＦＴを用いて細分割により作られ、これにおいて、ＴＯＰ１２０２は、エッジ左‐＞他の細分割により作られ、すなわち、ＴＯＰ．ＴＦ＝ＭＥＡＮ（ＬＥＦＴ．ＴＦ，…）であり、）ゆえに、
ＴＨＲＥＳ＜ＴＯＰ．ＴＦ
＝ＭＩＮ（ＡＶＧ（ＬＥＦＴ．ＴＦ，…），ＭＩＮ（ＬＥＦＴ．ＴＦ，…）＋ＩＮＴＥＲＶＡＬ）
＜＝ＭＩＮ（ＬＥＦＴ．ＴＦ，…）＋ＩＮＴＥＲＶＡＬ
＜＝ＬＥＦＴ．ＴＦ＋ＩＮＴＥＲＶＡＬ
ゆえに  ＬＥＦＴ．ＴＦ＋ＩＮＴＥＲＶＡＬ＞ＴＨＲＥＳ  である。
【０１１０】
ケース２．２において、同じロジックが、ＴＯＰ．ＴＦ＝ＭＥＡＮ（ＲＩＧＨＴ．ＴＦ，…）に適用されて（これは、図１２に示されるものの反射（reflection）に対応する）、所望されるとおり、ＲＩＧＨＴ．ＴＦ＋ＩＮＴＥＲＶＡＬ＞ＴＨＲＥＳを導出することができる。関数の選択は、最小値プラスＩＮＴＥＲＶＡＬを超えるいかなる関数も上記不等式を常に満足しないことになる点において、最適であることにさらに留意する。ゆえに、ＭＥＡＮ（）関数は、算術平均により近い何らかであり得ない。
【０１１１】
特にアニメーションにおいて、パッチの角の頂点ＴＦから、ＬＯＤにおいて異なるパッチの中心ＴＦをユーザが指定することを可能にすることが、時に望ましい場合がある。このことは、例えば、生物のツノの場合において高さマップが中間部に非常に鋭いジャンプを有する場合、例えば、四角形又は三角形パッチのテクスチャに関連付けられた上記マップをより良く近似させることに使用され得るであろう。図１３は、（上記で説明された）図６の方法に対するバリエーションを示し、このバリエーションは、四角形又は三角形パッチの中心ＴＦの使用を可能にする、さらなる、任意的な前処理段階（ブロック１３０２）を追加する。図１３に示されるとおり、この（ブロック１３０２における）追加的な前処理段階は、上記で説明された（ブロック６０４における）前処理段階の前に実施され、（四角形又は三角形であり得る）入力パッチを分割する。元の前処理段階（ブロック６０４）とは違って、追加的な前処理段階（ブロック１３０２）は、さらに、等値線に対して適用されてもよい。しかしながら、このことは、この文脈においてあまり有用でない。等値線の場合、等値線は細分割され、新たに追加される中間頂点が中心ＴＦを割り付けられる。それから、細分割は、上記で説明されたとおり、２つのサブ等値線（例えば、ＬＥＦＴ‐ＭＩＤとＭＩＤ‐ＲＩＧＨＴ）に対して進行する。
【０１１２】
追加的な前処理段階（ブロック１３０２）は、図１４及び図１５を参照して説明されることができる。図１４は、四角形入力パッチ１４０２又は三角形入力パッチ１４０４に対する段階の適用の概略図を示し、図１５は、追加的な前処理段階のフロー図を示す。中心頂点係数が有効にされた状態で、ユーザは、パッチごとの中心ＴＦと各々の角の頂点についての頂点ＴＦ（三角形パッチについて３つ、及び四角形パッチについて４つ）とをテッセレータに供給しなければならない。
【０１１３】
図１４に示されるとおり、追加的な前処理段階は、四角形入力パッチ１４０２を４つの四角形パッチ１４０６〜１４０９に、及び、三角形入力パッチ１４０４を３つの四角形パッチ１４１０〜１４１２に分割する。このことを達成するために、四角形入力パッチ１４０２を前処理することは、５つの新しい頂点を追加すること（ブロック１５０２）を必要とする。すなわち、中心ＴＦを有する中心頂点１４１４（すべての４つのサブドメイン１４０６〜１４０９により共有される）、中間‐上頂点１４１６、中間‐右頂点１４１８、中間‐下頂点１４２０、及び中間‐左頂点１４２２である。これらのテッセレーション係数が、各々の新たに追加された頂点について、新たに追加された頂点の隣接の角のＴＦのＭＥＡＮ（）をとることによって（ブロック１５０６において）算出される。様々な例において、式（１４）により与えられるＭＥＡＮ（）関数が使用されてよい。該関数が、より一貫性のあるテッセレーションパターンを結果としてもたらすからである。しかしながら、別の例において、算術平均が使用されてもよい。
【０１１４】
三角形入力パッチ１４０４を前処理することは、４つの新しい頂点を追加すること（ブロック１５０４）を必要とする。すなわち、中心ＴＦを有する中心頂点１４２４（すべての３つのサブドメインにより共有される）、中間‐右頂点１４２６、中間‐下頂点１４２８、及び中間‐左頂点１４３０である。これらのテッセレーション係数が（ブロック１５０６において算出されたとおり）、各々の新たに追加された頂点について、新たに追加された頂点の隣接の角のＴＦのＭＥＡＮ（）をとることによって与えられる。上記で説明されたとおり、様々な例において、式（１４）により与えられるＭＥＡＮ（）関数が使用されてよい。該関数が、より一貫性のあるテッセレーションパターンを結果としてもたらすからである。しかしながら、別の例において、算術平均が使用されてもよい。
【０１１５】
追加的な前処理段階の最後の段階（ブロック１５０８）は、各テッセレーション係数を低減させ、様々な例において、各ＴＦは、２＊ＩＮＴＥＲＶＡＬだけ低減される。（ブロック６０４の元の前処理段階に対する入力の前の）上記のＴＦの低減は、正しい数の細分割がパッチの各境界エッジに対して行われることと、テッセレーションが発生したと示すこととを確保する。
【０１１６】
追加的な前処理段階（ブロック１３０２）において、元の入力パッチを３つ又は４つの四角形パッチに細分割すると、これら３つ又は４つの四角形パッチ（ブロック１５０８において算出された通りの頂点ＴＦを有する）は、これらが元の入力パッチであるかのように元の前処理段階（ブロック６０４）に対して入力され、方法が、上記で説明されたとおり進行する。図１６は、図１３の方法を用いて得られ得る様々な例示的なテッセレーションを示す。
【０１１７】
追加的な前処理段階（ブロック１３０２及び図１５）が少なくとも１回、０．０のＴＦを有する場合でさえ、各ドメインエッジを細分割する事実に起因して、任意の１つの接続されたメッシュは、クラッキングが発生し得ないことを確保するように、完全に中心ＴＦを有するか又は有さないかのいずれかでテッセレートされるべきである（すなわち、単一の接続されたメッシュの中のすべてのパッチが同じ方法を使用すべきであり、すなわち、これらはすべて、図６の方法又は図１３の方法を使用し、図６の方法を用いたいくつかの入力パッチと図１３の方法を用いた他の入力パッチとを有するべきでない）。
【０１１８】
上記で説明された例示的なテッセレーション方法が、（上記で図３〜図５を参照して説明されたとおりの）変位係数と組み合わせて使用される場合、この組み合わせられた方法は、既知のテッセレーション方法において生じる下記の問題の多く又はすべてに対処し得る：
・スナッピング（snapping）がない  ‐  第１の例示的なテッセレーション方法を用いて、ジオメトリが、テッセレーション係数が増加するときに小さい増分ずつ追加されて、円滑な移行を生じさせる。このことは、レンダリングする時間の予測に役立つ。
・ポッピングがない  ‐  第１の例示的なテッセレーション方法を用いて、新しい頂点が正しいドメイン空間座標に導入され、これらを正しい対象状態へとゆっくりと乱す（perturb）ように変位係数が使用されることが可能であり、結果として、頂点メンバ値における瞬時の変化に起因するポッピングアーチファクトがない。
・クラッキングがない  ‐  上記で論証されたとおり、第１の例示的なテッセレーション方法は、ドメイン内で又はドメインの境界に沿ってのいずれかでＴ接合を生じさせない。
・遊泳がない  ‐  テッセレータにより導入される各頂点は、テッセレーション係数が増加するとき、そのドメイン空間位置を維持し、ゆえに、「遊泳」アーチファクトがない。
・過剰／過少テッセレーションがない  ‐  エッジの各端部における整数頂点テッセレーション係数ｔが、２ｔの細分割に対応する。さらに、四角形上のｔの平均頂点テッセレーション係数は近似的に、２２ｔの頂点と、その２倍の多さのプリミティブとに対応し、これは最小である。同様に、三角形パッチは、（３／４）２２ｔの頂点と２倍の多さのプリミティブとに対応する。
・細い三角形がない  ‐  上記で説明されたとおり、向上させたテッセレーション方法は、パッチごとに４つの（又はより少ない）クラスの三角形のみ生じさせ、このことは、パッチごとのルート面積対周囲長さ比（Root  Area  to  Perimeter  Ratio）の最小値の境界を定める。
・空間／時間複雑性  ‐  アルゴリズムが（図６に示されるとおり）再帰的であり、各サブドメイン／パッチは独立して扱われることが可能であり、このことは実質的な並列性をサポートする。入力頂点は、頂点テッセレーション係数のための付加的な（extra）固定点値を必要とし、出力頂点は、付加的な固定点変位係数とその２つの「親」ドメイン空間座標とを必要とし得る。
【０１１９】
一例示的な実施における上記の組み合わせられた方法の要件の一例が、以下に与えられる。
【０１２０】
【表１】
0006736361.tif 000006
上記の表において、提示される方法に必要とされる付加的な頂点メンバは、各入力頂点の固定点テッセレーション係数と、各出力頂点の５つの固定点値（変位係数及び２つのドメイン空間座標）である。Ｍは、出力頂点バッファの現在のサイズであり、α（）は、バッファが如何にして構造化されるかに依存するＭの何らかの関数である。α（）は、典型的に、ｌｏｇ（Ｍ）とＭとの間の何らかである。
【０１２１】
さらに、本明細書に説明される向上させたテッセレーション方法は、様々な例において、下記のさらなる品質を有する：
・冗長性がない  ‐  閾値を上回って、２セットの頂点テッセレーション係数が同じメッシュ形状を生じさせない。このことは、変位係数によって保証される。
・向きの独立性  ‐  （前処理段階、ブロック６０４において）パッチを、各々のｔｏｐとして中間頂点を用いて扇の三角形パッチに分けることによって、三角形の向きに対して選択は行われず、ゆえに、同じテッセレーションが常に生じることになる。
・Ｎ角形  ‐  向上させたテッセレーション方法は、（前処理段階６０４のバリエーションにおいて）パッチを扇の三角形に分けることによって、Ｎ辺を有する任意の多角形パッチをサポートするように容易に適合させることができる。各ケースにおいて、平均テッセレーション係数ｔについて、上記方法は、約（Ｎ／４）２２ｔの頂点と２倍の多さのプリミティブとを生成することになる。
【０１２２】
本明細書に説明される向上させたテッセレーション方法を使用して、拡散及び反射ライティング（diffuse  and  specular  lighting）下でテクスチャ、法線、及び高さマップを用いて四角形又は三角形ドメインをレンダリングすると、ユーザによって目にされる視認可能なアーチファクトがない。例えば、既知のテッセレーション方法で現れる可能性がある反射ライティングのちらつきは、存在しない。ドメインは、（法線マップが高さの錯覚を与える場合に）距離において十分にテッセレートされてないものから、８０００のプリミティブを有する十分にテッセレートされたものに徐々に成長する。ユーザにとって何らかの変化を見ることは非常に困難であり、ゲームプレイ設定において、まったく何も見られないことになり、プレーヤは、メッシュがその時間全体テッセレートされたと信じるであろう。
【０１２３】
（図６〜図１６を参照して上記で説明された）例示的なテッセレーション方法と変位係数との組み合わせは、図１７に示されるものなどのＧＰＵパイプライン１７００内で実施されることが可能である。図１７において、バッファは、点線の輪郭線を有するボックスとして図示され、関数は、実線の輪郭線を有するボックスとして図示される。矢印は、システム内の頂点／サーフェスパッチ情報のフローを論証する。大きい点線ボックス１７０２の外側のあらゆるものはユーザにより定義され、大きい点線ボックス１７０２の内側のあらゆるものはユーザから隠匿される。
【０１２４】
ユーザは、頂点バッファ１７０４及びインデックスバッファ１７０６（インデックスからパッチ／サーフェスパッチを構築する方法を説明するトポロジを有する）を入力し、頂点シェーダ１７０８及びドメインシェーダ１７１０を（例えば、既知のシステムにおいてのように）定義する。
【０１２５】
ユーザから隠匿されるのは、テッセレータ１７１２及びブレンドシェーダ１７１４であり、これらは双方、ハードウェアにおいて実施され得る。サーフェスパッチは、イン（In）インデックスバッファ、トポロジ、及びアウト（Out）頂点バッファから形成される。テッセレータは、（頂点シェーダにより算出されたとおり、）サーフェスパッチの角の制御点から頂点テッセレーション係数を取得する。テッセレータは、上記頂点テッセレーション係数を用いて、ドメイン空間における（トポロジにより与えられる）ドメインをテッセレートする。テッセレータは、変位係数と共にドメイン空間座標のフルのリストを出力し、各々の新しい頂点が、ブレンドシェーダにおいて、これら値をサーフェスパッチ及びドメインシェーダと共に用いて構築される。ブレンドシェーダは各々の新しい頂点を出力し、該新しい頂点はアウトドメインバッファにアペンドされる。さらに、テッセレータは、アウトインデックスバッファ（時計回り又は反時計回りの三角形又は線のいずれかのトポロジ）を出力して、ラスタライゼーション段階に渡す。
【０１２６】
上記で説明されたとおり、頂点シェーダ１７０８は、該頂点シェーダ１７０８に送り込まれる現在の頂点に対して頂点ごとの算出を実行し、メッシュトポロジの知識を有さない。入力される頂点バッファからの各頂点について、頂点シェーダは、正確に１つの頂点を出力する（必ずしも同じタイプでない）。通常、頂点シェーダ入力は、ローカル位置、法線、タンジェント、及びテクスチャ座標などのメンバを包含し、その出力は、大抵、ワールド位置、法線、タンジェント、テクスチャ座標を包含することになり、テッセレーション係数を包含しなければならず、該テッセレーション係数は、テッセレータ１７１２に渡されることになる。最初、シェーダは、頂点をワールド空間へ変換し、任意の他の線形変換を適用する。それから、シェーダは、例えばカメラからの距離の関数として、シェーダ頂点ごとのテッセレーション係数を算出する。
【０１２７】
頂点シェーダの後、サーフェスパッチが、アウト頂点バッファ１７１６及びイン（In）インデックスバッファ１７０６を（そのトポロジと共に）用いて形成される。サーフェスパッチの頂点テッセレーション係数はテッセレータ１７１２に渡され、テッセレータ１７１２は、与えられた係数の数に依存して（例えば、図６〜図１６を参照して上記で説明された方法を用いて）、適切なドメイン（「四角形（QUAD）」、「三角形（TRI）」、又は「等値線（ISOLINE）」）をテッセレートする。テッセレータは、各々の新しい頂点について、ドメイン空間座標及び変位係数を作り出し、これらをドメインシェーダに渡す。テッセレータは、さらに、アウトインデックスバッファにアペンドされることになる、各プリミティブを決定するインデックスのリスト（これは、アウトドメインバッファの現在の長さによりオフセットされなければならない）を生成する。
【０１２８】
ドメインシェーダ１７１０は、ブレンドシェーダ１７１４から呼び出され、入力としてドメイン空間場所（ｕ，ｖ）をとる。さらに、ドメインシェーダは、入力として、すべてのサーフェスパッチ情報をとり、フルの頂点構造を出力する。ドメインシェーダは、サーフェスパッチ制御点及びドメイン空間座標を使用して、新しい頂点を構築する。通常のテッセレーションについて、このことは、単純に、パッチの角の頂点の値を線形に補間することであることになる。別法として、ベジエサーフェスを使用して頂点の位置／法線が決定されてもよく、あるいは、テクスチャをサンプリングすることによってディスプレースメントマッピングが使用されてもよい。
【０１２９】
ブレンドシェーダ１７１４は、テッセレータ１７１２により作り出された頂点を、（テッセレータ１７１２によりさらに生成される）変位係数と図４及び図５を参照して上記で説明された方法とを用いて「ブレンドする（blends）」。ブレンドシェーダ１７１４はドメインシェーダ１７１０を使用し、ドメインシェーダ１７１０はブレンドシェーダ１７１４に、頂点構造の各メンバが如何にしてドメインの内部において算出されるべきかを教える。ブレンドシェーダ１７１４は、生成された頂点につき１回実行され、入力として、頂点のドメイン空間場所ｕ，ｖと、（２つの親頂点の）２つの親ドメイン空間座標及び変位係数とをとる。さらに、現在のサーフェスパッチがブレンドシェーダに送り込まれる。ブレンドシェーダ１７１４は、サーフェスパッチ制御点及びドメイン空間座標を使用して、頂点、すなわち、子及び２つの親を構築し、それから、出力頂点の各メンバが、図３〜図５を参照して上記で説明されたとおり（すなわち、子と２つの親の平均との間で補間することによって）、算出される。別法として、親頂点を識別するために算出を繰り返すことを防止するために、頂点が適切に順序付けられ（例えば、したがって、バッファの中で、ＤＦ＜１を有する各頂点がその親頂点の後に続く）、親頂点がブレンドシェーダ１７１４内にキャッシュされてもよく、したがって、これらの対象状態は、子頂点がブレンドシェーダに送り込まれるとき、利用可能である。しかしながら、このことは、かなり多くのメモリを使用することになる。
【０１３０】
ブレンドシェーダ１７１４がパッチにおける各々の生成された頂点について実行された後、頂点は、アウトインデックスバッファ１７１８と共にラスタライザに渡され、これにおいて、各プリミティブが処理されることになる。
【０１３１】
図１７は単一のブレンドシェーダ１７１４を示しているが、いくつかの実施において、２つ以上のブレンドシェーダが存在してもよく、例えば、１つのブレンドシェーダが、２つの親を有するすべての頂点（すなわち、大抵の頂点）のためであり、１つのブレンドシェーダが、３つの親を有する頂点（例えば、図７に示されるとおりの、三角形パッチの中間頂点）のためである。上記の第２のブレンドシェーダと一般的なブレンドシェーダとの差は、これが３つの親ドメイン空間座標（重心座標において、（０，０，１）、（１，０，０）、及び（０，１，０）である）を取り入れ、補間が上記３つの座標の各々のドメインシェーダ結果の間であることである。補間パラメータは、重心座標において（１／３，１／３）である。
【０１３２】
変位係数が１である場合、補間が必要とされないので、ブレンドシェーダ１７１４は、ドメインシェーダ１７１０に低減され、実際、頂点の大半がｄｆ＝１を有する。いかなる補間も実行する前に、変位係数の値が１であるかをチェックすることによって、計算時間を大幅に低減させることができる。上記で説明されたとおり、入力四角形パッチの角の頂点及び中心頂点は、固定されたｄｆ＝１を有することになる。
【０１３３】
図１７に示されるパイプラインは、高度に並列化可能である。頂点シェーダ１７０８は、メッシュに関するグローバルな情報を必要とせず、現在の頂点のみ必要とする。ゆえに、イン頂点バッファ１７０４の中のあらゆる頂点が、並列に処理されることができる。同様に、いったんパッチ／サーフェスパッチが、インインデックスバッファ、トポロジ１７０６、及びアウト頂点バッファ１７１６から形成されると、これは自己充足型のユニット（self-contained  unit）であり、テッセレータ１７１２及びブレンドシェーダ１７１４による処理は、独立して行われることができる。このことは、実行時間を大幅に低減させる。さらに、パッチごとにテッセレータにより生成される各頂点は、別個にブレンドシェーダ１７１４を通して送り込まれることがさらに可能であり、このことは、別のレベルの並列性を提供する。
【０１３４】
例示的なテッセレーション方法がそれ自体、（上記で説明されたとおり）高度に並列化可能である。各三角形パッチは、（テッセレーション係数が１回だけ減らされることを確保するように）頂点のコピーが各スレッドについて作られる限り、独立して細分割されることができる。上記方法は、さらに、ハードウェアにおける物理的空間の観点において、とても効率的である。３つのドメイン（３つの小エリアのハードウェア）の各々についてのセットアップ（すなわち、上記で説明された前処理ステップ）の後、作り出された各々の三角形パッチ又は線は、同じ（とても小さい）ブロックのハードウェアに送り込まれる。このことが、並列アーキテクチャなしに実施される場合、ハードウェア上に合計５つの小エリアがあることになる。
【０１３５】
パイプラインは、さらに、ユーザのインターフェースを大幅に変更せず、これは、既知のパイプラインと同様に、頂点シェーダ１７０８及びドメインシェーダ１７１０を実施することを含む。ゆえに、新しいパイプライン１７００は、既存のソフトウェアを用いて（テッセレーション係数が頂点シェーダ１７０８において各頂点に割り当てられるように、既存のソフトウェアに必要とされる最小限の変更だけで）、容易に使用され得る。さらに、既知のパイプラインにより必要とされるシェーダのいくつか（例えば、ハルシェーダ）が必要とされず、任意的として残されることが可能であり、このことは、ユーザにより必要とされる労力を低減させる。
【０１３６】
上記で説明されたとおり、ブレンドシェーダ１７１４は、頂点シェーダ及びドメインシェーダと同様の仕方において参照されるが、ユーザによって実施されず、代わって、ハードウェアにおいて実施されてパフォーマンスを高めることができる。上記で説明されたとおり、テッセレータ１７１２は、さらに、ハードウェアにおいて実施されてもよい。
【０１３７】
上記で説明された向上させたテッセレーション方法は、別法として、ソフトウェア（又は、ソフトウェアとハードウェアとの組み合わせ）において実施されてもよい。図１８は、一例示的なコンピューティングベースの装置１８００の様々なコンポーネントを例示しており、コンピューティングベース装置１８００は、任意の形態のコンピューティング及び／又は電子装置として実施されてよく、上記で説明されたテッセレーション方法を実施するように構成され得る。
【０１３８】
コンピューティングベース装置１８００は１つ以上のプロセッサ１８０２を含み、プロセッサ１８０２は、マイクロプロセッサ、コントローラ、又は任意の他の適切なタイプのプロセッサであってよく、装置の動作を制御するコンピュータ実行可能命令を処理して、上記で説明された向上させたテッセレーション方法を実行する。いくつかの例において、例えば、システムオンチップアーキテクチャが使用される場合、プロセッサ１８０２は、１つ以上の固定された機能ブロック（さらに、アクセラレータとも呼ばれる）を含んでもよく、上記機能ブロックは、（ソフトウェア又はファームウェアというよりも）ハードウェアにおいて向上させたテッセレーションの方法の一部を実施する。オペレーティングシステム１８０４又は任意の他の適切なプラットフォームソフトウェアを含むプラットフォームソフトウェアがコンピューティングベース装置に提供されて、アプリケーションソフトウェア１８０６が装置上で実行されることを可能にしてもよく、上記アプリケーションソフトウェアは、テッセレーションモジュール１８０８及びブレンディングモジュール１８１０を含み得る。
【０１３９】
テッセレーションモジュール１８０８は、例えば、前処理モジュール１８１２（図６又は図１３のブロック６０４を実施する）、再帰的テッセレーションモジュール１８１４（図６又は図１３のブロック６０６及び／又は６０８を実施する）、及び（例えば、図３のブロック３０６を実施する）変位係数を算出する変位係数モジュール１８１６を含み得る。テッセレーションモジュール１８０８は、様々な例において、中心ＴＦが使用される場合に最初の前処理を実行する（図１３のブロック１３０２を実施する）さらなるモジュール１８１８を含み得る。
【０１４０】
ブレンディングモジュール１８１０は、テッセレーションモジュール１８０８により作り出された頂点を、（さらにテッセレーションモジュール１８０８により生成される）変位係数と図４及び図５を参照して上記で説明された方法とを用いて「ブレンドする」。
【０１４１】
コンピュータ実行可能命令は、コンピューティングベース装置１８００によりアクセス可能である任意のコンピュータ可読媒体を用いて提供され得る。コンピュータ可読媒体は、例えば、メモリ１８１０などのコンピュータ記憶媒体と通信媒体とを含み得る。メモリ１８１０などのコンピュータ記憶媒体（すなわち、非一時的マシン可読媒体）には、コンピュータ可読命令、データ構造、プログラムモジュール、又は他のデータなどの情報の記憶のための任意の方法又はテクノロジーにおいて実施される揮発性及び不揮発性の、取り外し可能及び取り外し不能の媒体が含まれる。コンピュータ記憶媒体には、これらに限られないが、ＲＡＭ、ＲＯＭ、ＥＰＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリ若しくは他のメモリテクノロジー、ＣＤ‐ＲＯＭ、デジタル多用途ディスク（ＤＶＤ）若しくは他の光学記憶装置、磁気カセット、磁気テープ、磁気ディスクストレージ若しくは他の磁気記憶装置、又は、コンピューティング装置によるアクセスのために情報を記憶することに使用され得る任意の他の非送信媒体が含まれる。対照的に、通信媒体は、コンピュータ可読命令、データ構造、プログラムモジュール、又は他のデータを、搬送波などの変調されたデータ信号、又は他のトランスポートメカニズムにおいて具現化し得る。本明細書において定義されるとき、コンピュータ記憶媒体は通信媒体を含まない。コンピュータ記憶媒体（すなわち、非一時的マシン可読媒体、例えば、メモリ１８１０）はコンピューティングベース装置１８００内に図示されているが、記憶装置は、分散され、あるいはリモートに位置し、ネットワーク又は他の通信リンクを介して（例えば、通信インターフェース１８１２を用いて）アクセスされてもよいことが十分理解されるであろう。
【０１４２】
コンピューティングベース装置１８００は入力／出力コントローラをさらに含んでもよく、上記入力／出力コントローラは、コンピューティングベース装置１８００と別個又は一体的であり得る表示装置に対して表示情報を出力するように配置される。表示情報は、グラフィカルユーザインターフェースを提供してもよい。入力／出力コントローラは、さらに、ユーザ入力装置（例えば、マウス又はキーボード）などの１つ以上の装置から入力を受信し及び処理するように配置されてもよい。一実施形態において、表示装置は、該表示装置がタッチセンサ式表示装置である場合、ユーザ入力装置としての機能を果たし得る。入力／出力コントローラは、さらに、表示装置でない装置、例えば、ローカルに接続された印刷装置などに、データを出力してもよい。
【０１４３】
用語「プロセッサ」及び「コンピュータ」は、本明細書において、命令を実行することができるような処理能力を有する任意の装置又はその部分を指すように用いられる。用語「プロセッサ」は、例えば、中央処理ユニット（ＣＰＵ）、グラフィックス処理ユニット（ＧＰＵ又はＶＰＵ）、物理処理ユニット（physics  processing  units；ＰＰＵ）、ラジオ処理ユニット（ＲＰＵ）、デジタルシグナルプロセッサ（ＤＳＰ）、汎用目的プロセッサ（例えば、汎用目的ＧＰＵ）、マイクロプロセッサ、ＣＰＵの外部のタスクを加速するように設計された任意の処理ユニット等を含み得る。当業者は、こうした処理能力が多くの種々の装置に組み込まれることを理解することになり、ゆえに、用語「コンピュータ」には、セットトップボックス、メディアプレーヤ、デジタルラジオ、ＰＣ、サーバ、モバイルテレフォン、パーソナルデジタルアシスタント、及び多くの他の装置が含まれる。
【０１４４】
当業者は、プログラム命令を記憶することに利用される記憶装置がネットワークにわたって分散され得ることを理解するであろう。例えば、リモートコンピュータが、ソフトウェアとして説明された処理の一例を記憶してもよい。ローカル又はターミナルコンピュータがリモートコンピュータにアクセスし、ソフトウェアの一部又はすべてをダウンロードしてプログラムを実行してもよい。別法として、ローカルコンピュータが必要に応じてソフトウェアのピースをダウンロードし、あるいは、いくつかのソフトウェア命令をローカル端末において、いくつかのソフトウェア命令をリモートコンピュータ（又は、コンピュータネットワーク）において実行してもよい。当業者は、さらに、当業者に知られる従来手法を利用することによって、ソフトウェア命令のうちすべて又は一部分がＤＳＰ、プログラマブルロジックアレイ、又は同様のものなどの専用回路によって実行され得ることを理解するであろう。
【０１４５】
本明細書に説明される方法は、ソフトウェアを用いて構成されたコンピュータによって実行されてもよく、上記ソフトウェアは、有形記憶媒体に記憶されたマシン可読形式のものであり、例えば、プログラムがコンピュータ上で実行されるとき、及びコンピュータプログラムがコンピュータ可読記憶媒体上に具現化され得る場合に、説明された方法の構成部分を実行するようにコンピュータを構成するコンピュータ可読プログラムコードを含むコンピュータプログラムの形式のものであり、あるいは、本明細書に説明された方法のうち任意のもののすべてのステップを実行するように適合させたコンピュータプログラムコード手段を含むコンピュータプログラムの形式のものである。有形（又は、非一時的）記憶媒体の例には、ディスク、サムドライブ、メモリカード等が含まれ、伝搬される信号は含まれない。ソフトウェアは、パラレルプロセッサ又はシリアルプロセッサ上での実行に適することが可能であり、したがって、方法ステップは、任意の適切な順序において、又は同時に実行され得る。
【０１４６】
本明細書に説明されるハードウェアコンポーネントは、コンピュータ可読プログラムコードをエンコードさせた非一時的コンピュータ可読記憶媒体によって生成されてもよい。
【０１４７】
さらに、所望の機能を実行するために集積回路を設計すること又はプログラマブルチップを構成することに用いられるとき、上記で説明されたモジュール、機能性、コンポーネント、又はロジックを実施するハードウェアの構成を「説明し」又は定義するソフトウェア、例えばＨＤＬ（ハードウェア記述言語）ソフトウェアなどを、包含することが意図される。すなわち、本明細書に説明された方法のうち任意のものを実行するように構成された処理ユニットを生成するための、又は本明細書に説明された任意の装置を含む処理ユニットを生成するためのコンピュータ可読プログラムコードをエンコードさせたコンピュータ可読記憶媒体が提供され得る。すなわち、コンピュータシステムが、回路素子の定義と該回路素子を組み合わせる規則を定義するデータとからデジタル回路の表現を生成するように構成されてもよく、これにおいて、非一時的コンピュータ可読記憶媒体は、プロセッサ実行可能命令を記憶させることが可能であり、上記プロセッサ実行可能命令は、コンピュータシステムにおいて実行されるときに、コンピュータシステムに、本明細書に説明された処理ユニットを生成させる。例えば、非一時的コンピュータ可読記憶媒体が、コンピュータ可読命令を記憶させることが可能であり、上記コンピュータ可読命令は、集積回路の出現（manifestation）を生成するコンピュータシステムにおいて処理されるときに、コンピュータシステムに、本明細書の例において説明されたとおりの受信器のプロセッサの出現を生成させ、あるいは、本明細書の例において説明された方法を実行するように構成されたプロセッサの出現を生成させる。プロセッサの出現は、プロセッサ自体、又は、プロセッサを生成することに使用することができるプロセッサの表現（例えば、マスク）であり得る。
【０１４８】
開示された態様を実施することに使用されるマシン実行可能データを記憶するメモリは、非一時的媒体であり得る。非一時的媒体は、揮発性又は不揮発性であり得る。揮発性非一時的媒体の例には、ＳＲＡＭ又はＤＲＡＭなどの、半導体ベースのメモリが含まれる。不揮発性メモリを実施することに使用され得るテクノロジーの例には、光及び磁気メモリテクノロジー、フラッシュメモリ、相変化メモリ、抵抗ＲＡＭが含まれる。
【０１４９】
「ロジック」に対する特定の参照は、１つ又は複数の機能を実行する構造を指す。ロジックの一例には、上記機能を実行するように配置された回路が含まれる。例えば、上記回路は、トランジスタ、及び／又は、製造プロセスにおいて利用可能な他のハードウェア要素を含み得る。上記トランジスタ及び／又は他の要素は、メモリを実装し及び／又は含む回路又は構造を形成することに使用されてもよく、上記回路又は構造は、例として、レジスタ、フリップフロップ又はラッチ、ブール演算などの論理演算子、加算器、乗算器又はシフタなどの数学演算子、及び相互接続などである。上記要素は、カスタム回路若しくは標準セルライブラリ、マクロ、又は他のレベルの抽象化において提供されてもよい。上記要素は、特定の配置において相互接続されてもよい。ロジックは、固定された機能である回路を含んでもよく、回路は、１つ又は複数の機能を実行するようにプログラムされることが可能である。上記プログラミングは、ファームウェア又はソフトウェアの更新又は制御メカニズムから提供されてもよい。１つの機能を実行するように識別されたロジックが、構成機能又はサブ処理を実施するロジックをさらに含んでもよい。一例において、ハードウェアロジックが、１つ又は複数の固定された機能演算、状態マシン又は処理を実施する回路を有する。
【０１５０】
当業者に明らかであろうとおり、本明細書に与えられた任意のレンジ又は装置値が、求められる効果を失うことなく拡張され、あるいは変えられてもよい。
【０１５１】
上記で説明された恩恵及び利点は、１つの実施形態に関連することがあり、あるいはいくつかの実施形態に関連し得ることが理解されるであろう。実施形態は、述べられた問題のいずれか又はすべてを解決するもの、又は述べられた恩恵及び利点のいずれか又はすべてを有するものに、限定されない。
【０１５２】
「一の（an）」アイテムに対するいかなる参照も、１つ以上の該アイテムを指す。用語「含む（comprising）」は、本明細書において、識別された方法ブロック又は要素を含むことを意味するように用いられ、しかし、こうしたブロック又は要素は排他的なリストを含まず、装置がさらなるブロック又は要素を含むことが可能であり、方法がさらなる動作又は要素を含むことが可能である。さらに、ブロック、要素、及び動作は、これら自体、暗黙的にクローズされない。
【０１５３】
本明細書に説明された方法のステップは、任意の適切な順序において、あるいは、適切である場合に同時に、実行されてよい。図内のボックス間の矢印は、方法ステップの一例示的なシーケンスを示すが、他のシーケンス、又は並列における複数ステップの実行を除外することは意図されない。さらに、個々のブロックが、本明細書に説明された対象事項の主旨及び範囲から逸脱することなく、上記方法のうち任意のものから削除されてもよい。上記で説明された例のうち任意のものの態様が、説明された他の例のうち任意のものの態様と組み合わせられて、求められる効果を失うことなく、さらなる例を形成してもよい。図面の要素が矢印で接続されて示される場合、上記矢印は、要素間のやりとり（データ及び制御メッセージを含む）の単に一例示的なフローを示すことが十分理解されるであろう。要素間のフローは、いずれかの方向、又は双方向であり得る。
【０１５４】
好適な実施形態の上記説明は単に例として与えられており、様々な修正が当業者によりなされ得ることが理解されるであろう。様々な実施形態がある程度の特定性で、又は１つ以上の個々の実施形態を参照して上記で説明されたが、当業者は、本発明の主旨又は範囲から逸脱することなく、開示された実施形態に対して多数の変更をなし得る。
【符号の説明】
【０１５５】
１７００  パイプライン
１７０４  イン頂点バッファ
１７０６  インインデックスバッファ、トポロジ
１７０８  頂点シェーダ
１７１０  ドメインシェーダ
１７１２  テッセレータ
１７１４  ブレンドシェーダ
１７１６  アウト頂点バッファ
１７１８  アウトインデックスバッファ
１７２０  インドメインバッファ
１８００  コンピューティングベース装置
１８０２  プロセッサ
１８１２  通信インターフェース
１８１０  メモリ
１８０４  オペレーティングシステム
１８０６  アプリケーションソフトウェア
１８１０  ブレンディングモジュール
１８０８  テッセレーションモジュール
１８１２  前処理モジュール
１８１４  再帰的テッセレーションモジュール
１８１６  変位係数モジュール
１８１８  中心ＴＦのための付加的前処理モジュール
【図１】
0006736361.tif 000007
【図２】
0006736361.tif 000008
【図３】
0006736361.tif 000009
【図４】
0006736361.tif 000010
【図５】
0006736361.tif 000011
【図６】
0006736361.tif 000012
【図７】
0006736361.tif 000013
【図８】
0006736361.tif 000014
【図９】
0006736361.tif 000015
【図１０】
0006736361.tif 000016
【図１１】
0006736361.tif 000017
【図１２】
0006736361.tif 000018
【図１３】
0006736361.tif 000019
【図１４】
0006736361.tif 000020
【図１５】
0006736361.tif 000021
【図１６】
0006736361.tif 000022
【図１７】
0006736361.tif 000023
【図１８】
0006736361.tif 000024