JP6736361B2 - 変位係数を用いたテッセレーション方法 - Google Patents

変位係数を用いたテッセレーション方法 Download PDF

Info

Publication number
JP6736361B2
JP6736361B2 JP2016111771A JP2016111771A JP6736361B2 JP 6736361 B2 JP6736361 B2 JP 6736361B2 JP 2016111771 A JP2016111771 A JP 2016111771A JP 2016111771 A JP2016111771 A JP 2016111771A JP 6736361 B2 JP6736361 B2 JP 6736361B2
Authority
JP
Japan
Prior art keywords
vertex
tessellation
patch
vertices
new
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2016111771A
Other languages
English (en)
Other versions
JP2017004516A (ja
Inventor
マルコルム,レイシー ピーター
マルコルム,レイシー ピーター
サイモン,フェンニー
Original Assignee
イマジネーション テクノロジーズ リミティッド
イマジネーション テクノロジーズ リミティッド
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by イマジネーション テクノロジーズ リミティッド, イマジネーション テクノロジーズ リミティッド filed Critical イマジネーション テクノロジーズ リミティッド
Publication of JP2017004516A publication Critical patent/JP2017004516A/ja
Application granted granted Critical
Publication of JP6736361B2 publication Critical patent/JP6736361B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T17/00Three dimensional [3D] modelling, e.g. data description of 3D objects
    • G06T17/20Finite element generation, e.g. wire-frame surface description, tesselation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T11/002D [Two Dimensional] image generation
    • G06T11/001Texturing; Colouring; Generation of texture or colour
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T17/00Three dimensional [3D] modelling, e.g. data description of 3D objects
    • G06T17/20Finite element generation, e.g. wire-frame surface description, tesselation
    • G06T17/205Re-meshing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/50Lighting effects
    • G06T15/80Shading
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2210/00Indexing scheme for image generation or computer graphics
    • G06T2210/36Level of detail

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Graphics (AREA)
  • Geometry (AREA)
  • Software Systems (AREA)
  • Image Generation (AREA)

Description

テッセレーションは、コンピュータグラフィックスにおいて使用される手法であり、あるシーンにおけるオブジェクトを表現する一組のサーフェスを、複数のより小さい、より簡素なピース(プリミティブと呼ばれる)へと分割する。このピースは、典型的には三角形であり、レンダリングにより適している。結果として生じるテッセレートされたサーフェスは、一般に、元のサーフェスに対する近似であるが、この近似の正確さは、生成されるプリミティブの数を増加させることによって向上させることができ、このことが今度は、大抵、プリミティブが小さくなることをもたらす。テッセレーション/細分割の量は、大抵、詳細レベル(level of detail;LOD)によって決定される。したがって、より高い詳細レベルが必要とされる場合、典型的に、増加させた数のプリミティブが使用される。例えば、オブジェクトがビューアにより近いため、かつ/あるいは、オブジェクトがより入り組んだ形状を有するためなどである。しかしながら、多数の三角形の使用は、そのシーンをレンダリングするのに必要とされる処理労力を増大させる。
三角形プリミティブへの細分割は典型的にパッチに対して実行され、パッチは形状において四角く又は三角であり(すなわち、四角形又は三角形)、パッチを曲げて、該パッチが表現するオブジェクトのサーフェスにフィットさせ(ゆえに、「サーフェスパッチ」と呼ばれることがある)、かつ/あるいはディスプレースメントマッピングを適用させてもよい。しかしながら、細分割は、曲げられたパッチに対して実行されず、しかし代わって、2次元のパッチのドメインの中で実行され(すなわち、パッチは、多項式により定義されるというより、より平面的である)、上記ドメインは、(u,v)パラメータの観点において定義され、「パラメトリック空間」と呼ばれ得る。このことは、テッセレーション処理が、最終的なサーフェスに存在するいかなる湾曲からも独立であることを意味する。
テッセレーションは、前もって(例えば、あるシーンについての複数の異なるビューを、異なる詳細レベルにおいて及び/又は異なる視点から計算するように)実行されてもよく、あるいは、臨機応変に(on the fly)(例えば、連続的な又はビュー依存の詳細レベルを提供するように)実行されてもよい。いくつかの既存のテッセレーション方法を用いると、ユーザは、望まれない視覚的アーチファクトを体験する可能性があり、これにおいて、要求された詳細レベルは円滑に変更されるが、結果として生じるテッセレーションは非連続的な仕方において変化する。
以下に説明される実施形態は、単に例として提供され、テッセレーションを実行する既知の方法及び装置の欠点のうちいずれか又はすべてを解決する実施の限定ではない。
本発明の概要は、以下に詳細な説明においてさらに説明される概念のうち選択されたものを簡素化された形式で紹介するために提供される。本発明の概要は、請求される対象事項のうち重要な特徴又は必須の特徴を識別するものではなく、請求される対象事項の範囲の決定を支援するものとして使用されるべきものでもない。
パッチの各頂点について定義された頂点テッセレーション係数及び変位係数の双方を使用するテッセレーション方法が説明される。上記パッチは、四角形、三角形、又は等値線であり得る。上記方法は、コンピュータグラフィックスシステムにおいて実施され、1つ以上の入力パッチにおける各々の角の頂点の頂点テッセレーション係数を算出することを含む。それから、1つ以上の入力パッチに対して、頂点テッセレーション係数を用いて、テッセレーションが実行される。テッセレーション動作は、1つ以上の新しい頂点を追加することと、各々の新たに追加された頂点の変位係数を算出することとを含む。その後、各頂点のワールド空間パラメータが、各頂点の対象ワールド空間パラメータを算出することと、それから、頂点の対象ワールド空間パラメータを該頂点の変位係数を用いて修正することとによって決定される。
第1の態様は、コンピュータグラフィックスシステムにおいてテッセレーションを実行する方法を提供し、この方法は、1つ以上の入力パッチにおける各々の角の頂点の頂点テッセレーション係数を算出するステップと、上記頂点テッセレーション係数を用いて上記1つ以上の入力パッチに対してテッセレーションを実行して、頂点により定義される複数のプリミティブを生成するステップであって、上記テッセレーションは、1つ以上の新しい頂点を追加することと、各々の新たに追加された頂点の変位係数を算出することとを含む、ステップと、各頂点のワールド空間パラメータを、各頂点の対象ワールド空間パラメータを算出することと、頂点の対象ワールド空間パラメータを該頂点の変位係数を用いて修正することとによって、生成するステップと、を含む。
1つ以上の新しい頂点を追加することは:パッチにおける隣接する頂点のペアの頂点テッセレーション係数を、閾値と比較することと;少なくとも1つの頂点テッセレーション係数が上記閾値を超えると決定することに応答して、上記の2つの隣接する頂点の間のエッジを2つの部分に細分割する新しい子頂点を追加することであって、上記2つの隣接する頂点は、上記子頂点の親頂点である、ことと;を含み得る。上記新しい子頂点は、上記の2つの親頂点の間の上記エッジを二等分し得る。各々の新たに追加された頂点の変位係数を算出することは、頂点の変位係数を、該頂点の親頂点の頂点テッセレーション係数の関数として算出することを含み得る。上記頂点の親頂点の頂点テッセレーション係数の関数G(TF)は、
Figure 0006736361
の場合、G(TF)=(TFmax−THRES)/Δ
又は
Figure 0006736361
の場合、G(TF)=1
により与えられ得る。これにおいて、TFmaxは親頂点の頂点テッセレーション係数の最大値であり、THRESは閾値であり、Δはある量であって、テッセレーションを実行するときに各反復においてΔずつ頂点テッセレーション係数が低減される。
上記方法は、上記1つ以上の入力パッチにおける各々の角の頂点の変位係数を、変位係数の最大値に設定するステップ、をさらに含み得る。
頂点の対象ワールド空間パラメータを該頂点の変位係数を用いて修正することは:上記頂点のワールド空間パラメータの開始状態を、上記頂点の親頂点のワールド空間パラメータ間で補間することによって生成することと;上記頂点の変位係数を用いて、上記頂点のワールド空間パラメータの開始状態と上記頂点の対象ワールド空間パラメータとの間で補間することと;を含み得る。頂点の変位係数が最小値に等しい場合、頂点のワールド空間パラメータは、頂点のワールド空間パラメータの開始状態に等しくなることがあり、頂点の変位係数が最大値に等しい場合、頂点のワールド空間パラメータは、頂点のワールド空間パラメータの対象状態に等しくなり得る。頂点の変位係数dfを用いて、頂点のワールド空間パラメータの開始状態M’と頂点の対象ワールド空間パラメータM(u3,v3)との間で補間することは、(1−df)*M’+df*M(u3,v3)を算出することを含み得る。頂点のワールド空間パラメータの開始状態M’を、該頂点の親頂点のワールド空間パラメータM(u1,v1)、M(u2,v2)間で補間することによって生成することは、
M’=RAST_INTERP(M(u1,v1),M(u2,v2),A)
を算出することを含み得る。これにおいて、RAST_INTERPは、コンピュータグラフィックスシステムのラスタライザにより使用される補間関数であり、Aは定数である。
1つ以上の新しい頂点を追加することは、エッジにより接続され及びドメイン空間に定義された左頂点と右頂点とを含む最初のパッチについて:上記左頂点の頂点テッセレーション係数及び上記右頂点の頂点テッセレーション係数を、閾値と比較することと;上記左頂点及び右頂点の頂点テッセレーション係数のいずれも上記閾値を超えないと決定することに応答して、上記最初のパッチを説明するデータを出力することと;上記左頂点及び右頂点の頂点テッセレーション係数のうちいずれかが上記閾値を超えると決定することに応答して、上記エッジを2つの部分に細分割する新しい頂点を形成することと、上記新しい頂点の頂点テッセレーション係数を算出することと、上記最初のパッチを分割して、上記左頂点及び上記新しい頂点を含む第1の新しいパッチと上記右頂点及び上記新しい頂点を含む第2の新しいパッチとを形成することと;上記の新たに形成されたパッチの各々における各頂点の頂点テッセレーション係数を低減させることと;を含み得る。
上記新しい頂点は、上記エッジを二等分し得る。1つ以上の新しい頂点を追加することは、上記最初のパッチとして各々の新たに形成されたパッチを用いて当該方法を繰り返すことをさらに含み得る。各々の新たに形成されたパッチについて、上記最初のパッチとして、当該方法を繰り返すことは、各パッチにおける左及び右頂点の頂点テッセレーション係数が閾値を超えなくなるまで、各々の新たに形成されたパッチについて、上記最初のパッチとして、当該方法を繰り返すことを含み得る。
上記新しい頂点の頂点テッセレーション係数を算出することは:上記左頂点及び右頂点の頂点テッセレーション係数の平均値を算出することと;上記新しい頂点の頂点テッセレーション係数を、上記の算出された平均値に等しく設定することと;を含み得る。左頂点及び右頂点の頂点テッセレーション係数の平均値は、
MEAN(LEFT.TF,RIGHT.TF)=MIN(AVG(LEFT.TF,RIGHT.TF),MIN(LEFT.TF,RIGHT.TF)+INTERVAL)
により与えられ得る。これにおいて、LEFT.TFは左頂点の頂点テッセレーション係数であり、RIGHT.TFは右頂点の頂点テッセレーション係数であり、AVG()は括弧内の値の算術平均であり、MIN()は括弧内の値のリストのうちの最小であり、INTERVALは所定のパラメータである。
新たに形成されたパッチの各々における各頂点の頂点テッセレーション係数を低減させることは、各頂点テッセレーション係数を、所定のパラメータINTERVALによって低減させることを含み得る。パラメータINTERVALは、0.5であり得る。閾値はゼロであり得る。
上記最初のパッチは、2つの頂点、上記左頂点及び上記右頂点により定義される等値線パッチであり得る。
上記最初のパッチは、三角形パッチであることがあり、上記三角形パッチは、3つの頂点、すなわち、上頂点、上記右頂点、及び上記左頂点の、順序付けられたセットであり得る。分割されるパッチは、2つの新たに形成されるパッチに対する親パッチであることがあり、第1の新しいパッチは、3つの頂点、すなわち、親パッチに対して追加された新しい頂点である上頂点と、親パッチの左頂点である右頂点と、親パッチの上頂点である左頂点との、順序付けられたセットであり、第2の新しいパッチは、3つの頂点、すなわち、親パッチに追加された新しい頂点である上頂点と、親パッチの上頂点である右頂点と、親パッチの右頂点である左頂点との、順序付けられたセットである。上記方法は、入力パッチを受け取るステップと、上記入力パッチから1つ又は複数の最初のパッチを生成するステップと、上記複数の最初のパッチの各々について、当該方法を繰り返すステップと、をさらに含み得る。
入力パッチは、3つの頂点を有する三角形パッチであることがあり、1つ又は複数の最初のパッチを生成するステップは:3つの頂点の各々の頂点テッセレーション係数を閾値と比較することと;上記頂点テッセレーション係数のいずれも上記閾値を超えないと決定することに応答して、上記入力パッチを説明するデータを出力することと;上記頂点テッセレーション係数の少なくとも1つが上記閾値を超えると決定することに応答して、上記三角形の中心に新しい頂点を形成することと、上記新しい頂点の頂点テッセレーション係数を算出することと、上記入力パッチを分割して3つの最初のパッチを形成することであって、各々の最初のパッチは上頂点として上記新しい頂点を有する三角形パッチである、ことと、新たに形成された最初のパッチの各々における各頂点の頂点テッセレーション係数を低減させることと、を含み得る。新しい頂点は、三角形の重心に形成されてもよい。入力パッチの3つの頂点は、上頂点、左頂点、及び右頂点であることがあり、三角形の中心における新しい頂点の頂点テッセレーション係数は、MID.TF=MEAN(TOP.TF,LEFT.TF,RIGHT.TF)を用いて算出され得る。これにおいて、MID.TFは新しい頂点の頂点テッセレーション係数であり、TOP.TFは上頂点の頂点テッセレーション係数であり、LEFT.TFは左頂点の頂点テッセレーション係数であり、RIGHT.TFは右頂点の頂点テッセレーション係数であり、MEAN()は括弧内の値の平均値である。MEAN(TOP.TF,LEFT.TF,RIGHT.TF)は、
MEAN(TOP.TF,LEFT.TF,RIGHT.TF)=MIN(AVG(TOP.TF,LEFT.TF,RIGHT.TF),MIN(TOP.TF,LEFT.TF,RIGHT.TF)+INTERVAL)
を用いて算出され得る。これにおいて、AVG()は括弧内の値の算術平均であり、MIN()は括弧内の値のリストのうちの最小であり、INTERVALは所定のパラメータである。
入力パッチは4つの頂点を有する四角形パッチであることがあり、1つ又は複数の最初のパッチを生成するステップは:四角形パッチの中心に新しい頂点を形成することと;新しい頂点の頂点テッセレーション係数を算出することと;入力パッチを分割して4つの最初のパッチを形成することであって、各々の最初のパッチは上頂点として上記新しい頂点を有する三角形パッチである、ことと;新たに形成された最初のパッチの各々における各頂点の頂点テッセレーション係数を低減させることと、を含み得る。
入力パッチは、4つの頂点及び中心テッセレーション係数を有する四角形パッチであることがあり、1つ又は複数の最初のパッチを生成するステップは:5つの新しい頂点を追加して、入力パッチを4つのサブ入力四角形パッチに細分割することと;5つの新たに追加された頂点の各々の頂点テッセレーション係数を算出することと;新たに形成された4つのサブ入力パッチにおける各頂点の頂点テッセレーション係数を低減させることと;各サブ入力パッチについて:四角形パッチの中心に新しい頂点を形成することと;新しい頂点の頂点テッセレーション係数を算出することと;入力パッチを分割して4つの最初のパッチを形成することであって、各々の最初のパッチは上頂点として上記新しい頂点を有する三角形パッチである、ことと;新たに形成された最初のパッチの各々における各頂点の頂点テッセレーション係数を低減させることと、を含み得る。
入力パッチは、3つの頂点及び中心テッセレーション係数を有する三角形パッチであることがあり、1つ又は複数の最初のパッチを生成するステップは:4つの新しい頂点を追加して、入力パッチを3つのサブ入力四角形パッチに細分割することと;5つの新たに追加された頂点の各々の頂点テッセレーション係数を算出することと;新たに形成された4つのサブ入力パッチにおける各頂点の頂点テッセレーション係数を低減させることと;各サブ入力パッチについて:四角形パッチの中心に新しい頂点を形成することと;上記新しい頂点の頂点テッセレーション係数を算出することと;入力パッチを分割して4つの最初のパッチを形成することであって、各々の最初のパッチは上頂点として上記新しい頂点を有する三角形パッチである、ことと;新たに形成された最初のパッチの各々における各頂点の頂点テッセレーション係数を低減させることと;を含み得る。
入力パッチの4つの頂点は、左上頂点、右上頂点、左下頂点、及び右下頂点であることがあり、三角形の中心における新しい頂点の頂点テッセレーション係数は、
MID.TF=MEAN(TLEFT.TF,TRIGHT.TF,BLEFT.TF,BRIGHT.TF)
を用いて算出され得る。これにおいて、MID.TFは新しい頂点の頂点テッセレーション係数であり、TLEFT.TFは左上頂点の頂点テッセレーション係数であり、TRIGHT.TFは右上頂点の頂点テッセレーション係数であり、BLEFT.TFは左下頂点の頂点テッセレーション係数であり、BRIGHT.TFは右下頂点の頂点テッセレーション係数であり、MEAN()は括弧内の値の平均値である。
MEAN(TLEFT.TF,TRIGHT.TF,BLEFT.TF,BRIGHT.TF)は、
MEAN(TLEFT.TF,TRIGHT.TF,BLEFT.TF,BRIGHT.TF)=MIN(AVG(TLEFT.TF,TRIGHT.TF,BLEFT.TF,BRIGHT.TF),MIN(TLEFT.TF,TRIGHT.TF,BLEFT.TF,BRIGHT.TF)+INTERVAL)
を用いて算出され得る。これにおいて、AVG()は括弧内の値の算術平均であり、MIN()は括弧内の値のリストのうちの最小であり、INTERVALは所定のパラメータである。
新たに形成された最初のパッチの各々における各頂点の頂点テッセレーション係数を低減させることは、所定のパラメータINTERVALによって各頂点テッセレーション係数を低減させることを含み得る。
第2の態様がグラフィックスパイプラインを提供し、このグラフィックスパイプラインは:1つ又は複数の入力パッチにおける各々の角の頂点を定義するデータを受け取るように配置され、上記データは各々の角の頂点の頂点テッセレーション係数を含むハードウェアテッセレータであって、上記頂点テッセレーション係数を用いて上記複数の入力パッチに対してテッセレーションを実行して、頂点により定義される複数のプリミティブを生成し及び出力するように配置され、上記テッセレーションは1つ以上の新しい頂点を追加することを含むハードウェアロジック、を含み、上記ハードウェアテッセレータは、各々の新たに追加された頂点の変位係数を算出するように配置されたハードウェアロジックをさらに含む、ハードウェアテッセレータと;各々の新たに追加された頂点について、頂点の受け取られた対象ワールド空間パラメータを該頂点の変位係数を用いて修正するように配置されたハードウェアブレンドシェーダと;を含む。
グラフィックスパイプラインは、各々の角の頂点の頂点テッセレーション係数を算出し、上記頂点テッセレーション係数を上記ハードウェアテッセレータに出力するように配置された頂点シェーダ、をさらに含み得る。
グラフィックスパイプラインは、アウト頂点バッファをさらに含むことがあり、上記頂点テッセレーション係数を上記ハードウェアテッセレータに出力することは、上記頂点テッセレーション係数を上記アウト頂点バッファに記憶することを含む。
グラフィックスパイプラインは、各頂点の対象ワールド空間パラメータを算出し、上記対象ワールド空間パラメータを上記ハードウェアブレンドシェーダに出力するように配置されたドメインシェーダ、をさらに含み得る。グラフィックスパイプラインは、インドメインバッファをさらに含むことがあり、上記対象ワールド空間パラメータを上記ハードウェアブレンドシェーダに出力することは、上記対象ワールド空間パラメータを上記インドメインバッファに記憶することを含む。
2つの親頂点間のエッジを二等分する新しい頂点について、新たに追加された頂点の変位係数を算出するように配置された上記ハードウェアロジックは、新たに追加された頂点の変位係数を、該頂点の親頂点の頂点テッセレーション係数の関数として算出するように配置され得る。
新たに追加された頂点の変位係数を算出するように配置された上記ハードウェアロジックは、上記1つ又は複数の入力パッチにおける各々の角の頂点の変位係数を、変位係数の最大値に設定するように配置され得る。
上記ハードウェアブレンドシェーダは:頂点のワールド空間パラメータの開始状態を、該頂点の親頂点のワールド空間パラメータ間で補間することによって生成し;上記頂点の変位係数を用いて、上記頂点のワールド空間パラメータの上記生成された開始状態と上記頂点の受け取られた対象ワールド空間パラメータとの間で補間する;ように配置されたハードウェアロジックを含み得る。頂点の変位係数が最小値に等しい場合、頂点のワールド空間パラメータは頂点のワールド空間パラメータの開始状態に等しくなることがあり、頂点の変位係数が最大値に等しい場合、頂点のワールド空間パラメータは頂点のワールド空間パラメータの対象状態に等しくなり得る。
テッセレーションを実行するように構成された上記ハードウェアロジックは、エッジにより接続され及びドメイン空間に定義された左頂点と右頂点とを含む最初のパッチについて:上記左頂点の頂点テッセレーション係数及び上記右頂点の頂点テッセレーション係数を、閾値と比較し;上記左頂点及び右頂点の頂点テッセレーション係数のいずれも上記閾値を超えないと決定することに応答して、上記最初のパッチを説明するデータを出力し;上記左頂点及び右頂点の頂点テッセレーション係数のうちいずれかが上記閾値を超えると決定することに応答して、上記エッジを2つの部分に細分割する新しい頂点を形成し、上記新しい頂点の頂点テッセレーション係数を算出し、上記最初のパッチを分割して、上記左頂点及び上記新しい頂点を含む第1の新しいパッチと上記右頂点及び上記新しい頂点を含む第2の新しいパッチとを形成し、上記の新たに形成されたパッチの各々における各頂点の頂点テッセレーション係数を低減させる;ように配置され得る。
さらなる態様が、本明細書に説明されるとおりのグラフィックスパイプラインを定義するコンピュータ可読プログラムコードをエンコードさせたコンピュータ可読記憶媒体と、本明細書に説明されるとおりの方法を実行するように構成されたグラフィックスパイプラインを定義するコンピュータ可読プログラムコードをエンコードさせたコンピュータ可読記憶媒体とを提供する。
当業者に明らかであろうとおり、好適な特徴が、必要に応じて組み合わせられてもよく、本発明の態様のうち任意のものと組み合わせられてもよい。
本発明の実施形態が、例として、下記の図面を参照して説明される。同様の特徴を示すために、共通の参照番号が図面の全体にわたって使用される。
様々な既知のテッセレーション方法の使用の結果を示す。 小数区分化を用いた変位マップの使用を示す。 変位係数を使用する一例示的なテッセレーション方法のフロー図である。 親頂点間で補間することに使用され、変位係数を使用する、ブレンディング処理の2つの概略図を示す。 変位係数を用いてテッセレーション係数が増加するとき如何にしてジオメトリが変わるかを示す。 向上させたテッセレーション方法のフロー図である。 様々な入力パッチを示し、図6の方法の前処理段階を例示する、概略図である。 三角形入力パッチについての、図6の方法の前処理段階のフロー図である。 四角形入力パッチについての、図6の方法の前処理段階のフロー図である。 前処理段階により出力される3つ又は4つの三角形パッチの各々に対する、又は入力等値線パッチに対する、アルゴリズムの再帰的適用のフロー図である。 図10の方法を例示する三角形を示す概略図である。 本明細書に説明される向上させたテッセレーション方法を例示する三角形を示す概略図である。 向上させたテッセレーション方法のさらなる例示的なフロー図であり、図6に示されるものに対するバリエーションである。 図13の方法を例示する概略図である。 図13の方法の追加的な前処理段階のフロー図である。 図13の方法を用いて得られる例示的な結果を示す。 一例示的な向上させたGPUパイプラインの概略図である。 任意の形態のコンピューティング及び/又は電子装置として実施されることが可能であり、本明細書に説明される向上させたテッセレーション方法を実施するように構成されることが可能である一例示的なコンピューティングベース装置の様々なコンポーネントを例示する。
本発明の実施形態が、以下に、単に例として説明される。これら例は、出願人にとって現在分かっている本発明を実施するための最良の方法を表すが、このことを達成することができる方法はこれら例だけではない。本説明は、例の機能と例を構築し及び動作させるステップのシーケンスとを明記する。しかしながら、同一の又は均等の機能及びシーケンスが、異なる例によって達成され得る。
エッジテッセレーション係数(tessellation factor;TF)を使用する多数の既知のテッセレーション方法が存在し、エッジTFは、パッチの(例えば、四角形(quad)又は三角形の)各エッジについて定義され、エッジ(及び、ゆえにパッチ)が何回細分割される(sub-divided)べきかを決定する。図1は、種々のエッジテッセレーション係数を、ただし各エッジについて同じテッセレーション係数で使用するときに、結果として生じる三角形が如何に異なるかを示す。
図1における始めの4つの例(a)〜(d)は、
(a)整数区分化(Integer partitioning)、すべての4つのエッジについてエッジTF=3
(b)整数区分化、すべての4つのエッジについてエッジTF=4
(c)2の累乗整数区分化(Power of two integer partitioning)、すべての4つのエッジについてエッジTF=3
(d)2の累乗整数区分化、すべての4つのエッジについてエッジTF=4
を示す。
整数区分化と2の累乗整数区分化とを用いると、各エッジに沿った頂点は、常に、均等に間隔を空けられる。しかしながら、細分割レベルが変わり(詳細レベルが変化し)、三角形が小さくない場合、望まれない視覚的アーチファクト(ポッピングなどであり、以下に説明される)が発生する可能性が高い。ただし、小さいポリゴンがさらなるレンダリングオーバーヘッドを招くとき、ポリゴンをその小ささにすることは望ましくない。この効果は、2の累乗整数区分化について、ステップサイズがかなり大きくなり得るとき、特に劇的である。
図1における最後の4つの例(e)〜(h)は、(例(a)〜(d)とは異なり、)様々なオフセットにおいて頂点を生成する小数区分化(fractional partitioning)方法を示し、
f)奇数(Odd)小数区分化、すべての4つのエッジについてエッジTF=3.0
g)奇数小数区分化、すべての4つのエッジについてエッジTF=4.0
h)偶数(Even)小数区分化、すべての4つのエッジについてエッジTF=3.0
i)偶数小数区分化、すべての4つのエッジについてエッジTF=4.0
である。
いくつかの既知のシステムは、(例えば、例(e)〜(h)に図示されるとおり)「小数の」詳細レベルを許容することによって、エッジに沿って「ポッピング」アーチファクトを回避する。これにおいて、いかなる新しい頂点も、最初、既存の頂点の場所に作成され、こうした頂点が、詳細レベルが増加するとき、パラメータ空間におけるほんの1つのエッジについて図2(a)に図示されるとおり、位置へ徐々に「スライドする」。表現における突然のジャンプが大幅に除去されるが、こうしたスキームは、邪魔になる、不安定な「遊泳(swimming)/揺動(wobbling)」アーチファクトを被る可能性があり、該アーチファクトは、ディスプレースメントマッピング(displacement mapping)の使用によって悪化させられる可能性があり、このことは図2(b)及び(c)を参照して説明され得る。
図2(b)は、一例示的な変位マップ断面を示し、図2(c)は、テッセレーション係数が変更されるとき、上記断面が如何にエッジ(例えば、図2(a)に示されるエッジ)に適用されるかを示す。矢印201〜204は、テッセレーション係数が4.0から5.0に(矢印201、202)、及び5.0から6.0に(矢印203、204)変わるとき、頂点の変位(displacement)が如何に変わるかを示す。
メッシュ内の頂点のパラメータを決定する向上させた方法が本明細書において説明され、該方法は変位係数(displacement factors)を使用して、図2を参照して上記で説明されたポッピングと遊泳アーチファクトとの双方を軽減する。以下に詳細に説明されるとおり、メッシュにおける頂点のパラメータ(該パラメータは、「頂点メンバ値」と呼ばれることがあり、位置、法線、タンジェント等を含み得る)は、頂点の変位係数に基づいて、「対象の(target)」又は最終的な値から変位させられる(displaced)。このことは、新しい頂点がメッシュに対して追加されるとき、そのパラメータが該頂点の親頂点のパラメータの平均であり、それから、パラメータが、対象値に等しくなるまで徐々に変化するという効果を有する。このことは、頂点パラメータの値における急な変化を回避し、急な変化は、望まれない視覚的アーチファクトをもたらす可能性がある。
上記方法(及び、ゆえに変位係数)は任意のテッセレーション方法との組み合わせにおいて使用されてよく、上記任意のテッセレーション方法は、(a)ドメイン(例えば、四角形、三角形、又は等値線(isoline))の各々の角の頂点について定義されたテッセレーション係数を使用し、(b)複数の新しい頂点を追加することを含み、各々の新しい頂点は、2つの既存の頂点を接続するエッジを2つの部分に細分割する、(ドメイン空間における)位置に追加される(いくつかの例において、上記2つの部分は等しい部分であることがあり、新しい頂点はエッジを二等分する)。新たに追加される頂点は子頂点と呼ばれることがあり、2つの既存の頂点は親頂点と呼ばれることがある。頂点についてのテッセレーション係数は、「頂点テッセレーション係数」と呼ばれ、これらは、上記で説明された既知の方法において使用されるエッジテッセレーション係数から区別される。頂点テッセレーション係数を使用する一例示的なテッセレーション方法が、図6〜図16を参照して以下に説明される。
本説明において、サーフェスパッチは、通常有限の、N次元のサーフェス(又は、等値線の場合、N次元の曲線セグメント)を指し、このサーフェスは、四角形又は三角形のいずれかである境界を定められた2Dドメイン(又は、等値線の場合は1Dの線セグメント)への、パラメトリックマッピング関数の適用の結果である。結果として生じるサーフェス又は等値線は、デカルトの(又は、同種の)空間的位置決めのための3(又は4)次元だけでなく、テクスチャ座標などの他のパラメータをさらに含み得るので、N次元と見なされることができる。上記で説明されたとおり、サーフェスパッチを曲げて、該サーフェスパッチが表現するオブジェクトのサーフェスにフィットさせ、かつ/あるいはディスプレースメントマッピングを適用させてもよい。しかしながら、テッセレーション(すなわち、パッチの細分割)は「ワールド空間(world space)」において実行されず(すなわち、テッセレーションは、曲げられたサーフェスパッチに対して実行されない)、しかし代わって、ドメイン空間において実行される(このドメイン空間はさらにパラメトリック空間又はパラメータ空間と呼ばれることがある)。上記ドメイン空間において、ドメイン内の任意の位置が、ドメイン空間座標として知られる2つの座標(u,v)によって説明されることができ、このことは、テッセレーション処理が最終的なサーフェスに存在するいかなる湾曲からも独立であることを意味する(しかしながら、ユーザは、テッセレーション係数を決定するとき、上記湾曲を考慮に入れてもよい)。
下記の説明においてテッセレーション方法を説明するとき、用語「パッチ」は、ドメインの境界を定める2つ、3つ、又は4つの頂点の順序付けられたセットを(等値線、三角形、又は四角形について、それぞれ、)指すように用いられる。ゆえに、用語「ドメイン」は、パッチの頂点により境界を定められた2次元の空間を指す。用語「頂点」は、概して、場所に加えて他の属性を説明するように用いられ、上記属性は、コンテキストに依存して異なる。例えば、ドメインシェーダ(domain shader)からの入力制御点と出力頂点とは、3D位置に加えて他のパラメータ、例えば、法線、タンジェント、テクスチャなどを含み、一方、テッセレータ(tessellator)内の頂点(すなわち、テッセレーション方法内で使用される頂点)は、ドメイン空間座標と頂点テッセレーション係数とを含む。ゆえに、テッセレータ内の上記頂点は、入力制御点又は最終的な三角形を形成する結果的なN次元の頂点と同じでない。
図3は、変位係数を使用する一例示的なテッセレーション方法のフロー図である。この方法は、GPUパイプラインにおいて実施され得る3つのハイレベルの方法ブロックを示している。GPUパイプラインの例が、以下により詳細に説明される。
図3に示されるとおり、頂点テッセレーション係数が、1つ以上の入力パッチの各々の角の頂点について、例えば、カメラからの頂点の位置の関数として、算出される(ブロック302)。それから、上記入力パッチの各々は、パッチの角の頂点の頂点テッセレーション係数に基づいて、例えば、以下の2つの例示的な方法のうち1つ、又は代替的な方法を用いて、複数のプリミティブ(例えば、三角形又は線)に細分割される(ブロック304)。細分割の間、1つ以上の新しい頂点が追加され(ブロック305)、各々の新しい(「子」)頂点は、2つの既存の(「親」)頂点間の線を2つの部分に細分割する、ドメイン空間における位置に追加される。上記で説明されたとおり、2つの部分は等しいことがあり、子頂点は2つの親頂点間の線(又は、エッジ)を二等分し、あるいは、2つの部分の長さに差があることがあり、子頂点は2つの親頂点間でちょうどに置かれない。変位係数が、各々の新たに追加された頂点について算出され(ブロック306)、こうした変位係数は、後に(ブロック308において)、頂点のドメイン空間座標と共に使用されて、プリミティブにおける各頂点についての1つ以上のワールド空間頂点パラメータ、例えば、位置、法線、及びタンジェントなどが生成される。上記変位係数は、新しい頂点が追加されるとき、頂点(例えば、親頂点であるが、他の例において、子頂点の頂点TFが追加的に又は代わって使用されてもよい)の頂点テッセレーション係数を用いて、(ブロック306において)算出される。上記頂点テッセレーション係数は、必ずしも、テッセレーション処理の終わりにおける頂点の頂点テッセレーション係数と同じでない。なぜならば、以下により詳細に2つの例示的なテッセレーション方法を参照して説明されるとおり、頂点テッセレーション係数は、テッセレーション処理の間に低減されることがあるからである。
頂点についての(ブロック308における)ワールド空間パラメータの生成は、以下により詳細に説明されるとおり、子頂点についての1つ以上の対象ワールド空間(target world space)パラメータと、その2つの親頂点についての対応するワールド空間パラメータとを生成すること(ブロック310)と、それから、「ブレンディング(blending)」を実行すること(ブロック312)とを含むことができ、子頂点の各ワールド空間パラメータについて、特定パラメータの対象値が、子頂点の変位係数と2つの親頂点の各々についての当該ワールド空間パラメータの生成された値とに基づいて修正される。例えば、パラメータがワールド空間位置である場合、ブレンディングは、子頂点についての対象ワールド空間位置とその2つの親頂点の各々のワールド空間位置とを取得し、子頂点の対象ワールド空間位置と、2つの親頂点の各々についての算出されたワールド空間位置(該位置は、以下に説明されるとおり、これら頂点の「対象」ワールド空間位置であることになる)と、子頂点の変位係数とに基づいて、子頂点の修正されたワールド空間位置を生成する。
頂点テッセレーション係数の(ブロック302における)算出は、例えば、頂点ごとに動作する頂点シェーダ内で(すなわち、メッシュトポロジの知識なしに)実施されてもよく、同時に、入力パッチの(ブロック304における)細分割と変位係数の(ブロック306における)算出とは、ハードウェアテッセレーションユニット(又は、テッセレータ)内で実施されてもよい。最後、各頂点についての(ブロック308における)ワールド空間パラメータの生成は、GPUにおける1つ以上のシェーダ内で実施されてもよい(例えば、ブレンディングがブレンドシェーダ内で実行されてもよく、ブレンドシェーダは、ハードウェアにおいて実施されてもよく、ドメインシェーダにより生成される対象ワールド空間パラメータを使用してもよく、ドメインシェーダは、ソフトウェアにおいて実施されてもよい)。
変位係数の使用は、本明細書において説明されるとおり、「ポッピング」と呼ばれる問題に対処する。ポッピングは、既知のテッセレーション方法において、詳細レベルが変わるとき(例えば、オブジェクトがカメラにより近くなり、ゆえに、より高い詳細レベルでレンダリングされる必要があるとき)、生じる。ポッピングは、しばしば、向きを突然に変えるプリミティブの視覚的アーチファクトを説明することに用いられるが、しかしながら、ポッピングは、頂点メンバにおける任意の不連続性を参照し得る(例えば、新しい頂点を追加することによる、メッシュの点上の法線における突然の変化は、ライティングを突然に変化させることになる)。このことは、主に、頂点が形成され、高さマップによってすぐに変位させられるとき、生じる。いくつかの既知の小数の方法は、新しい頂点を古い頂点の上に導入することと(このことは、頂点のすべての特性、例えば、位置、法線、タンジェント、テクスチャ座標等が、同じであることを保証する)、これらを、(図2を参照して上記で説明されたとおり)詳細レベルが増加するときに位置へ外にスライドすることとによって、上記の問題を克服する。しかしながら、こうした手法の使用は「遊泳」アーチファクトを導入し、これにおいて、頂点の動きは、結果として(図2に示され、上で説明されたとおり)、ゆらめき(shimmer)に見えるジオメトリ(geometry)をもたらす。
変位係数(ブロック306において算出されたとおりの)は、ゼロとイチとの間の値を有するように定義されることができ(すなわち、変位係数は、[0,1]内の値を有する)、頂点の変位係数の値は、頂点の「年齢」に依存して変化する。ポッピングを回避するために、変位係数は、(例えば、特定の詳細レベルにおいて)最初導入されるときの頂点について、ゼロである。それから、変位係数は、(詳細レベルが増加するとき)増加し、(詳細レベルがさらに増加するとき)頂点が親になる前に1でなければならない。
本明細書に説明される例は、ゼロから1に及ぶ変位係数を参照するが、他の例において、代替的な範囲が使用されてもよく、範囲は、より一般的に[dfmin,dfmax]として指定されてもよい。これにおいて、dfminは、(新たに追加された頂点についての)最小のとり得る変位係数であり、dfmaxは、(元の頂点及び親頂点についての)最大のとり得る変位係数である。
パッチにおける頂点の頂点テッセレーション係数は、このパッチがさらなる細分割を必要とするかを決定し(ブロック304において、以下により詳細に2つの例示的なテッセレーション方法を参照して説明されるとおり)、親頂点の頂点テッセレーション係数は、子頂点の年齢と、それがそれ自体親であり得るかとの指標として使用されることができる。複数の親頂点の頂点テッセレーション係数(又は、少なくとも1つの親頂点であり、この場合、細分割は、単一の頂点の頂点テッセレーション係数次第である)が、細分割の条件にちょうど合う場合、子頂点が新たに追加され、その変位係数はゼロである。複数の親頂点の頂点テッセレーション係数(又は、少なくとも1つの親頂点であり、この場合、細分割は、単一の頂点の頂点テッセレーション係数次第である)が、細分割の条件を大幅に超え、したがって2つ以上の細分割が必要とされる場合、子頂点は、それ自体、親頂点であることが可能であり、その変位係数は1である。変位係数の中間値(すなわち、ゼロより大きいが1より小さい)は、親頂点の頂点テッセレーション係数(又は、少なくとも1つの親頂点であり、この場合、細分割は、単一の頂点の頂点テッセレーション係数次第である)が細分割の基準を超えるほど十分大きい(すなわち、子頂点は新たに追加されず、ゆえに、変位係数は非ゼロである)が、さらなる細分割(子頂点の追加の域を越える)がトリガされ得るほど大きくない(すなわち、子頂点は親であり得ず、ゆえに、変位係数は1より小さい)状況に、対応する。
本明細書における議論は、詳細レベルが増加するとき、変位係数に対する変更に言及するが、上記方法は、詳細レベルが減少する(例えば、オブジェクトがカメラから離れる)状況にさらに適用され、ゆえに、頂点の変位係数は1で始まり、この場合は該係数が親であることが可能であり、それから減少し、その子頂点の除去の後、頂点がそれ自体削除されるときにゼロになる。
以下に説明される例示的なテッセレーション方法において、頂点のペアの頂点テッセレーション係数のうち一方又は双方が閾値THRESを超える場合、パッチ(又は、エッジ)の細分割が(ブロック304において)発生し、各細分割において、頂点テッセレーション係数は量Δだけ減少させられる。結果として、特定の子頂点の親頂点のうち一方又は双方が、THRES+Δを越える頂点テッセレーション係数を有する場合、複数レベルの細分割が発生し得る(及び、子頂点は、それ自体、親であることが可能である)。一方、特定の子頂点の親頂点のうち一方又は双方が、THRESをちょうど上回るだけである頂点テッセレーション係数を有する場合、ただ1レベルの細分割が発生することになり、子頂点が新たに作成されることになる。
V1及びV2が、頂点V3(子頂点)の親である2つの頂点であり、各頂点の頂点テッセレーション係数(TF)が、それぞれ、V1.TF、V2.TF、及びV3.TFと表される場合、子頂点V3の変位係数V3.DFは、
V3.DF=G(MAX(V1.TF,V2.TF)) (1)
によって与えられ得る。これにおいて、MAX()は、括弧内の数のうちの最大値であり(例えば、上記の式においてV1.TFとV2.TFとのうちの最大値であり、これは別法としてTFmaxと表され得る)、
Figure 0006736361
の場合、G(TF)=(TF−THRES)/Δ (2)
又は
そうでない場合、G(TF)=1
である。これにおいて、
Figure 0006736361
は、TFがTHRESとTHRES+Δとの間の開区間内であるが、THRES又はTHRES+Δのいずれにも等しくないことを表し、
TF=MAX(V1.TF,V2.TF)=TFmax
である。
関数MAX()は、上記で説明されたとおり、V1.TF又はV2.TFのいずれかがTHRESを上回る場合にテッセレーションが(ブロック304)において発生するため、使用される。ゆえに、頂点は、MAX(V1.TF,V2.TF)が最大でTHRESであるとき、消失する。G(TFmax)は、THRESに等しいTFmax(すなわち、頂点がちょうど現れた)について0であり、THRES+Δを上回るTFmaxについて1である。TFmaxは、V3が親であるためには、上記の境界より大きくなければならない。
とり得る変位係数の範囲が、([0,1]というよりも)[dfmin,dfmax]により与えられる場合、式(2)は、
G(TF)=(1−α)*dfmin+α*dfmax (3)
になり、これにおいて、
α=(TF−THRES)/Δ
である。
以下に説明される例示的なテッセレーション方法がブロック304において使用される場合、THRESは0.0であることが可能であり、四角形又は三角形パッチについてΔ=INTERVAL、等値線パッチについてΔ=2×INTERVALであることが可能であり、これにおいて、INTERVALは0.5であり得る(テッセレーション係数が対数の底2に対して指定されることを仮定する)。
頂点が常時存在することになる(及び、ゆえに常時十分に変位させられなければならない)とき、変位係数が1において固定されるいくつかの頂点が存在することになる。こうした頂点には、対象入力パッチの任意の頂点と、様々な例において(例えば、第1の例示的なテッセレーション方法が使用される場合)、四角形ドメインの中間頂点(middle vertex)とが含まれる。
使用される具体的なテッセレーション方法に依存して、3つ以上の親頂点を有する頂点が存在し得る。例えば、入力三角形ドメインの中間頂点が、3つの親(上(TOP)、左(LEFT)、及び右(RIGHT)と表される)を有し、こうした一例において、中間頂点の変位係数は、
G(MAX(TOP.TF,LEFT.TF,RIGHT.TF)) (4)
により与えられる。これにおいて、TOP.TFは、上頂点の頂点テッセレーション係数であり、LEFT.TFは、左頂点の頂点テッセレーション係数であり、RIGHT.TFは、右頂点の頂点テッセレーション係数である。
ワールド空間頂点パラメータの(ブロック308と、特にブロック312とにおける)ブレンディングは、図4を参照して説明されることができる。上側の図401は、1つの特定の頂点パラメータ、ワールド空間位置、についてのブレンディングを例示し、下側の図402は、上記方法を拡張して、すべての頂点パラメータに関連する(該頂点パラメータはさらに頂点メンバ値と呼ばれることがある)。
上記で説明されたとおり、各々の新しい頂点は、(ブロック306において算出されたとおり)変位係数dfを与えられ、dfは、頂点がどれほど遠くに変位させられるべきかを説明する。0の変位係数は、頂点がちょうど導入されたところであり、ゆえにワールド空間におけるその「親」頂点を通る線上に存在すべきであることを示すべきである(開始位置)。1の変位係数は、頂点が親であり得ることと、ワールド空間におけるその正しい位置に設定されるべきであることを示すべきであり、該位置は、可能性として、高さマップにより(例えば、グレースケール画像をサンプリングすることによって)与えられ、あるいは、同等の情報の代替的なソース、例えば、ベジエサーフェスなどから決定される。
図4における上側の図401は、新しい頂点V3とその2つの親頂点V1及びV2とを示す。頂点の位置は(矢印410〜412により示されるとおり)ドメイン空間において図示されており、これにおいて、V3=(V1+V2)/2である。H()は、任意の頂点についてのフルの(又は、対象の)変位を決定する高さ関数であり、V3’は、新しい頂点の開始位置であり、この開始位置は、2つの親頂点間の(ワールド空間における)中間点であり、すなわち、V3’=(H(V1)+H(V2))/2である。
V3の(ワールド空間における)変位させた(又は、修正された)位置は、その変位係数dfの関数であり、F(V3,df)と表され、下記の
F(V3,df)=(1−df)*V3’+df*H(V3) (5)
として、V3’とH(V3)との間で補間することによって決定される。
頂点が(上記の例におけるように2つというよりも)3つの親頂点を有する事象において、V3’は(H(V0)+H(V1)+H(V2))/3により与えられ、これにおいて、親頂点はV0、V1及びV2である。上記は、頂点が4つ以上の親頂点を有する事象において、さらに外挿されてもよい。
次に、図4における下側の図402を参照すると、この図は位置だけよりも多くに関連するので、1の変位係数は、頂点がその最終的な又は対象の状態(target state)に設定されるべきであることを示すべきであり、一方、1より少ない変位係数について、各頂点メンバ値の値(例えば、位置、法線、タンジェント)は、変位値に基づいて対象値から修正される。
図4における図402は、2つの親頂点のドメイン空間座標として(u1,v1)及び(u2,v2)を、新しい(子)頂点のドメイン空間座標として(u3,v3)を示しており、これにおいて、u3=(u1+u2)/2及びv3=(v1+v2)/2である。M()は対象頂点メンバ値を算出する関数であり、ドメイン空間座標(u,v)を所与とし、M’は新しい(子)頂点の開始位置である。M’の値は、下記の、
M’=RAST_INTERP(M(u1,v1),M(u2,v2),A) (6)
として決定され得る。これにおいて、RAST_INTERPは、三角形ドメインにわたって(GPUパイプラインにおける)ラスタライザにより使用される補間関数であり、大抵、線形補間であり、Aは定数である。子頂点がエッジを二等分する例において、A=0.5であり、子頂点がエッジを二等分しない場合、定数Aは異なる値を有し得る。上記のM’の選択を用いて、任意の新しい頂点の状態は、(その親頂点間の中途である)画素がラスタライゼーションの後に有することになるものと同じメンバ値を有し、ゆえに、新しい頂点が導入されるときにジオメトリ又はライティングのポッピングがないことを確保する。
新しい頂点の現在の状態F(u3,v3,df)を決定するために、上記方法は、M’とM(u3,v3)との間で、dfによって、線形に、
F(u3,v3,df)=(1−df)*M’+df*M(u3,v3) (7)
によって補間する。
頂点が3つの親頂点を有する事象(例えば、以下に説明される第1の例示的なテッセレーション方法における三角形ドメインの中間頂点)において、M’は、代わって、
M’=RAST_INTERP(M(1,0,0),M(0,1,0),M(0,0,1),C,D,E) (8)
によって重心座標において与えられ、これにおいて、C、D、及びEは定数である。子頂点が重心に置かれる例において、C=1/3、D=1/3、E=1/3であり、子頂点が正確に重心に置かれない場合、定数C、D、Eは異なる値を有し得る。
図5における画像は、(上記で説明されたとおりの)変位係数を用いてテッセレーション係数が増加するときジオメトリが如何に変化するかを論証する。ドメインが、テッセレートされていない(untessellated)三角形501として始まる。それから、細分割が必要とされるとすぐ、中間頂点502が導入される。しかしながら、すべての頂点が依然として三角形の平面内に存在する。テッセレーション係数が増加するとき、頂点は、後続の図により示されるとおり、頂点がその正しい位置に到達するまで、変位させられる。
上記で説明されたとおり、変位係数は、任意の互換的なテッセレーション方法(すなわち、頂点テッセレーション係数を使用し、複数の新しい頂点を追加することを含む方法であり、これにおいて、各々の新しい頂点は、2つの親頂点間のエッジを細分割するドメイン空間における点に追加される)と共に使用されることが可能である。一例示的なテッセレーション方法が以下に説明される。
テッセレーション方法を選択するとき、考慮には、視覚的アーチファクトを回避すること、及び、エッジテッセレーション設定の所与の組み合わせに対して生成される三角形の数(テッセレーションモデルのレンダリングコストが三角形の数に部分的に依存するため)だけでなく、さらに、こうした三角形のアスペクト比が含まれる。典型的に、グラフィックスシステム(ソフトウェアかハードウェアかのいずれか)は、最小の周囲長さ対面積比(perimeter to area ratio)を暗に示す所与の画面面積(すなわち、画面画素)の「等辺の」三角形を、同じ面積をより大きい周囲長さ対面積比で有する(細長い)三角形より迅速に、レンダリングする。さらに、値、例えばシェーディングの結果などが頂点において計算され、三角形にわたって補間されるとき、より多くの等辺形状の三角形を有することは、より少ないアーチファクトをもたらすであろう。
さらなる検討は、三角形のパターンを生成するために使用されるアルゴリズムの複雑さである。アルゴリズムが、簡素及び/又は規則的に保たれることが可能である(例えば、違ったふうに取り扱われる必要がある多くの「特別なケース」を有することがない)場合、このことは、ハードウェア又はソフトウェア実装コストを低減させることができる。
最後の望ましい検討は、テッセレーションパターンにおける回転/反射対称性である。例えば、時計回りの順序などにおいて与えられた頂点ABCDと適切なテッセレーション係数とを用いて定義された四角形のパッチが、BCDAとしてリストアップされた頂点を有する「等辺の」四角形と同じ最終的な三角形メッシュを生じさせることは、好ましいであろう。いくつかの既存のテッセレーションスキームは、この特性を保証しない(例えば、図1の例(e)及び(f)における「奇数」テッセレーション方法の中間の四角を参照)。
一例示的なテッセレーション方法が、図6〜図16を参照して説明されることができる。
図6は、向上させたテッセレーション方法のフロー図である。この方法は、パッチ(入力パッチと呼ばれる)がテッセレータに送り込まれるとき、始まる。テッセレータ(ハードウェアテッセレータであり得る)が入力パッチを受け取り(ブロック602)、これにおいて、上記入力パッチは、図7に示されるとおり、三角形パッチ702、四角形パッチ704、又は等値線パッチ706であり得る。四角形パッチ706は、ドメイン空間において((0,0)、(1,0)、(0,1)、及び(1,1)に頂点を有する)四角であるが、これがワールド空間において(すなわち、3Dまた2D環境内で)表現する形状は、異なる形状であり得る。上記で説明されたとおり、テッセレーションは、ワールド空間においてでなく、ドメイン空間において実行される。
入力パッチが三角形パッチ又は四角形パッチである場合、パッチは、テッセレーションアルゴリズムが入力パッチ内の三角形パッチに再帰的に適用される(ブロック606)前、「前処理」段階を経験する(ブロック604)。前処理段階が使用されて、テッセレーションが向きから独立であり、結果として等値線パッチ706に対して必要とされないことを確保する(アルゴリズムが対称的に働くからであり、ゆえに、いずれの結果として生じるテッセレーションについても向き依存性がない)。
入力パッチが三角形パッチ702である場合、前処理段階(ブロック604)は、1つの三角形パッチ702(入力三角形パッチと同じであり、テッセレーションが必要とされない場合である)か、又は3つの三角形パッチ708〜710かのいずれかを出力する。入力パッチが四角形パッチ704である場合、前処理段階(ブロック604)は、4つの三角形パッチ712〜715を出力する。入力パッチが等値線パッチである場合、前処理は必要とされず(上記で提示された理由のため)、テッセレーションアルゴリズムは、入力等値線パッチに再帰的に適用される(ブロック608)。
図8〜図11は、向上させたテッセレーション方法の段階をより詳細に示す。説明される方法は、下記の表記を使用する:
・THRES ‐ テッセレーションの閾値であり、例えば、頂点TFが対数の底2に対するテッセレーションの量の値である場合、0.0又は0.5に設定され得る。
・VERTEX.TF ‐ 頂点のテッセレーション係数であり、任意の実数であり得る(しかしながら、様々な例において、テッセレーション係数が非負の実数であるように、任意の負数がゼロに留められ得る)。様々な例において、頂点TFは、少なくとも0.0(テッセレーションなし)及び最大で6.0(最大のテッセレーション)であり、対数の底2に対するテッセレーションの量の値、例えば、5.0のテッセレーション係数は、32の細分割に対応する。しかしながら、別の例において、最大頂点TFは6.0(又は、対数の底2が使用されない場合、64)を超えてもよい。
・INTERVAL ‐ 非ゼロの量であり、各反復の後、VERTEX.TFがこの量ずづ減少され、例えば、頂点TFが対数の底2に対するテッセレーションの量の値である場合、0.5に設定され得る。
・MEAN() ‐ 2つ、3つ、又は4つの頂点テッセレーション係数の「平均値(mean)」を与える対称関数である。これは、算術平均又は代替的な関数であってもよく、1つの代替物が、以下により詳細に説明される。
下記の説明を目的として、頂点TFは、対数の底2に対する、テッセレーションの量である。しかしながら、頂点TFは別法として、その実際の、フルの値として書かれてもよく、その場合、このことに従って、以下に提示される頂点TFの算出とパラメータTHRES及びINTERVALの値とが修正されることが、十分理解されるであろう。しかしながら、対数の底2が使用される場合、ハードウェア実施がかなり速くなるので、テッセレータに対する入力が(対数の底2を用いるというよりも)実際の頂点TFを含む例において、入力頂点TFは、本明細書に説明される向上させたテッセレーション方法を実施する前に、対数の底2に対してコンバートされてもよい。
図8は、三角形入力パッチ702についての前処理段階604のフロー図であり、図7に示されるとおり、三角形パッチの頂点は、「上(TOP)」、「右(RIGHT)」、及び「左(LEFT)」とラベル付けされ得る。いずれの頂点が「上」であるかの選択は任意的であり、この前処理段階は、アルゴリズムが回転的に及び反射的に対称であることを確保する(すなわち、したがって、頂点が前処理段階において考慮される順序にかかわらず、同じテッセレーション結果が達成される)。
図8に示されるとおり、三角形パッチ(上、右、左)702がテッセレータに送り込まれ、任意の頂点テッセレーション係数が閾値THRESより大きいとき(ブロック802において“Yes”)、テッセレーションが発生する。“中間(MID)”と表される新しい頂点716が三角形の中心に(例えば、重心に)形成され(ブロック804)、新しい中間頂点の頂点TFが、
MID.TF=MEAN(TOP.TF,LEFT.TF,RIGHT.TF) (9)
であるように(ブロック806において)算出される。これにおいて、MID.TFは中間頂点の頂点TFであり、TOP.TFは上頂点の頂点TFであり、LEFT.TFは左頂点の頂点TFであり、RIGHT.TFは右頂点の頂点TFである。それから、何らかのテッセレーションが発生したとき、すべての4つのテッセレーション係数(すなわち、TOP.TF、LEFT.TF、RIGHT.TF、及びMID.TF)が、パラメータINTERVALによって(すなわち、対数の底2表記が使用される場合、INTERVALを減算することによって)低減される(ブロック808)。
それから、3つの三角形パッチ(中間、右、左)710、(中間、左、上)709、及び(中間、上、右)708が形成され(ブロック810)、これら三角形パッチが、以下に説明されるとおり、(ブロック606において)テッセレーションアルゴリズムを用いてテッセレートされる。
頂点テッセレーション係数のいずれも、閾値THRESより大きくない場合(ブロック802において“No”)、テッセレーションは発生しない。この状況において、パッチは1つのプリミティブとしてテッセレータを単純に通過し(ブロック812)、本方法は過剰にテッセレートしない。
図9は、四角形入力パッチ704についての前処理段階604のフロー図であり、
図7に示されるとおり、四角形パッチの頂点は、「左上(TLEFT)」(すなわちtop left)、「右上(TRIGHT)」(すなわちtop right)、「右下(BRIGHT)」(すなわちbottom right)、及び「左下(BLEFT)」(すなわちbottom left)とラベル付けされ得る。いずれの頂点が「上」であり、いずれが「下」であるかの選択は任意的であり、この前処理段階は、アルゴリズムが回転的に及び反射的に対称であることを確保する(すなわち、したがって、頂点が前処理段階において考慮される順序にかかわらず、同じテッセレーション結果が達成される)。
図9に示されるとおり、四角形パッチ(左上、右上、左下、右下)704がテッセレータに送り込まれるとき、「中間」と表される新しい頂点718が四角形の中心に、すなわち、ドメイン空間座標(0.5,0.5)に形成され(ブロック904)、新しい中間頂点の頂点TFは、
MID.TF=MEAN(TLEFT.TF,TRIGHT.TF,BLEFT.TF,BRIGHT.TF) (10)
であるように(ブロック906において)算出される。これにおいて、MID.TFは中間頂点の頂点TFであり、TLEFT.TFは左上頂点の頂点TFである、などである。それから、何らかのテッセレーションが発生したとき、すべての5つのテッセレーション係数(すなわち、TLEFT.TF、TRIGHT.TF、BLEFT.TF、BRIGHT.TF、及びMID.TF)が、パラメータINTERVALによって(すなわち、対数の底2表記が使用される場合、INTERVALを減算することによって)低減される(ブロック908)。
それから、4つの三角形パッチ(中間、左上、右上)712、(中間、右上、右下)713、(中間、右下、左下)714、及び(中間、左下、左上)715が形成され(ブロック910)、これら三角形パッチが、以下に説明されるとおり、(ブロック606において)テッセレーションアルゴリズムを用いてテッセレートされる。
図10は、前処理段階により出力された3つ又は4つの三角形パッチの各々に対するアルゴリズムの再帰的適用のフロー図であり、このことは、図11に示される三角形を参照して説明されることができる。図11に示されるとおり、三角形パッチは、時計回り方向における3つの頂点(上、右、左)の順序付けられたセットである。第1の頂点が常に「上」頂点であり、(前処理段階により出力されるとおりの)最初の三角形パッチについて、この「上」頂点は、前処理(ブロック804、904)の間に追加される「中間」頂点708、718に対応することに留意する。
図10に示されるとおり、三角形パッチ1100(第1の反復において、最初のパッチ1000である)を所与として、テッセレーションは、
LEFT.TF>THRES 又は RIGHT.TF>THRES (11)
である場合、及び、該場合に限り、発生する。これにおいて、LEFT.TFは左頂点の頂点TFであり、RIGHT.TFは右頂点の頂点TFである(ブロック1002において、“Yes”)。
LEFT.TF>THRES 又は RIGHT.TF>THRESである場合(ブロック1002において、“Yes”)、新しい頂点MID1102が(ブロック1004において)形成され、この頂点MIDは、ドメイン空間における(矢印1104により示される)エッジ左‐>右を2つの部分に分割する。それから、新しい中間頂点の頂点テッセレーション係数が、
MID.TF=MEAN(LEFT.TF,RIGHT.TF) (12)
であるように(ブロック1006において)算出される。これにおいて、MID.TFは中間頂点の頂点TFであり、LEFT.TFは左頂点の頂点TFであり、RIGHT.TFは右頂点の頂点TFである。慣習のため、MIDが細分割するエッジを定義する頂点左及び右は、MIDの「親」と表される。
多くの例において、新しい頂点MIDは、ドメイン空間におけるエッジ左‐>右として、二等分器(bisector)として追加される。しかしながら、別の例において、新しい頂点MIDは、ドメイン空間においてエッジ左‐>右の上であり、しかしこれを正確に二等分しない位置に、追加されてもよい。様々な例において、エッジに沿ったMIDの位置は、例えば、親頂点の頂点TFを用いて、重み付けされてもよい。
2つのサブ三角形パッチ(中間、左、上)1106及び(中間、上、右)1108が形成され(ブロック1008及び1010)、各三角形パッチ1106、1108におけるすべてのテッセレーション係数が、パラメータINTERVALによって(すなわち、対数の底2表記が使用される場合、INTERVALを減算することによって)低減される(ブロック1012)。それから、この方法は、上記パッチの各々に対して再帰する(recurses)。ブロック1008又はブロック1010において作成された三角形パッチに対してこの方法を実行するとき、「上」頂点は、パッチを作成するために(ブロック1004において)追加された「中間」頂点1102に対応し、上記「上」頂点は、親パッチの「上」頂点に対して異なることになる(例えば、パッチ1100は、パッチ1106及び1108の親と考えられることができ、1100の「上」頂点1110は、パッチ1106及び1108の各々の「上」頂点1102と同じでない)。
いかなる段階においてもテッセレーションが発生しない場合(ブロック1002において“No”)、プリミティブ(パッチである)は、バッファに、例えば、インデックスバッファに追加される(ブロック1014)。
上記で説明されたとおり、図10の方法は、前処理段階(ブロック604)により生成される3つ又は4つの三角形パッチの各々に、及び、上記の最初のパッチの細分割により作成される任意のパッチに再帰的に、適用される。
頂点テッセレーション係数が有限であり、INTERVALが定数及び非ゼロであるとき、最終的に、(すべての三角形パッチにおける)すべての頂点テッセレーション係数が、最大でTHRESであることになり、処理が終了することになる。
図11から分かるであろうとおり、新たに追加される中間頂点は、(ブロック1008及び1010において)形成される2つのパッチの双方における頂点であり、双方のパッチにおいて、この頂点は「上」頂点であると考えられる。新たに追加された中間頂点の頂点テッセレーション係数の現在の値は、サブパッチの双方へ再帰するとき、使用されなければならない。例示的な実施において、上記のことは、各サブパッチの頂点TFを複製すること又はアルゴリズムに対して最終ステップを有することのいずれかによって確保されることができ、これにおいて、任意のパッチについて、その2つのサブパッチに対する再帰の後、各頂点TFはパラメータINTERVALによって増加される。
図10において使用される同じアルゴリズムが、(ブロック608において)等値線パッチにさらに適用されてもよいが、上記で説明されたとおり、前処理は必要とされない。等値線パッチの場合、アルゴリズムは、図7を参照して説明され得るとおり、三角形ではなく線(すなわち、等値線及びサブ等値線(sub-isolines))に対して適用される。
等値線パッチ(左、右)706が(最初のパッチ1000として)テッセレータに送り込まれる場合、線は、LEFT.TF又はRIGHT.TFのいずれかがTHRESを上回る場合(ブロック1002において“Yes”)、細分割される。LEFT.TF又はRIGHT.TFのいずれかがTHRESを上回る場合(ブロック1002において“Yes”)、新しい中間頂点720が追加され、頂点720は、ドメイン空間において、左‐>右等値線706を細分割する(例えば、二等分する)(ブロック1004)。新たに追加された中間頂点の頂点TFは、
MID.TF=MEAN(LEFT.TF,RIGHT.TF) (13)
であるように(ブロック1006において)算出される。これにおいて、MID.TFは中間頂点の頂点TFであり、LEFT.TFは左頂点の頂点TFであり、RIGHT.TFは右頂点の頂点TFである。
中間頂点720の追加は、元の等値線706を2つのサブ等値線722、724に分割し(ブロック1008及び1010において形成される)、各頂点TFは、2*INTERVALによって(例えば、対数の底2表記が使用される場合、2*INTERVALを減算することによって)(ブロック1012において)低減される。このことは、三角形パッチについてよりも速く頂点TFを低減させて、正しい量の細分割を生じさせることに留意する。それから、この方法は、上記サブ等値線の各々に対して再帰し、すべての頂点テッセレーション係数が最大でTHRESになるとき、終了する。
上記で説明された向上させたテッセレーション方法は、MEAN()関数を使用する。いくつかの例において、上記関数は、頂点テッセレーション係数の算術平均であることが可能であり、このことは、ある頂点から別の頂点に移動するときにジオメトリの円滑な導入をもたらすことになる一方、こうした関数は、しばしば、T接合(T-junctions)が現れることと、ゆえに特定の値の頂点TFについてのクラッキング(cracking)とをもたらすことになる(例えば、パッチにわたる頂点TFにおける差がかなり極端である場合)。結果として、多くの例において、代替的な関数が、MEAN()について、下記の
MEAN(TF1,TF2,…)=MIN(AVG(TF1,TF2,…),MIN(TF1,TF2,…)+INTERVAL) (14)
として使用される。これにおいて、AVG()は、カッコ内の値のリストの算術平均であり(例えば、上記の例における、頂点TF1、頂点TF2、…)、MIN()は、カッコ内の値のリストのうちの最小である(例えば、上記の例における、頂点TF1、頂点TF2、…)。
上記で与えられたMEAN()関数は、クラッキングがないことを確保する算術平均に最も近い関数であり、このことは、以下に提示されるときに論証され得る。
上記で説明されたとおり、テッセレーション内のT接合は、結果としてクラッキングをもたらす可能性があり、ゆえに、ドメインの内側の中で又は2つのドメインにより共有されるエッジに沿ってのいずれかで、T接合が生じ得ないことを確保することが望まれる場合がある。本明細書に説明される向上させたテッセレーション方法は、このことを、任意のエッジの細分割がエッジ端部頂点のテッセレーション係数によってもっぱら定義される(及び、他によってはされない)ことを保証することにより、確保する。ゆえに、エッジが2つのドメイン(すなわち、2つの隣接のドメイン)により共有される場合、これらドメインは、その2つの端部頂点(及び、それらの頂点テッセレーション係数)を共有し、同じ細分割が生じさせられることになる。
上記で説明されたとおり、細分割は、端部頂点テッセレーション係数が閾値を超えるときに限り発生し、ゆえに、余分な(extra)細分割は発生し得ない。ただあり得る問題は、前のレベルの細分割が前もって起きていないことに起因して、細分割が発生すべきときに発生しない場合である。ゆえに、この問題を回避するために、下記の条件に合うことが必要であり、この条件は、図11に示されるとおりラベル付けされた頂点を有する三角形パッチ1100を参照し、
上‐>左エッジ上に必要とされるテッセレーションは、左‐>右エッジ上で起こされるテッセレーションを暗に示し、
すなわち、(TOP.TF>THRES 又は LEFT.TF>THRES)
=>(LEFT.TF+INTERVAL>THRES 又は RIGHT.TF+INTERVAL>THRES)
である。上記条件は、一般性を失うことなく、対称性に起因して左手のエッジだけを考慮する。
それから、上記で指定されたMEAN()関数がこの条件を満足することが論証され得る。
ケース1:LEFT.TF>THRESである場合、LEFT>TF+INTERVAL>THRESである。
ケース2:TOP.TF>THRESが、下記の2つのサブケースを有する。
ケース2.1:(TOPが、図11のパッチ1100に示されるとおりのパッチの中間頂点であり、これが、図7における頂点716又は718に対応する、)すなわち、TOP.TF=MEAN(LEFT.TF,RIGHT.TF,…))であり、ゆえに
THRES<TOP.TF
=MIN(AVG(LEFT.TF,RIGHT.TF,…),MIN(LEFT.TF,RIGHT.TF,…)+INTERVAL)
<=MIN(LEFT.TF,RIGHT.TF,…)+INTERVAL
<=LEFT.TF+INTERVAL
ゆえに LEFT.TF+INTERVAL>THRES である。
ケース2.2(TOPが、図12のパッチ1200に示されるとおり、端部頂点としてLEFTを用いて細分割により作られ、これにおいて、TOP1202は、エッジ左‐>他の細分割により作られ、すなわち、TOP.TF=MEAN(LEFT.TF,…)であり、)ゆえに、
THRES<TOP.TF
=MIN(AVG(LEFT.TF,…),MIN(LEFT.TF,…)+INTERVAL)
<=MIN(LEFT.TF,…)+INTERVAL
<=LEFT.TF+INTERVAL
ゆえに LEFT.TF+INTERVAL>THRES である。
ケース2.2において、同じロジックが、TOP.TF=MEAN(RIGHT.TF,…)に適用されて(これは、図12に示されるものの反射(reflection)に対応する)、所望されるとおり、RIGHT.TF+INTERVAL>THRESを導出することができる。関数の選択は、最小値プラスINTERVALを超えるいかなる関数も上記不等式を常に満足しないことになる点において、最適であることにさらに留意する。ゆえに、MEAN()関数は、算術平均により近い何らかであり得ない。
特にアニメーションにおいて、パッチの角の頂点TFから、LODにおいて異なるパッチの中心TFをユーザが指定することを可能にすることが、時に望ましい場合がある。このことは、例えば、生物のツノの場合において高さマップが中間部に非常に鋭いジャンプを有する場合、例えば、四角形又は三角形パッチのテクスチャに関連付けられた上記マップをより良く近似させることに使用され得るであろう。図13は、(上記で説明された)図6の方法に対するバリエーションを示し、このバリエーションは、四角形又は三角形パッチの中心TFの使用を可能にする、さらなる、任意的な前処理段階(ブロック1302)を追加する。図13に示されるとおり、この(ブロック1302における)追加的な前処理段階は、上記で説明された(ブロック604における)前処理段階の前に実施され、(四角形又は三角形であり得る)入力パッチを分割する。元の前処理段階(ブロック604)とは違って、追加的な前処理段階(ブロック1302)は、さらに、等値線に対して適用されてもよい。しかしながら、このことは、この文脈においてあまり有用でない。等値線の場合、等値線は細分割され、新たに追加される中間頂点が中心TFを割り付けられる。それから、細分割は、上記で説明されたとおり、2つのサブ等値線(例えば、LEFT‐MIDとMID‐RIGHT)に対して進行する。
追加的な前処理段階(ブロック1302)は、図14及び図15を参照して説明されることができる。図14は、四角形入力パッチ1402又は三角形入力パッチ1404に対する段階の適用の概略図を示し、図15は、追加的な前処理段階のフロー図を示す。中心頂点係数が有効にされた状態で、ユーザは、パッチごとの中心TFと各々の角の頂点についての頂点TF(三角形パッチについて3つ、及び四角形パッチについて4つ)とをテッセレータに供給しなければならない。
図14に示されるとおり、追加的な前処理段階は、四角形入力パッチ1402を4つの四角形パッチ1406〜1409に、及び、三角形入力パッチ1404を3つの四角形パッチ1410〜1412に分割する。このことを達成するために、四角形入力パッチ1402を前処理することは、5つの新しい頂点を追加すること(ブロック1502)を必要とする。すなわち、中心TFを有する中心頂点1414(すべての4つのサブドメイン1406〜1409により共有される)、中間‐上頂点1416、中間‐右頂点1418、中間‐下頂点1420、及び中間‐左頂点1422である。これらのテッセレーション係数が、各々の新たに追加された頂点について、新たに追加された頂点の隣接の角のTFのMEAN()をとることによって(ブロック1506において)算出される。様々な例において、式(14)により与えられるMEAN()関数が使用されてよい。該関数が、より一貫性のあるテッセレーションパターンを結果としてもたらすからである。しかしながら、別の例において、算術平均が使用されてもよい。
三角形入力パッチ1404を前処理することは、4つの新しい頂点を追加すること(ブロック1504)を必要とする。すなわち、中心TFを有する中心頂点1424(すべての3つのサブドメインにより共有される)、中間‐右頂点1426、中間‐下頂点1428、及び中間‐左頂点1430である。これらのテッセレーション係数が(ブロック1506において算出されたとおり)、各々の新たに追加された頂点について、新たに追加された頂点の隣接の角のTFのMEAN()をとることによって与えられる。上記で説明されたとおり、様々な例において、式(14)により与えられるMEAN()関数が使用されてよい。該関数が、より一貫性のあるテッセレーションパターンを結果としてもたらすからである。しかしながら、別の例において、算術平均が使用されてもよい。
追加的な前処理段階の最後の段階(ブロック1508)は、各テッセレーション係数を低減させ、様々な例において、各TFは、2*INTERVALだけ低減される。(ブロック604の元の前処理段階に対する入力の前の)上記のTFの低減は、正しい数の細分割がパッチの各境界エッジに対して行われることと、テッセレーションが発生したと示すこととを確保する。
追加的な前処理段階(ブロック1302)において、元の入力パッチを3つ又は4つの四角形パッチに細分割すると、これら3つ又は4つの四角形パッチ(ブロック1508において算出された通りの頂点TFを有する)は、これらが元の入力パッチであるかのように元の前処理段階(ブロック604)に対して入力され、方法が、上記で説明されたとおり進行する。図16は、図13の方法を用いて得られ得る様々な例示的なテッセレーションを示す。
追加的な前処理段階(ブロック1302及び図15)が少なくとも1回、0.0のTFを有する場合でさえ、各ドメインエッジを細分割する事実に起因して、任意の1つの接続されたメッシュは、クラッキングが発生し得ないことを確保するように、完全に中心TFを有するか又は有さないかのいずれかでテッセレートされるべきである(すなわち、単一の接続されたメッシュの中のすべてのパッチが同じ方法を使用すべきであり、すなわち、これらはすべて、図6の方法又は図13の方法を使用し、図6の方法を用いたいくつかの入力パッチと図13の方法を用いた他の入力パッチとを有するべきでない)。
上記で説明された例示的なテッセレーション方法が、(上記で図3〜図5を参照して説明されたとおりの)変位係数と組み合わせて使用される場合、この組み合わせられた方法は、既知のテッセレーション方法において生じる下記の問題の多く又はすべてに対処し得る:
・スナッピング(snapping)がない ‐ 第1の例示的なテッセレーション方法を用いて、ジオメトリが、テッセレーション係数が増加するときに小さい増分ずつ追加されて、円滑な移行を生じさせる。このことは、レンダリングする時間の予測に役立つ。
・ポッピングがない ‐ 第1の例示的なテッセレーション方法を用いて、新しい頂点が正しいドメイン空間座標に導入され、これらを正しい対象状態へとゆっくりと乱す(perturb)ように変位係数が使用されることが可能であり、結果として、頂点メンバ値における瞬時の変化に起因するポッピングアーチファクトがない。
・クラッキングがない ‐ 上記で論証されたとおり、第1の例示的なテッセレーション方法は、ドメイン内で又はドメインの境界に沿ってのいずれかでT接合を生じさせない。
・遊泳がない ‐ テッセレータにより導入される各頂点は、テッセレーション係数が増加するとき、そのドメイン空間位置を維持し、ゆえに、「遊泳」アーチファクトがない。
・過剰/過少テッセレーションがない ‐ エッジの各端部における整数頂点テッセレーション係数tが、2の細分割に対応する。さらに、四角形上のtの平均頂点テッセレーション係数は近似的に、22tの頂点と、その2倍の多さのプリミティブとに対応し、これは最小である。同様に、三角形パッチは、(3/4)22tの頂点と2倍の多さのプリミティブとに対応する。
・細い三角形がない ‐ 上記で説明されたとおり、向上させたテッセレーション方法は、パッチごとに4つの(又はより少ない)クラスの三角形のみ生じさせ、このことは、パッチごとのルート面積対周囲長さ比(Root Area to Perimeter Ratio)の最小値の境界を定める。
・空間/時間複雑性 ‐ アルゴリズムが(図6に示されるとおり)再帰的であり、各サブドメイン/パッチは独立して扱われることが可能であり、このことは実質的な並列性をサポートする。入力頂点は、頂点テッセレーション係数のための付加的な(extra)固定点値を必要とし、出力頂点は、付加的な固定点変位係数とその2つの「親」ドメイン空間座標とを必要とし得る。
一例示的な実施における上記の組み合わせられた方法の要件の一例が、以下に与えられる。
Figure 0006736361
上記の表において、提示される方法に必要とされる付加的な頂点メンバは、各入力頂点の固定点テッセレーション係数と、各出力頂点の5つの固定点値(変位係数及び2つのドメイン空間座標)である。Mは、出力頂点バッファの現在のサイズであり、α()は、バッファが如何にして構造化されるかに依存するMの何らかの関数である。α()は、典型的に、log(M)とMとの間の何らかである。
さらに、本明細書に説明される向上させたテッセレーション方法は、様々な例において、下記のさらなる品質を有する:
・冗長性がない ‐ 閾値を上回って、2セットの頂点テッセレーション係数が同じメッシュ形状を生じさせない。このことは、変位係数によって保証される。
・向きの独立性 ‐ (前処理段階、ブロック604において)パッチを、各々のtopとして中間頂点を用いて扇の三角形パッチに分けることによって、三角形の向きに対して選択は行われず、ゆえに、同じテッセレーションが常に生じることになる。
・N角形 ‐ 向上させたテッセレーション方法は、(前処理段階604のバリエーションにおいて)パッチを扇の三角形に分けることによって、N辺を有する任意の多角形パッチをサポートするように容易に適合させることができる。各ケースにおいて、平均テッセレーション係数tについて、上記方法は、約(N/4)22tの頂点と2倍の多さのプリミティブとを生成することになる。
本明細書に説明される向上させたテッセレーション方法を使用して、拡散及び反射ライティング(diffuse and specular lighting)下でテクスチャ、法線、及び高さマップを用いて四角形又は三角形ドメインをレンダリングすると、ユーザによって目にされる視認可能なアーチファクトがない。例えば、既知のテッセレーション方法で現れる可能性がある反射ライティングのちらつきは、存在しない。ドメインは、(法線マップが高さの錯覚を与える場合に)距離において十分にテッセレートされてないものから、8000のプリミティブを有する十分にテッセレートされたものに徐々に成長する。ユーザにとって何らかの変化を見ることは非常に困難であり、ゲームプレイ設定において、まったく何も見られないことになり、プレーヤは、メッシュがその時間全体テッセレートされたと信じるであろう。
(図6〜図16を参照して上記で説明された)例示的なテッセレーション方法と変位係数との組み合わせは、図17に示されるものなどのGPUパイプライン1700内で実施されることが可能である。図17において、バッファは、点線の輪郭線を有するボックスとして図示され、関数は、実線の輪郭線を有するボックスとして図示される。矢印は、システム内の頂点/サーフェスパッチ情報のフローを論証する。大きい点線ボックス1702の外側のあらゆるものはユーザにより定義され、大きい点線ボックス1702の内側のあらゆるものはユーザから隠匿される。
ユーザは、頂点バッファ1704及びインデックスバッファ1706(インデックスからパッチ/サーフェスパッチを構築する方法を説明するトポロジを有する)を入力し、頂点シェーダ1708及びドメインシェーダ1710を(例えば、既知のシステムにおいてのように)定義する。
ユーザから隠匿されるのは、テッセレータ1712及びブレンドシェーダ1714であり、これらは双方、ハードウェアにおいて実施され得る。サーフェスパッチは、イン(In)インデックスバッファ、トポロジ、及びアウト(Out)頂点バッファから形成される。テッセレータは、(頂点シェーダにより算出されたとおり、)サーフェスパッチの角の制御点から頂点テッセレーション係数を取得する。テッセレータは、上記頂点テッセレーション係数を用いて、ドメイン空間における(トポロジにより与えられる)ドメインをテッセレートする。テッセレータは、変位係数と共にドメイン空間座標のフルのリストを出力し、各々の新しい頂点が、ブレンドシェーダにおいて、これら値をサーフェスパッチ及びドメインシェーダと共に用いて構築される。ブレンドシェーダは各々の新しい頂点を出力し、該新しい頂点はアウトドメインバッファにアペンドされる。さらに、テッセレータは、アウトインデックスバッファ(時計回り又は反時計回りの三角形又は線のいずれかのトポロジ)を出力して、ラスタライゼーション段階に渡す。
上記で説明されたとおり、頂点シェーダ1708は、該頂点シェーダ1708に送り込まれる現在の頂点に対して頂点ごとの算出を実行し、メッシュトポロジの知識を有さない。入力される頂点バッファからの各頂点について、頂点シェーダは、正確に1つの頂点を出力する(必ずしも同じタイプでない)。通常、頂点シェーダ入力は、ローカル位置、法線、タンジェント、及びテクスチャ座標などのメンバを包含し、その出力は、大抵、ワールド位置、法線、タンジェント、テクスチャ座標を包含することになり、テッセレーション係数を包含しなければならず、該テッセレーション係数は、テッセレータ1712に渡されることになる。最初、シェーダは、頂点をワールド空間へ変換し、任意の他の線形変換を適用する。それから、シェーダは、例えばカメラからの距離の関数として、シェーダ頂点ごとのテッセレーション係数を算出する。
頂点シェーダの後、サーフェスパッチが、アウト頂点バッファ1716及びイン(In)インデックスバッファ1706を(そのトポロジと共に)用いて形成される。サーフェスパッチの頂点テッセレーション係数はテッセレータ1712に渡され、テッセレータ1712は、与えられた係数の数に依存して(例えば、図6〜図16を参照して上記で説明された方法を用いて)、適切なドメイン(「四角形(QUAD)」、「三角形(TRI)」、又は「等値線(ISOLINE)」)をテッセレートする。テッセレータは、各々の新しい頂点について、ドメイン空間座標及び変位係数を作り出し、これらをドメインシェーダに渡す。テッセレータは、さらに、アウトインデックスバッファにアペンドされることになる、各プリミティブを決定するインデックスのリスト(これは、アウトドメインバッファの現在の長さによりオフセットされなければならない)を生成する。
ドメインシェーダ1710は、ブレンドシェーダ1714から呼び出され、入力としてドメイン空間場所(u,v)をとる。さらに、ドメインシェーダは、入力として、すべてのサーフェスパッチ情報をとり、フルの頂点構造を出力する。ドメインシェーダは、サーフェスパッチ制御点及びドメイン空間座標を使用して、新しい頂点を構築する。通常のテッセレーションについて、このことは、単純に、パッチの角の頂点の値を線形に補間することであることになる。別法として、ベジエサーフェスを使用して頂点の位置/法線が決定されてもよく、あるいは、テクスチャをサンプリングすることによってディスプレースメントマッピングが使用されてもよい。
ブレンドシェーダ1714は、テッセレータ1712により作り出された頂点を、(テッセレータ1712によりさらに生成される)変位係数と図4及び図5を参照して上記で説明された方法とを用いて「ブレンドする(blends)」。ブレンドシェーダ1714はドメインシェーダ1710を使用し、ドメインシェーダ1710はブレンドシェーダ1714に、頂点構造の各メンバが如何にしてドメインの内部において算出されるべきかを教える。ブレンドシェーダ1714は、生成された頂点につき1回実行され、入力として、頂点のドメイン空間場所u,vと、(2つの親頂点の)2つの親ドメイン空間座標及び変位係数とをとる。さらに、現在のサーフェスパッチがブレンドシェーダに送り込まれる。ブレンドシェーダ1714は、サーフェスパッチ制御点及びドメイン空間座標を使用して、頂点、すなわち、子及び2つの親を構築し、それから、出力頂点の各メンバが、図3〜図5を参照して上記で説明されたとおり(すなわち、子と2つの親の平均との間で補間することによって)、算出される。別法として、親頂点を識別するために算出を繰り返すことを防止するために、頂点が適切に順序付けられ(例えば、したがって、バッファの中で、DF<1を有する各頂点がその親頂点の後に続く)、親頂点がブレンドシェーダ1714内にキャッシュされてもよく、したがって、これらの対象状態は、子頂点がブレンドシェーダに送り込まれるとき、利用可能である。しかしながら、このことは、かなり多くのメモリを使用することになる。
ブレンドシェーダ1714がパッチにおける各々の生成された頂点について実行された後、頂点は、アウトインデックスバッファ1718と共にラスタライザに渡され、これにおいて、各プリミティブが処理されることになる。
図17は単一のブレンドシェーダ1714を示しているが、いくつかの実施において、2つ以上のブレンドシェーダが存在してもよく、例えば、1つのブレンドシェーダが、2つの親を有するすべての頂点(すなわち、大抵の頂点)のためであり、1つのブレンドシェーダが、3つの親を有する頂点(例えば、図7に示されるとおりの、三角形パッチの中間頂点)のためである。上記の第2のブレンドシェーダと一般的なブレンドシェーダとの差は、これが3つの親ドメイン空間座標(重心座標において、(0,0,1)、(1,0,0)、及び(0,1,0)である)を取り入れ、補間が上記3つの座標の各々のドメインシェーダ結果の間であることである。補間パラメータは、重心座標において(1/3,1/3)である。
変位係数が1である場合、補間が必要とされないので、ブレンドシェーダ1714は、ドメインシェーダ1710に低減され、実際、頂点の大半がdf=1を有する。いかなる補間も実行する前に、変位係数の値が1であるかをチェックすることによって、計算時間を大幅に低減させることができる。上記で説明されたとおり、入力四角形パッチの角の頂点及び中心頂点は、固定されたdf=1を有することになる。
図17に示されるパイプラインは、高度に並列化可能である。頂点シェーダ1708は、メッシュに関するグローバルな情報を必要とせず、現在の頂点のみ必要とする。ゆえに、イン頂点バッファ1704の中のあらゆる頂点が、並列に処理されることができる。同様に、いったんパッチ/サーフェスパッチが、インインデックスバッファ、トポロジ1706、及びアウト頂点バッファ1716から形成されると、これは自己充足型のユニット(self-contained unit)であり、テッセレータ1712及びブレンドシェーダ1714による処理は、独立して行われることができる。このことは、実行時間を大幅に低減させる。さらに、パッチごとにテッセレータにより生成される各頂点は、別個にブレンドシェーダ1714を通して送り込まれることがさらに可能であり、このことは、別のレベルの並列性を提供する。
例示的なテッセレーション方法がそれ自体、(上記で説明されたとおり)高度に並列化可能である。各三角形パッチは、(テッセレーション係数が1回だけ減らされることを確保するように)頂点のコピーが各スレッドについて作られる限り、独立して細分割されることができる。上記方法は、さらに、ハードウェアにおける物理的空間の観点において、とても効率的である。3つのドメイン(3つの小エリアのハードウェア)の各々についてのセットアップ(すなわち、上記で説明された前処理ステップ)の後、作り出された各々の三角形パッチ又は線は、同じ(とても小さい)ブロックのハードウェアに送り込まれる。このことが、並列アーキテクチャなしに実施される場合、ハードウェア上に合計5つの小エリアがあることになる。
パイプラインは、さらに、ユーザのインターフェースを大幅に変更せず、これは、既知のパイプラインと同様に、頂点シェーダ1708及びドメインシェーダ1710を実施することを含む。ゆえに、新しいパイプライン1700は、既存のソフトウェアを用いて(テッセレーション係数が頂点シェーダ1708において各頂点に割り当てられるように、既存のソフトウェアに必要とされる最小限の変更だけで)、容易に使用され得る。さらに、既知のパイプラインにより必要とされるシェーダのいくつか(例えば、ハルシェーダ)が必要とされず、任意的として残されることが可能であり、このことは、ユーザにより必要とされる労力を低減させる。
上記で説明されたとおり、ブレンドシェーダ1714は、頂点シェーダ及びドメインシェーダと同様の仕方において参照されるが、ユーザによって実施されず、代わって、ハードウェアにおいて実施されてパフォーマンスを高めることができる。上記で説明されたとおり、テッセレータ1712は、さらに、ハードウェアにおいて実施されてもよい。
上記で説明された向上させたテッセレーション方法は、別法として、ソフトウェア(又は、ソフトウェアとハードウェアとの組み合わせ)において実施されてもよい。図18は、一例示的なコンピューティングベースの装置1800の様々なコンポーネントを例示しており、コンピューティングベース装置1800は、任意の形態のコンピューティング及び/又は電子装置として実施されてよく、上記で説明されたテッセレーション方法を実施するように構成され得る。
コンピューティングベース装置1800は1つ以上のプロセッサ1802を含み、プロセッサ1802は、マイクロプロセッサ、コントローラ、又は任意の他の適切なタイプのプロセッサであってよく、装置の動作を制御するコンピュータ実行可能命令を処理して、上記で説明された向上させたテッセレーション方法を実行する。いくつかの例において、例えば、システムオンチップアーキテクチャが使用される場合、プロセッサ1802は、1つ以上の固定された機能ブロック(さらに、アクセラレータとも呼ばれる)を含んでもよく、上記機能ブロックは、(ソフトウェア又はファームウェアというよりも)ハードウェアにおいて向上させたテッセレーションの方法の一部を実施する。オペレーティングシステム1804又は任意の他の適切なプラットフォームソフトウェアを含むプラットフォームソフトウェアがコンピューティングベース装置に提供されて、アプリケーションソフトウェア1806が装置上で実行されることを可能にしてもよく、上記アプリケーションソフトウェアは、テッセレーションモジュール1808及びブレンディングモジュール1810を含み得る。
テッセレーションモジュール1808は、例えば、前処理モジュール1812(図6又は図13のブロック604を実施する)、再帰的テッセレーションモジュール1814(図6又は図13のブロック606及び/又は608を実施する)、及び(例えば、図3のブロック306を実施する)変位係数を算出する変位係数モジュール1816を含み得る。テッセレーションモジュール1808は、様々な例において、中心TFが使用される場合に最初の前処理を実行する(図13のブロック1302を実施する)さらなるモジュール1818を含み得る。
ブレンディングモジュール1810は、テッセレーションモジュール1808により作り出された頂点を、(さらにテッセレーションモジュール1808により生成される)変位係数と図4及び図5を参照して上記で説明された方法とを用いて「ブレンドする」。
コンピュータ実行可能命令は、コンピューティングベース装置1800によりアクセス可能である任意のコンピュータ可読媒体を用いて提供され得る。コンピュータ可読媒体は、例えば、メモリ1810などのコンピュータ記憶媒体と通信媒体とを含み得る。メモリ1810などのコンピュータ記憶媒体(すなわち、非一時的マシン可読媒体)には、コンピュータ可読命令、データ構造、プログラムモジュール、又は他のデータなどの情報の記憶のための任意の方法又はテクノロジーにおいて実施される揮発性及び不揮発性の、取り外し可能及び取り外し不能の媒体が含まれる。コンピュータ記憶媒体には、これらに限られないが、RAM、ROM、EPROM、EEPROM、フラッシュメモリ若しくは他のメモリテクノロジー、CD‐ROM、デジタル多用途ディスク(DVD)若しくは他の光学記憶装置、磁気カセット、磁気テープ、磁気ディスクストレージ若しくは他の磁気記憶装置、又は、コンピューティング装置によるアクセスのために情報を記憶することに使用され得る任意の他の非送信媒体が含まれる。対照的に、通信媒体は、コンピュータ可読命令、データ構造、プログラムモジュール、又は他のデータを、搬送波などの変調されたデータ信号、又は他のトランスポートメカニズムにおいて具現化し得る。本明細書において定義されるとき、コンピュータ記憶媒体は通信媒体を含まない。コンピュータ記憶媒体(すなわち、非一時的マシン可読媒体、例えば、メモリ1810)はコンピューティングベース装置1800内に図示されているが、記憶装置は、分散され、あるいはリモートに位置し、ネットワーク又は他の通信リンクを介して(例えば、通信インターフェース1812を用いて)アクセスされてもよいことが十分理解されるであろう。
コンピューティングベース装置1800は入力/出力コントローラをさらに含んでもよく、上記入力/出力コントローラは、コンピューティングベース装置1800と別個又は一体的であり得る表示装置に対して表示情報を出力するように配置される。表示情報は、グラフィカルユーザインターフェースを提供してもよい。入力/出力コントローラは、さらに、ユーザ入力装置(例えば、マウス又はキーボード)などの1つ以上の装置から入力を受信し及び処理するように配置されてもよい。一実施形態において、表示装置は、該表示装置がタッチセンサ式表示装置である場合、ユーザ入力装置としての機能を果たし得る。入力/出力コントローラは、さらに、表示装置でない装置、例えば、ローカルに接続された印刷装置などに、データを出力してもよい。
用語「プロセッサ」及び「コンピュータ」は、本明細書において、命令を実行することができるような処理能力を有する任意の装置又はその部分を指すように用いられる。用語「プロセッサ」は、例えば、中央処理ユニット(CPU)、グラフィックス処理ユニット(GPU又はVPU)、物理処理ユニット(physics processing units;PPU)、ラジオ処理ユニット(RPU)、デジタルシグナルプロセッサ(DSP)、汎用目的プロセッサ(例えば、汎用目的GPU)、マイクロプロセッサ、CPUの外部のタスクを加速するように設計された任意の処理ユニット等を含み得る。当業者は、こうした処理能力が多くの種々の装置に組み込まれることを理解することになり、ゆえに、用語「コンピュータ」には、セットトップボックス、メディアプレーヤ、デジタルラジオ、PC、サーバ、モバイルテレフォン、パーソナルデジタルアシスタント、及び多くの他の装置が含まれる。
当業者は、プログラム命令を記憶することに利用される記憶装置がネットワークにわたって分散され得ることを理解するであろう。例えば、リモートコンピュータが、ソフトウェアとして説明された処理の一例を記憶してもよい。ローカル又はターミナルコンピュータがリモートコンピュータにアクセスし、ソフトウェアの一部又はすべてをダウンロードしてプログラムを実行してもよい。別法として、ローカルコンピュータが必要に応じてソフトウェアのピースをダウンロードし、あるいは、いくつかのソフトウェア命令をローカル端末において、いくつかのソフトウェア命令をリモートコンピュータ(又は、コンピュータネットワーク)において実行してもよい。当業者は、さらに、当業者に知られる従来手法を利用することによって、ソフトウェア命令のうちすべて又は一部分がDSP、プログラマブルロジックアレイ、又は同様のものなどの専用回路によって実行され得ることを理解するであろう。
本明細書に説明される方法は、ソフトウェアを用いて構成されたコンピュータによって実行されてもよく、上記ソフトウェアは、有形記憶媒体に記憶されたマシン可読形式のものであり、例えば、プログラムがコンピュータ上で実行されるとき、及びコンピュータプログラムがコンピュータ可読記憶媒体上に具現化され得る場合に、説明された方法の構成部分を実行するようにコンピュータを構成するコンピュータ可読プログラムコードを含むコンピュータプログラムの形式のものであり、あるいは、本明細書に説明された方法のうち任意のもののすべてのステップを実行するように適合させたコンピュータプログラムコード手段を含むコンピュータプログラムの形式のものである。有形(又は、非一時的)記憶媒体の例には、ディスク、サムドライブ、メモリカード等が含まれ、伝搬される信号は含まれない。ソフトウェアは、パラレルプロセッサ又はシリアルプロセッサ上での実行に適することが可能であり、したがって、方法ステップは、任意の適切な順序において、又は同時に実行され得る。
本明細書に説明されるハードウェアコンポーネントは、コンピュータ可読プログラムコードをエンコードさせた非一時的コンピュータ可読記憶媒体によって生成されてもよい。
さらに、所望の機能を実行するために集積回路を設計すること又はプログラマブルチップを構成することに用いられるとき、上記で説明されたモジュール、機能性、コンポーネント、又はロジックを実施するハードウェアの構成を「説明し」又は定義するソフトウェア、例えばHDL(ハードウェア記述言語)ソフトウェアなどを、包含することが意図される。すなわち、本明細書に説明された方法のうち任意のものを実行するように構成された処理ユニットを生成するための、又は本明細書に説明された任意の装置を含む処理ユニットを生成するためのコンピュータ可読プログラムコードをエンコードさせたコンピュータ可読記憶媒体が提供され得る。すなわち、コンピュータシステムが、回路素子の定義と該回路素子を組み合わせる規則を定義するデータとからデジタル回路の表現を生成するように構成されてもよく、これにおいて、非一時的コンピュータ可読記憶媒体は、プロセッサ実行可能命令を記憶させることが可能であり、上記プロセッサ実行可能命令は、コンピュータシステムにおいて実行されるときに、コンピュータシステムに、本明細書に説明された処理ユニットを生成させる。例えば、非一時的コンピュータ可読記憶媒体が、コンピュータ可読命令を記憶させることが可能であり、上記コンピュータ可読命令は、集積回路の出現(manifestation)を生成するコンピュータシステムにおいて処理されるときに、コンピュータシステムに、本明細書の例において説明されたとおりの受信器のプロセッサの出現を生成させ、あるいは、本明細書の例において説明された方法を実行するように構成されたプロセッサの出現を生成させる。プロセッサの出現は、プロセッサ自体、又は、プロセッサを生成することに使用することができるプロセッサの表現(例えば、マスク)であり得る。
開示された態様を実施することに使用されるマシン実行可能データを記憶するメモリは、非一時的媒体であり得る。非一時的媒体は、揮発性又は不揮発性であり得る。揮発性非一時的媒体の例には、SRAM又はDRAMなどの、半導体ベースのメモリが含まれる。不揮発性メモリを実施することに使用され得るテクノロジーの例には、光及び磁気メモリテクノロジー、フラッシュメモリ、相変化メモリ、抵抗RAMが含まれる。
「ロジック」に対する特定の参照は、1つ又は複数の機能を実行する構造を指す。ロジックの一例には、上記機能を実行するように配置された回路が含まれる。例えば、上記回路は、トランジスタ、及び/又は、製造プロセスにおいて利用可能な他のハードウェア要素を含み得る。上記トランジスタ及び/又は他の要素は、メモリを実装し及び/又は含む回路又は構造を形成することに使用されてもよく、上記回路又は構造は、例として、レジスタ、フリップフロップ又はラッチ、ブール演算などの論理演算子、加算器、乗算器又はシフタなどの数学演算子、及び相互接続などである。上記要素は、カスタム回路若しくは標準セルライブラリ、マクロ、又は他のレベルの抽象化において提供されてもよい。上記要素は、特定の配置において相互接続されてもよい。ロジックは、固定された機能である回路を含んでもよく、回路は、1つ又は複数の機能を実行するようにプログラムされることが可能である。上記プログラミングは、ファームウェア又はソフトウェアの更新又は制御メカニズムから提供されてもよい。1つの機能を実行するように識別されたロジックが、構成機能又はサブ処理を実施するロジックをさらに含んでもよい。一例において、ハードウェアロジックが、1つ又は複数の固定された機能演算、状態マシン又は処理を実施する回路を有する。
当業者に明らかであろうとおり、本明細書に与えられた任意のレンジ又は装置値が、求められる効果を失うことなく拡張され、あるいは変えられてもよい。
上記で説明された恩恵及び利点は、1つの実施形態に関連することがあり、あるいはいくつかの実施形態に関連し得ることが理解されるであろう。実施形態は、述べられた問題のいずれか又はすべてを解決するもの、又は述べられた恩恵及び利点のいずれか又はすべてを有するものに、限定されない。
「一の(an)」アイテムに対するいかなる参照も、1つ以上の該アイテムを指す。用語「含む(comprising)」は、本明細書において、識別された方法ブロック又は要素を含むことを意味するように用いられ、しかし、こうしたブロック又は要素は排他的なリストを含まず、装置がさらなるブロック又は要素を含むことが可能であり、方法がさらなる動作又は要素を含むことが可能である。さらに、ブロック、要素、及び動作は、これら自体、暗黙的にクローズされない。
本明細書に説明された方法のステップは、任意の適切な順序において、あるいは、適切である場合に同時に、実行されてよい。図内のボックス間の矢印は、方法ステップの一例示的なシーケンスを示すが、他のシーケンス、又は並列における複数ステップの実行を除外することは意図されない。さらに、個々のブロックが、本明細書に説明された対象事項の主旨及び範囲から逸脱することなく、上記方法のうち任意のものから削除されてもよい。上記で説明された例のうち任意のものの態様が、説明された他の例のうち任意のものの態様と組み合わせられて、求められる効果を失うことなく、さらなる例を形成してもよい。図面の要素が矢印で接続されて示される場合、上記矢印は、要素間のやりとり(データ及び制御メッセージを含む)の単に一例示的なフローを示すことが十分理解されるであろう。要素間のフローは、いずれかの方向、又は双方向であり得る。
好適な実施形態の上記説明は単に例として与えられており、様々な修正が当業者によりなされ得ることが理解されるであろう。様々な実施形態がある程度の特定性で、又は1つ以上の個々の実施形態を参照して上記で説明されたが、当業者は、本発明の主旨又は範囲から逸脱することなく、開示された実施形態に対して多数の変更をなし得る。
1700 パイプライン
1704 イン頂点バッファ
1706 インインデックスバッファ、トポロジ
1708 頂点シェーダ
1710 ドメインシェーダ
1712 テッセレータ
1714 ブレンドシェーダ
1716 アウト頂点バッファ
1718 アウトインデックスバッファ
1720 インドメインバッファ
1800 コンピューティングベース装置
1802 プロセッサ
1812 通信インターフェース
1810 メモリ
1804 オペレーティングシステム
1806 アプリケーションソフトウェア
1810 ブレンディングモジュール
1808 テッセレーションモジュール
1812 前処理モジュール
1814 再帰的テッセレーションモジュール
1816 変位係数モジュール
1818 中心TFのための付加的前処理モジュール

Claims (15)

  1. コンピュータグラフィックスシステムにおいてテッセレーションを実行する方法であって、
    1つ以上の入力パッチにおける各々の角の頂点の頂点テッセレーション係数を算出するステップと、
    前記頂点テッセレーション係数を用いて前記1つ以上の入力パッチに対してテッセレーションを実行して、頂点により定義される複数のプリミティブを生成するステップであって、前記テッセレーションは、1つ以上の新しい頂点を追加することと、各々の新たに追加された頂点の変位係数を算出することとを含む、ステップと、
    各頂点のワールド空間パラメータを、各頂点の対象ワールド空間パラメータを算出することと、頂点の対象ワールド空間パラメータを該頂点の変位係数を用いて修正することとによって、生成するステップと、
    を含む方法。
  2. 1つ以上の新しい頂点を追加することは、
    パッチにおける隣接する頂点のペアの頂点テッセレーション係数を、閾値と比較することと、
    少なくとも1つの頂点テッセレーション係数が前記閾値を超えると決定することに応答して、前記の2つの隣接する頂点の間のエッジを2つの部分に細分割する新しい子頂点を追加することであって、前記2つの隣接する頂点は、前記子頂点の親頂点である、ことと、
    を含む、請求項1に記載の方法。
  3. 前記新しい子頂点は、前記の2つの親頂点の間の前記エッジを二等分する、請求項2に記載の方法。
  4. 各々の新たに追加された頂点の変位係数を算出することは、
    頂点の変位係数を、該頂点の親頂点の頂点テッセレーション係数の関数として算出すること
    を含む、請求項2又は3に記載の方法。
  5. 前記1つ以上の入力パッチにおける各々の角の頂点の変位係数を、変位係数の最大値に設定するステップ、
    をさらに含む請求項2乃至4のうちいずれか1項に記載の方法。
  6. 頂点の対象ワールド空間パラメータを該頂点の変位係数を用いて修正することは、
    前記頂点のワールド空間パラメータの開始状態を、前記頂点の親頂点のワールド空間パラメータ間で補間することによって生成することと、
    前記頂点の変位係数を用いて、前記頂点のワールド空間パラメータの開始状態と前記頂点の対象ワールド空間パラメータとの間で補間することと、
    を含む、請求項2乃至5のうちいずれか1項に記載の方法。
  7. 1つ以上の新しい頂点を追加することは、
    エッジにより接続され及びドメイン空間に定義された左頂点と右頂点とを含む最初のパッチについて、
    前記左頂点の頂点テッセレーション係数及び前記右頂点の頂点テッセレーション係数を、閾値と比較することと、
    前記左頂点及び右頂点の頂点テッセレーション係数のいずれも前記閾値を超えないと決定することに応答して、前記最初のパッチを説明するデータを出力することと、
    前記左頂点及び右頂点の頂点テッセレーション係数のうちいずれかが前記閾値を超えると決定することに応答して、前記エッジを2つの部分に細分割する新しい頂点を形成することと、前記新しい頂点の頂点テッセレーション係数を算出することと、前記最初のパッチを分割して、前記左頂点及び前記新しい頂点を含む第1の新しいパッチと前記右頂点及び前記新しい頂点を含む第2の新しいパッチとを形成することと、前記の新たに形成されたパッチの各々における各頂点の頂点テッセレーション係数を低減させることと、
    を含む、請求項1乃至6のうちいずれか1項に記載の方法。
  8. 前記新しい頂点は前記エッジを二等分する、請求項7に記載の方法。
  9. 1つ以上の新しい頂点を追加することは、
    前記最初のパッチとして各々の新たに形成されたパッチを用いて当該方法を繰り返すこと、
    をさらに含む、請求項7又は8に記載の方法。
  10. 前記新しい頂点の頂点テッセレーション係数を算出することは、
    前記左頂点及び右頂点の頂点テッセレーション係数の平均値を算出することと、
    前記新しい頂点の頂点テッセレーション係数を、前記の算出された平均値に等しく設定することと、
    を含む、請求項7乃至9のうちいずれか1項に記載の方法。
  11. 前記最初のパッチは、2つの頂点、前記左頂点及び前記右頂点により定義される等値線パッチである、請求項7乃至10のうちいずれか1項に記載の方法。
  12. 前記最初のパッチは三角形パッチであり、前記三角形パッチは、3つの頂点、すなわち、上頂点、前記右頂点、及び前記左頂点の、順序付けられたセットである、請求項7乃至10のうちいずれか1項に記載の方法。
  13. 入力パッチを受け取るステップと、
    前記入力パッチから1つ又は複数の最初のパッチを生成するステップと、
    前記複数の最初のパッチの各々について、当該方法を繰り返すステップと、
    をさらに含む請求項12に記載の方法。
  14. 1つ又は複数の入力パッチにおける各々の角の頂点を定義するデータを受け取るように配置され、前記データは各々の角の頂点の頂点テッセレーション係数を含むハードウェアテッセレータであって、前記頂点テッセレーション係数を用いて前記複数の入力パッチに対してテッセレーションを実行して、頂点により定義される複数のプリミティブを生成し及び出力するように配置され、前記テッセレーションは1つ以上の新しい頂点を追加することを含むハードウェアロジック、を含み、前記ハードウェアテッセレータは、各々の新たに追加された頂点の変位係数を算出するように配置されたハードウェアロジックをさらに含む、ハードウェアテッセレータと、
    各々の新たに追加された頂点について、頂点の受け取られた対象ワールド空間パラメータを該頂点の変位係数を用いて修正するように配置されたハードウェアブレンドシェーダと、
    を含むグラフィックスパイプライン。
  15. 各々の角の頂点の頂点テッセレーション係数を算出し、前記頂点テッセレーション係数を前記ハードウェアテッセレータに出力するように配置された頂点シェーダと、
    アウト頂点バッファであって、前記頂点テッセレーション係数を前記ハードウェアテッセレータに出力することは、前記頂点テッセレーション係数を前記アウト頂点バッファに記憶することを含む、アウト頂点バッファと、
    各頂点の対象ワールド空間パラメータを算出し、前記対象ワールド空間パラメータを前記ハードウェアブレンドシェーダに出力するように配置されたドメインシェーダと、
    のうち1つ以上をさらに含む請求項14に記載のグラフィックスパイプライン。
JP2016111771A 2015-06-05 2016-06-03 変位係数を用いたテッセレーション方法 Active JP6736361B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
GB1509762.9 2015-06-05
GB1509762.9A GB2539042B (en) 2015-06-05 2015-06-05 Tessellation method using displacement factors

Publications (2)

Publication Number Publication Date
JP2017004516A JP2017004516A (ja) 2017-01-05
JP6736361B2 true JP6736361B2 (ja) 2020-08-05

Family

ID=53784995

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016111771A Active JP6736361B2 (ja) 2015-06-05 2016-06-03 変位係数を用いたテッセレーション方法

Country Status (5)

Country Link
US (5) US10229536B2 (ja)
EP (1) EP3101627A1 (ja)
JP (1) JP6736361B2 (ja)
CN (1) CN106251377B (ja)
GB (1) GB2539042B (ja)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10657710B2 (en) 2017-02-23 2020-05-19 Sony Interactive Entertainment Inc. Displacement directed tessellation
US10242496B2 (en) * 2017-04-24 2019-03-26 Intel Corporation Adaptive sub-patches system, apparatus and method
CN107369191B (zh) * 2017-08-15 2021-01-15 国网湖南省电力有限公司 电网气象灾害预测色斑图修正方法、系统及装置
GB2572625B (en) 2018-04-05 2020-06-17 Imagination Tech Ltd Ordering in tessellation operations
GB2572617B (en) 2018-04-05 2021-06-16 Imagination Tech Ltd Blending hardware
GB2572619B (en) * 2018-04-05 2020-06-17 Imagination Tech Ltd Hardware Tessellation Units
GB2572620C (en) 2018-04-05 2021-10-20 Imagination Tech Ltd Accessing Primitive Data
US10733783B2 (en) * 2018-10-09 2020-08-04 Valve Corporation Motion smoothing for re-projected frames
US11587289B2 (en) * 2018-12-11 2023-02-21 Hewlett-Packard Development Company, L.P. Determination of vertices of triangular grids for three-dimensional object representations
US11010862B1 (en) * 2019-11-14 2021-05-18 Advanced Micro Devices, Inc. Reduced bandwidth tessellation factors
US11055896B1 (en) 2020-02-25 2021-07-06 Parallels International Gmbh Hardware-assisted emulation of graphics pipeline

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2388507B (en) * 2002-05-10 2005-11-09 Imagination Tech Ltd An interface and method of interfacing between a parametric modelling unit and a polygon based rendering system.
US6940505B1 (en) * 2002-05-20 2005-09-06 Matrox Electronic Systems Ltd. Dynamic tessellation of a base mesh
US7148890B2 (en) * 2003-04-02 2006-12-12 Sun Microsystems, Inc. Displacement mapping by using two passes through the same rasterizer
CN100438406C (zh) * 2006-01-23 2008-11-26 北京航空航天大学 一种基于远程渲染的三维模型网络发布方法
US9147288B1 (en) * 2006-11-08 2015-09-29 Lucasfilm Entertainment Company Ltd. Subdivision of surfaces approximation
US7928979B2 (en) 2008-02-01 2011-04-19 Microsoft Corporation Efficient geometric tessellation and displacement
US8605085B1 (en) 2009-10-15 2013-12-10 Nvidia Corporation System and method for perspective corrected tessellation using parameter space warping
US8144147B2 (en) * 2010-04-07 2012-03-27 Intel Corporation Hierarchical bounding of displaced parametric surfaces
GB201104066D0 (en) * 2011-03-09 2011-04-20 Imagination Tech Ltd Compression of a tessellated primitive index list in a tile rendering system
US8791945B2 (en) * 2011-05-18 2014-07-29 Intel Corporation Rendering tessellated geometry with motion and defocus blur
US10535185B2 (en) * 2012-04-04 2020-01-14 Qualcomm Incorporated Patched shading in graphics processing
US9792728B2 (en) * 2012-08-17 2017-10-17 Thomson Licensing Method and apparatus for 3D mesh de-noising
US9123168B2 (en) * 2013-01-30 2015-09-01 Qualcomm Incorporated Output ordering of domain coordinates for tessellation
KR102104057B1 (ko) * 2013-07-09 2020-04-23 삼성전자 주식회사 점별로 테셀레이션 팩터를 할당하는 방법과 상기 방법을 수행할 수 있는 장치들
CN103606193B (zh) * 2013-11-29 2016-10-12 中国科学院深圳先进技术研究院 一种自适应细分方法及装置

Also Published As

Publication number Publication date
US11900543B2 (en) 2024-02-13
US11501494B2 (en) 2022-11-15
US20230066361A1 (en) 2023-03-02
US10229536B2 (en) 2019-03-12
US20240185528A1 (en) 2024-06-06
US20160358376A1 (en) 2016-12-08
US10832473B2 (en) 2020-11-10
EP3101627A1 (en) 2016-12-07
GB2539042A (en) 2016-12-07
JP2017004516A (ja) 2017-01-05
CN106251377A (zh) 2016-12-21
CN106251377B (zh) 2021-08-06
GB201509762D0 (en) 2015-07-22
GB2539042B (en) 2019-08-21
US20210019940A1 (en) 2021-01-21
US20190156572A1 (en) 2019-05-23

Similar Documents

Publication Publication Date Title
JP6736361B2 (ja) 変位係数を用いたテッセレーション方法
JP7284307B2 (ja) 三角形の再帰的細分割を用いたテッセレーション方法
JP6961054B2 (ja) テッセレーション方法
US8698799B2 (en) Method and apparatus for rendering graphics using soft occlusion
Guennebaud et al. Dynamic surfel set refinement for high-quality rendering

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20190422

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20200525

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

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20200616

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20200715

R150 Certificate of patent or registration of utility model

Ref document number: 6736361

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250