(57)【要約】【課題】滑らかな曲線および滑らかな曲線によって定義された形状をレンダリングするための改善された技術およびシステムを提供すること。【解決手段】滑らかな曲線は、曲線80の内側にあるテクセルを曲線80に対する所定の閾値より大きい値に設定し、曲線80の外側にあるテクセルを曲線80に対する閾値より小さい値に設定する(または逆も同様に)ことによりグラフィックステクスチャで表される。  2つの滑らかな曲線80、81のこのような表現は、それぞれの曲線80、81に異なる閾値を与え、それぞれの曲線の閾値に関して適切な値が付けられるようにテクセル値を設定し、2つの曲線の閾値等高線の位置がテクスチャ内で互いに実際に重なり合わないようにすることにより単一のグラフィックステクスチャ(同じテクセル空間)82内に詰め込まれる。【選択図】図８ｂ
2010092478.tif 000002
【特許請求の範囲】
【請求項１】
グラフィックス処理システムにおいて滑らかな曲線によって定義されている形状をレンダリングする方法であって、
1つまたは複数のプリミティブ内のサンプリング位置についてテクスチャ値をサンプリングすることによりレンダリングされる前記1つまたは複数のプリミティブに前記形状を定義する前記曲線に対応する曲線を表すグラフィックステクスチャを適用するステップと、
前記1つまたは複数のプリミティブの前記サンプリングされた1つまたは複数のサンプリング点が前記曲線のどちらの側にあるものとして処理されるべきかを決定するために、前記1つまたは複数のプリミティブの前記サンプリングされたサンプリング点に対する前記サンプリングされたテクスチャ値を、レンダリングされる前記形状を定義する前記曲線に対応する前記曲線に対する前記選択された閾値テクスチャ値と比較するステップと、
を含み、
前記グラフィックステクスチャは、
前記テクスチャが表す第1の曲線の一方の側におけるすべてのテクスチャ位置が第1の閾値より小さいサンプリングされたテクスチャ値を返し、その曲線の他方の側におけるすべてのテクスチャ位置が前記第1の閾値より大きいサンプリングされたテクスチャ値を返すように構成されるとともに、
前記テクスチャが表す第2の曲線の一方の側におけるすべてのテクスチャ位置が第2の異なる閾値より小さいサンプリングされたテクスチャ値を返し、その曲線の他方の側におけるすべてのテクスチャ位置が前記第2の閾値より大きいサンプリングされたテクスチャ値を返すように構成されることにより2つの滑らかな曲線を表すように構成されることを特徴とする方法。
【請求項２】
滑らかな曲線によって定義されている形状をレンダリングするため、グラフィックス処理システムで使用するテクスチャを生成する方法であって、
少なくとも2つの滑らかな曲線を表すテクスチャテクセルの配列を含むグラフィックステクスチャマップを、
前記テクスチャ内に現れるときに前記テクスチャが表す第1の滑らかな曲線の一方の側に置かれている前記テクスチャマップ内の位置から取られたテクスチャサンプルが第1の閾値テクスチャ値より小さいテクスチャ値を返すように設定し、また前記テクスチャ内のその滑らかな曲線の他方の側に置かれている位置から取られたテクスチャサンプルが前記第1の閾値テクスチャ値より大きいテクスチャ値を返すように設定し、また前記テクスチャ内に現れるときに前記テクスチャが表す第2の滑らかな曲線の一方の側に置かれている前記テクスチャマップ内の位置から取られたテクスチャサンプルが異なる第2の閾値テクスチャ値より小さいテクスチャ値を返すように設定し、また前記テクスチャ内のその滑らかな第2の曲線の他方の側に置かれている位置から取られたテクスチャサンプルが前記第2の閾値テクスチャ値より大きいテクスチャ値を返すように前記テクスチャの前記テクセル値を設定することにより、生成するステップを含むことを特徴とする方法。
【請求項３】
前記テクスチャは、3つ以上の滑らかな曲線を表すことを特徴とする請求項1または2に記載の方法。
【請求項４】
テクセルの異なる集合は、前記テクスチャが表すそれぞれの異なる曲線の前記閾値等高線を示すために使用されることを特徴とする請求項1から3のいずれか一項に記載の方法。
【請求項５】
前記テクスチャが表すそれぞれの曲線に対する前記閾値は、前記テクスチャに利用可能なテクセル値の範囲全体の中で、また範囲全体にわたって等しい間隔で並ぶことを特徴とする請求項1から4のいずれか一項に記載の方法。
【請求項６】
前記滑らかな曲線を表す前記テクスチャの前記テクセル値のいくつかまたはすべては、特定のテクスチャサンプリングプロセスによりサンプリングするように手直しされることを特徴とする請求項1から5のいずれか一項に記載の方法。
【請求項７】
グラフィックス処理システムにおいて滑らかな曲線によって定義されている形状をレンダリングする装置であって、前記装置は、
それぞれが2つ以上の滑らかな曲線を表す1つまたは複数のグラフィックステクスチャを格納するための手段と、
1つまたは複数のプリミティブ内のサンプリング位置について前記格納されているテクスチャのテクスチャ値をサンプリングすることにより表示する、前記滑らかな曲線の1つに対応する曲線によって定義される形状をレンダリングするために、レンダリングされる前記1つまたは複数のプリミティブに少なくとも2つの滑らかな曲線を表す格納されているテクスチャを適用する手段と、
前記1つまたは複数のプリミティブの前記1つまたは複数のサンプリング点がその曲線のどちらの側にあるものとして処理されるべきかを決定するために、1つまたは複数のプリミティブの前記サンプリングされたサンプリング点に対する前記サンプリングされたテクスチャ値を、レンダリングされる前記形状を定義する前記曲線に対応する前記テクスチャが表す前記曲線のうちの前記1つに対する前記閾値テクスチャ値と比較する手段と、
を備え、
それぞれの前記グラフィックステクスチャは、
前記テクスチャが表す第1の曲線の一方の側におけるすべてのテクスチャ位置が第1の閾値より小さいサンプリングされたテクスチャ値を返し、その曲線の他方の側におけるすべてのテクスチャ位置が前記第1の閾値より大きいサンプリングされたテクスチャ値を返すように構成されるとともに、
前記テクスチャが表す第2の曲線の一方の側におけるすべてのテクスチャ位置が第2の異なる閾値より小さいサンプリングされたテクスチャ値を返し、その曲線の他方の側におけるすべてのテクスチャ位置が前記第2の閾値より大きいサンプリングされたテクスチャ値を返すように、構成されることにより少なくとも2つの滑らかな曲線を表すように構成されることを特徴とする装置。
【請求項８】
滑らかな曲線によって定義されている形状をレンダリングするため、グラフィックス処理システムで使用するテクスチャを生成するための装置であって、前記装置は、
2つの滑らかな曲線を表すためにテクスチャテクセルの配列を含むグラフィックステクスチャマップを生成するための手段を備え、前記手段は、
前記テクスチャ内に現れるときに前記テクスチャが表す第1の滑らかな曲線の一方の側に置かれている前記テクスチャマップ内の位置から取られたテクスチャサンプルが第1の閾値テクスチャ値より小さいテクスチャ値を返すように設定し、また前記テクスチャ内のその滑らかな曲線の他方の側に置かれている位置から取られたテクスチャサンプルが前記第1の閾値テクスチャ値より大きいテクスチャ値を返すように設定し、また前記テクスチャ内に現れるときに前記テクスチャが表す第2の滑らかな曲線の一方の側に置かれている前記テクスチャマップ内の位置から取られたテクスチャサンプルが第2の異なる閾値テクスチャ値より小さいテクスチャ値を返すように設定し、また前記テクスチャ内のその滑らかな第2の曲線の他方の側に置かれている位置から取られたテクスチャサンプルが前記第2の閾値テクスチャ値より大きいテクスチャ値を返すように前記テクスチャの前記テクセル値を設定するための手段を備えることを特徴とする装置。
【請求項９】
前記テクスチャは、3つ以上の滑らかな曲線を表すことを特徴とする請求項7または8に記載の装置。
【請求項１０】
テクセルの異なる集合は、前記テクスチャが表すそれぞれの異なる曲線の前記閾値等高線を示すために使用されることを特徴とする請求項7から9のいずれか一項に記載の装置。
【請求項１１】
前記テクスチャが表すそれぞれの曲線に対する前記閾値は、前記テクスチャに利用可能なテクセル値の範囲全体の中で、また範囲全体にわたって等しい間隔で並ぶことを特徴とする請求項7から10のいずれか一項に記載の装置。
【請求項１２】
前記滑らかな曲線を表す前記テクスチャの前記テクセル値のいくつかまたはすべては、特定のテクスチャサンプリングプロセスによりサンプリングするように手直しされることを特徴とする請求項7から11のいずれか一項に記載の装置。
【請求項１３】
滑らかな曲線によって定義されている形状をレンダリングするため、グラフィックス処理システムで使用するグラフィックステクスチャマップであって、前記テクスチャマップは、
テクスチャテクセルの配列を含み、
前記テクスチャのテクセル値は、前記テクスチャ内に現れるときに前記テクスチャが表す第1の滑らかな曲線の一方の側に置かれているテクスチャマップ内の位置から取られたテクスチャサンプルが第1の閾値テクスチャ値より小さいテクスチャ値を返すように設定され、また前記テクスチャ内のその滑らかな曲線の他方の側に置かれている位置から取られたテクスチャサンプルが前記第1の閾値テクスチャ値より大きいテクスチャ値を返すように設定され、また前記テクスチャ内に現れるときに前記テクスチャが表す第2の滑らかな曲線の一方の側に置かれているテクスチャマップ内の位置から取られたテクスチャサンプルが第2の異なる閾値テクスチャ値より小さいテクスチャ値を返すように設定され、また前記テクスチャ内のその滑らかな第2の曲線の他方の側に置かれている位置から取られたテクスチャサンプルが前記第2の閾値テクスチャ値より大きいテクスチャ値を返すように設定されることを特徴とするテクスチャマップ。
【請求項１４】
前記テクスチャの前記テクセルのいくつかまたはすべてに対する前記テクセル値は、さらに、特定の選択されたテクスチャフィルタリングプロセスを使用して前記テクスチャがサンプリングされるときに前記テクスチャが前記滑らかな曲線を最も正確に表すように設定されることを特徴とする請求項13に記載のテクスチャマップ。
【請求項１５】
前記テクスチャは、3つ以上の滑らかな曲線を表すことを特徴とする請求項13または14に記載のテクスチャマップ。
【請求項１６】
テクセルの異なる集合は、前記テクスチャが表すそれぞれの異なる曲線の前記閾値等高線を示すために使用されることを特徴とする請求項13から15のいずれか一項に記載のテクスチャマップ。
【請求項１７】
前記テクスチャが表すそれぞれの曲線に対する前記閾値は、前記テクスチャに利用可能なテクセル値の範囲全体の中で、また範囲全体にわたって等しい間隔で並ぶことを特徴とする請求項13から16のいずれか一項に記載のテクスチャマップ。
【請求項１８】
2つ以上の曲線の位置に関係する情報を格納するための二次元データ構造体を生成する方法であって、前記方法は、
2つ以上の曲線の前記位置を表す二次元領域内の選択されたサンプリング位置の配列に対する値の集合を含む二次元データ構造体を、
前記データ構造体中に現れるときに前記データ構造体が表す第1の曲線の一方の側に置かれている前記データ構造体が表す前記領域内の位置から取られたサンプルが第1の閾値より小さいサンプリングされた値を返すように設定し、また前記データ構造体内のその曲線の他方の側に置かれている位置から取られたサンプルが前記第1の閾値より大きいサンプリングされた値を返すように設定し、また前記データ構造体内に現れるときに前記データ構造体が表す第2の曲線の一方の側に置かれている前記データ構造体内の位置から取られたサンプルが異なる第2の閾値より小さいサンプリングされた値を返すように設定し、また前記データ構造体内のその第2の曲線の他方の側に置かれている位置から取られたサンプルが前記第2の閾値より大きいサンプリングされた値を返すように前記配列内のサンプリング位置に対する前記値を設定することにより、生成するステップを含むことを特徴とする方法。
【請求項１９】
前記プログラム要素がデータ処理手段上で実行されたときに、請求項1から6のいずれか一項に記載の方法を実行するコンピュータソフトウェアコード部分を備えることを特徴とするコンピュータプログラム要素。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、グラフィックス処理システムに関するものであり、具体的には、グラフィックス処理システムでの滑らかな曲線などの滑らかな形状のレンダリング処理に関するものである。
【０００２】
本発明は、三次元グラフィックスの処理を特に参照しつつ説明されるが、当業者であれば理解するように、これは二次元グラフィックスの処理にも同様に適用可能である。
【背景技術】
【０００３】
当技術分野で知られているように、3Dグラフィックス処理は、通常、表示するシーンを複数の類似の基本コンポーネント(いわゆる「プリミティブ」)に分割して、3Dグラフィックス処理オペレーションを実行しやすくすることから始める。これらの「プリミティブ」は、通常、三角形などの単純な多角形の形態をとる。
【０００４】
表示するシーンに対応するプリミティブは、通常、グラフィックス処理システム用のアプリケーションプログラムインターフェイスにより生成され、そのために、グラフィックスの表示を必要とするアプリケーション(例えば、ゲーム)から受け取ったグラフィックス描画命令(リクエスト)を使用する。
【０００５】
それぞれのプリミティブは、このステージでは、通常、一組の頂点により定義され、一組の頂点により表される。1つのプリミティブに対するそれぞれの頂点には、その頂点を表す一組のデータ(位置、色、テクスチャ、および他の属性データ)が関連付けられている。次いで、このデータは、例えば、表示する頂点(頂点が関係する(複数の)プリミティブ)のラスター処理およびレンダリングを行うときに使用される。
【０００６】
例えば画面またはプリンタなどの出力表示デバイスにシーンを表示するために、シーンに対するプリミティブおよびそれらのプリミティブの頂点が生成され、定義された後、これらは、グラフィックス処理システムにより処理されうる。
【０００７】
このプロセスは、基本的に、処理するシーン領域を覆うサンプリング点の配列の中のどのサンプリング点が1つのプリミティブによって覆われるかを判定すること、そしてそのサンプリング点でそのプリミティブを表すためにそれぞれのサンプリング点が(例えば、色などに関して)持つべき外観を決定することを伴う。これらのプロセスは、一般に、ラスター処理およびシェーディングとそれぞれ称される。
【０００８】
ラスター処理プロセスでは、1つのプリミティブに対し使用されるべきサンプル位置(つまり、表示するシーン内でプリミティブを表すために使用されるサンプル点の(x, y)位置)を決定する。これは、典型的には、1つのプリミティブの複数の頂点の位置を使用して決定される。
【０００９】
次いで、シェーディングプロセスは、サンプル点でプリミティブを表示する(つまり、それぞれのサンプル点に「陰影を付ける」)のに必要な、赤色、緑色、および青色(RGB)値ならびに「アルファ」(透明度)値などのデータを導出する。これは、当技術分野で知られているように、テクスチャの適用、サンプル点データ値のブレンドなどを伴うことがある。
【００１０】
(3Dグラフィックスの文献では、「ラスター処理」という用語は、ときには、サンプル位置およびシェーディングへの両方のプリミティブ変換を指すために使用される。しかし、ここでの「ラスター処理」は、サンプリング点アドレスのみへのプリミティブデータの変換を指すために使用される。)
【００１１】
これらのプロセスは、典型的には、サンプリング点を、グラフィックス処理オペレーション(シェーディングなど)の実行対象となる「フラグメント」と通常呼ばれる個別のグラフィック構成要素として「表現する」ことにより実行される。それぞれのサンプリング点は、実際には、注目するサンプリング点でプリミティブに陰影を付けるために使用されるフラグメントによって表される。フラグメントは、単一のサンプリング点または複数のサンプリング点を表す(関連付けられている)ことが可能である。「フラグメント」は、シェーディングプロセス(シェーディングパイプライン)を通るグラフィック構成要素である。
【００１２】
(したがって、「フラグメント」は、事実上、プリミティブの所定の1つ(または複数)の画面空間サンプル点に補間されるようなプリミティブデータの集合(に関連付けられたもの)である。これは、さらに、注目する1つまたは複数のサンプル点(フラグメント位置)でプリミティブに陰影を付けるのに必要なプリミティブ毎のおよび他の状態データをも含むことができる。それぞれのグラフィックスフラグメントは処理されるときにシーンの1つの「ピクセル」に事実上相当するものと考えるのは道理にかなっている。)
【００１３】
それぞれのグラフィックス「フラグメント」は、最終的な出力表示に含まれる単一ピクセル(画素)に対応しうる(ピクセルは、最終的な表示内において特異点であるため、グラフィックスプロセッサのオペレーション(レンダリング)対象の「フラグメント」と表示のピクセルとの間に1対1のマッピングがありうる)。しかし、フラグメントと表示ピクセルとの間に1対1対応関係がない場合もありえ、例えば、縮小などの特定の形態の後処理が最終画像を表示するのに先立ってレンダリングされた画像に対し実行される。
【００１４】
表示するため滑らかな形状、特に、滑らかな曲線によって定義された形状(滑らかな曲線を辺または境界として持つ)を効果的に、また正確にレンダリングできるということが、グラフィックス処理システムにおいてますます望ましい技術となってきている。一般に、曲線の一次導関数が区分的連続である、連続する辺または境界曲線を持つ形状は、グラフィックス処理の観点からは滑らかな形状(滑らかな曲線によって定義された形状)であるとみなされうる(また、本発明および応用の目的に関して、滑らかな形状、およびそれに対応して、滑らかな曲線であると考えられる)。グラフィックス処理におけるこのような滑らかな曲線の例としては、ベジエ曲線、スプライン曲線、および円弧がある。
【００１５】
例えば、近年、コンピュータグラフィックスでは、いわゆる「ベクターグラフィックス」を使用することが次第に一般的になってきている。
【００１６】
ベクターグラフィックスは、経路を形成するようにアンカー点で連結される、1つまたは複数の線分、例えば、直線または曲線(二次(ベジエ)曲線、楕円弧、三次(ベジエ)曲線など)などの、個別に定義された幾何学的オブジェクトの使用に基づく。
【００１７】
ベクターグラフィックスオブジェクト/経路は、通常、「ユーザー空間」と呼ばれるもので定義され、操作される。しかし、例えばベクターグラフィックスオブジェクト/経路をビデオディスプレイまたはプリンタ上に表示するためには、ユーザー空間定義ベクターグラフィックスは、ピクセルベースのディスプレイに適したフォーマット、つまり、プリミティブおよびサンプリング点ベース形式に変換されなければならない。この変換を実行するときに、ベクターグラフィックスオブジェクトの滑らかな曲線または形状を保持することは困難な場合があるが、それは、オブジェクトが、実際には、オブジェクトを表示するために使用されるサンプリング位置およびピクセルに合わせてラスター処理されなければならないからである。
【００１８】
表示のため滑らかな形状をレンダリングする、知られている技術の1つは、形状をレンダリングプロセス用に多数の小さな直線セクションに細分するものである。しかし、これは、例えば、CPU時間およびレンダリング帯域幅に関して高いパフォーマンスコストを有する。
【００１９】
滑らかな曲線をレンダリングするための他の知られている技術は、陰関数曲線を使用するもの、つまり、所定のサンプリング点が曲線の内側にあるのか外側にあるのかを判定するために陰関数式を評価するものである。しかし、すべての滑らかな形状が、このような陰関数形式に変換できるわけではなく、この技術は、どのような場合でも、陰関数曲線を評価するために専用レンダリングハードウェアまたは超高精度フラグメントシェーダーハードウェアを必要とする。
【発明の概要】
【発明が解決しようとする課題】
【００２０】
そこで、出願人は、滑らかな曲線および滑らかな曲線によって定義された形状をレンダリングするための改善された技術およびシステムを提供する余地があると確信している。
【課題を解決するための手段】
【００２１】
本発明の第1の態様によれば、グラフィックス処理システムにおいて滑らかな曲線によって定義される形状をレンダリングする方法が提供され、この方法は、
1つまたは複数のプリミティブ内のサンプリング位置についてテクスチャ内のテクスチャ値をサンプリングすることによりレンダリングされる1つまたは複数のプリミティブに形状を定義する曲線に対応する曲線を表すグラフィックステクスチャを適用するステップと、
サンプリングされたテクスチャ値を使用して、サンプリング位置が曲線のどちらの側にあるものとして処理されるべきかを決定するステップとを含み、
グラフィックステクスチャは、テクスチャが表す第1の曲線の一方の側におけるすべてのテクスチャ位置が第1の閾値より小さいサンプリングされたテクスチャ値を返し、その曲線の他方の側におけるすべてのテクスチャ位置が第1の閾値より大きいサンプリングされたテクスチャ値を返すように、またテクスチャが表す第2の曲線の一方の側におけるすべてのテクスチャ値が第2の異なる閾値より小さいサンプリングされたテクスチャ値を返し、その曲線の他方の側におけるすべてのテクスチャ値が第2の閾値より大きいサンプリングされたテクスチャ値を返すように構成されることにより、2つの滑らかな曲線を表すように構成される。
【００２２】
本発明の第2の態様によれば、グラフィックス処理システムにおいて滑らかな曲線によって定義される形状をレンダリングするための装置が実現され、この装置は、
それぞれが2つ以上の滑らかな曲線を表す1つまたは複数のグラフィックステクスチャを格納するための手段であって、それぞれのそのようなグラフィックステクスチャは、テクスチャが表す第1の曲線の一方の側におけるすべてのテクスチャ位置が第1の閾値より小さいサンプリングされたテクスチャ値を返し、その曲線の他方の側におけるすべてのテクスチャ位置が第1の閾値より大きいサンプリングされたテクスチャ値を返すように、またテクスチャが表す第2の曲線の一方の側におけるすべてのテクスチャ位置が第2の異なる閾値より小さいサンプリングされたテクスチャ値を返し、その曲線の他方の側におけるすべてのテクスチャ位置が第2の閾値より大きいサンプリングされたテクスチャ値を返すように構成されることにより少なくとも2つの滑らかな曲線を表すように構成される、手段と、
1つまたは複数のプリミティブ内のサンプリング位置についてテクスチャ内のテクスチャ値をサンプリングすることによりレンダリングされる1つまたは複数のプリミティブに2つ以上の滑らかな曲線を表す格納されているグラフィックステクスチャを適用するための手段と、
サンプリングされた1つまたは複数のテクスチャ値を使用して、テクスチャが表す曲線のうちの1つの曲線のどちらの側にサンプリング位置があるものとして処理されるべきかを決定するための手段とを備える。
【００２３】
出願人は、テクスチャが表す曲線の一方の側におけるすべてのテクスチャ位置が特定の閾値より小さいサンプリングされたテクスチャ値を返し、その曲線の他方の側におけるすべてのテクスチャ位置がその閾値より大きいサンプリングされたテクスチャ値を返すようにグラフィックステクスチャを構成することにより、テクスチャがサンプリングされるときに、サンプリングされたテクスチャ値を使用して、サンプリングされた点が曲線の内側にあるのか、外側にあるのかを(つまり、サンプリングされたテクスチャ値が曲線の閾値であるテクスチャ値より大きいか、または小さいか(または逆も同様に)に応じて)判定することができることを認識している。
【００２４】
そこで、本発明では、滑らかな曲線は、テクスチャとして表され、次いで滑らかな曲線によって定義される形状(つまり、実際には、滑らかな曲線を辺または境界として有する)は、テクスチャを適切な1つまたは複数のプリミティブに適用することによりレンダリングされる。形状は、テクスチャ内のテクスチャ値をサンプリングし、サンプリングされた値を使用して、それぞれのサンプリング点が曲線のどちらの側にあるのかを判定することにより、表示用に描画される。これにより、グラフィックス処理システムは、与えられた任意の点が、曲線(ひいては形状)の内側にあるものとして処理されるべきか、または曲線(ひいては形状)の外側にあるものとして処理されるべきかを効率よく決定することができる。
【００２５】
本発明では、滑らかな曲線をテクスチャで表し、次いでそれをプリミティブに適用してこのようなやり方で形状(曲線)を描画するという方法により、コストの低い、既存のおよび知られているテクスチャマッピングシステムならびにハードウェアを使用して、滑らかな形状(および滑らかな曲線)をレンダリングするために使用されうる技術を実現する。したがって、以下でさらに説明されるように、本発明により、「プレーン」のテクスチャマッピングのみを使用して滑らかな形状(および曲線)をより効率よくレンダリングすることが可能になる。したがって、本発明を使用すると、低コストの、例えば、固定された機能を持つ、グラフィックスハードウェア上で、また未修正の、および従来の、既存の固定された機能を持つ、グラフィックスハードウェア上で滑らかな形状(および曲線)をより効果的にレンダリングすることが容易になり、また例えば、細分技術および/または滑らかな曲線をレンダリングするために現在使用されている専用のハードウェアを使用する必要性を回避することができる。
【００２６】
出願人は、さらに、この方法で滑らかな曲線をテクスチャで表すときに、テクスチャおよび曲線の閾値を適切に設定し同じテクスチャ空間内で複数の曲線を表す(同じテクセルを使用して)、つまり、そのテクスチャに複数の曲線を「詰め込む」ことにより可能になることを認識している。特に、以下でさらに説明されるように、本発明では、単一のテクスチャで(同じテクセルを使用して)複数の滑らかな曲線記述を互いの上に格納することができ、また効果的に格納する。
【００２７】
次いで、これにより、与えられた単一のテクスチャを使用して、複数の滑らかな曲線を表すことができ、これにより、例えば、滑らかな曲線の与えられた集合を表すのに必要なテクスチャを減らし、および/または小さくすることが可能になり、またテクスチャを使用するときにテクスチャキャッシングを効率化し、消費電力を低減することができる。
【００２８】
さらに、これは、テクスチャ圧縮方式(あらゆる種類のデータにとって常に望ましい、あるいは適しているというわけではない)を使用しなくても実現できる。
【００２９】
さらに、以下でさらに説明されるように、本発明により、複数の曲線記述を1つのテクスチャに詰め込み、その一方で、個別の滑らかな曲線の記述の比較的高い量の値精度を保存することが可能であり(テクスチャで個別に表されるとしても)、例えば直接的なマルチレベルの符号化の使用(本発明と同じ量の値精度を保持しない)とは対照的である。
【００３０】
サンプリングされたテクスチャ値は、好ましくは、サンプリングされた位置が曲線のどちらの側にあるかを、サンプリングされたテクスチャ値と曲線の閾値とを比較することにより判定するために使用される。この比較は、「より大きい(>)」もしくは「以上(>=)」の比較(または「より小さい(<)」もしくは「以下(<=)」の比較)としてよい。好ましい、一実施形態では、「以上」(または「以下」)のテストが使用され、これは、本発明を使用したときに典型的なグラフィックスプロセッサによって実行される丸めを使用するとうまくいくことが判明している。
【００３１】
そこで、本発明の第3の態様によれば、グラフィックス処理システムにおいて滑らかな曲線によって定義される形状をレンダリングする方法が提供され、この方法は、
1つまたは複数のプリミティブ内のサンプリング位置についてテクスチャ値をサンプリングすることによりレンダリングされる1つまたは複数のプリミティブに形状を定義する曲線に対応する曲線を表すグラフィックステクスチャを適用するステップであって、テクスチャはテクスチャが表す第1の曲線の一方の側におけるすべてのテクスチャ位置が第1の閾値より小さいサンプリングされたテクスチャ値を返し、その曲線の他方の側におけるすべてのテクスチャ位置が第1の閾値より大きいサンプリングされたテクスチャ値を返すように、またテクスチャが表す第2の曲線の一方の側におけるすべてのテクスチャ位置が第2の異なる閾値より小さいサンプリングされたテクスチャ値を返し、その曲線の他方の側におけるすべてのテクスチャ位置が第2の閾値より大きいサンプリングされたテクスチャ値を返すように構成されることにより2つの滑らかな曲線を表すように構成される、ステップと、
1つまたは複数のプリミティブのサンプリングされたサンプリング点に対するサンプリングされたテクスチャ値をレンダリングされる曲線に対する選択された閾値テクスチャ値と比較して、1つまたは複数のプリミティブのサンプリングされた1つまたは複数のサンプリング点が曲線のどちらの側にあるものとして処理されるべきかを決定するステップとを含む。
【００３２】
本発明の第4の態様によれば、グラフィックス処理システムにおいて滑らかな曲線によって定義される形状をレンダリングするための装置が実現され、この装置は、
それぞれが2つ以上の滑らかな曲線を表す1つまたは複数のグラフィックステクスチャを格納するための手段であって、それぞれのテクスチャは、テクスチャが表す第1の曲線の一方の側におけるすべてのテクスチャ位置が第1の閾値より小さいサンプリングされたテクスチャ値を返し、その曲線の他方の側におけるすべてのテクスチャ位置が第1の閾値より大きいサンプリングされたテクスチャ値を返すように、またテクスチャが表す第2の曲線の一方の側におけるすべてのテクスチャ位置が第2の異なる閾値より小さいサンプリングされたテクスチャ値を返し、その曲線の他方の側におけるすべてのテクスチャ位置が第2の閾値より大きいサンプリングされたテクスチャ値を返すように構成されることにより少なくとも2つの滑らかな曲線を表すように構成される、手段と、
レンダリングされる1つまたは複数のプリミティブに少なくとも2つの滑らかな曲線を表す格納されているテクスチャを適用し、1つまたは複数のプリミティブ内のサンプリング位置について格納されているテクスチャのテクスチャ値をサンプリングすることにより表示する滑らかな曲線の1つに対応する曲線によって定義される形状をレンダリングするための手段と、
1つまたは複数のプリミティブのサンプリングされたサンプリング点に対するサンプリングされたテクスチャ値をテクスチャが表す曲線のうちの1つに対する閾値テクスチャ値と比較して、1つまたは複数のプリミティブの1つまたは複数のサンプリング点がその曲線のどちらの側にあるものとして処理されるべきかを決定するための手段とを備える。
【００３３】
同様に、本発明の第5の態様によれば、表示用に滑らかな曲線によって定義される形状をレンダリングする方法が提供され、この方法は、
形状が表示されるシーン領域を覆う1つまたは複数のプリミティブを生成するステップと、
1つまたは複数のグラフィックスフラグメントを生成するように1つまたは複数のプリミティブをラスター処理するステップであって、それぞれの生成されたフラグメントは1つまたは複数のプリミティブによって覆われる1つまたは複数のサンプリング点を表す、ステップと、
形状を定義する滑らかな曲線に対応する滑らかな曲線を表すグラフィックステクスチャを生成されたフラグメントに適用するステップであって、テクスチャは、フラグメント毎にテクスチャ内の対応する1つまたは複数の位置をサンプリングしてサンプリングされた1つまたは複数の値を決定することによりテクスチャが表す第1の曲線の一方の側におけるすべてのテクスチャ位置が第1の閾値より小さいサンプリングされたテクスチャ値を返し、その曲線の他方の側におけるすべてのテクスチャ位置が第1の閾値より大きいサンプリングされたテクスチャ値を返すように、またテクスチャが表す第2の曲線の一方の側におけるすべてのテクスチャ位置が第2の異なる閾値より小さいサンプリングされたテクスチャ値を返し、その曲線の他方の側におけるすべてのテクスチャ位置が第2の閾値より大きいサンプリングされたテクスチャ値を返すように構成されることにより、2つの滑らかな曲線を表すように構成される、ステップと、
フラグメントに対するサンプリングされた1つまたは複数のテクスチャ値をレンダリングされる形状を定義する曲線に対応する曲線に対する閾値テクスチャ値と比較するステップと、
フラグメントおよび/またはそのフラグメントによって表される1つまたは複数のサンプリング位置を、比較結果に基づき曲線の内側にあるものとしてまたは外側にあるものとして処理するステップとを含む。
【００３４】
本発明の第6の態様によれば、表示のため滑らかな曲線によって定義される形状をレンダリングするための装置が実現され、この装置は、
形状が表示されるシーン領域を覆う1つまたは複数のプリミティブを生成するための手段と、
0個以上のグラフィックスフラグメントを生成するように1つまたは複数のプリミティブをラスター処理するための手段であって、それぞれの生成されたフラグメントは1つまたは複数のプリミティブによって覆われる1つまたは複数のサンプリング点を表す、手段と、
形状を定義する滑らかな曲線に対応する滑らかな曲線を表すグラフィックステクスチャを生成されたフラグメントに適用するための手段であって、テクスチャは、フラグメント毎にテクスチャ内の対応する1つまたは複数の位置をサンプリングしてサンプリングされた1つまたは複数の値を決定することによりテクスチャが表す第1の曲線の一方の側におけるすべてのテクスチャ位置が第1の閾値より小さいサンプリングされたテクスチャ値を返し、その曲線の他方の側におけるすべてのテクスチャ位置が第1の閾値より大きいサンプリングされたテクスチャ値を返すように、またテクスチャが表す第2の曲線の一方の側におけるすべてのテクスチャ位置が第2の異なる閾値より小さいサンプリングされたテクスチャ値を返し、その曲線の他方の側におけるすべてのテクスチャ位置が第2の閾値より大きいサンプリングされたテクスチャ値を返すように構成されることにより、少なくとも2つの滑らかな曲線を表すように構成される、手段と、
フラグメントに対するサンプリングされた1つまたは複数のテクスチャ値をレンダリングされる形状を定義する曲線に対応する曲線に対する閾値テクスチャ値と比較するための手段と、
フラグメントおよび/またはそのフラグメントによって表される1つまたは複数のサンプリング位置を、比較結果に基づき曲線の内側にあるものとしてまたは外側にあるものとして処理するための手段とを備える。
【００３５】
本発明のこれらの態様は、適宜、本明細書で説明されている本発明の好ましい、およびオプションの機能の1つまたは複数あるいはすべてを備えることができ、好ましくは備える。そこで、例えば、比較テストは、好ましくは「以上」(「以下」)テストである。
【００３６】
またここでは、当技術分野で知られているように、形状が表示されるシーン領域を覆う(複数の)プリミティブを、フラグメントの個数がゼロになるようにラスター処理することが可能である、つまり、形状が表示されてもシーン内には現れないということを事実上意味することに留意されたい。この場合、適用されるテクスチャに対しフラグメントはないことになる。しかし、典型的には、これらのプリミティブは、1つまたは複数のフラグメント(少なくとも1つのフラグメント)にラスター処理され、するとこの場合、テクスチャは上記のようにこれらのフラグメントに対し適用される。
【００３７】
サンプリングされた位置が曲線のどちらの側にあるのかの判定(例えば、比較テスト)の結果は、好ましくは、そのサンプリングされた位置のさらなる処理を制御するために使用される。好ましくは、この判定の結果は、実際には、適宜滑らかな形状(曲線)に関してさらに処理がなされないようにサンプリング位置を保持するかまたは破棄するために使用される。好ましくは、このテストの結果、サンプリングされた位置が曲線の内側にあることが判明した場合、プリミティブ内の対応する位置はそれに応じて陰影が付けられる(例えば、着色される)が、曲線の外側にある場合、プリミティブ内の位置は陰影を付けられず、注目する滑らかな形状に必要な特性を有する(例えば、さらに、好ましくは、形状の処理がさらに行われないように破棄される)。
【００３８】
したがって、好ましい一実施形態では、本発明は、サンプリング位置が曲線のどちらの側にあるかの判定の結果(比較テストの結果)に従って(複数の)サンプリング位置に陰影を付けるステップを含むか、または陰影を付けるための手段を備える。
【００３９】
したがって、例えば、また好ましくは、曲線の内側にあると判定された点は、好ましくは、特定の色および/または外観を施され、曲線の外側にあると判定された点は、異なる色を施される(有する)ことが許される(例えば、シーン内の他の何らかのオブジェクトまたは形状によって決定される色)。
【００４０】
言い換えると、その、またはそれぞれのサンプリング位置は、好ましくは、少なくとも一部はその位置が曲線のどちら側にあると判定された結果に従って陰影を付けられる(着色される)。
【００４１】
シェーディングは、例えば、テクスチャが適用されるパスと同じ処理パスで実行されうるか、またはテクスチャテストの結果が格納され(例えば、ステンシルバッファに)、次いでシェーディングが、後のパスで実行される。好ましい一実施形態では、シェーディングは、後続のパスで実行されるが、これは、滑らかな曲線と正多角形(交差し、互いに重なり合うこともありうる)の両方を組み合わせる必要がある場合に役立つ。
【００４２】
好ましい一実施形態では、フラグメント毎に単一のテクスチャルックアップがあり、フラグメントは、比較テストの結果として破棄される(または破棄されない)。
【００４３】
本発明で使用されるテクスチャは、上述のように、上述の方法で少なくとも2つの滑らかな曲線を表すべきである。与えられたテクスチャでは、滑らかな曲線を2つしか表すことができないが、好ましいテクスチャでは、2つよりも多い滑らかな曲線を表すことができる(また、好ましい一実施形態では、これらのテクスチャのうちの1つまたは複数が、2つよりも多い滑らかな曲線を表す)。したがって、一般に、それぞれのテクスチャは、2つ以上の滑らかな曲線を表すことができる。(またここでは、本発明は、単一の滑らかな曲線だけを表す、または異なる形で構成されているいくつかのテクスチャを格納し、使用することも除外しないことに留意すべきであり、本発明の方法で2つ(またはそれ以上)の滑らかな曲線を表し、レンダリングするために使用されうる少なくとも1つのテクスチャがあるというにすぎない。)
【００４４】
テクスチャが、2つより多い滑らかな曲線を表す場合、第3のもの(およびその後の曲線)について同様に、つまり、「第3」の曲線が、そのテクスチャがさらに表す第1および第2の曲線の第1および第2の閾値と異なる第3の閾値を有するように、またそのテクスチャが表す第3の曲線の一方の側におけるすべてのテクスチャ位置をサンプリングすると、その第3の閾値より小さいサンプリングされたテクスチャ値を返し、第3の曲線の他方の側におけるすべてのテクスチャ位置は、第3の閾値より大きいサンプリングされたテクスチャ値を返すように(また、その後の(第4、第5などの)曲線についても同様に)、構成されるべきである。
【００４５】
したがって、一般に、必要なのは、テクスチャが少なくとも2つの滑らかな曲線を表し、そのテクスチャが表すそれぞれの曲線は、そのテクスチャが表す曲線の閾値と異なる曲線「閾値」を有するということであり、そのテクスチャは、そのテクスチャが表すそれぞれの曲線の一方の側におけるすべてのテクスチャ位置をサンプリングすることで、その曲線に対する閾値より小さいサンプリングされたテクスチャ値を返し、その曲線の他方の側におけるすべてのテクスチャ位置は、その曲線に対する閾値より大きいサンプリングされたテクスチャ値を返すように構成される。
【００４６】
本発明において滑らかな曲線を表すために(また滑らかな形状をレンダリングするために)使用されるテクスチャは、望みどおりに構築され、構成されうる。上述のように、それぞれの滑らかな曲線は、テクスチャ内の与えられた位置に対するテクスチャ値をサンプリングすることで、システムが、テクスチャ内のその位置が曲線のどちらの側にあるのかを判定することができるように(複数の)テクスチャで表されるべきである。
【００４７】
好ましい一実施形態では、テクスチャは、当技術分野で知られているように、テクセル値の配列として構成され、それぞれのテクセル(テクスチャ位置)にはテクスチャマップ内におけるその位置の対応するテクスチャ値が関連付けられている。したがって、テクスチャを構成するテクセルのテクセル値は、この構成において、テクスチャ内のテクスチャ位置がサンプリングされたときに、サンプリングされたテクスチャ値が、テクスチャ位置を表すテクスチャがそれぞれの曲線のどちらの側に置かれているかを適切に示せるように選択され、設定されるべきである。
【００４８】
本発明は、さらに、曲線を表すテクスチャの構成およびテクスチャそれ自体に及ぶ。例えば、テクスチャは、別々に生成され(そして格納され)、および/または予め、そして次に、例えば、使用するグラフィックスプロセッサに送られるということが考えられる。本発明は、これらの活動とともに、滑らかな形状(および、曲線)を実際にレンダリングするときのテクスチャの使用にも及ぶ。
【００４９】
そこで、本発明の第7の態様によれば、滑らかな曲線によって定義された形状をレンダリングするためにグラフィックス処理システムで使用するテクスチャを生成する方法が提供され、この方法は、
少なくとも2つの滑らかな曲線を表すテクスチャテクセルの配列を含むグラフィックステクスチャマップを、
テクスチャ内に現れるときにテクスチャが表す第1の滑らかな曲線の一方の側に置かれているテクスチャマップ内の位置から取られたテクスチャサンプルが第1の閾値テクスチャ値より小さいテクスチャ値を返すように、またテクスチャ内のその滑らかな曲線の他方の側に置かれている位置から取られたテクスチャサンプルが第1の閾値テクスチャ値より大きいテクスチャ値を返すように、またテクスチャ内に現れるときにテクスチャが表す第2の滑らかな曲線の一方の側に置かれているテクスチャマップ内の位置から取られたテクスチャサンプルが異なる第2の閾値テクスチャ値より小さいテクスチャ値を返すように、またテクスチャ内のその滑らかな第2の曲線の他方の側に置かれている位置から取られたテクスチャサンプルが第2の閾値テクスチャ値より大きいテクスチャ値を返すようにテクスチャのテクセル値を設定することにより、生成するステップを含む。
【００５０】
本発明の第8の態様によれば、滑らかな曲線によって定義された形状をレンダリングするためにグラフィックス処理システムで使用するテクスチャを生成するための装置が実現され、この装置は、
2つの滑らかな曲線を表すためにテクスチャテクセルの配列を含むグラフィックステクスチャマップを生成するための手段を備え、この手段は、
テクスチャ内に現れるときにテクスチャが表す第1の滑らかな曲線の一方の側に置かれているテクスチャマップ内の位置から取られたテクスチャサンプルが第1の閾値テクスチャ値より小さいテクスチャ値を返すように、またテクスチャ内のその滑らかな曲線の他方の側に置かれている位置から取られたテクスチャサンプルが第1の閾値テクスチャ値より大きいテクスチャ値を返すように、またテクスチャ内に現れるときにテクスチャが表す第2の滑らかな曲線の一方の側に置かれているテクスチャマップ内の位置から取られたテクスチャサンプルが第2の異なる閾値テクスチャ値より小さいテクスチャ値を返すように、またテクスチャ内のその滑らかな第2の曲線の他方の側に置かれている位置から取られたテクスチャサンプルが第2の閾値テクスチャ値より大きいテクスチャ値を返すようにテクスチャのテクセル値を設定するための手段を備える。
【００５１】
本発明の第9の態様によれば、滑らかな曲線によって定義された形状をレンダリングするためにグラフィックス処理システムで使用するグラフィックステクスチャマップが形成され、このテクスチャマップは、
テクスチャテクセルの配列を含み、
テクスチャのテクセル値は、テクスチャ内に現れるときにテクスチャが表す第1の滑らかな曲線の一方の側に置かれているテクスチャマップ内の位置から取られたテクスチャサンプルが第1の閾値テクスチャ値より小さいテクスチャ値を返すように、またテクスチャ内のその滑らかな曲線の他方の側に置かれている位置から取られたテクスチャサンプルが第1の閾値テクスチャ値より大きいテクスチャ値を返すように、またテクスチャ内に現れるときにテクスチャが表す第2の滑らかな曲線の一方の側に置かれているテクスチャマップ内の位置から取られたテクスチャサンプルが第2の異なる閾値テクスチャ値より小さいテクスチャ値を返すように、またテクスチャ内のその滑らかな第2の曲線の他方の側に置かれている位置から取られたテクスチャサンプルが第2の閾値テクスチャ値より大きいテクスチャ値を返すように設定される。
【００５２】
当業者であれば理解するように、本発明のこれらの態様および実施形態はすべて、適宜、本明細書で説明されている好ましい特徴のうちの1つまたは複数あるいはすべてを備えることができ、好ましくは備える。例えば、生成された1つまたは複数のテクスチャマップは、好ましくは、後から使用できるように格納しておく。
【００５３】
上記のように、本発明のこれらの態様および実施形態では、曲線を表すテクスチャマップは、テクスチャが表す与えられた曲線のいずれかの側にあるサンプリングされたテクスチャ点がその曲線に対する閾値より大きいか、または小さいかのいずれかのサンプリングされたテクスチャ値を与えるように構成される。このことは、テクスチャがサンプリングされたときに、サンプリングされた点が曲線の内側にあるのか、または外側にあるのかを判定するためにサンプリングされたテクスチャ値が使用されることを意味している(サンプリングされたテクスチャ値が、曲線の閾値テクスチャ値より大きいか、または小さい場合(または逆も同様に)。
【００５４】
ここでは、本発明の態様および実施形態のすべての目的および意図は、テクスチャ内の与えられた曲線の一方の側におけるすべてのテクスチャ位置がその曲線に対する選択された閾値より小さいサンプリングされたテクスチャ値を返すことを(逆もまた同様に)保証し、テクスチャ位置が置かれている曲線の側を容易に判定できるようにすることであることに留意されたい。
【００５５】
しかし、サンプリングされたテクスチャ位置が与えられた曲線の選択された閾値に等しい値を返す場合もありうる。実際、曲線の閾値に等しいサンプリングされたテクスチャ値を返す一列のテクスチャ位置がテクスチャ内にあるのが典型的である。
【００５６】
サンプリングされたときに曲線の閾値を返すこれらのテクスチャ位置は、それに応じて、テクスチャ内に等高線を形成し(サンプリングされたとき)、その等高線上では任意の点に対するサンプリングされたテクスチャ値は曲線の閾値テクスチャ値に等しくなる。したがって、テクスチャ内のこの等高線は(サンプリングされるときに)、テクスチャによって示されるように曲線の線を効果的に表し、したがって表すものとして効果的にみなされうる(テクスチャがマッピングされるときに)(曲線閾値等高線上のテクスチャ位置をサンプリングすることで、曲線の閾値を返し、したがってそのような位置は、実際に、曲線の一方または他方の側ではなく、テクスチャ内に現れるときに曲線の「上に」載るものとみなすことができるからである)。
【００５７】
したがって、できる限り、曲線について設定された閾値に対応するテクスチャ内の等高線が、テクスチャが表すその滑らかな曲線の線(したがって、実際には、滑らかな形状の辺)に厳密に一致し、またその滑らかな曲線の線を厳密に、好ましくは可能な限り厳密に表すようにテクスチャを構成することが好ましいが、それは、このことが、テクスチャがサンプリングされたときにその曲線(および形状)をより正確に反映することを意味すべきであるからである。これは、好ましくは、テクスチャが表すそれぞれの曲線について実行される。
【００５８】
与えられた曲線の閾値を有する等高線の「上に」載っている(つまり、サンプリングされたときに曲線の閾値を返す)サンプルテクスチャ位置を特別な場合として(例えば、レンダリングされるときに曲線の線を区別するように)処理することは可能であろうが、好ましい一実施形態では、これは行われず、閾値に等しいテクスチャサンプルは、好ましくは、使用される比較テストの結果に従って単純に処理される(例えば、曲線の閾値の等高線の「上に」載っている点が閾値よりより大きい点と同じものとして処理される場合の、「以上」テストであるか、または曲線の閾値の等高線の「上に」載っている点が閾値より小さい点と同じものとして処理される場合の、「より大きい」テストであるか、などである)。
【００５９】
したがって、ここでは、一般的に、テクスチャ内の1つの曲線、好ましくはそれぞれの曲線の閾値等高線上の位置が、テクスチャが表す曲線の線に厳密に一致し、好ましくはその曲線の線と可能な限り厳密に一致するようにテクスチャを構成することが望ましいが、閾値等高線上の点が特別な場合として処理されるか、または識別されるようにテクスチャのサンプリングを意図的に構成する必要はないことにも留意されたい。むしろ、好ましくは、テストを単に行って、サンプリングされた位置が曲線の内側にあるものとして、または外側にあるものとして処理されるべきかどうかを確認するだけでよい。
【００６０】
上述のように、テクスチャが表す複数の曲線のそれぞれは、テクスチャ位置が曲線のどちらの側かを判定するためのテスト対象の異なる閾値を有する。したがって、テクスチャが2つの曲線を表す場合、2つの異なる閾値があることになり、それが3つの曲線を表す場合、3つの異なる閾値があることになり、というように続く。
【００６１】
テクスチャに対するテクセル値は、サンプリングされたときに、テクスチャ位置についてテクスチャで表されるそれぞれの曲線の適切な側を示す値を返すように設定されるべきである。したがって、テクセルは、テクスチャで表されるそれぞれの曲線の閾値に相対的に適宜設定される値を持つべきである。
【００６２】
例えば、テクスチャ内のテクセルの位置が、テクスチャで表されるように曲線のすべての内側にある場合(または逆も同様に)、そのテクセルは、テクスチャが表すすべての曲線の閾値より低い(または高い)値を持つべきである。
【００６３】
しかし、テクスチャ位置が、テクスチャで表されるときに1つの曲線の内側にあるが、テクスチャで表されるときに他の曲線の外側にあるテクセルは、複数の曲線のうちの1つの曲線の閾値より高いが、他の曲線の閾値より低い値(つまり、複数の曲線の閾値の間にある値)を持つべきであるといったようになる。
【００６４】
出願人は、実際に、(テクスチャがサンプリングされるときに曲線の位置を正確に示せるように)テクスチャ内に(実際にはテクスチャ内の曲線の閾値等高線の周りに)正確に現れるようにテクセルの値を与えられた曲線の線にそって、また線の周りで設定することが好ましいが、その曲線の経路から遠いところにある(例えば、その閾値等高線からテクセル3つ分以上離れている)テクセルの値は、これらの位置が曲線の完全に内側にあるかまたは完全に外側に出ているかのいずれかであるので、注目している曲線に関してあまり重要でなく、したがって、それらの位置におけるテクセル値が適宜曲線の閾値より上または下にある限り、その正確な値は、テクスチャ内のその曲線の位置の定義に悪影響を及ぼさないであろうと認識している。
【００６５】
このことは、例えば、与えられた曲線の経路(したがって、閾値等高線)から遠いところにあるテクセルは、その値を、テクスチャ内の第1の曲線の表現に悪影響を及ぼすことなく異なる閾値を有する異なる曲線を表すという要件に基づき、設定することができるということを意味する。(実際、上記から理解されるように、異なる曲線に対する閾値は、すべて、例えば、第1の曲線の閾値より小さい(または大きい)テクセル値を使用して示されうる値とすべきである(テクセルは、すべて、第1の曲線の一方の側または他方の側にあり、したがってそれらの値はそのことを反映していなければならないので))。
【００６６】
出願人は、したがって、テクスチャ内の与えられた曲線の経路(および閾値)等高線から遠いテクセルは、事実上、他の曲線の(閾値等高線の)位置を示すために追加の情報を自由に符号化することができ、これにより、同じテクスチャ内で(同じテクセルを使用して、同じテクスチャ空間内で)比較的正確に複数の曲線を表すことができるというのがこの効果であることを認識している。
【００６７】
したがって、これらの原則に従って、本発明のテクスチャに対する好ましい構成は、テクスチャで表される第1の閾値を有する第1の曲線、および第1の曲線の閾値より低い第2の閾値を有する第2の曲線を備えるものであり、その位置は、第1の曲線の経路を表すテクスチャ位置から相隔てられて並ぶテクスチャ位置において、また第1の曲線の閾値より小さいサンプリングされたテクスチャ値によって示されるテクスチャ内の第1の曲線の経路の側において、テクスチャで表されることが理解される(つまり、第2の曲線に対する閾値等高線が第1の曲線の閾値等高線を表すテクスチャ位置から相隔てて並ぶテクスチャ位置において、また第1の曲線の閾値より小さいサンプリングされたテクスチャ値によって示されるテクスチャ内の第1の曲線の経路の側において、テクスチャ内に現れるように)。
【００６８】
同様に、テクスチャが、第3の曲線を符号化する(表す)場合、その第3の曲線は、好ましくは、第1および第2の曲線の閾値より低い第3の閾値を有し、またその経路は、好ましくは、第1および第2の曲線の経路を表すテクスチャ位置から相隔てて並ぶテクスチャ位置において、また第1および第2の曲線の閾値より低いサンプリングされたテクスチャ値によって示されるテクスチャ内の第1および第2の曲線の経路の側において、テクスチャで表される(つまり、第3の曲線に対する閾値等高線が、第1および第2の曲線の閾値等高線を表すテクスチャ位置から相隔てて並ぶテクスチャ位置において、また第1および第2の曲線の閾値より小さいサンプリングされたテクスチャ値によって示されるテクスチャ内の第1および第2の曲線の経路の側において、テクスチャ内に現れるように)、といったように処理される。
【００６９】
上述の観察結果および可能性を全面的に活用するために、したがって、実際にはテクスチャ内の曲線の経路の位置を示すテクセル(実際には、また好ましくは、テクスチャがサンプリングされたときに曲線の閾値等高線を示すテクセル、つまり好ましくは、テクスチャ内の曲線のそれぞれの閾値等高線上にある、および/またはテクスチャ内の閾値等高線の位置に直接隣接するテクセル)は、テクスチャ内で互いに重なり合わない(相隔てられて並ぶ)ことが特に好ましい。
【００７０】
言い換えると、テクセルの異なる集合で、テクスチャが表すそれぞれの異なる曲線の閾値等高線を示すのが特に好ましいということである。(本質的に、曲線の閾値等高線は、テクスチャ内で互いに重なり合わないのが好ましい。)
【００７１】
すると、これより、与えられた曲線の経路を示すテクセルを、その曲線の経路の位置を示すというより明確な目的に合わせて手直し(tailored)することができる。
【００７２】
したがって、特に好ましい一実施形態では、テクスチャは、そのテクスチャが表すそれぞれの曲線について、テクスチャで表されるときのその曲線の経路の位置が、(曲線がテクスチャで表されるときの)テクスチャが表す他の曲線のうちのどの曲線の経路ともテクスチャ内で物理的に重なり合わないように構成される。
【００７３】
同様に、最も好ましくは、テクスチャは、そのテクスチャが表すそれぞれの曲線について、テクスチャで表されるときのその曲線の閾値等高線位置をサンプリングされたときに示すテクセル(の位置)が、(テクスチャで表されるときの)テクスチャが表す他の曲線のうちのどれかの曲線の閾値等高線の位置をサンプリングされたときに示すテクセルとテクスチャ内で物理的に重なり合わないように構成される。
【００７４】
サンプリングされたときにテクスチャ内の曲線の閾値等高線の位置を示すことになる(したがって、好ましくはテクスチャ内で重なり合わないはずである)特定のテクセルは、以下でさらに説明するように、例えば、テクスチャが使用時にサンプリングされる方法に依存するが、例えば、テクスチャ内に現れるときに等高線に載る、および/または直接隣接するテクセルを含むことができ、また好ましい一実施形態では、そのように含む。
【００７５】
例えば、双線形フィルタリングなどのテクスチャフィルタリングが、使用中のテクスチャをサンプリングするのに使用される場合、サンプリングされるときにテクスチャ内の閾値等高線の位置を示すテクセルのテクスチャ内の閾値等高線の周りの「遷移」領域は、フィルタリングが使用されない場合に比べて大きくなる(そのような場合には、形状の辺を示すテクセルの単一の列が単にあるだけである)。
【００７６】
特に好ましい一実施形態では、これに関して重なり合わないテクセルは、(テクスチャ内に現れるときの)曲線の経路(および好ましくは、閾値等高線)にわたる、またはまたがる直接隣接するテクセルのそれぞれの対(つまり、テクセルとテクセルの間に(他のテクセルを遮ることなく)引かれた直線が、テクスチャ内に現れるときの曲線の経路と交差するテクセルのそれぞれの直接隣接する対)を構成するテクセルを少なくとも含み、また好ましい一実施形態ではそのようなテクセルのみを含む。これは、以下でさらに説明されるように、双線形フィルタリングを使用してテクスチャが使用中にサンプリングされる場合に特に好ましい。
【００７７】
上述のように、テクスチャが表すそれぞれの曲線に使用される閾値は、互いに異なっていなければならない。これは、テクスチャがサンプリングされるときに異なる曲線を区別できるようにするためである。
【００７８】
さらに、出願人は、以下でさらに説明されるように、テクスチャ内の与えられた曲線の閾値等高線(経路)の位置を示すテクセルに対しある範囲のテクセル値を使用することが好ましいことを認識している(こうすると、例えば、テクスチャ内の等高線の位置をうまく定義できる)。
【００７９】
したがって、テクスチャ内のそれぞれの曲線の閾値等高線を表すために使用されるテクセル値の範囲は、互いに重なり合わないことが特に好ましい(つまり、テクスチャ内の与えられた曲線の閾値等高線の位置を示すテクセルに使用されるテクセル値は(上述のように)、テクスチャが表す他の曲線の位置を示すテクセルに使用されるテクセル値と重なり合わない)。
【００８０】
したがって、同様に、テクスチャが表すそれぞれの曲線に対する閾値は、好ましくは可能な限り、互いに相隔てて並び、そのため、テクセル値なしでそれぞれの曲線の閾値等高線に対し使用される最大範囲のテクセル値を他の曲線に使用されるテクセル値と重なり合う一方の曲線に使用できるようにすることが可能であることが好ましい。この点に関して、テクスチャに対する利用可能なテクセル値の与えられた範囲全体について、曲線閾値は、好ましくは、その範囲内で、またその範囲にわたって等間隔で、例えば、2つの曲線が表される場合にはその範囲の1/3と2/3のところに、3つの曲線が表される場合には1/4、1/2、および3/4のところに、というように並ぶ。
【００８１】
上記の考察に関して、本発明で使用されるテクスチャの特に好ましい構成は、テクスチャが表す曲線が、テクスチャの一方の側から他方の側へ移動するときに相隔てて並ぶ形で漸次、順々に配置され、曲線の閾値が、テクスチャの一方の側から他方の側へ一方の曲線から次の曲線へと移動するときに漸次増大(または減少)する(好ましくは、テクセル値の利用可能な範囲全体にわたって等しいステップで)というものである。
【００８２】
上記の原則が守られている限り、テクスチャのテクセルに割り当てられた値は、好適な、また望ましい方法で設定され、構成されうる。例えば、望ましい範囲のテクセル値、および曲線閾値テクスチャ値が使用されうる。
【００８３】
テクセル値は、複数のビットを使って表されなければならない。これにより、使用されるテクスチャ内のテクセル値の分解能を細かくすることができる。したがって、好ましい一実施形態では、テクセル値のグレースケールが使用される。好ましくは、8ビット値または16ビット値が使用される。固定小数点または浮動小数点テクスチャ(テクセル値)が使用されうる。
【００８４】
特に好ましい一実施形態では、テクスチャ内で使用されうるテクセル値は、0から1までの範囲全体([0,1])に制約される。
【００８５】
この場合、テクスチャが2つの曲線を表す場合、好ましくは、(少なくとも固定小数点テクスチャについての)一方の曲線の閾値は、1/3に設定され、他の曲線の閾値は、2/3に設定される。これにより、曲線の閾値は利用可能なテクセル値の範囲内でできる限り相隔てて並び、例えば、1/3の閾値を有する曲線を符号化する場合のテクセル値に対し[0,2/3]の範囲を与え(0は利用可能な範囲の下限であり、2/3は次の曲線の「上」に対する閾値なので)、2/3の閾値を有する曲線を符号化する場合のテクセル値に対し[1/3,1]の範囲を与える。
【００８６】
同様に、テクスチャが、3つの曲線を表す場合、好ましくは、それぞれ[0,0.5]、[0.25,0.75]、[0.5,1]の符号化範囲を与える0.25、0.5、および0.75の曲線閾値(固定小数点テクスチャについては少なくとも)が使用され、他の数の曲線についても同様である。
【００８７】
ここで、浮動小数点テクスチャの場合、浮動小数点フォーマットがmビットの仮数とeビットの指数を有するとすれば、1.5×2nでテクスチャ内のそれぞれの曲線について閾値を設定することにより(ただし、nは正もしくは負の整数であり、数値に使用されるビットの個数に応じた範囲を有し、例えばIEEE浮動小数点フォーマットの数では、nは、-2e-1+2から2e-1-1までの範囲であり(したがって、32ビット数については-126...0...127となり、16ビット浮動小数点数については-30...0...31となる)、最大2e-2個までの曲線をテクスチャ内に格納することができ、それぞれ、各曲線に対するテクセル範囲について利用可能な約mビットの分解能を有する(上述のように好ましくはここでもまたテクスチャ内で物理的に重なり合わない閾値等高線を示すテクセルによって決まる)ことに留意されたい。言い換えると、浮動小数点テクスチャでは、好ましくは、それぞれの曲線に対する閾値が1つまたはそれぞれの与えられた(異なる)指数範囲内の中点の値に設定される。これにより、それぞれの曲線の閾値等高線を定義するために使用されるテクセル値に対し、完全な仮数精度を利用することが可能になる。
【００８８】
テクセル値は、他の範囲上に拡大することも許され、必要ならば、他の閾値も使用可能である。
【００８９】
出願人は、与えられたテクスチャサンプルのテクスチャマップからそのテクスチャ内に返される値は、使用されているテクスチャルックアップ(サンプリング)プロセスに依存する、例えば、テクスチャがサンプリングされるときに何らかの形式のフィルタリングまたは補間が適用されるかどうかに依存することを認識している。例えば、テクセルの同一の配列について、双線形フィルタリングを使用するテクスチャサンプリングプロセスは、サンプリング位置に最も近い位置にあるテクセルの値を単純に取るテクスチャルックアップと比べて、与えられたサンプリング位置に対する異なるテクセル値を返すことができる。
【００９０】
さらに、出願人は、これは、レンダリング結果を改善するために本発明で使用される滑らかな曲線を表すテクスチャを構成する際に利用することができると認識している。特に、出願人は、滑らかな曲線を表すテクスチャ内のテクセル値が、テクスチャが使用される場合に使用されるテクスチャサンプリングプロセス(フィルタリング)に合わせて手直しまたは最適化できる場合、与えられたテクスチャ分解能について滑らかな形状(曲線)をより正確にレンダリングすることが可能になると認識している。
【００９１】
(ここで、テクスチャの分解能を単に高めるだけで曲線レンダリングの精度を高めることが常に可能であろうという点に留意されたい。しかし、こうすることが、常に可能であったり、望ましいことであったりするわけではない。使用されるテクスチャサンプリング技術に合わせてテクスチャを手直しすることは、テクスチャ分解能を高めなくてもレンダリング精度を高める代替え手段となり、および/またはメモリ使用量の所定の増加に対して実効テクスチャ分解能の増大をもたらしうる)。
【００９２】
したがって、特に好ましい一実施形態では、滑らかな曲線を表すテクスチャのテクセル値のいくつかまたはすべてが、滑らかな曲線をレンダリングするために使用される(べき)ときにテクスチャに適用されるテクスチャサンプリングプロセスに従って(に基づき)設定もしくは選択される。したがって、例えば、使用中のテクスチャをサンプリングするときに双線形フィルタリングが使用される場合、そのテクスチャについて格納されているテクセル値は、好ましくは、テクスチャ内の与えられた位置をサンプリングするために双線形フィルタリングが使用された場合に適切なテクスチャ値が返されるように選択される(点が曲線の内側にあるのか、外側にあるのかを示すために)。
【００９３】
言い換えると、滑らかな曲線を表すテクスチャは、好ましくは、使用されるテクスチャサンプリング(補間)技術に合わせて手直しされる。これにより、テクスチャフィルタリング(サンプリング)の後のレンダリングの結果が改善される。
【００９４】
そこで、本発明の第10の態様によれば、グラフィックス処理システムにおいて滑らかな曲線によって定義される形状をレンダリングする方法が提供され、この方法は、
テクスチャが構成される特定のテクスチャフィルタリングプロセスを使用して1つまたは複数のプリミティブ内のサンプリング位置についてテクスチャ値をサンプリングすることにより、レンダリングされる1つまたは複数のプリミティブに形状を定義する曲線に対応する曲線を表すグラフィックステクスチャを適用するステップであって、グラフィックステクスチャはテクスチャが表す第1の曲線の一方の側におけるすべてのテクスチャ位置が第1の閾値より小さいサンプリングされたテクスチャ値を返し、その曲線の他方の側におけるすべてのテクスチャ位置が第1の閾値より大きいサンプリングされたテクスチャ値を返すように、またテクスチャが表す第2の曲線の一方の側におけるすべてのテクスチャ位置が第2の異なる閾値より小さいサンプリングされたテクスチャ値を返し、その曲線の他方の側におけるすべてのテクスチャ位置が第2の閾値より大きいサンプリングされたテクスチャ値を返すように構成されることにより2つの滑らかな曲線を表すように構成され、またテクスチャのテクセルの値はさらに特定の選択されたテクスチャフィルタリングプロセスを使用してテクスチャがサンプリングされたときにそれぞれの滑らかな曲線を最も正確に表すように設定される、ステップと、
そうする場合に、1つまたは複数のプリミティブのサンプリングされたサンプリング点に対するサンプリングされたテクスチャ値を、形状を定義する曲線に対応するテクスチャが表す曲線のうちの1つに対する閾値テクスチャ値と比較して、1つまたは複数のプリミティブの1つまたは複数のサンプリングされたサンプリング点が曲線のどちらの側にあるものとして処理されるべきかを決定するステップとを含む。
【００９５】
本発明の第11の態様によれば、グラフィックス処理システムにおいて滑らかな曲線によって定義される形状をレンダリングするための装置が実現され、この装置は、
それぞれが2つ以上の滑らかな曲線を表す1つまたは複数のグラフィックステクスチャを格納するための手段であって、1つまたは複数のグラフィックステクスチャは、テクスチャが表す第1の曲線の一方の側におけるすべてのテクスチャ位置が第1の閾値より小さいサンプリングされたテクスチャ値を返し、その曲線の他方の側におけるすべてのテクスチャ位置が第1の閾値より大きいサンプリングされたテクスチャ値を返すように、またテクスチャが表す第2の曲線の一方の側におけるすべてのテクスチャ位置が第2の異なる閾値より小さいサンプリングされたテクスチャ値を返し、その曲線の他方の側におけるすべてのテクスチャ位置が第2の閾値より大きいサンプリングされたテクスチャ値を返すように構成されることにより2つ以上の滑らかな曲線を表すように構成され、また1つまたは複数のテクスチャのテクセルの値は1つまたは複数のテクスチャが特定の選択されたテクスチャフィルタリングプロセスを使用してサンプリングされたときに滑らかな曲線を最も正確に表すようにさらに設定される、手段と、
テクスチャが構成されている特定のテクスチャフィルタリングプロセスを使用して1つまたは複数のプリミティブ内のサンプリング位置についてテクスチャ値をサンプリングすることにより、レンダリングされる1つまたは複数のプリミティブに2つ以上の滑らかな曲線を表す格納されているテクスチャを適用するための手段と、
1つまたは複数のプリミティブのサンプリングされたサンプリング点に対するサンプリングされたテクスチャ値をレンダリングされる形状を定義する曲線に対応するテクスチャが表す曲線のうちの1つに対する閾値テクスチャ値と比較して、1つまたは複数のプリミティブの1つまたは複数のサンプリング点が曲線のどちらの側にあるものとして処理されるべきかを決定するための手段とを備える。
【００９６】
同様に、本発明の第12の態様によれば、表示用に滑らかな曲線によって定義される形状をレンダリングする方法が提供され、この方法は、
形状が表示されるシーン領域を覆う1つまたは複数のプリミティブを生成するステップと、
1つまたは複数のグラフィックスフラグメントを生成するように1つまたは複数のプリミティブをラスター処理するステップであって、それぞれのフラグメントはプリミティブまたは複数のプリミティブのうちの1つのプリミティブによって覆われる1つまたは複数のサンプリング点を表す、ステップと、
フラグメントに少なくとも2つの滑らかな曲線を表すグラフィックステクスチャを適用するステップであって、グラフィックステクスチャは、テクスチャが表す第1の曲線の一方の側におけるすべてのテクスチャ位置が第1の閾値より小さいサンプリングされたテクスチャ値を返し、その曲線の他方の側におけるすべてのテクスチャ位置が第1の閾値より大きいサンプリングされたテクスチャ値を返すように、またテクスチャが表す第2の曲線の一方の側におけるすべてのテクスチャ位置が第2の異なる閾値より小さいサンプリングされたテクスチャ値を返し、その曲線の他方の側におけるすべてのテクスチャ位置が第2の閾値より大きいサンプリングされたテクスチャ値を返すように構成されることにより2つの滑らかな曲線を表すように構成され、またテクスチャのテクセルの値はさらにテクスチャが特定の選択されたテクスチャフィルタリングプロセスを使用してサンプリングされたときにテクスチャが滑らかな曲線を最も正確に表すように設定され、
それぞれのフラグメントについて、
テクスチャが構成されている特定のテクスチャフィルタリングプロセスを使用してテクスチャ内の対応する1つまたは複数の位置をサンプリングしてサンプリングされた1つまたは複数のテクスチャ値を決定し、
フラグメントに対するサンプリングされた1つまたは複数のテクスチャ値をレンダリングされる形状を定義する曲線に対応するテクスチャが表す曲線のうちの1つの曲線に対する閾値テクスチャ値と比較し、
フラグメントおよび/またはそのフラグメントによって表される1つまたは複数のサンプリング位置を、比較結果に基づき曲線の内側にあるものとしてまたは外側にあるものとして処理することにより実行される、ステップとを含む。
【００９７】
本発明の第13の態様によれば、表示のため滑らかな曲線によって定義される形状をレンダリングするための装置が実現され、この装置は、
形状が表示されるシーン領域を覆う1つまたは複数のプリミティブを生成するための手段と、
0個以上のグラフィックスフラグメントを生成するように1つまたは複数のプリミティブをラスター処理するための手段であって、それぞれの生成されたフラグメントはプリミティブまたは複数のプリミティブのうちの1つのプリミティブによって覆われる1つまたは複数のサンプリング点を表す、手段と、
生成されたフラグメントに少なくとも2つの滑らかな曲線を表すグラフィックステクスチャを適用するための手段であって、グラフィックステクスチャは、テクスチャが表す第1の曲線の一方の側におけるすべてのテクスチャ位置が第1の閾値より小さいサンプリングされたテクスチャ値を返し、その曲線の他方の側におけるすべてのテクスチャ位置が第1の閾値より大きいサンプリングされたテクスチャ値を返すように、またテクスチャが表す第2の曲線の一方の側におけるすべてのテクスチャ位置が第2の異なる閾値より小さいサンプリングされたテクスチャ値を返し、その曲線の他方の側におけるすべてのテクスチャ位置が第2の閾値より大きいサンプリングされたテクスチャ値を返すように構成されることにより2つの滑らかな曲線を表すように構成され、またそれぞれのテクスチャのテクセルの値はさらにテクスチャが特定の選択されたテクスチャフィルタリングプロセスを使用してサンプリングされたときにテクスチャが滑らかな曲線を最も正確に表すように設定され、このグラフィックステクスチャの適用は、それぞれのフラグメントについて、テクスチャが構成されている特定のテクスチャフィルタリングプロセスを使用し、テクスチャ内の対応する1つまたは複数の位置をサンプリングして、サンプリングされた1つまたは複数のテクスチャ値を決定することにより実行される、手段と、
フラグメントに対するサンプリングされた1つまたは複数のテクスチャ値をレンダリングされる形状を定義する曲線に対応するテクスチャが表す曲線に対する閾値テクスチャ値と比較するための手段と、
フラグメントおよび/またはそのフラグメントによって表される1つまたは複数のサンプリング位置を、比較結果に基づき曲線の内側にあるものとしてまたは外側にあるものとして処理するための手段とを備える。
【００９８】
本発明のこれらの態様は、適宜、本明細書で説明されている本発明の好ましい、およびオプションの機能の1つまたは複数あるいはすべてを備えることができ、好ましくは備える。そこで、例えば、比較テストは、好ましくは「以上」(「以下」)テストである。同様に、比較の結果は、好ましくは格納され、その後の処理パスでフラグメントのシェーディングおよび/またはサンプリング位置を制御するために使用される(したがって、これにより、フラグメントおよび/またはサンプリング位置は、効果的に、形状(曲線)の内側にあるか、または外側にあるものとして保持されるか、または破棄される)。
【００９９】
同様に、本発明のこれらの態様の好ましい一実施形態では、フラグメント毎に単一のテクスチャルックアップがあり、フラグメントは、比較テストの結果として破棄される(または破棄されない)。
【０１００】
したがって、本発明の第14の態様によれば、滑らかな曲線によって定義された形状をレンダリングするためにグラフィックス処理システムで使用するテクスチャを生成する方法が提供され、この方法は、
少なくとも2つの滑らかな曲線を表すテクスチャテクセルの配列を含むグラフィックステクスチャマップを、
テクスチャをサンプリングするときに使用されることが意図されている特定のテクスチャフィルタリングプロセスに基づきテクスチャのテクセルのいくつかまたはすべてに対し使用されるテクセル値を選択し、
テクスチャに対するテクセル値を、
特定のテクスチャフィルタリングプロセスを使用してテクスチャが表す第1の滑らかな曲線の一方の側にあるテクスチャマップ内の位置から取られたテクスチャサンプルが第1の閾値テクスチャ値より小さいテクスチャ値を返し、また特定のテクスチャフィルタリングプロセスを使用してその滑らかな曲線の他方の側にある位置から取られたテクスチャサンプルが第1の閾値より大きいテクスチャ値を返すように、また
特定のテクスチャフィルタリングプロセスを使用してテクスチャが表す第2の滑らかな曲線の一方の側にあるテクスチャマップ内の位置から取られたテクスチャサンプルが第2の異なる閾値テクスチャ値より小さいテクスチャ値を返し、また特定のテクスチャフィルタリングプロセスを使用してその滑らかな曲線の他方の側にある位置から取られたテクスチャサンプルが第2の閾値より大きいテクスチャ値を返すように設定することにより、生成するステップを含む。
【０１０１】
本発明の第15の態様によれば、滑らかな曲線によって定義された形状をレンダリングするためにグラフィックス処理システムで使用するテクスチャを生成するための装置が実現され、この装置は、
少なくとも2つの滑らかな曲線を表すためにテクスチャテクセルの配列を含むグラフィックステクスチャマップを生成するための手段を備え、この手段は、
テクスチャをサンプリングするときに使用されることが意図されている特定のテクスチャフィルタリングプロセスに基づきテクスチャのテクセルのいくつかまたはすべてに対し使用されるテクセル値を選択するための手段と、
テクスチャに対するテクセル値を、
特定のテクスチャフィルタリングプロセスを使用してテクスチャが表す第1の滑らかな曲線の一方の側にあるテクスチャマップ内の位置から取られたテクスチャサンプルが第1の閾値テクスチャ値より小さいテクスチャ値を返し、また特定のテクスチャフィルタリングプロセスを使用してその滑らかな曲線の他方の側にある位置から取られたテクスチャサンプルが第1の閾値より大きいテクスチャ値を返すように、また
特定のテクスチャフィルタリングプロセスを使用してテクスチャが表す第2の滑らかな曲線の一方の側にあるテクスチャマップ内の位置から取られたテクスチャサンプルが第2の異なる閾値テクスチャ値より小さいテクスチャ値を返し、また特定のテクスチャフィルタリングプロセスを使用してその滑らかな曲線の他方の側にある位置から取られたテクスチャサンプルが第2の閾値より大きいテクスチャ値を返すように設定するための手段と、を備える。
【０１０２】
本発明の第16の態様によれば、滑らかな曲線によって定義された形状をレンダリングするためにグラフィックス処理システムで使用するグラフィックステクスチャマップが形成され、このテクスチャマップは、
テクスチャテクセルの配列を含み、
テクセル値は、
テクスチャが表す第1の滑らかな曲線の一方の側にあるテクスチャマップ内の位置から取られたテクスチャサンプルが第1の閾値テクスチャ値より小さいテクスチャ値を返し、またその滑らかな曲線の他方の側にある位置から取られたテクスチャサンプルが第1の閾値テクスチャ値より大きいテクスチャ値を返すように、また
テクスチャが表す第2の滑らかな曲線の一方の側にあるテクスチャマップ内の位置から取られたテクスチャサンプルが第2の異なる閾値テクスチャ値より小さいテクスチャ値を返し、またその滑らかな曲線の他方の側にある位置から取られたテクスチャサンプルが第2の閾値テクスチャ値より大きいテクスチャ値を返すように設定され、
テクスチャのテクセルのいくつかまたはすべてに対するテクセル値は、さらに、特定の選択されたテクスチャフィルタリングプロセスを使用してテクスチャがサンプリングされるときにテクスチャが滑らかな曲線を最も正確に表すように設定される。
【０１０３】
当業者であれば理解するように、本発明のこれらの態様および実施形態はすべて、適宜、本明細書で説明されている好ましい特徴のうちの1つまたは複数あるいはすべてを備えることができ、好ましくは備える。
【０１０４】
本発明のこれらの態様および実施形態では、テクスチャは、所望のテクスチャフィルタリングプロセスとともに使用するように構成されうる。最も好ましくは、特定の選択されたテクスチャフィルタリングプロセスは、補間プロセス、つまり、テクセルとテクセルの間にある位置に対するテクスチャ値を補間するフィルタリングプロセスである。一般に、与えられたサンプリング位置における補間の重みおよび座標が特定のテクセルに対し予測可能であるテクスチャ補間(フィルタリング)技術と適合するようにテクスチャ内のテクセル値を手直しすることが可能である。したがって、一般に、等方性を有する補間プロセスを使用することが可能であろう。そこで、例えば、テクスチャは、三重線形フィルタリングとともに使用するように手直しする(最適化する)ことが可能であり、また一実施形態では手直し(最適化)される。そうすると、例えば、滑らかな曲線を表すテクスチャをミップマップ形式で形成することができる。
【０１０５】
特に好ましい一実施形態では、滑らかな曲線を表すテクスチャは、双線形フィルタリングを使用してサンプリングするように手直し(最適化)される。双線形フィルタリングは、「安価な」固定機能グラフィックスハードウェアにも存在するふつうに使われているテクスチャサンプリング技術であり、したがって双線形フィルタリングとともに使用するように本発明を手直しすると、グラフィックスプロセッサへの適用可能性、特に安価なグラフィックス処理ハードウェアへの適用可能性が向上する。
【０１０６】
したがって、特に好ましい一実施形態では、滑らかな曲線を表すテクスチャマップ内に格納されているテクセルの値は、テクスチャのサンプリングに双線形フィルタリングが使用されるということに基づいて(つまり、テクスチャ内の位置をサンプリングするために双線形フィルタリングが使用されたときに、適切なテクスチャ値が返されるように)選択される。同様に、テクスチャは、好ましくは、滑らかな形状をレンダリングするために使用されている場合に双線形フィルタリング技術を使用してサンプリングされる。
【０１０７】
双線形フィルタリングなどのある種の形式の補間またはフィルタリング機能が、テクスチャをサンプリングするために使用される場合、またテクスチャのテクセルのビット分解能が1を超える、例えば、8ビットまたは16ビットのテクセル値をとる(つまり、それぞれのテクセルがその値を表すために複数のビットを利用できる)場合、これにより、テクセル値の分解能を高めることができ、対応するテクスチャフィルタリングプロセスと組み合わせたときに、例えば、返されるサンプリングされた位置の値と曲線の真の経路との一致度を高めることができる。
【０１０８】
また、ある種の形式のフィルタリングまたは補間プロセスを使用してテクスチャがサンプリングされる場合、特定の曲線の与えられた側にあるテクセルの値は、常に、曲線の閾値より大きい(またはそれぞれ小さい)が、テクスチャ内の曲線の閾値等高線の周りでは、その等高線に近いテクセルは、曲線の同じ側にあるものの曲線の閾値等高線からは遠い位置にあるテクセルに比べて高い(またはそれぞれ低い)値を有することがあることにも留意されたい。
【０１０９】
これは、双線形フィルタリングなどのフィルタリングプロセスを使用して曲線の線の周りのテクスチャ位置がサンプリングされるときに所望のテクスチャ値が返されるようにするためには、曲線の与えられた側にあるテクセルは曲線のその側に対して可変値を有する必要がある場合があるからである。実際、一般的には、与えられた曲線の閾値等高線の周りで一定範囲のテクセル値にわたってある程度の変化がありえ、これは、それに比べて曲線の閾値等高線から遠い距離のところでテクスチャ値が一様であってもそうなる。
【０１１０】
したがって、特に好ましい一実施形態では、テクスチャは、それぞれの曲線の閾値等高線の付近のテクセル値が一定範囲の値にわたって変化するが、それに比べて曲線の閾値等高線から遠い距離のところにある与えられた曲線の与えられた側にあるテクセルはそれぞれ同じテクセル値を有するように形成される。テクセル値が曲線上で変化する場合にその曲線の閾値等高線の周りの範囲の広がりは、例えば、テクスチャがサンプリングされるときに適用されるフィルタカーネルのサイズに依存する。好ましくは、また例えば双線形フィルタリングの場合に、テクセル値は、1つの(それぞれの)曲線の閾値等高線のそれぞれの側でテクセル最大2つ分までの、またはテクセル最大4つ分までの距離に対し変化する。
【０１１１】
最も好ましくは、与えられた曲線の閾値等高線から遠い距離のところにあるすべてのテクセルは(その方向のテクスチャ内の次の曲線の閾値等高線が存在する場合に、それに到達する(接近する)まで)、その曲線の一方の側で曲線の閾値より大きい(ただし、(存在する場合)その方向の次の曲線の閾値より小さい)与えられた値に設定され、その曲線の他方の側にあるその曲線から遠い距離のところにあるすべてのテクセルは(ここでもまた、その方向の次の曲線が存在する場合に、それに到達するまで)、曲線の閾値より小さい(ただし、(存在する場合)その方向の次の曲線の閾値より大きい)与えられた値に設定される。
【０１１２】
同様に、曲線の閾値等高線に近い位置にあり、曲線の閾値より小さいテクスチャ値で表される曲線の側にあるテクセルは、曲線のその側で曲線の閾値等高線から離れているところにあるテクセルよりなおいっそう低いテクセル値を有することができ、また実際に有することが好ましい(または逆も同様に)。
【０１１３】
テクスチャ(テクスチャに使用されるテクセル値のいくつかまたはすべて)は、使用されるテクスチャサンプリングプロセスに合わせて、曲線が所望のまた好適な方法によりそのサンプリングプロセスに対し最も正確に表されるように最適化または手直しされうる。
【０１１４】
好ましくは、テクスチャ内の値は、選択されたテクスチャサンプリングプロセスによるサンプリングの後に(局所的)誤差の総和が最小化されるように設定(計算)される。したがって、例えば、双線形フィルタリングの場合、テクスチャで使用される値は、好ましくは、例えば、テクセル中心にある正しい値を持つことを必ずしも目的とせずに、双線形フィルタリングの後に(局所的)誤差の総和を最小化するように設定される。
【０１１５】
特に好ましい一実施形態では、使用するテクセル値は、サンプリングプロセスを表すために使用されうる費用関数を導出し、次いでシミュレーテッドアニーリング法などの1つまたは複数の最適化アルゴリズムを使用してその費用関数を最小にすることにより決定され、選択(設定)される。
【０１１６】
好ましくは、テクスチャに使用するテクセル値の集合は、テクスチャ内にあるときの1つの(それぞれの)曲線の位置と特定のテクスチャサンプリングプロセスを使用してテクスチャのテクセルがサンプリングされるときのその(それぞれの)曲線の示されている位置との間のそれぞれの誤差を表す費用関数を最小化することにより決定される。
【０１１７】
テクセル値の最適化は、好ましくは、テクセル値を変数として含む費用関数を定め、次いでその費用関数の最小化を試み、それに応じてテクセル値を選択するという形で実行される。好ましくは、費用関数は、テクスチャが個々に表すそれぞれの曲線に関して導出され、適用される。
【０１１８】
特に好ましい一実施形態では、テクスチャが表す与えられた曲線に対し使用するテクセル値のいくつかまたはすべては、テクスチャ内のテクセルの間の注目する曲線の経路を考慮し、曲線の経路がテクセル間にある点において曲線に対する閾値テクスチャ値を(可能な限り)返すようにテクセルのいくつかまたはすべての値を最適化することを試みることにより(使用するテクセル値を導出するための費用関数が定められる)決定される(次いで、このことで、テクスチャ内の閾値等高線が可能な限り(テクスチャのテクセル配列を通じて)テクスチャ内の曲線の経路(線)と一致することが保証されるべきなので)。
【０１１９】
特に好ましいこのような一実施形態では、特に、曲線を表すテクスチャが双線形フィルタリング用に最適化される場合に、使用するテクセル値のいくつかまたはすべては、隣接するテクセルのそれぞれの対の間の(テクスチャ内の)曲線の経路を考慮し、曲線がテクセルの対を結ぶ直線と交差する点において閾値テクスチャ値を返すように対の中のテクセルの値を最適化することを試みることにより(使用するテクセル値を導出するための費用関数が定められる)決定される。
【０１２０】
したがって、特に好ましい一実施形態では、費用関数は、(テクセル配列を通じて)テクスチャが表す曲線の経路(線)を曲線の経路(線)とそれぞれのテクセル中心を結ぶ直線との一連の交わりに分け、次いで曲線とそれぞれの2つのテクセル中心を結ぶ直線との交わり点で所望の曲線閾値が得られるようにそれぞれのテクセル値を調節することを試みることにより生成される。
【０１２１】
これは、好ましくは、曲線に対するテクセルの適切な各対毎に、またそれぞれのテクセル対の個別の費用関数の総和として決定された曲線に対するテクセルのすべての対に対する全費用関数(最適化)について繰り返される。
【０１２２】
したがって、特に好ましい一実施形態では、テクスチャが表す与えられた曲線に対するテクスチャに使用するテクセル値のいくつかまたはすべては、注目する曲線に対するそれぞれの関連するテクセル対(好ましくはテクスチャ内の曲線の経路(線)(実際には、事実上テクスチャ内の閾値等高線)(等高線は曲線の経路と一致することが意図されているため)をまたぐテクセル対のそれぞれ(およびそれぞれのみ))に関して決定された局所的費用関数の総和である大域的費用関数を使用し、大域的最適化法を使用して大域的(全体的)誤差(この構成では、局所的な(個々のテクセル対の)誤差の総和となる)を最小化する構成を見つけようとすることで、決定される。
【０１２３】
これは、好ましくは、テクスチャが表すそれぞれの曲線について実行される。
【０１２４】
これらの構成では(また一般的に)、個別のテクセル対毎の局所的費用関数(2つのテクセル値の調節)は、好ましくは、一連の相互に関連する最適化問題とみなされる。
【０１２５】
それぞれのテクセル対に対する費用関数(最適化)において、好ましくは、1つのまたはその目的(費用の考慮)は、テクセルの対(の間)を結ぶ直線上の曲線の実際の交差(交わり)点とテクセル値がサンプリングされるときに示される交差点との間の差を最小化することである。(理想的には、テクセル値をサンプリングすることで、曲線の真の交差点が示されるべきであるが、これは、常に可能であるとは限らないため、その目的はこの誤差を最小化することなのである。)
【０１２６】
この因子は、好ましくは、実際の交差点位置とテクセル値によって示されるような位置との間の誤差を費用関数に含めることにより考慮される。
【０１２７】
また、費用関数は、費用関数が生成するテクセル値が(注目するテクスチャで表されている特定の曲線について)利用可能なテクセル値の範囲の大部分および好ましくは範囲全体(例えば、グレースケール)(例えば、[0,2/3])を使用するように構成されることが好ましい。これは、曲線の閾値等高線がより高い分解能で定義されることを保証するのに役立つ。
【０１２８】
これは、好ましくは、特に上記の構成において、考慮されるテクセル対のテクセル値の差が注目するテクセルの対を結ぶ直線に関して曲線がなす角度を反映するように費用関数を設定することにより実現される。例えば、曲線が2つのテクセルの間の直線に垂直である場合、理想的には、テクセル値の間の差は、テクセル値の利用可能な(許容される)範囲全体に等しいもの(例えば、「2/3」)であるべきである。その一方で、曲線が2つのテクセルの間の直線に平行である場合、テクセル値の差は「0」であるべきである。
【０１２９】
好ましい一実施形態では、費用関数は、これを考慮し達成することを試みるための一因子として曲線と2つのテクセルの間の直線とがなす角度の正弦を使用する。
【０１３０】
また、費用関数が、曲線がテクセルの対の間の直線にほとんど平行である場合により小さな重みを辺に適用するように構成されることが好ましいが、この場合のように、テクセル値をサンプリングするときの「誤差」は曲線の位置を同じだけ歪ませる傾向を持たない。これは、好ましくは、導出された「費用」値に重みを適宜付けるために、費用関数に曲線とテクセルの間の直線とがなす角度の正弦の平方に関係する因子を含めることにより行われる。
【０１３１】
この費用関数は、好ましくは、テクセルのそれぞれの適切な個別の対に関して導出され、適用され、またこの形式で定義されたテクセル値のそれぞれの個別の対に対する費用関数は、考慮(テスト)されているすべてのテクセル対にわたって総和され、これにより曲線に対する全体的または「大域的」費用関数が得られるが、その後、これは、最適化アルゴリズムを使用して注目する曲線に使用するテクセル値を導出することで最小化される(それぞれのテクセル対に使用する最適なテクセル値を見つけるため)。任意の好適な最適化プロセスが使用可能であるが、シミュレーテッドアニーリングが好ましい。
【０１３２】
このプロセスは、(好ましくは)テクスチャが表すそれぞれの曲線について繰り返され、それぞれの曲線に対するテクセル値が適宜最適化される。
【０１３３】
その後、決定されたテクセル値は、好ましくは、滑らかな曲線を表すグラフィックステクスチャとして格納される。
【０１３４】
好ましくは、1つの(それぞれの)曲線に関する費用関数は、テクスチャがサンプリングされるときに曲線の経路(閾値等高線)の位置の指示に影響を及ぼすテクセル(テクセル対)(例えば、および好ましくは、閾値等高線の位置にわたる、またはまたがる(つまり、曲線の経路が間を通過する)(直接)隣接するテクセルのそれぞれの対)に関してのみ評価され(したがって、テクセル値が設定され)る。これは、他のテクセル(閾値等高線からさらに遠い)は、テクスチャがサンプリングされるときに(例えば、および特に、双線形フィルタリングがテクスチャのサンプリングに使用される場合に)決定されたその等高線の示されている位置に影響を及ぼすべきでなく、したがってその配置に応じて、曲線の閾値の上または下の値に単純に設定することができるからである。
【０１３５】
(同様に、テクスチャ内のそれぞれの曲線に対する経路(閾値等高線)を示すために使用されるテクセルが、重なり合わない場合(上述のように)、それぞれの曲線は、独立に最適化されうるが、それは、最適化されるそれぞれのテクセルが、その曲線(等高線)の位置を示すことにのみ関わり、したがって、その曲線(その閾値等高線)を最適化しても、他の曲線(それらの閾値等高線)を示すために使用されるテクセルに影響を及ぼすべきでないからである。)
【０１３６】
したがって、特に好ましい一実施形態では、費用関数は、曲線の閾値等高線に近い位置にあるテクセルについて、好ましくは曲線の閾値等高線に隣接するテクセルについて(のみ)、最も好ましくは曲線の閾値等高線にわたる、またはまたがる直接隣接するテクセルの対について(のみ)、テクセル値(のみ)を決定するために使用され、その際に、残りのテクセル(つまり、曲線の線(閾値等高線)から遠い位置にあるテクセル)はそれぞれ(費用関数を使用してそれらのテクセルに使用する値を導出するのではなく)曲線の閾値の上または下にある値に単純に設定される。
【０１３７】
同様に、好ましい一実施形態では、上述のように、テクスチャ内の与えられた曲線の経路は、実際には、曲線をまたがるテクセルのそれぞれの対の間の曲線の一連の交わりに分けられ、それぞれの対の2つのテクセル値の調節は一連の相互に関連する最適化問題として処理され、曲線から遠い位置にあるテクセルは適宜曲線に対して選択された閾値の上または下にある値に設定されている。
【０１３８】
同様に、特定のテクスチャサンプリング(フィルタリング)プロセスに合わせたテクスチャの最適化または手直し(意図されたテクスチャサンプリングプロセスに基づくテクスチャ値の設定)は、テクスチャがサンプリングされるときに閾値等高線の位置の指示に影響を及ぼすテクセル(例えば、および好ましくは、その等高線の位置にわたる、またはまたがる(直接)隣接するテクセルのそれぞれの対(つまり、等高線が間を通る))に関してのみ実行される(それに応じてテクセル値が設定され)ことが特に好ましい。これは、上述のように、他のテクセル(閾値等高線からさらに遠い)は、テクスチャがサンプリングされるときに決定されたその等高線の示されている位置に影響を及ぼすべきでなく、したがってその配置に応じて、曲線の閾値の上または下の値に単純に設定することができるからである。
【０１３９】
したがって、特に好ましい一実施形態では、テクセル値のすべてではなく数個のみが、使用されるテクスチャサンプリングプロセスに基づき特に設定される。最も好ましくは、曲線の閾値等高線に近い位置にあるテクセルについて、好ましくは曲線の閾値等高線に隣接するテクセルについて(のみ)、最も好ましくは曲線の閾値等高線にわたる、またはまたがる直接隣接するテクセルの対について(のみ)、テクセル値のみが、使用されるテクスチャサンプリングプロセスに基づき特に設定され(少なくとも双線形フィルタリングを使用してテクスチャがサンプリングされる場合、また他の種類のフィルタリングでは他のテクセルを設定することが必要になることもある)、その際に、残りのテクセル(つまり、曲線の線(閾値等高線)から遠い位置にあるテクセル)は上述のようにそれぞれ曲線の閾値の上または下にある値に単純に設定される。
【０１４０】
本発明の方法で2つ以上の滑らかな曲線を表すテクスチャが作成された後、後から曲線(曲線によって定義された形状(曲線をその辺(境界)として有する))をレンダリングするために使用できるように格納することができ、好ましくは格納される。
【０１４１】
テクスチャが表す滑らかな曲線によって定義される形状をレンダリングするために本発明のテクスチャを実際に使用する場合には、例えば、好適なグラフィックステクスチャマッピングプロセスを使用することができる。
【０１４２】
上述のように、特に好ましい一実施形態では、テクスチャは、形状が現れるシーン領域を覆う1つまたは複数のプリミティブを最初に生成し、次いで、テクスチャをその1つまたは複数のプリミティブに適用してそれに応じてその1つまたは複数のプリミティブに陰影を付けることにより、表示する滑らかな形状をレンダリングするために使用される。
【０１４３】
この1つまたは複数のプリミティブは、例えば、描画される形状が現れるシーン領域を覆う境界ボックスを定義することにより、望みどおりに生成されうる。
【０１４４】
プリミティブを生成するときに、生成された(複数の)プリミティブがテクスチャの所望の(および適切な)領域のみをサンプリングすることを保証する必要がある場合がある(これは、特に、以下でさらに説明するように、複数の曲線の複数の集合が同じテクスチャで表される場合に言える)。これは、必要な場合に、望むとおりに達成されうる。好ましい一実施形態では、レンダリングされる入力曲線(形状)に対する制御点の凸包を覆うプリミティブが、このことを保証しようとして生成される。(必要ならば、例えば、2つの端点のうちの1つが、凸包の一部でない場合に、入力曲線(形状)は、2つの端点の間の直線が必ず凸包の一部となるように2つに分割されうる。
【０１４５】
次いで、生成されたプリミティブは、生成されたサンプリング点およびフラグメントに合わせてラスター処理され、曲線を表すテクスチャが、当技術分野で知られているように、プリミティブサンプリング点(および/またはフラグメント)位置に対応するテクスチャ内のサンプリング位置によって1つまたは複数のプリミティブのそれぞれのサンプリング点(および/またはフラグメント)に適用される。(上述のように、テクスチャは、好ましくは、双線形フィルタリングなどの適切なテクスチャフィルタリングプロセス、好ましくは双線形フィルタリングを使用して、サンプリングされる。)
【０１４６】
次いで、サンプリングされたテクスチャ値が注目する曲線(つまり、描画されるテクスチャが表す複数の曲線のうちの特定の曲線)に対し設定された閾値と比較され、それに応じて対応する(複数の)サンプリング位置および/または(複数の)フラグメントが保持されるか、または破棄される。
【０１４７】
この「比較して破棄する」操作は、注目するグラフィックス処理システムに望ましい、また好適な方法で実行されうる。
【０１４８】
例えば、プログラム可能なフラグメントシェーダーハードウェアを備えるグラフィックス処理システムでは、条件付き破棄テストが注目する曲線の閾値に設定された(例えば、(gl_FragColor.a<閾値)が真ならば破棄)、比較および条件付き破棄ルーチンを使用することが可能であり、また好ましくは使用する。
【０１４９】
固定機能ハードウェアを有するグラフィックス処理システムでは、サンプリングされたテクスチャ値を比較して、曲線の外側にあるサンプリング点を破棄するためにアルファテストを使用することが可能であり、また好ましくは使用する。例えば、アルファテストに対する比較アルファ値は、曲線の閾値に設定することが可能であり、これにより、その曲線の外側にあるサンプリング点および/またはフラグメントを破棄することができる。
【０１５０】
この目的のためにアルファテストを使用するときに、アルファテストが描画コール全体について固定された比較値、例えば、0.5と突き合わせて実行されなければならない場合(当技術分野で知られているように、典型的にはありうることであるが)、注目する曲線に対する実際の閾値(描画コールに対するアルファテストについて設定されている値に等しくない場合もある)と突き合わせて適切にテストするために、サンプリングされたテクスチャ値にバイアスまたはオフセットを加える(および/または差し引く)ことができ、好ましくは加え(および/または差し引き)、そして、アルファテストで曲線の閾値と突き合わせてサンプリングされた値をテストしないが、描画コールに対して設定されているアルファ値と突き合わせてテストするという事実を考慮するようにできる。
【０１５１】
そこで、サンプリングされたテクスチャ値は、好ましくは、注目する曲線の実際の閾値と比較されないという事実を考慮して必要ならば調節される(つまり、実際に、アルファテストで使用されるアルファ値(描画コールについて設定されている(例えば、0.5))に設定するために曲線の閾値が移動されなければならない量と同じ量だけサンプリングされたテクスチャ値を「移動」するために)。
【０１５２】
例えば、閾値が1/3であるが、アルファテストは0.5に設定されている曲線については、それぞれのサンプリングされたテクスチャ値に、(0.5-(1.0/3.0))を加えてから、その値をアルファテストに入力して、サンプリングされたテクスチャ値に適切にバイアスをかけて(オフセットして)、曲線の閾値である1/3ではなく、描画コールのアルファ値である0.5と比較しなければならない。
【０１５３】
特に好ましい一実施形態では、描画される与えられた形状(曲線)は、2つ以上の分離した形状(曲線)に分割され、形状(曲線)のそれぞれの異なる部分は、次いで、(例えば、異なる曲線表現テクスチャまたは同じ曲線テクスチャの異なる部分を使用して)別々にレンダリングされる。
【０１５４】
好ましい一実施形態では、これは、特異点を有する曲線(尖点を含む曲線)によって定義された形状を、その特異点(または複数の特異点)のところで分割するために行われ、これにより曲線(幾何学的図形)の(複数の)特異点のそれぞれの側で別々に形状(曲線)の部分を描画する。この構成により、(以降で考察するように)曲線内の特異点を(複数の)テクスチャ内のテクセルグリッド線上に正確に配置する必要性をなくすことができる。
【０１５５】
(また、テクスチャによって表される曲線が、(1つまたは複数の)特異点を有する場合に、曲線内の(複数の)特異点が、テクスチャのテクセルの中心を結ぶグリッド線上に正確に置かれるようにテクスチャを構成することも可能であろう(好ましい一実施形態では、これが行われる)。これは、特異点の不連続な導関数は、テクセル「グリッド」上にあり、したがって、「特異点」で曲線を分割する必要をなくすことができる。)
【０１５６】
また、例えばレンダリングアーティファクトの数を減らしやすくなるように、レンダリングプロセス用に非常に大きな形状を小さな形状に分割することが望ましい場合もある。
【０１５７】
同様に、ループを含む曲線によって定義された形状などの、自己交差形状を、自己交差しない2つ(またはそれ以上の)形状に分割し、次いで、別々に描画(レンダリング)することで、そのような形状に対する本発明の技術を使用することを容易にすることが可能であろう。
【０１５８】
特に好ましい一実施形態では、それぞれが複数の異なる曲線および/または与えられた曲線の複数の異なる部分を表す複数の異なるテクスチャが生成され、格納される。次いで、描画される与えられた形状(曲線)に対し、その形状(曲線)に最も適しているテクスチャが識別され、選択され、形状(曲線)をレンダリングするために使用されうる。テクスチャ内の曲線の好適な範囲を表すことにより、ほとんど何でもよいと言える任意の湾曲形状をレンダリングすることが可能である。
【０１５９】
実際、出願人は、描画することが望まれる可能性のあるすべてではないとしてもほとんどの曲線セクションは、実際に、いくつかの曲線族のうちの1つに分類され、したがって、比較的少数のテクスチャを使用してそもそも描画したい曲線のすべてではないとしても大半を表すことが可能であることを認識している。
【０１６０】
好ましい一実施形態では、複数の異なる曲線の複数の集合(それぞれのそのような集合は本発明の方法で2つ以上の曲線を表す)は同じテクスチャマップ内に格納される。これは、例えば、テクスチャ内の曲線の集合を空間的に分離し、次いで、注目する曲線の集合についてテクスチャ内の適切な領域をサンプリングすることにより行われうる。
【０１６１】
本発明が使用される場合、好ましくは、滑らかな曲線を表す1つまたは複数のテクスチャが予め生成され、次いで、グラフィックス処理システムで使用できるように適宜格納され、例えば、好ましくは、グラフィックス処理システムが使用する他の(静的)テクスチャマップとともに格納される。次いで、所定のアプリケーションが、注目する滑らかな曲線(注目する滑らかな曲線によって定義された形状)が描画されるときに適用されるテクスチャを呼び出すことができる。
【０１６２】
本発明においてテクスチャで表される滑らかな形状および滑らかな曲線は、好適な、また望ましい、そのような形状および曲線を含みうる。上述のように、特に好ましい一実施形態では、それぞれの滑らかな曲線は、曲線の一次導関数(曲線の経路の一次導関数)が区分的連続である、連続な曲線である。好ましくは、この曲線は、ベジエ曲線、スプライン曲線、および/または円弧でもあるか、またはその代わりにベジエ曲線、スプライン曲線、および/または円弧である。
【０１６３】
同様に、本発明が適用可能である(適用される)滑らかな曲線によって定義された形状は、好適な滑らかな曲線を辺または境界として有する形状とすることができる。したがって、本発明においてテクスチャで表される(またテクスチャを使用してレンダリングされる)滑らかな形状は、曲線の一次導関数(曲線の経路の一次導関数)が部分的連続である、連続な曲線をその辺(境界)として有する任意の形状を含むことができ、また好ましくは含む。好ましくは、形状を定義する(形状の辺を定義する)曲線は、ベジエ曲線、スプライン曲線、および/または円弧である。
【０１６４】
出願人は、さらに、いくつかの曲線族内のすべての曲線が、アフィン変換を使用して「正準曲線」とここでは称される定義済みの、単一の、または基本的な基準曲線の少なくとも一部に変換されうることを認識している。例えば、二次曲線の場合、与えられた二次曲線は、アフィン変換を使用して、基本的な二次曲線y=x2に変換することができ、したがって、これは、二次曲線に使用されうる「正準」曲線である。
【０１６５】
したがって、これにより、単一の曲線、つまり正準曲線に関する情報を使用して、レンダリングのためグラフィックス処理システムによって受け取られる滑らかな形状を定義することができる複数の滑らかな曲線に関する情報を決定することができる。言い換えると、例えば、レンダリングのためにグラフィックス処理システムによって受け取られうる滑らかな形状を定義することができるそれぞれの個別の滑らかな曲線に関してデータを導出または格納しなければならないということはなく、正準曲線に関するデータを導出または格納するだけでよい。次いで、このデータは、「正準曲線」が表す滑らかな曲線の族(集合)に属す個別の滑らかな曲線のそれぞれによって定義された形状をレンダリングするために使用されうる。
【０１６６】
したがって、特に好ましい一実施形態では、複数の基準または「正準」曲線を表す1つまたは複数のテクスチャが生成され、使用される。
【０１６７】
当業者であれば、レンダリングされる形状を定義する所定の入力された滑らかな曲線は、例えば描画される形状を定義する曲線がテクスチャで表されるときに曲線の向きと正確に一致しない場合に、テクスチャで表されテクスチャに格納されるときに対応する滑らかな曲線のプロファイルと正確に一致しないことがあることを理解するであろう。例えば、入力される形状、ひいては曲線は、テクスチャで表されるときに曲線に関して回転されるか、またはスケーリングされうる。これらの場合、テクスチャ内で内接する曲線は、ディスプレイ上に表示されるときに入力形状(曲線)を正しく描画するように、適宜、表示される形状(曲線)上にマッピングされる必要がある。
【０１６８】
このような変換は、好ましくは、アフィン変換を使用して、テクスチャを、描画される形状(曲線)とマッチさせるステップを含むことができる。したがって、好ましい一実施形態では、本発明は、テクスチャを適用する前に、描画される形状(曲線)にマッピングできるようにテクスチャを変換するステップを含む。
【０１６９】
テクスチャで表されるときに(複数の)曲線を描画される形状(曲線)にマッピングするプロセスは、好適な、また望ましい方法で実行できる。好ましい一実施形態では、テクスチャ内で内接する曲線を表示する画像上にマッピングするプロセスは、描画される入力曲線(描画すべき形状を定義する曲線)を定義する制御点に対するテクスチャ座標を計算し、次いで、(例えば、グラフィックスプロセッサの補間ハードウェアを使用して)曲線上でテクスチャ座標を線形補間することにより行われる。
【０１７０】
制御点におけるテクスチャ座標は、望みどおりに決定され、必要ならば異なる種類の曲線に対し異なる方法を使用することもできる。
【０１７１】
例えば、二次曲線の場合、それぞれの入力曲線は、テクスチャ内に格納されている曲線のアフィン変換バージョンだけとすべきである。毎回曲線全体を使用することにより、制御点のそれぞれに対し固定テクスチャ座標が使用され、必要な変換が、サーフェス空間内の制御点と(テクスチャ空間内の)テクスチャ座標との対を作ることにより暗黙のうちに定義されうる。
【０１７２】
三次曲線の場合、曲線は、好ましくは、最初に蛇行曲線、ループ曲線、尖点曲線、「無限遠尖点」曲線(つまり、変曲点が無限に遠く離れている尖点を持つ曲線)、退化曲線、または放物線として分類される。放物線は、二次曲線であり、好ましくは、そのようなものとして取り扱われる。退化曲線は、好ましくは、曲線を1つまたは複数の直線に分割する形で取り扱われる。
【０１７３】
他の曲線については、曲線の変曲点(inf10およびinf11)が、好ましくは計算される。次いで、格納されている曲線が、変曲点が常に-1と1にあるように構成された場合、[inf10..inf11]->[-1..1]からの線形変換が計算されうる。こうすることで、入力曲線の始点および終点のパラメータ位置(0および1)は、テクスチャ空間内のそれらの位置に変換されうる。これで、テクスチャが覆う必要のある正準テクスチャ空間内のパラメータ範囲が知られる。
【０１７４】
ループ曲線および蛇行曲線については、次いで、必要なパラメータ範囲を覆うテクスチャ(例えば、最もズームインされたテクスチャ)を見つけるために、格納されているテクスチャが探索される。(これは、尖点および無限遠尖点曲線には必要ない。)
【０１７５】
次いで、格納されている曲線(変曲点が-1と1にある)は、好ましくは、変曲点を入力曲線の変曲点、inf10およびinf11にマッピングするためにスケーリングし直される。次いで、この変換は、好ましくは、格納されている曲線の制御点に適用され、これにより、適切な変換された制御点位置が得られ、次いで、これは、入力曲線の対応する制御点に対するテクスチャ座標として使用することができ、また好ましくは使用される。
【０１７６】
曲線の複数の集合が1つのテクスチャ内に空間的に詰め込まれている場合、変換をテクスチャ座標に適用してテクスチャの正しい(空間的)部分集合をサンプリングする必要があると思われる。これは、好ましくは、「入力」ボックスを格納されているテクスチャの所望の部分を覆う「ボックス」に変換するために必要なスケーリングおよび平行移動(つまり、[0..1]×[0..1]->[u_1..u_2]×[v_1..v_2]の変換を行う)を計算し、次いで、決定された変換を、曲線がテクスチャ全体を覆っているかのように計算されているテクスチャ座標に適用することにより実行される。
【０１７７】
上記から理解されるように、本発明の好ましい一実施形態では、グラフィックス処理システムは、表示するためレンダリングされる滑らかな曲線によって定義される入力形状(つまり、滑らかな曲線をその辺(境界)として有する)を受け取る。次いで、グラフィックス処理システムは、レンダリングされる形状を定義する曲線に対応する曲線を表すテクスチャを識別し、テクスチャで表され、定義されているような曲線と一致するために必要な、レンダリングされる形状を定義する曲線への必要なマッピングまたは変換を導出し、次いで、本発明の方法で、導出された必要な変換またはマッピングを使用して、レンダリングされる形状を定義する曲線に対応する曲線を表すテクスチャを使用して形状をレンダリングする。
【０１７８】
上記から理解されるように、本発明では、テクスチャ内でその辺または境界として定義されている滑らかな曲線を有する形状を効果的に描画することができる(曲線の一方の側にある点は、曲線の他方の側にある点と異なる描画がなされるからである)。したがって、本発明は、関連する曲線を辺または境界として有する、および/または関連する曲線を等高線または境界線として有する形状をレンダリングするために効果的に使用することができる(つまり、曲線の異なる側にある点は異なる描画となるように)。
【０１７９】
実際、本発明は、形状の辺を定義する(表す)曲線のいずれかの側にある点を識別するために使用することができ、これにより、形状を効率よく描画することができる。したがって、本発明で使用されるテクスチャは、レンダリングされる形状の辺または等高線を定義する曲線を表すものとみなせる。
【０１８０】
したがって、本発明は、辺または等高線曲線の一次導関数が区分的連続である、連続な辺および/等高線曲線を有する(滑らかな)形状(つまり、本発明を使用してレンダリングできる滑らかな曲線によって定義された形状)をレンダリングするために使用されうる。
【０１８１】
(本発明のテクスチャおよび技術は、もちろん、曲線それ自体を実際に描画するためにも、それが望ましいのであれば、曲線それ自体も定義するので、使用可能であろう。)
【０１８２】
特に好ましい一実施形態では、本発明のさまざまな機能は、表示デバイスのフレームバッファに書き込まれるデータを生成して出力する単一のグラフィックス処理プラットフォーム上で実行される。
【０１８３】
本発明は、「パイプライン化された」構成を有するレンダラーなど、任意の形態または構成のレンダラーに適用可能である(この場合、レンダラーは、レンダリングパイプラインの形態をとる)。好ましい一実施形態では、これは、ハードウェアグラフィックスレンダリングパイプラインに適用される。本発明のさまざまな機能および要素などは、例えば、好ましくは、適切な機能ユニット、処理ロジック、プロセッサ、マイクロプロセッサ装置などにより必要に応じて実装されうる。
【０１８４】
本発明は、即時モードレンダリング、遅延モードレンダリング、タイルベースレンダリングなど、すべてのレンダリング形式に適用可能である。好ましい一実施形態では、これは、遅延モードレンダリングおよびタイルベースレンダラーにおいて、また遅延モードレンダリングおよびタイルベースレンダラーのために使用される。
【０１８５】
上記から理解されるように、本発明は、もっぱらというわけではないが、3Dグラフィックスプロセッサおよび処理デバイスに特に適用可能であり、それに応じて、本明細書で説明されている本発明の複数の態様のうちの1つまたは複数の態様の装置を含む、または本明細書で説明されている本発明の複数の態様のうちの1つまたは複数の態様に従って動作する、3Dグラフィックスプロセッサおよび3Dグラフィックス処理プラットフォームにも拡大適用される。上述の特定の機能を実行するためにハードウェアが必要であることを前提条件とすると、そのような3Dグラフィックスプロセッサは、他の何らかの方法で、3Dグラフィックスプロセッサが備える、通常の機能ユニットなどの1つまたは複数またはすべてを備えることができる。
【０１８６】
本発明は、同様にして、2Dグラフィックスプロセッサおよび2Dグラフィックス処理にも拡大適用される。
【０１８７】
本発明は、レンダリングすることを目的として滑らかな曲線および滑らかな形状を表すためにテクスチャを使用することに特に関連して上で説明されているが、出願人は、本発明の原理が、「等高線」領域を有し、二次元データ構造体で「滑らかな形状」としてさらに効率的に表すことができる他の形式のデータを詰め込むために使用されうることを認識している。
【０１８８】
本発明は、それに応じて、グラフィックスレンダリングのために滑らかな曲線を表すデータ以外のデータを格納し、使用するために本発明の原理を使用することにも拡大適用される。
【０１８９】
したがって、本発明の他の態様によれば、2つ以上の曲線の位置に関係する情報を格納するための二次元データ構造体を生成する方法が提供され、この方法は、
2つ以上の曲線の位置を表す二次元領域内の選択されたサンプリング位置の配列に対する値の集合を含む二次元データ構造体を、
データ構造体中に現れるときにデータ構造体が表す第1の曲線の一方の側に置かれているデータ構造体が表す領域内の位置から取られたサンプルが第1の閾値より小さいサンプリングされた値を返すように、またデータ構造体内のその曲線の他方の側に置かれている位置から取られたサンプルが第1の閾値より大きいサンプリングされた値を返すように、またデータ構造体内に現れるときにデータ構造体が表す第2の曲線の一方の側に置かれているデータ構造体内の位置から取られたサンプルが異なる第2の閾値より小さいサンプリングされた値を返すように、またデータ構造体内のその第2の曲線の他方の側に置かれている位置から取られたサンプルが第2の閾値より大きいサンプリングされた値を返すように配列内のサンプリング位置に対する値を設定することにより、生成するステップを含む。
【０１９０】
同様に、本発明の他の態様によれば、2つ以上の曲線の位置に関係する情報を格納するための二次元データ構造体を生成するための装置が提供され、この装置は、
2つ以上の曲線の位置を表す二次元領域内の選択されたサンプリング位置の配列に対する値の集合を含む二次元データ構造体を、
データ構造体中に現れるときにデータ構造体が表す第1の曲線の一方の側に置かれているデータ構造体が表す領域内の位置から取られたサンプルが第1の閾値より小さいサンプリングされた値を返すように、またデータ構造体内のその曲線の他方の側に置かれている位置から取られたサンプルが第1の閾値より大きいサンプリングされた値を返すように、またデータ構造体内に現れるときにデータ構造体が表す第2の曲線の一方の側に置かれているデータ構造体内の位置から取られたサンプルが異なる第2の閾値より小さいサンプリングされた値を返すように、またデータ構造体内のその第2の曲線の他方の側に置かれている位置から取られたサンプルが第2の閾値より大きいサンプリングされた値を返すように配列内のサンプリング位置に対する値を設定することにより、生成するための手段を備える。
【０１９１】
本発明のさらに他の態様によれば、2つ以上の曲線の位置に関係する情報を格納するための二次元データ構造体が構成され、この二次元データ構造体は、
二次元領域内の選択されたサンプリング位置の配列に対する値の集合を含み、
配列内のサンプリング位置に対する値は、データ構造体中に現れるときにデータ構造体が表す第1の曲線の一方の側に置かれているデータ構造体が表す領域内の位置から取られたサンプルが第1の閾値より小さいサンプリングされた値を返すように、またデータ構造体内のその曲線の他方の側に置かれている位置から取られたサンプルが第1の閾値より大きいサンプリングされた値を返すように、またデータ構造体内に現れるときにデータ構造体が表す第2の曲線の一方の側に置かれているデータ構造体内の位置から取られたサンプルが異なる第2の閾値より小さいサンプリングされた値を返すように、またデータ構造体内のその第2の曲線の他方の側に置かれている位置から取られたサンプルが第2の閾値より大きいサンプリングされた値を返すように設定される。
【０１９２】
当業者であれば理解するように、本発明のこれらの態様および実施形態は、適宜、本明細書で説明されている本発明の好ましいオプションの機能の1つまたは複数あるいはすべてを備えることができ、好ましくは備える。したがって、例えば、データ値は、好ましくは、使用される特定のデータサンプリングスキームに合わせて手直しされる。同様に、曲線は、好ましくは、データ構造体におけるその位置で重なり合わないようにデータ構造体内に配置され、また好ましくは上述の形態の(滑らかな)曲線である。データ構造体は、好ましくはグラフィックステクスチャである。
【０１９３】
当業者であれば、さらに、本発明の説明されている態様および実施形態はすべて、適宜、本明細書で説明されている好ましい、およびオプションの機能の1つまたは複数あるいはすべてを備えることができ、好ましくは備えることを理解するであろう。
【０１９４】
本発明による方法は、少なくとも部分的にはソフトウェアを使用して、例えばコンピュータプログラムを使用して実装されうる。そのため、他の態様から見たときに、本発明は、データ処理手段にインストールされたときに本明細書で説明されている方法を実行するように特に適合されたコンピュータソフトウェア、データ処理手段上でプログラム要素が実行されたときに本明細書で説明されている方法を実行するコンピュータソフトウェアコード部分を含むコンピュータプログラム要素、およびデータ処理システム上でプログラムが実行されたときに本明細書で説明されている1つまたは複数の方法のすべてのステップを実行するように適合されたコード手段を含むコンピュータプログラムを提供することがわかる。データプロセッサは、マイクロプロセッサシステム、プログラマブルFPGA(フィールドプログラマブルゲートアレイ)などとしてよい。
【０１９５】
本発明は、さらに、データ処理手段を備えるグラフィックスプロセッサ、レンダラー、またはマイクロプロセッサシステムを動作させるために使用されたときに前記データ処理手段と併せて前記プロセッサ、レンダラー、またはシステムに本発明の方法のステップを実行させるそのようなソフトウェアを含むコンピュータソフトウェアキャリアにも拡大適用される。このようなコンピュータソフトウェアキャリアは、ROMチップ、CD ROM、またはディスクなどの物理的記憶媒体とすることが可能であるか、またはケーブル上の電子信号、光信号、または衛星もしくは同様のものなどへの無線信号などの信号とすることが可能である。
【０１９６】
さらに、本発明の方法のステップすべてが、コンピュータソフトウェアによって実行される必要はないことは理解されるであろうし、したがって、さらに広い観点から、本発明は、コンピュータソフトウェア、および本明細書で説明されている方法の複数のステップのうちの少なくとも1つを実行するためにコンピュータソフトウェアキャリア上にインストールされたそのようなソフトウェアを提供する。
【０１９７】
したがって、本発明は、コンピュータシステムとともに使用するためコンピュータプログラム製品として適宜具現化されうる。そのような実装は、コンピュータ可読媒体、例えば、ディスケット、CD-ROM、ROM、またはハードディスクなどの、有形の媒体上に固定された、あるいは限定はしないが、光またはアナログ通信回線を含む有形の媒体上で、あるいは限定はしないが、マイクロ波、赤外線、または他の伝送技術を含む無線技術の無形の手段を使用して、モデムまたは他のインターフェイスデバイスを介して、コンピュータシステムに伝送可能な、一連のコンピュータ可読命令を含むことができる。これら一連のコンピュータ可読命令は、本明細書ですでに説明されている機能の全部または一部を具現化する。
【０１９８】
当業者であれば、このようなコンピュータ可読命令は、多くのコンピュータアーキテクチャまたはオペレーティングシステムとともに使用するために多くのプログラミング言語で作成されうることを理解するであろう。さらに、このような命令は、限定はしないが半導体、磁気、または光を含む、現在の、または将来のメモリ技術を使用して格納されるか、または、限定はしないが光、赤外線、またはマイクロ波を含む、現在の、または将来の通信技術を使用して伝送されうる。このようなコンピュータプログラム製品は、印刷または電子文書を添付した取り外し可能媒体、例えばシステムROMまたは固定ディスク上のコンピュータシステムにプリインストールされている、例えば市販ソフトウェアとして配布されるか、あるいはサーバーまたはネットワーク、例えばインターネットまたはワールドワイドウェブ上の電子掲示板から配布されうることが考えられる。
【０１９９】
次に、本発明の多数の好ましい実施形態について、付属の図面を参照しつつ、例のみを使って説明する。
【図面の簡単な説明】
【０２００】
【図１】本発明で使用されるテクスチャにおける滑らかな曲線の表現を示す略図である。
【図２】図1の滑らかな曲線に使用されるテクセル値の導出の一実施形態を示す略図である。
【図３】単一のテクスチャマップ内で複数の滑らかな曲線を表すテクスチャの格納を示す略図である。
【図４】図1のテクスチャにおける曲線の等高線領域の拡大されたセクションを示す略図である。
【図５】図1に示されているテクスチャなどのテクスチャの、グラフィックスプリミティブへの適用を示す略図である。
【図６】本発明の一実施形態で表示する滑らかな曲線のレンダリングを示す略図である。
【図７】本発明の一実施形態におけるグラフィックステクスチャにおける尖点を含む曲線の表現を示す略図である。
【図８ａ】本発明による単一のテクスチャへの2つの滑らかな曲線の詰め込みを示す略図である。
【図８ｂ】図8aに示されているテクスチャにわたってテクセル値がどのように変化するかを示す略図である。
【発明を実施するための形態】
【０２０１】
上述のように、本発明の基本的前提条件は、曲線の一方の側でテクスチャをサンプリングすることで、特定の閾値より低いサンプリングされたテクスチャ値が得られ、曲線の他方の側でテクスチャをサンプリングすることで、特定の閾値より大きいサンプリングされたテクスチャ値が得られるように、滑らかな曲線をテクスチャで表すというものである。
【０２０２】
説明を目的として、最初にこれの原理およびテクスチャを生成する原理を単一の滑らかな曲線に関して説明し、次いで、本発明による単一のテクスチャへの2つ以上のそのような滑らかな曲線の詰め込みを説明する。
【０２０３】
図1は、滑らかな曲線1を表すためのそのようなテクスチャの構成を示している。
【０２０４】
図1a)は、低い分解能での全体的なテクスチャを示し、基本的に、曲線1のそれぞれの側へのテクスチャ位置が異なるテクスチャ値に設定され、異なるテクスチャ値を返す原理を例示している。図1b)は、テクスチャ内に現れるときの曲線1の線の周りにおける図1a)のテクスチャの拡大図であり、特に、テクスチャ内に現れるときの曲線1の付近でテクセル値がどのように変化するかを示している。
【０２０５】
図1に示されているように、曲線1に内側にあるテクセルは、「0.5」より大きい値に設定され(値「1」は、図1に白色で示されている)、曲線1の外側にあるテクセルは、「0.5」より小さい値に設定される(値「0」は、図1に黒色で示されている)。したがって、テクスチャ内のサンプリング位置が検索される場合、サンプリングされた位置について返されたテクスチャ値は、サンプリングされた位置が曲線1の内側にあるかどうかを判定するために使用されうる。実際には、曲線1に対する閾値は、0.5とみなすことができる。
【０２０６】
(図1に示されているテクスチャは、「反転した」または逆の曲線または形状を描画するために等しく使用することができ、「黒色」は、曲線の「内側」にあるものとして処理され、「白色」は、曲線の外側にあるものとして処理されるということが理解できるであろう。実際には、好ましい一実施形態では、グラフィックスシステムは、このことを実行できるように構成される。これは、例えば、サンプリングされたテクスチャ値を、曲線に対する閾値の2倍から減算し(つまり、2*threshold(この場合には、1.0を与える)-sampled_texture_valueを行い)、次いで、その値と閾値とを比較することにより実行できる(これは、実際には、テクスチャの意味を「ひっくり返す」))。
【０２０７】
図1に示されているテクスチャは、8ビットテクスチャである(つまり、それぞれのテクセル値を表すために8ビットを使用する)。それぞれのテクセルには、単一の値が関連付けられている(したがって、テクスチャは、好都合なことに、単一チャネルテクスチャとすることができる)。
【０２０８】
この構成では、テクスチャ内のテクセルは、0から1(含む)までの範囲に収まる値を持つことができ、曲線の等高線に対する閾値は、0.5に設定される。他の構成も、もちろん、可能である。
【０２０９】
図4は、図1に示されているテクスチャに格納されている曲線1の曲線等高線領域26の拡大されたセクション24の概略を示している。この図からわかるように、等高線26の周りのテクセル値は、曲線の閾値より高い値によって表される曲線の側にある曲線の等高線26から遠い位置にあるテクセル28より高い(軽い)値を有する、曲線の等高線26に近い位置にあるいくつかのテクセル27を含む(および逆もまた同様に)、曲線の等高線のいずれかの側に合わせて変化する。これは、以下でさらに説明されるように、曲線が双線形サンプリングされる場合、所望のテクスチャ値が返されることを保証するためである。
【０２１０】
上述のように、本発明では、図1に示されている構成の2つ以上の滑らかな曲線の表現が、単一のテクスチャに詰め込まれる(つまり、テクセルの同じ集合を使用して表される)。
【０２１１】
出願人は、特に、テクスチャで表される与えられた曲線の経路または直線の周り、およびその経路または直線にそった位置にあるテクセルの正確な値は、テクスチャがサンプリングされるときに曲線の位置を正確に示すために重要である場合があるが、曲線の経路から離れている、つまり、曲線の内側に完全に入っているか、外側に完全に出ているかのいずれかのテクセルの値は、それらのテクセルの値がすべて曲線の閾値より上にあるか(例えば、曲線の外側にある場合、または逆も同様に)、またはすべてその閾値の下にある(例えば、曲線の内側にある場合、または逆も同様に)限り、それほど重要でないことを認識している。これは、これらの要件が満たされている限り、曲線から離れているテクセルは、テクスチャ内の他の曲線の経路(線)の位置を示す情報などの追加情報、特にそのような位置を示す情報が得られるように値を変化させることができることを意味している。
【０２１２】
図8aは、これを例示し、また単一のテクスチャ(同じテクセル空間)82内に詰め込まれた2つの滑らかな曲線80、81の表現を示している。
【０２１３】
図8aで使用されている異なる陰影は、テクスチャ内の異なるテクセル値を表す。テクスチャ82に対し許容されるテクセル値は、0から1までの範囲の値である。
【０２１４】
図8aに示されているように、テクスチャで表されている第1の曲線80は、第1の低い閾値、すなわちこの実施形態では1/3を有し、第2の曲線81は、高い閾値、すなわちこの実施形態では2/3を有する。
【０２１５】
これは、とりわけ、一定範囲のテクセル値を使用し、テクセル値が曲線80に対する閾値より下に来ない場合に(下に来ると、曲線80を描画するためテクスチャをサンプリングするときに誤った値が読み取られる可能性がある)(また逆もまた同様に)、曲線81の経路の位置を表すことが可能であることを意味している。(実際には、一定範囲のテクセル値は、それらのテクセル値が他の曲線に対する閾値の間違った側に入らない限り、それぞれの曲線80、81の経路を表すために使用されうる)。
【０２１６】
図8bは、これを例示し、図8aで左から右へ示されている直線a-aにそってテクセル値が進行する状況を示している。
【０２１７】
図8bに示されているように、この実施形態において、両方の滑らかな曲線の外側にあると考えられる領域83内のテクセル値は、両方の曲線80、81の閾値より低い(つまり、実際には、下側の閾値曲線80の閾値1/3より低い)値に設定される。
【０２１８】
次いで、曲線80の線の周りの「遷移」領域84において、テクセル値は、テクスチャがサンプリングされるときに曲線80の位置をより正確に示すように曲線80に対する閾値1/3を中心として変化する。しかし、図8bに示されているように、これらのテクセル値は、曲線81に対する閾値2/3を常に超えない(曲線81を描画することを目的として値をサンプリングするときに誤った読み取り値が生じるのを回避するため)。
【０２１９】
これは、実際には、図9に示されているように、曲線80の線を表すために利用可能なテクセル値の範囲が0から2/3であることを意味している。これは、利用可能な全テクセル値範囲0〜1の2/3であり、したがって、実際には、テクスチャ内に第2の曲線81が存在するので0.6ビットの精度が失われる。しかし、その一方で、2つの曲線を定義するために必要なテクセルの数は、少なくなる(2つの曲線が、異なるテクスチャマップで定義されるとすれば、2倍の数のテクセルが必要になるから)。
【０２２０】
次いで、2つの曲線80、81の間に、つまり、この実施形態における第1の曲線80の内側、および第2の曲線81の外側に領域85が存在する。この場合、この領域内にあるテクセル値は、2つの曲線の閾値の間にある値に設定され、したがって、これらのテクセルは、サンプリングされたときに、2つの曲線に関するそれらの位置を適切に示すことになる。
【０２２１】
その後、テクスチャ内の曲線81の経路を示すために使用される「遷移」領域86に到達する。ここでもまた、この領域において、テクセル値は、テクスチャがサンプリングされるときに曲線81の線の位置をより正確に示すために一定範囲の値にわたって変化する。しかし、ここでもまた、この領域86内の変化するテクセル値は、曲線80の閾値の下に来ないように制約される。したがって、実際には、図8bに示されているように、領域86内の曲線81の線の位置を示すために利用可能なテクセル値の範囲は、1/3から1である。
【０２２２】
最後に、この実施形態において、曲線80および81の両方の内側にあると考えられる領域87に到達する。この場合、その領域内のテクセル値は、曲線80の閾値と曲線81の閾値の両方より高い値に単純に設定され、テクスチャがサンプリングされるときにそれらの位置がそれぞれの曲線の内側にあることを適切に示す。
【０２２３】
曲線80、81は、さらに、図8aに示されているように、テクスチャ内に現れるときの曲線80、81の線(経路)の周りのテクセルが、互いに重なりは合わない形でテクスチャ82内に詰め込まれる。これにより、さらに、一方の曲線の表現が他方の曲線のサンプリングに影響を及ぼすのを回避しやすくなる。
【０２２４】
図8aおよび8bから、この実施形態では、それぞれの曲線に異なる閾値レベルを与え、それぞれの曲線の閾値に関して適切に値が付けられるようにテクセル値を設定し、2つの曲線の線の位置がテクスチャ内で互いに実際に重なり合わないようにすることで、2つの曲線80および81が同じテクスチャ空間内に格納されることがわかる。特に、テクセル値が曲線の閾値と不適切に交差しない限り曲線をテクスチャ内で互いの上に載せることが可能であり、実際に曲線の線(経路)を定義するテクセルは、互いに重なり合わない。
【０２２５】
図8aおよび8bに例示されている構成では2つの曲線80、81をテクスチャ内に格納するが、もちろん、3つ以上の曲線を同様にして1つのテクスチャ内に格納し、例えば、異なる範囲のテクセル値および異なる曲線閾値を使用することも可能であろう。
【０２２６】
また、固定小数点形式のテクスチャではなく浮動小数点形式のテクスチャを使用することも可能であろう。実際、この浮動小数点形式でmビットの仮数およびeビットの指数を有する浮動小数点テクスチャの場合、それぞれの曲線の閾値を1.5×2nに設定することにより、最大2e-2個までの曲線をテクスチャ内で互いの上に格納することができ、それぞれmビット程度の分解能を持つ(また、テクスチャ内の曲線の線(の周り)を表すテクセルの重なり合わない要件を満たすことを前提条件とする)。(言い換えると、浮動小数点テクスチャを使用する場合に閾値を指数範囲内の中間値に設定することにより、それぞれの曲線の線を表すために、完全な仮数精度が維持されうる。)
【０２２７】
この実施形態で使用されるテクスチャは、以下でさらに説明されるように、双線形フィルタリングを使用してサンプリングするように最適化されている。
【０２２８】
(当技術分野で知られているように、双線形フィルタリングは、テクスチャマップのテクセルに割り当てられている値からテクスチャマップ内の位置に対する値を補間する一方法である。これは、サンプリング位置に最も近い4つのテクセルと重心座標から導出される係数との凸結合
bilinear(s, t)=(1-s) (1-t) texeli,j+s(1-t) texeli+1,j+(1-s) t texeli,j+1+s t texeli+1,j+1
とみなせるが、ただし、(s, t)は、注目するサンプリング位置の座標であり、texeli,jなどは、その位置に最も近い4つのテクセルである。)
【０２２９】
上述のように、出願人は、双線形フィルタリングを使用してサンプリングするため曲線を表すテクスチャを最適化することにより、テクスチャが使用されるときのサンプリングプロセスは、注目する曲線の表現を改善することができ、また改善することを認識している。
【０２３０】
双線形フィルタリングとともに使用するテクスチャの最適化は、この実施形態では、テクスチャが表すそれぞれの曲線について、実際にテクスチャ内の曲線の等高線の位置を変数として示すテクセルのテクセル値を含む費用関数を設定し、次いで、その費用関数の最小化を試み、それに応じてテクセル値を選択するという形で実行される。
【０２３１】
この実施形態では、この費用関数は、特定の曲線の経路(線)を曲線の経路とそれぞれのテクセル中心を結ぶ直線との一連の交わりに分け、次いで曲線と2つのテクセル中心を結ぶ直線との交わり点で所望の曲線閾値が得られるようにそれぞれのテクセル値を調節することを試みることにより生成される。
【０２３２】
図2は、これを例示し、滑らかな曲線10が通過するテクセル11の例示的なグリッドを示している。テクセル12、13が考慮される場合、理想的には、それぞれのテクセル値は、曲線10とテクセル12、13を結ぶ直線15とが交わる点14でテクスチャが双線形サンプリングされる場合に、サンプリングされたテクスチャ値は、曲線に対する閾値テクスチャ値(例えば、1/3としてよい)と正確に等しくなければならないように設定されるべきである。
【０２３３】
しかし、それぞれのテクセルは、注目する曲線に対しこの方法で最適化される必要のある値を持つ複数のテクセル対に関与することがあり、したがって、テクセル値をテクセルの与えられた対に関して所望の結果を生み出す正確な値に設定することは必ずしも可能でない。
【０２３４】
したがって、曲線の経路を表すテクセルに使用するテクセル値は、関連するそれぞれのテクセル対(実際には、注目する曲線の経路(線)をまたぐそれぞれのテクセル対(実際には、これはまた、曲線の閾値を有するテクスチャ内の等高線をまたぐそれぞれのテクスチャ対))に関して決定された局所的費用関数の総和である大域的費用関数を使用し、次いで、大域的最適化法を使用して、大域的(全体的)誤差(注目する曲線の)を最小にする構成を見つけようとし、使用する最適なテクセル値を見つけることを試みることにより決定される。
【０２３５】
それぞれの個別テクセル対に対する局所的費用関数(2つのテクセル値の調節)は、この実施形態では、以下のような一連の相互に関連する最適化問題とみなされる。
【０２３６】
第1に、上述のように、目的の1つは、テクセルの対を結ぶ直線15上の曲線の実際の交差点14とテクセル値によって決定されるような交差点(つまり、テクセル12、13の双線形サンプリング値から、定義されている曲線閾値に等しいサンプル値(この場合1/3)が得られる直線15上の点)との間の差を最小化することである。この因子は、実際の交差点位置とテクセル値によって示されるような位置との間の誤差を費用関数に含めることにより考慮される。
【０２３７】
第2に、費用関数は、テクセル値の結果として得られる差が、曲線10がテクセルの対を結ぶ直線15と交差する角度θを反映するように構成される。これは、曲線10が直線15に垂直な場合には、テクセル値12、13の間の差は、それが取り得る(注目する曲線に対し利用可能な値の範囲が与えられる)最大値であり(この場合は2/3である)、曲線10が直線15とほとんど平行である場合には、テクセル値12、13の間の差は、0に近づくことを保証することを試みるためである。これは、テクセルに、利用可能なテクセル値の範囲全体(この場合は0から2/3)が割り当てられる(使用する)ことを保証するのに役立ち、これにより、より高い分解能を持つ曲線を定義することができる。
【０２３８】
この実施形態では、これは、曲線10と費用関数内の因子としてテクセルを結ぶ直線15との間の角度θの正弦を使用することにより達成される。
【０２３９】
最後に、曲線がテクセルの間の直線15にほとんど平行な場合に曲線10に対する交差点14を正確に位置決めすることはあまり重要でない(テクスチャがサンプリングされるときの交差点の誤差は、この場合、あまり悪影響を及ぼさないからである)。これは、この実施形態では、交角θの正弦の二乗に関係する係数を使用して費用関数における辺に重みを付けることにより可能である。
【０２４０】
次いで、この形式で定義されているテクセル値のそれぞれの個別の対に対する費用関数が、考慮されているテクセル値の対すべてにわたって総和され、注目する曲線に対する「大域的」つまり全体的な費用関数が得られる。
【０２４１】
この結果、この実施形態において、
【０２４２】
【数１】
2010092478.tif 000003
【０２４３】
の形式の費用関数が得られ、
ただし、式中、
w1およびw2は、例えば変化する最適化をテストするため繰り返し、必要に応じて選択され、変更できる重み値であり、
iは、費用関数がテストされる際のテクセル対であり、
Nは、費用関数が評価され、総和される際に取られるテクセル対の総数であり、
θiは、i番目のテクセル対に対する曲線の交角であり、
texeliaおよびtexelibは、i番目のテクセル対のテクセルに対するそれぞれのテクセル値であり、
wantedcrosspointiは、真の曲線が交差するテクセルのi番目の対を結ぶ直線上の点であり、
bilinearcrosspointiは、テクセルのi番目の対を結ぶ直線上の点であり、与えられたテクセル値を使用した双線形フィルタリングの結果は、定義されている閾値曲線値(この場合は、0.5)を返し、したがって、
【０２４４】
【数２】
2010092478.tif 000004
【０２４５】
となる。
【０２４６】
この式は、bilinearcrosspointiについてthreshold=bilinear(bilinearcrosspointi,0)を解くことにより導出される。
【０２４７】
実際には、この費用関数において、係数
|wantedcrosspointi-bilinearcrosspointi|
は、テクセル値がサンプリングされるときに決定されるような曲線の交差点と曲線の求められている交差点との間の差の絶対値を表し、
係数
|texelib-texelia|-sinθi
は、利用可能なテクセル値の全範囲が使用されることを保証し(解が割り当てられているすべてのテクセル値を閾値(この場合0.5)に押しつぶしてしまうのを防ぐ)、
係数
sin2θi
は、曲線がテクセル間の直線にほとんど平行である辺が費用関数において小さい重みを有するようにする(および逆もまた同様)。
【０２４８】
次いで、この費用関数は、テクスチャ内の曲線の等高線の位置を示すそれぞれのテクセル対(実際には、この実施形態では等高線をまたぐ(わたる)テクセル対)に使用する最適なテクセル値texelia、texelibを見つけるために最小化される。この実施形態では、これは、シミュレーテッドアニーリング法を使用して行われるが、他の最適化アルゴリズムも、必要ならば使用可能である。次いで、決定されたテクセル値は、滑らかな曲線を表すグラフィックステクスチャ内に格納される。
【０２４９】
次いで、これは、テクスチャが表すそれぞれの滑らかな曲線について繰り返され、これにより、テクスチャ内のそれぞれの曲線の閾値等高線を示すテクセルに対するテクセル値が、双線形フィルタリングを使用したサンプリング用に適宜最適化される。
【０２５０】
この実施形態では、テクスチャ内のそれぞれの曲線に対する経路(閾値等高線領域)は、重なり合わないため、どのようなテクセルが与えられようとそのテクセルがテクスチャ内の複数の曲線(閾値等高線)の位置を示すことに関与しえない。これは、テクスチャ内の与えられた曲線の位置(閾値等高線)の最適化が、テクスチャ内の他の曲線(閾値等高線)の位置を示すテクセルに影響を及ぼさないことを意味する。したがって、それぞれの曲線は、独立に最適化されうる。
【０２５１】
ここでもまた、これらの値が与えられた曲線を表すために必要な最小および最大テクセル値範囲内に必ず収まるように、最適化の結果(導出されたテクセル値)をスケーリングし、バイアスする必要がある場合があることに留意されたい。この実施形態では、これは必要な場合に実行される。
【０２５２】
この実施形態では、このプロセスは、異なる滑らかな曲線の複数の集合および/または与えられた滑らかな曲線の複数の部分について繰り返され、これにより、それぞれが複数の異なる滑らかな曲線を表すテクスチャマップの集合を構築する。
【０２５３】
この実施形態においてテクスチャで表される滑らかな曲線は、一次導関数が区分的連続である、連続な曲線を含む。これらは、例えば、ベジエ曲線、スプライン曲線、および/または円弧としてよい。
【０２５４】
1つまたは複数の基準もしくは「正準」曲線を表すテクスチャも、生成され使用される。(上述のように、「正準曲線」は、アフィン変換を使用して与えられた曲線族の中のすべての曲線が変換されうる基準または基本曲線である。)
【０２５５】
この実施形態では、テクスチャマップは、テクスチャ内の曲線の異なる集合を空間的に分離することにより複数の異なる滑らかな曲線の複数の集合および/または滑らかな曲線の部分のテクスチャ表現を格納するために使用されうる。
【０２５６】
図3は、単一の曲線を表すテクスチャの場合にこれを例示しており、また単一のテクスチャ23全体に格納される複数の滑らかな曲線20、21、22などを示している。テクスチャ23の適切な領域をサンプリングすることにより、それで表される滑らかな曲線が描画されうる。同じ構成が、テクスチャのそれぞれのセクション20、21、22などが本発明の方法で複数の曲線を表す場合に使用されうる。
【０２５７】
滑らかな曲線の異なる集合を表すテクスチャを同じテクスチャマップの異なる部分として格納すると、曲線の多数の集合を単一のテクスチャ内に格納することができ、例えば、本発明を使用するときに滑らかな曲線をレンダリングするために必要なテクスチャ変更回数を減らすことができる。
【０２５８】
実際、出願人は、実際にはグラフィックス処理で描画する必要があると思われるすべてではないとしてもほとんどの滑らかな曲線セクションは、比較的少数の曲線族によって表すことができ、したがって、比較的少ないテクスチャを使用してそれらの所望の曲線をすべて容易に表すことが可能であることに気づいた。
【０２５９】
滑らかな曲線の集合を表すテクスチャの集合がこのようにして生成され、グラフィックス処理システムで使用できるように格納された後、テクスチャを使用して、滑らかな曲線によって定義された形状(つまり、滑らかな曲線に対応する曲線を辺(境界)として有する形状)を描画することができる。これは、基本的に、形状が描画されるシーン(表示)領域を覆うプリミティブを生成し、次いで、形状を描画するのに適したテクスチャをプリミティブに適用することにより行われる。
【０２６０】
テクスチャがプリミティブに適用されると、テクスチャ値は、そのプリミティブ内のサンプリング点についてサンプリングされ、サンプリングされたテクスチャ値は、サンプル位置を曲線の内側(つまり、実際には、曲線によって定義された形状の辺または境界の内側)にあるものとして条件付きで描画し(陰影を付け)(サンプリングされたテクスチャ値が曲線の閾値より小さい場合、または逆も同様に)、またはサンプル位置を曲線(形状)の外側にあるものとして破棄する(サンプリングされたテクスチャ値が曲線の閾値以上である場合、または逆も同様に)ために使用される。
【０２６１】
図5は、これを例示しており、またプリミティブ51への曲線50を表すテクスチャの適用の概略を示している。この場合、プリミティブ51の明色領域52は、曲線50の内側に入るものとして描画される。
【０２６２】
次に、この実施形態においてテクスチャを使用して形状をレンダリングするためのプロセスの好ましい一実施形態についてさらに詳しく説明することにする。
【０２６３】
最初に、グラフィックス処理システムが、「滑らかな」形状をレンダリングする必要性を識別する。次いで、通常の方法で、形状が表示される画面領域を覆う1つまたは複数のプリミティブを生成する。この実施形態では、描画される形状の辺を定義する曲線の制御点の凸包を覆う三角形が生成される。
【０２６４】
次いで、これらのプリミティブは、シェーディング用のシェーディングパイプラインに渡されるフラグメントに通常の方法でラスター処理される。(起こりうることだが、プリミティブをラスター処理しても、フラグメントが生成されない場合(プリミティブが表示されるシーンのサンプリング点を実際には覆っていないため)、プロセスはここで停止することができるが、これは、形状が、表示されるシーン内に実際には見えないことを意味する。)
【０２６５】
次いで、描画される形状の辺を定義する滑らかな曲線に対応するテクスチャマップ(またはテクスチャマップの一部)は、当技術分野で知られているように、(複数の)プリミティブが覆うシーン内の1つまたは複数のサンプリング点の位置について滑らかな曲線を表すテクスチャからテクスチャサンプルを取ることにより、1つまたは複数のプリミティブに適用される。この実施形態では、単一のテクスチャルックアップがフラグメント毎に実行される。(他の処理方法も、もちろん、可能である。)
【０２６６】
次いで、それぞれのサンプリングされたテクスチャ値が、注目する曲線について定義された閾値テクスチャ値と比較され、次いで、サンプル位置が、比較の結果に応じて、曲線(したがって形状)の内側に入っているものとして描画(レンダリング)されるか、または曲線の外側にあるものとして破棄される。テクスチャサンプルは、双線形フィルタリング(双線形フィルタリング機能を有効にして)を使用して取られ、このときに、この実施形態では、テクスチャマップが、上述のように、双線形フィルタリングを使用するサンプリングに合わせて手直しされる。
【０２６７】
サンプリングされたテクスチャ値と曲線閾値との比較は、例えば、比較および条件付き破棄テスト(例えば、(gl_FragColor.a<閾値)が真ならば破棄)が注目する曲線に対する閾値に設定されている比較および条件付き破棄ルーチンを使用してプログラム可能なフラグメントシェーダーハードウェアを備えるグラフィックス処理システムで実行されうる。
【０２６８】
固定機能グラフィックスハードウェアでは、サンプリングされたテクスチャ値と曲線閾値との比較は、アルファテストに対する比較アルファ値が曲線閾値(この場合は、例えば1/3)に設定されているグラフィックス「アルファテスト」を使用して実行され、これにより、曲線の外側にあるサンプリング点および/またはフラグメントを破棄するようにできる。
【０２６９】
この目的のためにアルファテストを使用するときに、アルファテストが描画コール全体について固定された比較値、例えば、0.5と突き合わせて実行されなければならない場合(当技術分野で知られているように、典型的にはありうることであるが)、注目する曲線に対する実際の閾値(描画コールに対するアルファテストについて設定されている値に等しくない場合もある)と突き合わせて適切にテストするために、サンプリングされたテクスチャ値にバイアスまたはオフセットが加えられるか、または差し引かれ、そして、アルファテストで曲線の閾値と突き合わせてサンプリングされた値をテストしないが、描画コールに対して設定されているアルファ値と突き合わせてテストするという事実を考慮するようにできる。
【０２７０】
言い換えると、この実施形態では、アルファテストが使用される場合、サンプリングされたテクスチャ値は、注目する曲線の実際の閾値と比較されないという事実を考慮して必要ならば調節され(そういう場合であれば)、これにより、実際、曲線の閾値が、アルファテストで使用されるアルファ値(つまり、描画コールについて設定されているアルファ値)に設定するために移動されなければならない量と同じ量だけサンプリングされたテクスチャ値を「移動」する。
【０２７１】
例えば、閾値が1/3であるが、アルファテストは0.5に設定されている曲線については、それぞれのサンプリングされたテクスチャ値に、(0.5-(1.0/3.0))を加えてから、その値をアルファテストに入力して、サンプリングされたテクスチャ値に適切にバイアスをかけて(オフセットして)、曲線の閾値である1/3ではなく、描画コールのアルファ値である0.5と比較しなければならない。
【０２７２】
この実施形態では、比較および破棄テストに「以上(>=)」テストが使用される。実行後、このテストの結果は、ステンシルバッファに格納され、後の処理パスで曲線を描画するためにシェーディングを適用するときに使用される。(もちろん、曲線テストと同じパスでシェーディングを実行することも等しく可能であろう。)
【０２７３】
当業者であれば理解するように、描画される形状(形状の辺を定義する曲線)が、テクスチャ内に格納されているとおりに曲線と正確に一致しない状況がありうる。この場合、描画される形状(曲線)は、テクスチャ内に格納されるときに曲線にマッピングされなければならず、したがって、曲線を表すテクスチャは適切に適用(サンプリング)できる。同様に、レンダリングされる画像内のサンプリング位置は、曲線を表すテクスチャ内の適切なサンプリング位置にマッピングされなければならず、したがって、ここでもまた、形状(曲線)を正しく描画できる。
【０２７４】
この実施形態では、テクスチャ内で内接する曲線を表示する画像上にマッピングするプロセスは、描画される入力形状の曲線を定義する制御点に対するテクスチャ座標を計算し、次いで、グラフィックスプロセッサの補間ハードウェアを使用して曲線上でテクスチャ座標を線形補間することにより行われる。
【０２７５】
二次曲線の場合、それぞれの入力曲線は、テクスチャ内に格納されている曲線のアフィン変換バージョンだけとすべきである。したがって、この実施形態では、毎回曲線全体が使用され、制御点のそれぞれに対し固定テクスチャ座標が使用され、必要な変換が、サーフェス空間内の制御点と(テクスチャ空間内の)テクスチャ座標との対を作ることにより暗黙のうちに定義されうる。
【０２７６】
三次曲線の場合、曲線は、好ましくは、最初に蛇行曲線、ループ曲線、尖点曲線、「無限遠尖点」曲線(つまり、変曲点が無限に遠く離れている尖点を持つ曲線)、退化曲線、または放物線として分類される。放物線は、二次曲線であり、そのようなものとして取り扱われる。退化曲線は、曲線を1つまたは複数の線に分割する形で取り扱われる。
【０２７７】
他の曲線については、曲線の変曲点(inf10およびinf11)が、計算される。格納されている曲線(テクスチャ)は、変曲点が常に-1と1にあるように構成され、したがって[inf10..inf11]->[-1..1]からの線形変換が計算されうる。こうすることで、入力曲線の始点および終点のパラメータ位置(0および1)は、テクスチャ空間内のそれらの位置に変換されうる。これで、テクスチャが覆う必要のある正準テクスチャ空間内のパラメータ範囲が知られる。
【０２７８】
ループ曲線および蛇行曲線については、次いで、必要なパラメータ範囲を覆うテクスチャ(例えば、最もズームインされたテクスチャ)を見つけるために、格納されているテクスチャが探索される。(これは、尖点および無限遠尖点曲線には必要ない。)
【０２７９】
次いで、選択された格納されている曲線(テクスチャ)(変曲点が-1と1にある)は、変曲点を入力曲線の変曲点、inf10およびinf11にマッピングするためにスケーリングし直される。次いで、この変換は、格納されている曲線の制御点に適用され、これにより、適切な変換された制御点位置が得られ、次いで、これは、入力曲線の対応する制御点に対するテクスチャ座標として使用される。
【０２８０】
曲線の複数の集合が1つのテクスチャ内に空間的に詰め込まれている場合、変換をテクスチャ座標に適用してテクスチャの正しい空間的部分集合(領域)をサンプリングする必要があると思われる。これは、この実施形態では、ボックス[0..1]×[0..1]->[u_1..u_2]×[v_1..v_2]の変換を行うのに必要なスケーリングおよび平行移動を計算し、次いで、変換を、曲線がテクスチャ全体を覆っているかのように計算されているテクスチャ座標に適用することにより実行される。
【０２８１】
図6は、これらのプロセスを例示しており、また描画される形状を定義する曲線を、分類、テクスチャ探索、テクスチャ座標計算、およびレンダリングのステージに通す操作の概略を示している。
【０２８２】
図6に示されているように、描画すべて形状を定義する与えられた滑らかな入力曲線70は、最初にステップa)で分類される。この例では、分類により、曲線を「蛇行曲線」として識別する。
【０２８３】
次いで、システムは、蛇行曲線を表す格納されているテクスチャ71を探索して、入力曲線70と最もよく一致する格納されている蛇行曲線を見つける(ステップb))。この探索では、その曲線が載っているテクスチャ座標(その曲線が載っているテクスチャの領域)および曲線に対する閾値を識別し(そして返さ)なければならない。
【０２８４】
これが完了したら、入力曲線70をテクスチャ71に格納されている曲線にマッピングするために必要なテクスチャ座標計算およびプリミティブ生成が、図6のステップc)で示されているように実行される。
【０２８５】
最後に、入力曲線は、図6のステップd)に示されているように選択されたテクスチャを使用してレンダリングされる。
【０２８６】
この実施形態では、描画される与えられた入力曲線(形状)を個別のセクションに分割し、それぞれのセクションが別々に描画されるようにすることも可能である(例えば、異なるテクスチャまたは同じテクスチャの異なる部分を使用して)。これは、例えば、de Casteljauアルゴリズムを使用して、ベジエ曲線に対し実行されうる。他の好適なアルゴリズムも、もちろん、必要ならば使用可能である。
【０２８７】
この実施形態では、描画される形状(曲線)のこのような分割は、非常に大きな形状を描画するときに、小さな形状に分割してレンダリングアーティファクトを減らすために実行される。同様に、ループを含む曲線によって定義された形状などの、自己交差形状は、自己交差しない2つ(またはそれ以上の)形状に分割され、次いで、形状が別々に描画(レンダリング)される。
【０２８８】
描画される曲線(形状)のこのような分割は、さらに、特異点(尖点)を有する曲線をその特異点のところで分割して、レンダリング誤差を引き起こす曲線内の特異点を回避するために実行される。
【０２８９】
(曲線内の特異点の取り扱いを改善するための代替メカニズムとしては、曲線がテクスチャで表されるときに、すべての特異点が、必ず、テクセルを結ぶ水平線と垂直線からなるグリッド上に来るようにする方法がある。図7は、これを例示しており、また尖点の特異点61がテクセルの中心64を結ぶグリッド線62上に置かれるようにテクスチャ63で表される尖点曲線60を示している。
【０２９０】
上述のように、また上記から理解されるように、本発明の方法で滑らかな曲線をレンダリングする結果として、曲線を辺または境界として有する形状を描画することになる(曲線の一方の側にある点は、曲線の他方の側にある点と異なる形で描画(レンダリング)されるからである)。例えば、図8を見るとわかるように、本発明で使用されているテクスチャは、注目する曲線を辺または境界または等高線として有する形状を表すものとみなせる。
【０２９１】
したがって、この実施形態および本発明は、実際に、関連する曲線を辺または境界として有する、および/または関連する曲線を等高線または境界線として有する形状をレンダリングすると考えられる(つまり、曲線の異なる側にある点は異なる描画となるように)。
【０２９２】
この実施形態は、複数の滑らかな曲線および滑らかな形状を表しグラフィックス処理システムでレンダリングするためにテクスチャを使用することに特に関連して上で説明されているが、出願人は、本発明の原理を使用して、類似の方法で類似のデータ構造体に曲線、等高線、および滑らかな形状として表せる他のデータを格納することも可能であることを認識している。
【０２９３】
本発明は、少なくとも好ましい実施形態において、とりわけ、安価な固定機能3Dグラフィックスハードウェア上で、また未修正の既存のハードウェアグラフィックスアクセラレータ上で使用できる滑らかな曲線を辺(境界)として有する形状の効果的なレンダリングを行うための方法およびシステムを実現するということが、上述のことからわかる。これにより、例えば、安価なおよび/または固定機能のグラフィックスハードウェアを使用して新しい曲線レンダリング用APIおよびアプリケーションをハードウェアで高速化することができる。
【０２９４】
したがって、本発明は、「基本的」なグラフィックスハードウェアのみを使用して実装可能である。また、これにより、例えば、滑らかな曲線をレンダリングするための既存の細分割アプローチと比べた場合に、CPU時間がかなり短縮され、レンダリング帯域幅が低減され、したがって、消費電力が小さくなる。
【０２９５】
これは、少なくとも本発明の好ましい実施形態では、滑らかな曲線をグラフィックステクスチャとして表し、次いで、グラフィックステクスチャマッピングを使用して曲線によって定義された形状をレンダリングすることにより実現される。
【０２９６】
さらに、本発明は、これを行うための特に効率的なメカニズムを実現するために、複数のテクスチャベースの滑らかな曲線の記述を単一のテクスチャマップに詰め込み(テクセルの単一の集合を使用して)、これにより、とりわけ、曲線がテクスチャに格納される仕方の効率を高める。こうして、複数の曲線表現が、単一の二次元テクスチャに詰め込まれ、これにより、テクスチャ空間とテクスチャ帯域幅が低減される。
【０２９７】
これは、少なくとも本発明の好ましい実施形態では、それぞれの曲線が曲線の内側または外側を示すための異なる閾値レベルを有するように複数の曲線の表現をテクスチャで構成することにより、好ましくは、それぞれの曲線の線を示すテクセルがテクスチャ内で互いに重なり合わないことを保証することにより実現される。
【符号の説明】
【０２９８】
1  滑らかな曲線
10  滑らかな曲線
11  テクセル
12、13  テクセル
14  交差点
15  直線
20、21、22  滑らかな曲線
23  単一のテクスチャ
24  拡大されたセクション
26  曲線の等高線領域
27、28  テクセル
50  曲線
51  プリミティブ
52  明色領域
60  尖点曲線
61  特異点
70  曲線
71  テクスチャ
80、81  滑らかな曲線
82  単一のテクスチャ(同じテクセル空間)
83  領域
84  「遷移」領域
85  領域
86  「遷移」領域
87  領域
【図２】
2010092478.tif 000005
【図３】
2010092478.tif 000006
【図６】
2010092478.tif 000007
【図７】
2010092478.tif 000008
【図１】
2010092478.tif 000009
【図４】
2010092478.tif 000010
【図５】
2010092478.tif 000011
【図８ａ】
2010092478.tif 000012
【図８ｂ】
2010092478.tif 000013
【外国語明細書】
2010092478.tif 000014
2010092478.tif 000015
2010092478.tif 000016
2010092478.tif 000017
2010092478.tif 000018
2010092478.tif 000019
2010092478.tif 000020
2010092478.tif 000021
2010092478.tif 000022
2010092478.tif 000023
2010092478.tif 000024
2010092478.tif 000025
2010092478.tif 000026
2010092478.tif 000027
2010092478.tif 000028
2010092478.tif 000029
2010092478.tif 000030
2010092478.tif 000031
2010092478.tif 000032
2010092478.tif 000033
2010092478.tif 000034
2010092478.tif 000035
2010092478.tif 000036
2010092478.tif 000037
2010092478.tif 000038
2010092478.tif 000039
2010092478.tif 000040
2010092478.tif 000041
2010092478.tif 000042
2010092478.tif 000043
2010092478.tif 000044
2010092478.tif 000045
2010092478.tif 000046
2010092478.tif 000047
2010092478.tif 000048
2010092478.tif 000049
2010092478.tif 000050
2010092478.tif 000051
2010092478.tif 000052
2010092478.tif 000053
2010092478.tif 000054
2010092478.tif 000055
2010092478.tif 000056
2010092478.tif 000057
2010092478.tif 000058
2010092478.tif 000059
2010092478.tif 000060
2010092478.tif 000061
2010092478.tif 000062
2010092478.tif 000063
2010092478.tif 000064
2010092478.tif 000065
2010092478.tif 000066
2010092478.tif 000067
2010092478.tif 000068
2010092478.tif 000069
2010092478.tif 000070
2010092478.tif 000071
2010092478.tif 000072
2010092478.tif 000073
2010092478.tif 000074
2010092478.tif 000075
2010092478.tif 000076
2010092478.tif 000077
2010092478.tif 000078
2010092478.tif 000079
2010092478.tif 000080
2010092478.tif 000081
2010092478.tif 000082
2010092478.tif 000083
2010092478.tif 000084
2010092478.tif 000085
2010092478.tif 000086
2010092478.tif 000087
2010092478.tif 000088
2010092478.tif 000089
2010092478.tif 000090
2010092478.tif 000091
2010092478.tif 000092
2010092478.tif 000093
2010092478.tif 000094
2010092478.tif 000095
2010092478.tif 000096
2010092478.tif 000097
2010092478.tif 000098
2010092478.tif 000099
2010092478.tif 000100
2010092478.tif 000101
2010092478.tif 000102
2010092478.tif 000103
2010092478.tif 000104
2010092478.tif 000105
2010092478.tif 000106
2010092478.tif 000107
2010092478.tif 000108
2010092478.tif 000109
2010092478.tif 000110
2010092478.tif 000111
2010092478.tif 000112
2010092478.tif 000113
2010092478.tif 000114
2010092478.tif 000115
2010092478.tif 000116
2010092478.tif 000117
2010092478.tif 000118
2010092478.tif 000119
2010092478.tif 000120
2010092478.tif 000121
2010092478.tif 000122
2010092478.tif 000123