(57)【特許請求の範囲】
【請求項１】
三次元コンピュータグラフィックイメージをシェーディングする装置であって、
（ａ）上記イメージ内へ挿入される半透明のオブジェクトを定義するデータを、上記イメージ内の各々の画素ごとに供給する手段を備え、上記データは上記オブジェクトに関する深さデータを含み、
（ｂ）上記イメージ内へ既に挿入済みのオブジェクトのための深さデータを、上記イメージ内の各々の画素ごとに格納する手段と、
（ｃ）上記イメージに挿入されるオブジェクトによってカバーされる各画素において、上記挿入されるオブジェクトの深さデータと、現在格納されている深さデータとを比較する手段と、
（ｄ）上記比較の結果にもとづいて、オブジェクトの深さデータ及び格納されている深さデータに適用する深さ動作を選択する手段と、
（ｅ）選択した深さ動作を、オブジェクトの深さデータ及び格納されている深さデータに適用する手段と、
（ｆ）オブジェクトの深さデータと格納されている深さデータの間の比較結果にもとづいて、そして、当該オブジェクトの透明性に依存して、上記オブジェクトと上記イメージとを組合わせるためのブレンディング値を各画素毎に選択する手段と、
（ｇ）各画素毎に、選択されたブレンディング値と上記イメージに挿入するオブジェクトのブレンディング値とを組み合わせる手段と、
（ｈ）上記のように各画素毎に組み合わされたブレンディング値に依存する割合で、オブジェクトをイメージと組み合わせる手段と、
を備え、
上記シェードされるオブジェクトは可変半透明性であり、
上記半透明オブジェクトは先ず前及び後向きの部分に分割され、最初に上記後向きの部分が上記深さ比較手段へ供給され、上記深さ動作選択手段は、上記後向きの表面が上記現在格納されている表面よりも目に近い場合は上記深さ格納手段を更新し、次いで上記前向きの表面が上記深さ格納手段へ供給され、上記深さ動作選択手段は、上記新しい深さから上記現在格納されている深さを減算した結果を用いて上記深さ記憶装置を更新し、この値に依存して上記ブレンディング値を導くことを特徴とする装置。
【請求項２】
上記選択されたブレンディング値は、上記減算の結果に比例することを特徴とする請求項１に記載の装置。
【請求項３】
ブレンディング値にオフセット及びスケーリング機能を適用する手段を含むことを特徴とする請求項１に記載の装置。
【請求項４】
画素のステンシルバッファ値をオブジェクトのステンシル値と組み合わせる手段と、前記比較の結果に依存してステンシル動作を選択する手段とを含み、前記深さ動作を選択する手段はまたステンシル比較の結果に応じたものである、請求項１に記載の装置。
【請求項５】
二次深さバッファを用いて、オリジナルの深さバッファの値をさらなる動作で使用するために格納する、請求項１に記載の装置。
【請求項６】
三次元コンピュータグラフィックイメージをシェーディングする装置であって、
（ａ）上記イメージ内へ挿入される半透明のオブジェクトを定義するデータを、上記イメージ内の各々の画素ごとに供給する手段を備え、上記データは上記オブジェクトに関する深さデータを含み、
（ｂ）上記イメージ内へ既に挿入済みのオブジェクトのための深さデータを、上記イメージ内の各々の画素ごとに格納する手段と、
（ｃ）上記イメージに挿入されるオブジェクトによってカバーされる各画素において、上記挿入されるオブジェクトの深さデータと、現在格納されている深さデータとを比較する手段と、
（ｄ）上記比較の結果にもとづいて、オブジェクトの深さデータ及び格納されている深さデータに適用する深さ動作を選択する手段と、
（ｅ）選択した深さ動作を、オブジェクトの深さデータ及び格納されている深さデータに適用する手段と、
（ｆ）オブジェクトの深さデータと格納されている深さデータの間の比較結果にもとづいて、そして、当該オブジェクトの透明性に依存して、上記オブジェクトと上記イメージとを組合わせるためのブレンディング値を各画素毎に選択する手段と、
（ｇ）各画素毎に、選択されたブレンディング値と上記イメージに挿入するオブジェクトのブレンディング値とを組み合わせる手段と、
（ｈ）上記のように各画素毎に組み合わされたブレンディング値に依存する割合で、オブジェクトをイメージと組み合わせる手段と、
を備え、
オリジナルの深さバッファの値をさらなる動作で使用するために格納する、二次深さバッファを含んでいることを特徴とする装置。
【発明の詳細な説明】
【０００１】
本発明は、三次元コンピュータ生成グラフィックイメージをシェーディング及びテクスチャリングするための方法及び装置に関し、詳述すれば、深さをベースとするブレンディングの使用を通していわゆる“ボリューメトリック”効果を生成する方法及び装置に関する。例えば雲の場合、雲又はその中に部分的に又は完全に含まれているオブジェクトが見える程度は、目からの光線放射がその雲を出る前に、または別のオブジェクトと“衝突”する前に通過しなければならない雲がどれ程多いかに依存する。
【０００２】
ボリュームのソフトウェアブレンディングは、そのボリュームの前頂点とその後面、またはそれらの間に位置するオブジェクトとの間の距離から導出することができる。これは、前向きの各頂点を通して光線を放射し、そのボリュームの後面、またはその中に含まれているオブジェクトの何れかに衝突するまでにそれが走行する距離を決定することによって達成される。この距離は、それを通して光線を放射した頂点のためのアルファ値として使用することができる。これらの頂点毎のブレンド係数は、そのボリュームの表面全体にわたって補間することができる。しかしながら、ブレンド係数を頂点毎に計算する際に、それらの間に発生する何等かの不規則性が考慮されない。従って、あるシーンを正確に描写するためには、ボリュームオブジェクトは多数の頂点、または極端な場合には、そのボリュームによってカバーされるスクリーン画素ごとに頂点を含まなければならない。頂点が多数であることは、光線を多数の他のオブジェクトを通して放射し、これら多数の他のオブジェクトに対してテストしなければならないという事実と相俟って、この技術を極めて非効率なものにしている。
【０００３】
殆どの３Ｄグラフィックシステムは、公知のＺ、即ち深さバッファリング技術を使用することによって動作する。シーン内に描写されるオブジェクトは、それらに関係付けられた深さ値を有しており、これらは、そのオブジェクトが交差する各画素毎に深さ値を導出するために使用することができる。これらは、各画素毎に、深さバッファ内の現在の深さ値と比較される。もし現在格納されている深さより前に位置するオブジェクトが見出されれば、新しい値を深さバッファ内に重ね書きすることができる。
【０００４】
多くの３Ｄグラフィックシステムは、公知のステンシルバッファリング技術を更に使用している。この技術は、典型的には画素当たり１乃至８ビットを含む第２の並列バッファを使用する。あるオブジェクトをあるシーン内に書く場合に、上述した深さバッファの比較の他に、各画素毎にステンシルバッファが現在のステンシルバッファ値との比較がなされ、新しいステンシルバッファ値が書かれる。この比較は、ステンシルバッファ上で遂行される１組のステンシル動作の１つを選択するために使用される。これらは、以下のように指定されている。
ＳＯＰ１＝ステンシルテストに不合格、
ＳＯＰ２＝ステンシルテストに合格、深さテストに不合格、
ＳＯＰ３＝ステンシル及び深さの両テストに合格。
【０００５】
したがって、もしステンシルテストに合格し、深さテストに不合格であれば、ステンシルバッファには動作ＳＯＰ２が割当てられる。ＳＯＰ１、ＳＯＰ２、及びＳＯＰ３に割当てられる動作の例は以下の通りである。
Keep＝ステンシル値を保持、
zero＝ステンシル値を０に置換、
Replace＝ステンシル値を参照値に置換、
INCRSAT＝ステンシルを、最大値におけるクランピングを用いてインクリメント、
DECRSAT＝ステンシルを、最小値におけるクランピングを用いてデクレメント、
Invert＝ステンシル値を反転、
TNCR＝ステンシル値をインクリメント、
DECR＝ステンシル値をデクレメント。
【０００６】
従って、供給されたオブジェクトリスト内の各オブジェクトは、ＳＯＰ１、ＳＯＰ２、及びＳＯＰ３に割当てられた機能の特定のセットを有している。オブジェクトステンシル値及びステンシルバッファ内の値は、ステンシル及び深さテストに依存して選択された動作を使用して組合わされる。その結果は、ステンシルバッファ内へ書き戻される。深さは、ステンシル及び深さの両バッファテストに合格した場合に限って、その後に更新される。
【０００７】
本発明の好ましい実施の形態は、例えば雲の形成といったようなボリューメトリック効果を効率的に実現することができる方法及び装置を提供する。これを行うために、深さ値を算術的に処理することを可能にする１組の深さバッファ動作を提供する。これらの動作により、ボリュームの前及び後の間の距離を表すことができる深さまたはブレンディング値を形成することができる。導出後、これらの値は、テクスチャブレンディングユニットへ引き渡すことができ、該ユニット内においてこれらの値は、反復カラー、テクスチャ、またはテクスチャブレンディングに適用可能な他の何等かの源のような他の成分とブレンドするために使用することができる。テクスチャブレンディングユニットからの結果は、フレームバッファの現在の内容とアルファブレンディングされうる。
【０００８】
本発明は、特許請求の範囲により精密に定義されているので参照されたい。
【０００９】
以下に、添付図面を参照して、本発明の好ましい実施例を説明する。
【００１０】
図１は、深さをベースとするブレンディングをどのようにして実現できるかの例を示している。ステンシルテストの結果をこの回路へ供給するステンシルバッファは図示してない。しかしながら、これは、当分野においては公知の標準ステンシルバッファ回路であり、ステンシルテストユニットからの特別出力を、図１の深さ動作選択ユニット２０へ供給する。この回路は、深さバッファに適用される動作が深さ及びステンシル比較の合否に基づく簡単な保持または置換動作に制限されるような現在のハードウェアが当面している問題を解消する。本発明のこの実施の形態は、深さバッファ上で遂行することができる異なる動作の数を増加させ、それによって適用可能な効果の数を増加させることを意図している。
【００１１】
これは、３つの動作ＤＯＰ１、ＤＯＰ２、及びＤＯＰ３の１つを選択するためのユニット６における深さ比較、及びユニット８におけるステンシル比較の結果を表す深さ動作選択ユニット２０を使用することによって達成される。これらは各々、各オブジェクト毎にそれらに割当てられている典型的には８つの異なる動作の１つを有することができる。リストは、８よりも長くなり得る。
【００１２】
動作は、以下のように選択される。
ＤＯＰ１＝ステンシルテストに不合格、
ＤＯＰ２＝ステンシルテストに合格、深さテストに不合格、
ＤＯＰ３＝ステンシル及び深さの両テストに合格。
【００１３】
これらは各々、以下の深さバッファ動作の１つにそれが割当てられている。
Keep＝現在の深さ、
zero＝深さバッファを０にセット、
Max＝深さバッファをその最大値にセット、
Replace＝深さバッファ値をオブジェクト深さに置換、
Add＝オブジェクト深さを深さバッファ値に加算、
Subtract＝深さバッファ値をオブジェクト深さから減算、
Reverse subtract＝オブジェクト深さを深さバッファ値から減算、
全ての算術動作が、１及び０において飽和することに注目されたい。
【００１４】
このシステムを使用すると深さバッファに対する算術動作が許容されるので、深さ面内のオブジェクト間の距離を反映する画素特定値を構築することが可能になる。これらの値は、変更の後に、ブレンドのためのアルファ値として使用することができる。
【００１５】
図１において、深さ比較ユニット６は、オブジェクトリストからのオブジェクト深さと、特定の画素のための深さバッファ４内に格納されている現在の深さとを比較し、結果を深さ動作選択ユニット２０へ出力する。このユニットは、ステンシル比較ユニット（図示してない）の結果をも受けている。２つの入力値に応答して、動作ＤＯＰ１、ＤＯＰ２、及びＤＯＰ３の１つが選択される。
【００１６】
選択された動作は、深さ動作適用ユニット２２に適用される。このユニットは深さ比較ユニット６と同一の入力を受けている。従って、このユニットは、選択された動作を使用してオブジェクト深さと深さバッファ値とを組合わせることができる。この出力は、深さバッファ内へ書き込むことができる。もし必要ならば、この目的のために深さバッファへの書込可能化ライン（図示してない）を設ける。
【００１７】
深さバッファから供給される値の範囲は、０から１までの範囲であると定義されている。しかしながら、深さをベースとするブレンディング効果は、これも０から１までであるアルファブレンド値の全範囲、またはその範囲のある一部に対応する深さ値の範囲を必要とし、これは全深さバッファ範囲をカバーすることはできない。例えば、要求されるブレンディングの影響がアルファ値の全範囲を必要とするにも拘わらず、雲は深さ値の小さい範囲を占めるに過ぎない。この問題を解消するために、使用される深さ値は、（ａ）そのベース値が０にあるようにオフセットさせ、（ｂ）その最大値が１か、または所要の最大値にあるようにスケーリングしなければならない。この動作は、
DepthAlpha＝（深さ＋オフセット）×スケール
からなる。
【００１８】
オフセットの加算は符号付きであるべきであり、また０及び１において飽和すべきである。スケールは、無符号であるべきであり、１において飽和すべきである。
【００１９】
これらの動作は、図１のオフセットユニット２４及びスケールユニット２６において遂行される。深さ及びスケール値は、公知の手法で、オブジェクトリストに関係付けられているパラメータによって制御される。
【００２０】
テクスチャブレンドのためのアルファ値は、導出された後に、テクスチャブレンドユニット２８においてカラーまたはテクスチャと組合わされる。これによって、深さ値をテクスチャブレンディング動作の全範囲まで変更することが可能になる。例えば、深さアルファ値を、ボリュームの“密度”を表すテクスチャに対して変調し、深さ及び適用されるテクスチャの両者に関して画素毎に変化し得るアルファ値を求めることができる。アルファブレンドユニット３０はこの結果を使用し、新しいオブジェクトとフレームバッファ３２の現在の内容とを適切に組合わせる。
【００２１】
本システムは、３つの深さバッファ動作（ＤＯＰ１、ＤＯＰ２、ＤＯＰ３）の使用に制限されるものではない。選択ビットを生成するためにステンシル及び深さの両テスト比較を使用すると、合計４つの動作を使用することができる。代替として、もし深さバッファからの単一のビットだけを使用すれば、２つの動作の選択を行うことができる。
【００２２】
表示されるあるシーン内に雲を描写するための本発明の使用例を以下に説明する。深さ依存アルファが適用されるこの型のオブジェクトは、全ての他のオブジェクトの後にシーン内に描写される。
【００２３】
雲は、３Ｄグラフィックスシステムによって公知の手法で前及び後向きの半分に分割される多角形の凸メッシュから形成される。図１の深さ選択ユニット２０に、以下の３つの択一機能を割当てることによって、メッシュの後面が先ず描写される。
ＤＯＰ１＝深さバッファの値を保持、
ＤＯＰ２＝深さバッファの値を保持、
ＤＯＰ３＝深さバッファ内の値を置換。
【００２４】
これにより、公知の深さバッファ挙動がもたらされる。即ち、もし雲多角形が現在の深さの前に位置していれば、深さバッファが更新される。これらの多角形の可視性は、その後にフレームバッファ内に描写される雲の前半分に依存するので、これらの多角形がフレームバッファを更新することは要求されない。これを達成するために、ブレンディングが行われないように、ヌルアルファブレンドモードがセットアップされる。ブレンディングが遂行されないので、スケール及びオフセット値をセットする必要はない。
【００２５】
この後に、雲の前向きの多角形が、深さ動作選択ユニット２０への入力として以下の深さ動作のセットアップを用いて描写される。
ＤＯＰ１＝０深さバッファの値、
ＤＯＰ２＝０深さバッファの値、
ＤＯＰ３＝深さバッファ値を現在の深さから減算。
【００２６】
これにより、深さバッファから０値がもたらされるか、または前向きの多角形と、後向きの多角形か、またはそれらの間に位置する何等かのオブジェクトとの間の距離が減算動作によって生成される。生成された値は、最大値を有する画素が所要の最大アルファ値をもたらすようにスケーリングすることができる。前及び後向きの多角形間に距離を有していない何等かの画素は０値をもたらすので、オフセットを適用する、即ち０にセットする必要はない。
【００２７】
スケーリングユニット２４及びオフセットユニット２６の結果は、テクスチャブレンドユニット２８に印加される。これは、雲の前向きの多角形上にマップされるテクスチャのアルファが、深さアルファ値に乗算されるようにセットアップすることができる。テクスチャは、アプリケーションが要求する何等かのイメージを含むことができる。この特定例においては、カラーチャンネルは雲表面の細部を表し、アルファチャンネルは雲密度を表す。その結果、雲の前と後との間の距離に比例するだけではなく、雲テクスチャのアルファチャンネルに比例するアルファ値が生成される。
【００２８】
これで、テクスチャブレンディングユニットからの結果をアルファブレンディングユニットに引き渡すことができ、該ユニットにおいて公知の手法でフレームバッファの現在の内容とのアルファブレンドが遂行される。要求されるブレンド機能は、フレームバッファ値と“変調された”テキストのそれらとの間の線形ブレンドであろう。その結果、フレームバッファイメージは、雲の厚み及び密度に比例する手法で、雲テクスチャによって曖昧にされる。例えば、雲が薄いか、または低密度である場合には、フレームバッファのオリジナルの内容が支配的になり、雲が厚いか、または高密度である場合には、雲が支配的になる。従って、雲の前表面と、その後面、または表面または中間オブジェクトとの間の減算の結果が選択されるアルファ値を制御する。
【００２９】
さらなる実施の形態においては、フレームバッファからのオリジナルの深さ値を保持することを可能にするために、二次深さバッファを使用することができる。これは、複数の交差ボリュームを描写するような状況においては有用であり得る。
【００３０】
ＤＯＰ１及びＤＯＰ２が同一の動作を選択することは理解されよう。従って、この選択が、深さテストの合否を基礎として行われることは明白である。従って、簡易化された実施の形態では、選択入力としてのステンシルテストを省いている。
【００３１】
さらなる実施の形態は、ボリュームをモノリシックオブジェクトとして処理できるようにしている。ボリュームは“全体”として提示されるので、ボリュームへの画素入力／ボリュームからの画素出力毎の倍数を処理することができ、同様に凹ボリュームを処理することができる。また、オブジェクトはボリュームとして表されるので、深さバッファへの破壊的書込は要求されない。
【００３２】
この改良は、どのような標準グラフィックスシステムにおいても実現することができ、また３Ｄグラフィックスを書き込むためのマイクロソフトダイレクト３Ｄイメディエットモードシステム内に含まれることが望ましく、従って本発明を実現するために標準コンピュータを構成するようにソフトウェアを書くことができる。
【図面の簡単な説明】
【図１】  本発明の実施の形態のブロック図である。
【図１】
0004100909.tif 000002