グラフィックシステムにおいて改良されたフォグ効果を提供するための方法および装置
【課題】対話式3Dグラフィックスシステムにおいて改良されたフォグ効果を提供する。
【解決手段】フォグ計算において逆指数フォグ濃度関数および逆指数二乗フォグ濃度関数を用いることを可能にすることにより、改良されたフォグシミュレーションが提供される。また、フォグ始点値をプログラムする能力を提供する改良された指数フォグ濃度関数および指数二乗フォグ濃度関数が提供される。レンダリングされている画素のX位置に基づいてフォグを調節するためにレンジ調節関数が用いられることにより、視線がZ軸から遠ざかる方向に移動するにつれたレンジエラーを防止する。また、フォグ計算ユニット例、ならびにフォグ制御関数例およびフォグ関連レジスタ例も開示する。
【解決手段】フォグ計算において逆指数フォグ濃度関数および逆指数二乗フォグ濃度関数を用いることを可能にすることにより、改良されたフォグシミュレーションが提供される。また、フォグ始点値をプログラムする能力を提供する改良された指数フォグ濃度関数および指数二乗フォグ濃度関数が提供される。レンダリングされている画素のX位置に基づいてフォグを調節するためにレンジ調節関数が用いられることにより、視線がZ軸から遠ざかる方向に移動するにつれたレンジエラーを防止する。また、フォグ計算ユニット例、ならびにフォグ制御関数例およびフォグ関連レジスタ例も開示する。
【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、コンピュータグラフィックスに関し、より特定的には、家庭用ビデオゲームプラットフォームなどの対話式グラフィックスシステムに関する。本発明は、さらに特定的には、対話式3次元(3D)グラフィックシステムにおいて改良されたフォグ(Fog)効果を提供するためのシステムおよび方法に関する。
【0002】
【従来の技術】我々の多くは、驚くほどリアルな恐竜、異星人、アニメーション化された玩具、およびその他の空想的な生物を含む映画を観たことがある。このようなアニメーションは、コンピュータグラフィックスによって可能となる。こうした技術を用いることにより、コンピュータグラフィックスアーチストは、各オブジェクトがどのように見えるべきか、また時間とともにどのように外見が変化すべきかを指定することができ、そしてコンピュータがオブジェクトをモデリングし、これらをテレビやコンピュータスクリーンなどのディスプレイ上に表示する。このコンピュータは、シーン中の各オブジェクトの位置および方向、各オブジェクトに光が入射しているように見える方向、各オブジェクトの表面テクスチャ、およびその他の要素に基づき、表示された画像の各部分がちょうど正しく色付けされかつ形付けられていることを確実にするために必要な多くの処理の実行を担当する。
【0003】コンピュータグラフィックスの生成は複雑であるため、ほんの数年前では、コンピュータ生成された3次元グラフィックスは、高価な専用のフライトシミュレータ、ハイエンドのグラフィックスワークステーション、およびスーパーコンピュータに概ね限定されていた。大衆は、これらのコンピュータシステムによって生成された画像のいくつかを映画や高価なテレビ広告で見ることはあったが、我々の大部分は、グラフィックス生成を行うコンピュータに実際に接触することはできなかった。これが全て、例えばニンテンドウ64(登録商標)などの比較的安価な3Dグラフィックスプラットフォームや、現在パーソナルコンピュータで利用可能な様々な3Dグラフィックスカードが利用可能になることにより変貌した。今や、家庭またはオフィスにて、比較的安価なコンピュータグラフィックスシステム上で刺激的な3Dアニメーションおよびシミュレーションと接触することが可能である。
【0004】過去において、グラフィックスシステムの設計者が直面した問題は、グラフィックスシステム中の3Dの仮想世界を現実世界により近くモデリングすることによって、グラフィックスシステムのリアリズムを改善することであった。グラフィックスシステムの一つの問題点は、現実世界で霧およびその他の同様な大気条件が創出する効果を、自動的には考慮しないことである。すなわち、画像全体を通じてはっきりと非常に明瞭な質感を持つコンピュータグラフィックスの画像は、現実世界と比較して非現実的に見えることがある。現実世界においては、遠くのオブジェクトは近くのオブジェクトよりも、観察者に対して明瞭さが劣って見える。この明瞭度の差は、霧、スモッグ、もや、煙、汚染、および/またはかすみ(以後単に「フォグ(Fog)」)が、観察者と観察されているオブジェクトとの間の大気中に存在し得ることに起因する。その結果、フォグを構成する分子が光を屈曲させることにより、観察者からオブジェクトへの距離が増すにしたがってオブジェクトの明瞭度が減少する。例えば、現実世界においてフォグは、ある人の近くの木を、同じ人に対してより遠い木よりも明瞭であるように、その人に対して見えるようにする。
【0005】これに対して、コンピュータグラフィックスシステムの仮想世界においては、グラフィックスシステム中にフォグの効果をシミュレートするメカニズムが用いられない限り、オブジェクトは全て同じ明瞭度を有する。この問題に対して、様々な解決策が提案された。例えば、仮想世界のよりリアルな見え方を提供するために、レンダレングされたシーン中にフォグなどの大気効果を導入するための機能および技術を、多くのグラフィックスシステムが提供している。例えば、OpenGLグラフィックスシステム(グラフィックスハードウェアに対して、一般に用いられるソフトウェアインターフェースを提供するものである)は、プログラマが大気のフォグ効果をレンダリングすることを可能にする。OpenGLは、フォグブレンディング係数fを用いて、フォグ色を受け取ったフラグメントとブレンドすることにより、以下のようにフォギングを実現する。C=fCin+(1−f)Cfog
【0006】このブレンディング係数は、以下の3つの等式のうちの1つを用いて、算出される。
1)指数(GL_EXP):f=e-(density*z)2)指数二乗(GL_EXP2):f=e-(density*z)**23)線形(GL_LINEAR):f=(end−z)/(end−start)
式中において、zは、視点とフラグメント中心との間の視点座標距離である。濃度(density)、始点(start)、および終点(end)の値は、全て特定の関数(すなわちglfog*())を用いるプログラマによって指定される。
【0007】線形フォグは、例えば、輝度−深度キューイング(観察者に対してより近いオブジェクトはより高い輝度で描画される)を実現するためにしばしば用いられる。距離の関数としての輝度の効果は、受け取ったフラグメントを黒色のフォグ色とブレンドすることにより達成される。指数的フォグ等式は、物理的基礎を有している。すなわち、これは、オブジェクトと観察者との間における均一な減衰を積分した結果である。指数関数は、例えば、フォグ色およびフォグ濃度値の異なる組み合わせを用いて、複数の大気効果を表現するために用いられ得る。フォグを用いて、遠い平面の近傍のオブジェクトのぼやけた視認性を援用することにより、描画時間のオーバーラン、詳細度の遷移、およびデータベースページングなどの様々な問題を克服することができる。しかし、実用に際して、指数関数は、遠くのフラグメントを十分に早く減衰しないことがが見いだされている。従って、よりシャープな視認性の降下を提供するために、OpenGLにおいて指数二乗が導入された。グラフィックスハードウェアに対するDirect3D(DirectX)インターフェースもまた、線形、指数、および指数二乗を濃度等式において提供する。
【0008】
【発明が解決しようとする課題】上述のように、3Dグラフィックス画像をより自然かつリアルに見せるために、過去において様々なフォグメカニズムが用いられてきた。しかし、多大な研究が過去になされてはいるが、フォグシミュレーションに関連するさらなる改良が望まれる。
【0009】本発明は、グラフィックスシステムにおけるフォグの使用をさらに強化する改良された技術および構成を提供することにより、この問題を解決する。本発明は、グラフィックスシステムにおいて、新しく、面白くかつ視覚的に楽しい効果を達成することを可能にする改良されたフォグ機能を提供する。さらに、本発明は、フォグの水平レンジの調節を提供することにより、効果をよりリアルにするためにスクリーンの端に向かってフォグ濃度を増加する能力を提供する。本発明は、さらに、象限毎につき1つのフォグ値しか定義されない場合に、通常象限およびzblit象限に対するフォグあるいはスクリーン空間zをサンプリングする方法を提供する。
【0010】
【課題を解決するための手段および効果】本発明により提供される1つの局面によれば、グラフィックスシステムにおいてフォグをシミュレートするための方法およびシステムが提供され、上記方法は、画素のための画素色を得ることと、フォグ色を前記画素色とブレンドすることとを含み、上記画素色とブレンドされるフォグ色の割合は、以下の2つのフォグ濃度関数のうちのいずれかに基づいて決定される。
Fog=2-8*(Ze-Z0)/Z1-Z0) (逆指数)
Fog=2-8*(Ze-Z0)/Z1-Z0)**2 (逆指数二乗)
ここで、Zeは、上記画素の視点空間z値であり、Z0はフォグが開始する視点空間z値であり、Z1はフォグ濃度が実質的に最大値に達する視点空間z値である。
【0011】好ましくは、フォグ濃度関数を適用する前に、x軸方向において視角がZ軸から離れる方向に増加するにつれるレンジの変化を補正するために、視点空間z値(Ze)に対してレンジ調節がなされる。
【0012】
【発明の実施の形態】図1は、対話式3Dコンピュータグラフィックスシステム50の一例を示す。システム50は、対話式3Dビデオゲームを面白いステレオ音とともにプレイするために用いられ得る。また、様々な他の応用例にも用いられ得る。
【0013】本例において、システム50は、3次元世界のデジタル表現物あるいはモデルを、対話式にリアルタイムで処理することが可能である。システム50は、その世界のうちの一部または全部を、いかなる任意の視点から表示することもできる。例えば、システム50は、手持ちコントローラ52a、52bまたはその他の入力デバイスからのリアルタイム入力に応答して、対話式に視点を変更することができる。これにより、ゲームのプレーヤが、その世界の中または外側にいる人の目を通じて、その世界を見ることが可能になる。システム50は、リアルタイム3D対話式表示を必要としない応用例(例えば、2D表示生成および/または非対話式表示)に用いられ得るが、非常に素早く高品質3D画像を表示できる能力を、非常にリアルかつ刺激的なゲームプレイまたはその他のグラフィカルな対話を創出するために用いることができる。
【0014】システム50を用いて、ビデオゲームまたはその他のアプリケーションをプレイするために、ユーザは、まず、ケーブル58を両者の間に接続することによって、メインユニット54を自分のカラーテレビ56またはその他のディスプレイデバイスに接続する。メインユニット54は、カラーテレビ56を制御するための映像信号と音声信号との両方を生成する。映像信号は、テレビスクリーン59上に表示される画像を制御するものであり、音声信号は、テレビのステレオスピーカ61L、61Rを介して音として再生される。
【0015】ユーザは、また、メインユニット54を電源に接続する必要がある。この電源は、標準的な家庭用電気コンセントに接続して家庭電流をメインユニット54に電力供給するために、適切なより低いDC電圧信号に変換する従来のACアダプタ(図示せず)であり得る。他の実施形態として、電池を用い得る。
【0016】ユーザは、メインユニット54を制御するためにハンドコントローラ52a、52bを用い得る。コントロール60は、例えば、テレビ56上に表示されたキャラクターが3D世界内で移動するべき方向(上下、左右、近くあるいは遠く)を指定するために用い得る。コントロール60は、また、他のアプリケーション(例えば、メニュー選択、ポインタ/カーソル制御など)のための入力を提供する。コントローラ52は、様々な形態を取り得る。本例においては、図示したコントローラ52は、それぞれジョイスティック、プッシュボタンおよび/または方向スイッチとしてのコントロール60を含む。コントローラ52は、ケーブルを介して、あるいは電磁(例えば高周波または赤外線)波を介して無線でメインユニット54に接続され得る。
【0017】ゲームなどのアプリケーションをプレイするためには、ユーザは自分がプレイしたいビデオゲームあるいはその他のアプリケーションを記憶している適切な記憶媒体62を選択し、その記憶媒体をメインユニット54のスロット64に挿入する。記憶媒体62は、例えば、専用にコード化されたおよび/または暗号化された光学および/または磁気ディスクであり得る。ユーザは、パワースイッチ66を操作してメインユニット54をオンにし、記憶媒体62に記憶されたソフトウェアに基づいて、メインユニットにビデオゲームあるいはその他のアプリケーションの実行を開始させ得る。ユーザは、コントローラ52を操作してメインユニット54に入力を供給し得る。例えば、コントロール60を操作することにより、ゲームあるいはその他のアプリケーションを開始させ得る。その他のコントロール60を動かすことにより、アニメーション化されたキャラクターを異なる方向に移動させたり、3D世界におけるユーザの視点を変更することができる。記憶媒体62に記憶された特定のソフトウェアに依存して、コントローラ52上の様々なコントロール60は、異なる時刻において異なる機能を実行することができる。
【0018】システム全体の電子回路例図2に、システム50の要素例のブロック図を示す。主要な要素として以下のものを含む。
・メインプロセッサ(CPU)110、・メインメモリ112、および・グラフィックスおよび音声プロセッサ114
【0019】本例において、メインプロセッサ110(例えば、機能拡張型IBM Power PC750)は、手持ちコントローラ108(および/または他の入力装置)からの入力を、グラフィックスおよびプロセッサ114を介して受け取る。メインプロセッサ110は、ユーザ入力に対話式に応答し、例えば、外部記憶媒体62から光ディスクドライブなどの大容量記憶アクセス装置106を介して供給されるビデオゲームあるいはその他のプログラムを実行する。一例としてビデオゲームプレイの場合、メインプロセッサ110は、様々な対話式機能および制御機能に加えて、衝突検出およびアニメーション処理を実行することができる。
【0020】本例において、メインプロセッサ110は、3Dグラフィックスコマンドおよび音声コマンドを生成し、これらをグラフィックスおよび音声プロセッサ114に送る。グラフィックスおよび音声プロセッサ114は、これらのコマンドを処理することにより、ディスプレイ59上に面白い視覚画像を生成し、ステレオスピーカ61R、61Lまたはその他の適切な音声生成装置上で面白いステレオ音を生成する。
【0021】例示のシステム50は、グラフィックスおよび音声プロセッサ114から画像信号を受け取って、画像信号をコンピュータモニタまたは家庭用カラーテレビ56などの標準的な表示装置上での表示に適したアナログおよび/またはデジタル映像信号に変換するビデオ符号化器120を有する。システム50はまた、デジタル化された音声信号を圧縮および伸長し、また必要に応じてデジタルおよびアナログの音声信号化フォーマット間の変換を行う音声コーデック(圧縮器/伸長器)122を有する。音声コーデック122は、バッファ124を介して音声入力を受け取り、これらをグラフィックスおよび音声プロセッサ114に処理(例えば、プロセッサが生成する、および/または大容量記憶アクセス装置106の音声ストリーミング出力を介して受け取る他の音声信号との混合)のために供給することができる。本例におけるグラフィックスおよび音声プロセッサ114は、音声関連の情報を、音声タスクについて利用可能である音声メモリ126中に記憶することができる。グラフィックスおよび音声プロセッサ114は、結果として得られた音声出力信号を、伸長およびアナログ信号への変換(例えばバッファアンプ128L、128Rを介して)のために音声コーデック122に供給することにより、スピーカ61L、61Rによって再生できるようにする。
【0022】グラフィックスおよび音声プロセッサ114は、システム50内に存在し得る様々な追加的なデバイスと連絡する能力を有する。例えば、大容量記憶アクセス装置106および/またはその他の要素と連絡するために、パラレルデジタルバス130を用い得る。シリアル周辺バス132は、例えば、・プログラム可能なリードオンリーメモリおよび/またはリアルタイムクロック134、・モデム136その他のネットワーク化インターフェース(これは、プログラム命令および/またはデータをダウンロードまたはアップロードすることができるインターネットあるいはその他のデジタルネットワークなどの通信ネットワーク138に、システム50を接続し得る)、および・フラッシュメモリ140を含む、様々な周辺デバイスまたはその他のデバイスと連絡し得る。追加的な拡張メモリ144(例えばメモリカード)やその他のデバイスと連絡するために、さらなる外部シリアルバス142を用い得る。コネクタを用いて様々なデバイスをバス130、132、142に接続し得る。
【0023】グラフィックスおよび音声プロセッサの例図3は、グラフィックスおよび音声プロセッサ114の一例のブロック図である。一例において、グラフィックスおよび音声プロセッサ114は、単一チップのASIC(アプリケーション専用集積回路)であり得る。本例において、グラフィックスおよび音声プロセッサ114は、以下を含む。
・プロセッサインターフェース150・メモリインターフェース/コントローラ152・3Dグラフィックスプロセッサ154・音声デジタル信号プロセッサ(DSP)156・音声メモリインターフェース158・音声インターフェースおよびミキサ160・周辺コントローラ162、および・ディスプレイコントローラ164
【0024】3Dグラフィックスプロセッサ154は、グラフィックス処理タスクを行う。音声デジタル信号プロセッサ156は、音声処理タスクを行う。ディスプレイコントローラ164は、メインメモリ112からの画像情報にアクセスし、これをディスプレイデバイス56上に表示するためにビデオ符号化器120に供給する。音声インターフェースおよびミキサ160は音声コーデック120とインターフェースし、また異なるソースからの音声(例えば大容量記憶アクセス装置106からの音声ストリーミング、音声DSP156の出力、および音声コーデック122を介して受け取られる外部音声入力)を混合することができる。プロセッサインターフェース150は、メインプロセッサ110とグラフィックスおよび音声プロセッサ114との間のデータおよび制御インターフェースを提供する。メモリインターフェース152は、グラフィックスおよび音声プロセッサ114とメモリ112との間の、データおよび制御インターフェースを提供する。本例において、メインプロセッサ110は、グラフィックスおよび音声プロセッサ114の一部であるプロセッサインターフェース150およびメモリインターフェース152を介して、メインメモリ112にアクセスする。周辺コントローラ162は、グラフィックスおよび音声プロセッサ114と、上述した様々な周辺機器との間の、データおよび制御インターフェースを提供する。音声メモリインターフェース158は、音声メモリ126とのインターフェースを提供する。
【0025】グラフィックスパイプラインの例図4は、3Dグラフィックスプロセッサ154の一例のより詳細な図を示す。3Dグラフィックスプロセッサ154は、特に、コマンドプロセッサ200および3Dグラフィックスパイプライン180を含む。メインプロセッサ110は、データのストリーム(例えば、グラフィックスコマンドストリームおよび表示リスト)を、コマンドプロセッサ200に通信する。メインプロセッサ110は、メモリ待ち時間を最小にするために2レベルキャッシュ115を有し、また、グラフィックスおよび音声プロセッサ114を対象とした非キャッシュデータストリーム用の書き込み収集バッファ111を有している。書き込み収集バッファ111は、部分キャッシュラインを集めて完全なキャッシュラインにし、データを一度につき1キャッシュラインずつグラフィックスおよび音声プロセッサ114に送り出すことにより、バス利用率を最大にする。
【0026】コマンドプロセッサ200は、メインプロセッサ110から表示コマンドを受け取って解析する(これらを処理するために必要な任意の追加的なデータは、共有メモリ112から得る)。コマンドプロセッサ200は、頂点コマンドのストリームを、2Dおよび/または3D処理およびレンダリングのためにグラフィックスパイプライン180に供給する。グラフィックスパイプライン180は、これらのコマンドに基づいて画像を生成する。得られた画像情報は、ディスプレイコントローラ/ビデオインターフェースユニット164(パイプライン180のフレームバッファ出力をディスプレイ56上に表示する)によるアクセスのために、メインメモリ112に転送され得る。
【0027】図5は、グラフィックスプロセッサ154の論理フロー図である。メインプロセッサ110は、グラフィックスコマンドストリーム210、表示リスト212、および頂点配列214をメインメモリ112に格納し得、バスインターフェース150を介してコマンドプロセッサ200にポインタを渡し得る。メインプロセッサ110は、メインメモリ112内に割り当てた1つ以上のグラフィックス先入れ先出し(FIFO)バッファ210に、グラフィックスコマンドを格納する。コマンドプロセッサ200は、・同期/フロー制御および負荷バランスを取るためグラフィックスコマンドを受け取りバッファリングするオンチップFIFOメモリバッファ216を介して、メインメモリ112からのコマンドストリーム、、・オンチップコールFIFOメモリバッファ218を介して、メインメモリ112からの表示リスト212、および・頂点キャッシュを介して、コマンドストリームからおよび/またはメインメモリ112中の頂点配列214からの頂点属性)を取り込む。
【0028】コマンドプロセッサ200は、属性タイプを浮動小数点フォーマットに変換し、得られた完全な頂点ポリゴンデータをレンダリング/ラスタライゼーションのためにグラフィックスパイプライン180に渡すコマンド処理動作200aを行う。プログラム可能なメモリ調停回路130(図4を参照)は、共有メインメモリ112へのアクセスを、グラフィックスパイプライン180、コマンドプロセッサ200、およびディスプレイコントローラ/ビデオインターフェースユニット164間で調停する。
【0029】図4は、グラフィックスパイプライン180が以下を含み得ることを示している。
・変換ユニット300・セットアップ/ラスタライザ400・テクスチャユニット500・テクスチャ環境ユニット600、および・画素エンジン700
【0030】変換ユニット300は、様々な2Dおよび3D変換ならびにその他の動作300aを行う(図5を参照)。変換ユニット300は、変換処理300aで用いられる行列を格納するための、1つ以上のマトリックスメモリ300bを有し得る。変換ユニット300は、受け取った図形を頂点毎にオブジェクト空間からスクリーン空間に変換し、また、受け取ったテクスチャ座標を変換し投影テクスチャ座標を生成する(300c)。変換ユニット300は、また、ポリゴンクリッピング/間引き300dを行ってもよい。やはり変換ユニット300bによって行われる照明処理300eは、一実施例において最高8個の独立の照明までに対し、頂点毎の照明演算を提供する。変換ユニット300は、また、ポリゴンクリッピング/間引き動作(300d)に加え、エンボス型のバンプマッピング効果のためのテクスチャ座標生成(300c)、を行うことができる。
【0031】セットアップ/ラスタライザ400は、変換ユニット300から頂点データを受け取り、トライアングルセットアップ情報を、境界のラスタライズ、テクスチャ座標のラスタライズおよび色のラスタライズを行う1つ以上のラスタライザユニット(400b)に送るセットアップユニットを有する。
【0032】テクスチャユニット500(オンチップテクスチャメモリ(TMEM502)を含み得る)は、テクスチャリングに関連する様々な処理を行う。これには、例えば、・メインメモリ112からのテクスチャ504の取り出し、・例えば、マルチテクスチャ処理、キャッシュ後テクスチャ伸長、テクスチャフィルタリング、エンボス化、投影テクスチャの使用を介した陰影および明暗、ならびにアルファ透明度および深度をともなうBLITを含むテクスチャ処理(500a)、・バンプマッピング、擬似テクスチャ、およびテクスチャタイル化効果(500b)についてのテクスチャ座標変位の演算のためのバンプマップ処理、および・間接テクスチャ処理(500c)
が含まれる。
【0033】テクスチャユニット500は、フィルタリングされたテクスチャ値を、テクスチャ環境処理のため(600a)にテクスチャ環境ユニット600に出力する。テクスチャ環境ユニット600は、ポリゴンおよびテクスチャ色/アルファ/深度をブレンドし、また、逆レンジ型フォグ効果を達成するためのテクスチャフォグ処理(600b)を行い得る。テクスチャ環境ユニット600は、例えば色/アルファ変調、エンボス化、詳細テクスチャリング、テクスチャスワッピング、クランピング、および深度ブレンディングに基づき、様々な他の面白い環境関連の機能を行うための段を複数提供し得る。
【0034】ピクセルエンジン700は、深度(z)比較(700a)およびピクセルブレンディング(700b)を行う。本例において、ピクセルエンジン700は、データを埋め込み(オンチップ)フレームバッファメモリ702に格納する。グラフィックスパイプライン180は、フレームバッファおよび/またはテクスチャ情報をローカルに格納するための1つ以上の埋め込みDRAMメモリ702を有し得る。z比較700a’は、また、現在有効なレンダリングモードに依存して、グラフィックスパイプライン180中のより早い段階で行われ得る(例えば、アルファブレンディングが必要でなければ、z比較は、より早くに行われ得る)。ピクセルエンジン700は、オンチップフレームバッファ702をディスプレイ/ビデオインターフェースユニット164によるアクセスのためにメインメモリ112に周期的に書き込むコピー動作700cを含む。このコピー動作700cは、また、動的テクスチャ合成効果を得るために、埋め込みフレームバッファ702の内容をメインメモリ112内のテクスチャにコピーするためにも用いられ得る。コピーアウト動作中において、アンチエイリアシングおよびその他のフィルタリングを行うことができる。グラフィックスパイプライン180のフレームバッファ出力(最終的には、メインメモリ112に格納される)は、各フレームごとにディスプレイ/ビデオインターフェースユニット164によって読み出される。ディスプレイコントローラ/ビデオインターフェースユニット164は、ディスプレイ102上に表示するためのデジタルRGB画素値を提供する。
【0035】フォグシミュレーションフォグが使用可能にされるときには、一定のフォグ色が、最終のアクティブなテクスチャ環境(TEV)段から出力された画素色とブレンドされる。ブレンドされるフォグ色の割合は、フォグ濃度に依存する。フォグ濃度は、ある視点からある象限(2×2画素)への距離の関数である。本例において、グラフィックスプロセッサ114は好ましくは、それぞれ異なるフォグ濃度関数を提供する5つのタイプのフォグをサポートする。第1のフォグタイプは、図6に示すような従来の線形フォグであり、この場合のフォグ等式は、線形フォグが開始する始点とフォグが最大値に達する終点との間において、フォグ濃度の一定の増加を提供する。この従来の線形フォグについて、フォグ等式は、Fog=(Ze−Z0)/(Z1−Z0)
である。上式において、Zeは画素の視点空間zである。Z0は「フォグ始点」値であり、これは、線形フォグが開始すなわち「動き出す」視点空間z値である。Z1は、「フォグ終点」値であり、これは、フォグ濃度がその最大値に達する視点空間z値である。図6は、「フォグ始点」=50かつ「フォグ終点」=100の場合の線形フォグ等式のグラフ例を示す。
【0036】第2および第3のタイプのフォグは、指数フォグおよび指数二乗フォグである。OpenGLおよびDirectXのフォグタイプとは対照的に、本発明は、「フォグ始点」値をフォグ等式に導入することにより、その機能性を高めている。指数および指数二乗フォグについて、各フォグ等式は、Fog=1−2-8*(Ze-Z0)/Z1-Z0)Fog=1−2-8*(Ze-Z0)/Z1-Z0)**2である。上式において、Z1は、フォグ濃度がほぼ1に達する視点空間z値である。図7および図8は、それぞれZ0=50およびZ1=100である指数フォグ等式および指数二乗フォグ等式のグラフ例を示す。
【0037】第4および第5のタイプのフォグは、全く新規なものであり、OpenGLで提供されるような以前のフォグ等式に基づくものではない。これらの2つの新規なフォグタイプとは、逆指数フォグおよび逆指数二乗フォグである。これら2つのフォグタイプについて、各フォグ等式は、Fog=2-8*(Ze-Z0)/Z1-Z0)Fog=2-8*(Ze-Z0)/Z1-Z0)**2である。上式において、Z1は、フォグ濃度がほぼ1に達する視点空間z値である。図9および図10は、それぞれZ0=50およびZ1=100であるこれら2つのフォグ等式のグラフ例を示す。指数フォグおよび指数二乗フォグとは異なり、逆指数フォグおよび逆指数二乗フォグは、最初はよりなだらかなスロープを有し、終点近くでは急なスロープを有する。これら2つのまったく新規なフォグタイプは、新しくかつ面白いフォグ効果を達成することを可能にすることにより、3Dグラフィックスシステムにおけるフォグの使用をさらに改良する。例えば、これら2つのフォグタイプは、オブジェクトが唐突にそこを通過するような改良されたカーテン型のフォグ効果を提供するために使われることができ、特定のアプリケーションについて、他の公知のフォグタイプよりも優れた面白い視覚効果を提供する。フォグ関数の近く(始点)および遠く(終点)zは、近遠のzのクリッピングに関わらず、プログラミングされ得ることに留意されたい。
【0038】フォグ計算に用いられる視点空間z値は、上述のように、観察者がZ軸と同じ方向を向いていない限り正しいレンジを表さない。すなわち、図11に示すように、もしレンジの決定に視点空間z値のみを用いた場合、視線がZ軸から遠ざかるにつれてエラーが増大する。図11に示すように、斜線部610aおよび610bによって表されるレンジエラーは、角度αがZ軸から離れる方向に増加するにつれて増大する。しかし、本発明の好適な実施例においては、この不正確さを補正するために、x値に基づくレンジ調節ファクタが用いられる。レンジ調節またはフォグ補正関数は、フォグ効果をより正確かつリアルにするために、スクリーンの端に向かってフォグ濃度を効果的に増大する。
【0039】好適な実施例において、また図12に示すように、フォグ補正関数は、sqrt((x−center)2+k2)/kである。上式において、分割スクリーンのマルチプレーヤゲームをサポートするように、「中心(center)」の値はプログラム可能である。この中心は、好ましくは、スクリーンの幅の半分プラス、ウィンドウの座標系に対するxオフセットに設定される。値kは、xの変化につれてフォグ濃度が変化する早さを決定する。調節は、関数の2つのサンプルを線形補間することにより演算される。レンジ調節関数のサンプル(r0〜r9)が、レンジ調節計算に用いられるために格納される。この関数は上記中心で対称となるため、関数の半分だけを格納する必要があることに留意されたい
【0040】本例において、各象限につき1つのフォグ値しかない。従って、フォグまたはスクリーン空間z(Zs)がサンプルされる位置は非常に重要である。通常の象限に対しては、以下の規則を用い得る。
・1画素だけがカバーされる場合、その画素が選択される。
・2画素がカバーされる場合、1つの画素が以下の順で選択される:左上、右上、左下、右下。
・3画素がカバーされる場合、2つの隣接する画素に接する画素が選択される。
・選択された画素内において、サブサンプル位置が以下の順で選択される:マルチサンプル0(MS0)、MS1、MS2。
・4つ全ての画素がカバーされる場合、象限の中心が用いられる。
【0041】通常の象限ではなくzblit象限については、zブレンディング後の4つの画素のzの最小値が、サンプル位置として用いられる。
【0042】サンプリング位置が決定された後、Zsがs2.24においてz0+zx*dx+zy*dyとして演算される。上位3ビットは、オーバーフローまたはアンダーフローを検出するために用いられる。次に、Zsは以下のようにしてU0.24にクランプされる。
000 オーバーフロー/アンダーフローなし01X オーバーフロー、Zsは1.0(0xFFFFFF)にクランプされる0X1 オーバーフロー、Zsは1.0(0xFFFFFF)にクランプされる1XX アンダーフロー、Zsは0.0(0x000000)にクランプされる
【0043】透視投影を用いるとき、フォグタイプは数個の等式にプログラムされ得る。第1の等式はスクリーン空間zから視点空間z値を演算する。
Ze=f*n/(f−(f−n)*Zs)
Ze=[n,f]およびZs=[0,1]。結果として、Zs=0のときZe=nであり、Zs=1のときZe=fである(Zeの方向が逆転している)。次のステップは、Zeを現在の象限x位置の関数である係数で乗算することにより、Zeを補正する。
Ze'=Ze*r(x)
第2の等式は、ZeをZnに対して正規化する。ここで、Ze=Z0 のときZn=0であり(フォグ始点)、Ze=Z1のときZn=1である。
Zn=(Ze'−Z0)/(Z1−Z0)
2つの等式を組み合わせることにより、Zn=A*r(x)/(B−Zs)−Cが得られる。ここで:A=f*n/((f−n)*(Z1−Z0))
B=f/(f−n)
C=Z0/(Z1−Z0)
である。ハードウェアを単純化するためには、Zeは以下のように表現され得る。
Ze=A/(B−Zs) =A/((B_mant/2−(Zs>>B_expn+1))*2(B_expn+1)) =(A/2(B_expn+1))/(B_mant/2−(Zs>>B_expn+1)) =a/(b−(zs>>b_shf))そして、 a=A/2(B_expn+1) b_mag=B_mant2 b_shf=B_expn+1である。
【0044】一方、直交投影については、以下の等式が適用される。
Zn=a*r(x)*Zs−ca=1(Z1−Z0)
c=Z0/(Z1−Z0)
Z0およびZ1は、視点空間ではなくスクリーン空間で指定される。
【0045】Znが演算された後、上述のように、選択されたフォグタイプ(すなわち線形、指数、指数二乗、逆指数、または逆指数二乗)に応じてフォグ濃度を演算するために用いることができる。
【0046】実施例の詳細図13は、本発明に従ってフォグを計算するために用いられ得るフォグ計算ユニット600bの一例を示す。図5に関連して説明したように、フォグ計算ユニット600bは、テクスチャ環境ユニット(TEV)600aの最終のアクティブなテクスチャ環境(TEV)段からの入力を受け取る。フォグ計算ユニットは次に、コンスタントなフォグ色を、その最終のアクティブなTEV段から出力された画素色とブレンドする。ブレンドされるフォグ色の割合はフォグ濃度に依存する。フォグ濃度は、ある視点からある象限への距離の関数である。
【0047】図13に示すように、適切な入力を受け取った後、フォグ計算ユニットのzオフセットブロック602は、現在の象限の重心の値(上述のように象限内の画素のカバー範囲を用いて決定される)を演算する。スクリーン−視点空間部604は、次に、スクリーン空間zからの値を視点空間zに変換し、結果を、必要なフォグ濃度に関連する定数「a」で(乗算器616を介して)乗算する。より詳細に後述するように、スクリーン−視点空間z変換関数のために減算器618で導入されるパラメータ「b」は、tev_fog_param_1レジスタにより供給される。
【0048】スクリーン−視点空間変換関数のパラメータ「a」は、tev_fog_param_0レジスタにより供給される。図13中の点線は、透視投影ではなく直交投影の場合においてこの動作を行うための別法を示している。
【0049】レンジ調節ブロック606は、現在の象限のx位置に基づいてレンジ調節値を演算する。次に、乗算器608によってスクリーンzはレンジ調節値で乗算される。次に、tev_fog_param_3レジスタにより供給されるパラメータ「c」が、減算器610においてレンジ調節後に視点空間Zから減算すべき量を指定するために導入される。次にブロック612においてクランピング動作を行うことにより、Znが得られる。
【0050】Znが演算された後、これを、選択された特定のフォグタイプに応じてフォグ濃度を演算するために用いることができる。具体的には、マルチプレクサ614a、614b、614cおよび614dへの適切な入力を選択することにより、すなわちセクション615a、615b、615cおよび615dを選択的に適用することにより、5つの利用可能なフォグタイプ(すなわち線形、指数、指数二乗、逆指数、または逆指数二乗)のうちの所望の1つを選択することができる。このように、最終のアクティブなTEV段から出力された画素色とブレンドされるフォグ色の割合を決定するために、適切なフォグ濃度が用いられる。次に計算されたフォグは、グラフィックスシステムによるさらなる処理のために、最終のマルチプレクサ614dから出力される。
【0051】好適な実施例において、フォグは以下の関数を用いて制御される。
GXSetFog:引数:GXFogTYPES Type; //フォグのタイプ (なし、線形、Exp、Exp2 Bexp、Bexp2)
GXBool Proj; //スクリーン−視点空間変換可能GXBool Range;//水平レンジ調節可能f32 StartZ;
f32 EndZ; //始点および終点(または終点近傍)
Z値f32 NearZ;
f32 FarZ; //シーン中の近Z値および遠Z値f32 SideX;//視点円錐台の右側のX値GXColor Color;//フォグ色(RGBX8)
【0052】この関数は、ハードウェアによって要求されるフォグパラメータを演算し、これらをフォグ計算ユニットにロードする。NearZ値およびFarZ値は、投影行列パラメータと一貫性を有するものでなければならない。フォグのStartZ値およびEndZ値は、NearZ値およびFarZ値と同じ単位でなければならない。パラメータStartZおよびEndZは、それぞれ、フォグ関数がどこで始まりまた終わるかを制御する。通常、EndZ値は遠平面zに設定される。NearZおよびFarZは、フォグ演算のため、ラスタライズされたスクリーンZ値を視点空間Zに変換するために必要である。Colorパラメータは、フォグ濃度が1.0のときの画素の色である。
【0053】GXInit()において、デフォルトでは、水平フォグレンジ調節はオフにされる。この特徴を使用するためには、以下の関数を呼び出し得る。: void GXInitFogAdjTable( GXFogAdjTable*Table, u16 width, f32 projmtx[4][4]); void GXSetFogRangeAdj( GXBool enable, u16 center, GXFogAdjTable*table);
【0054】上記の最初の関数は、調節テーブルを演算するために用いられる。ユーザは、このテーブルのために割り当てられた領域を提供しなければならない。widthパラメータは、視点の幅を指定する。projmtxパラメータは、ビューポートにレンダリングするために用いられる投影行列である。このパラメータは、ビューポートの視点空間における水平方向の広がりをこの関数が演算するために必要である。
【0055】このテーブルは、演算されると、GXSetFogRangeAdj()関数に渡され得る。enableパラメータは、水平フォグレンジ調節が許可されているか否かを示す。centerパラメータは、ビューポートの中心にあるX座標でなければならない。上述のように、レンジ調節関数は好ましくは中心に関して対称である。
【0056】以下のテーブルは、レジスタ種類およびフォーマットの例を示す。
【表1】
【0057】他の互換性のある実施例上述のシステム装置50は、上述の家庭用ビデオゲームコンソール構成以外としても実施可能である。例えば、システム50用に書かれたグラフィックスアプリケーションまたはその他のソフトウェアを、システム50をエミュレートするなどして互換性を有する異なる構成を持ったプラットフォーム上で実行することができる。もしその別のプラットフォームがシステム50のハードウェアおよびソフトウェアリソースの一部または全部をうまくエミュレート、シミュレートおよび/または提供することができれば、その別のプラットフォームは、ソフトウェアを首尾よく実行することができる。
【0058】一例として、エミュレータは、システム50のハードウェアおよび/またはソフトウェア構成(プラットフォーム)とは異なるハードウェアおよび/またはソフトウェア構成(プラットフォーム)を提供し得る。このエミュレータシステムは、アプリケーションソフトウェアが書かれたシステムのハードウェアおよび/またはソフトウェア要素の一部または全部をエミュレートまたはシミュレートする、ソフトウェアおよび/またはハードウェア要素を有し得る。例えば、エミュレータシステムは、システム50のハードウェアおよび/またはファームウェアをシミュレートするソフトウェアエミュレータプログラムを実行するパーソナルコンピュータなどの汎用のデジタルコンピュータからなっていてもよい。
【0059】汎用デジタルコンピュータのいくつか(例えばIBMまたはマッキントッシュのパーソナルコンピュータおよび互換機)は現在、DirectXまたはその他の標準的な3DグラフィックスコマンドAPIと適合する3Dグラフィックスパイプラインを提供する3Dグラフィックスカードを備えている。また、標準的な音声コマンドのセットに基づいて高品質なステレオ音を提供するステレオサウンドカードを備えている場合もある。このようなマルチメディア−ハードウェアを備えたパーソナルコンピュータがエミュレータソフトウェアを実行すれば、システム50のグラフィックスおよびサウンド性能に匹敵する十分な能力を有し得る。エミュレータソフトウェアは、ゲームプログラマがゲームソフトウェアを書いた対象である家庭用ビデオゲームコンソールプラットフォームの処理、3Dグラフィックス、音声、周辺およびその他の機能をシミュレートするように、パーソナルコンピュータプラットフォーム上のハードウェアリソースを制御する。
【0060】図14は、ホストプラットフォーム1201、エミュレータ要素1303、および記憶媒体62上に記憶されたゲームソフトウェア実行可能2値画像を用いたエミュレーション処理の全体例を示す。ホスト1201は、例えばパーソナルコンピュータ、ビデオゲームコンソール、または十分な演算能力を有する任意のその他のプラットフォームなどの、汎用あるいは専用のデジタル演算装置であり得る。エミュレータ1303は、ホストプラットフォーム1201上で稼働し、記憶媒体62からのコマンド、データおよびその他の情報の、ホストによって処理される形式へのリアルタイム変換を提供するソフトウェアおよび/またはハードウェアであり得る。例えば、エミュレータ1303は、システム50によって実行されることが意図される「ソース」2値画像プログラム命令を記憶媒体62から取り込み、これらのプログラム命令を、ホスト1201によって実行その他の処理を行われ得る対象形式に変換する。
【0061】一例として、ソフトウェアが、IBM PowerPCまたはその他の特定のプロセッサを用いたプラットフォーム上で実行されるように書かれており、ホスト1201が異なる(例えばインテルの)プロセッサを用いたパーソナルコンピュータである場合は、エミュレータ1303は、1つまたは一連の2値画像プログラム命令を記憶媒体62から取り込み、これらのプログラム命令を、1つ以上の同等なインテルの2値画像プログラム命令に変換する。エミュレータ1303はまた、グラフィックスおよび音声プロセッサ114によって処理されることを意図されたグラフィックスコマンドおよび音声コマンドを取り込みおよび/または生成し、これらのコマンドを、ホスト1201上において利用可能であるハードウェアおよび/またはソフトウェアグラフィックスおよび音声処理リソースによって処理され得る単数または複数のフォーマットに変換する。一例として、エミュレータ1303は、これらのコマンドを、ホスト1201の特定のグラフィックスおよび/または音声ハードウェアによって処理され得るコマンドに変換し得る(例えば、標準的なDirectX、OpenGL、および/または音声APIを用いて)。
【0062】上述のビデオゲームシステムの一部または全ての特徴を提供するために用いられるエミュレータ1303には、また、そのエミュレータを用いて実行されるゲームの様々なオプションやスクリーンモードの選択を単純化あるいは自動化するグラフィックスユーザインターフェース(GUI)が備えられてもよい。一例において、そのようなエミュレータ1303は、また、ソフトウェアが本来意図されたホストプラットフォームに比較して、より高度な機能性をさらに含んでもよい。
【0063】図15は、エミュレータ1302とともに適切に用いられるエミュレーションホストシステム1201を示す。システム1201は、処理ユニット1203およびシステムメモリ1205を有する。システムバス1207が、システムメモリ1205を含む様々なシステム要素を、処理ユニット1203に接続する。システムバス1207は、メモリバスまたはメモリコントローラを含む数種のタイプのバス構造、周辺バス、および様々なバスアーキテクチャのうちのいずれかを用いたローカルバスのうちのいずれでもよい。システムメモリ1207は、リードオンリーメモリ(ROM)1252およびランダムアクセスメモリ(RAM)1254を有する。パーソナルコンピュータシステム1201内の要素間の情報の転送(例えばスタートアップ中など)に役立つ基本的なルーチンを含んだ基本入力/出力システム(BIOS)1256が、ROM1252に格納されている。システム1201はさらに、様々なドライブおよび関連するコンピュータ可読性の媒体を有する。ハードディスクドライブ1209は、(典型的には固定の)磁気ハードディスク1211から読み出し、またこれに対して書き込む。追加的な(可能なオプションである)磁気ディスクドライブ1213は、着脱可能な「フロッピー(登録商標)」またはその他の磁気ディスク1215から読み出し、また、これに対して書き込む。光ディスクドライブ1217は、CD ROMまたはその他の光メディアなどの着脱可能な光ディスク1219から読み出し、また、いくつかの構成においては、これに対して書き込む。ハードディスクドライブ1209および光ディスクドライブ1217は、それぞれハードディスクドライブインターフェース1221および光ディスクドライブインターフェース1225によって、システムバス1207に接続されている。そのドライブおよびそれに対応するコンピュータ可読性媒体は、コンピュータ可読性の命令、データ構造、プログラムモジュール、ゲームプログラムおよびパーソナルコンピュータシステム1201のためのその他のデータを、不揮発的に記憶する。その他の構成において、コンピュータによりアクセス可能なデータを格納することができる他のタイプのコンピュータ可読性媒体、例えば、磁気カセット、フラッシュメモリカード、デジタルビデオディスク、ベルヌーイ(Bernoulli)カートリッジ、ランダムアクセスメモリ(RAM)リードオンリーメモリ(ROM)などもまた使用され得る。
【0064】エミュレータ1303を含む複数のプログラムモジュールは、ハードディスク1211、着脱式磁気ディスク1215、光ディスク1219、および/またはシステムメモリ1205のROM1252および/またはRAM1254上に記憶され得る。このようなプログラムモジュールは、グラフィックスおよび音声APIを提供するオペレーティングシステム、1つ以上のアプリケーションプログラム、その他のプログラムモジュール、プログラムデータおよびゲームデータを含んでもよい。ユーザは、キーボード1227、ポインティング装置1229、マイク、ジョイスティック、ゲームコントローラ、衛星放送用アンテナ、スキャナなどの入力装置を介して、コマンドおよび情報を、パーソナルコンピュータシステム1201に入力し得る。これらおよびその他の入力装置は、システムバス1207に接続されたシリアルポートインターフェース1231を介して処理ユニット1203に接続されることができるが、パラレルポート、ゲームポートファイヤワイヤバスまたはユニバーサルシリアルバス(USB)などの他のインターフェースによって接続されてもよい。また、モニタ1233またはその他のタイプの表示装置が、ビデオアダプタ1235などのインターフェースを介して、システムバス1207に接続される。
【0065】システム1201は、インターネットなどのネットワーク1152を介して通信を確立するための、モデム1154やその他のネットワークインターフェース手段を有し得る。内部でも外部でもよいモデム1154が、シリアルポートインターフェース1231を介してシステムバス123に接続されている。また、システム1201が、ローカルエリアネットワーク1158を介してリモート演算装置1150(例えば、別のシステム1201)と通信することを可能にするために、ネットワークインターフェース1156が提供され得る(あるいはこのような通信は、広域ネットワーク1152またはダイヤルアップやその他の通信手段などの他の通信パスを介して行われてもよい)。システム1201は典型的には、プリンタその他の標準的な周辺デバイスなどの、他の周辺出力デバイスを有し得る。
【0066】一例において、ビデオアダプタ1235は、マイクロソフトのDirectX7.0または他バージョンなどの標準的な3Dグラフィックスアプリケーションプログラマインターフェースに基づいて発せられる3Dグラフィックスコマンドに応答して、高速な3Dグラフィックスレンダリングを提供する3Dグラフィックスパイプラインチップセットを有し得る。また1組のステレオスピーカ1237が、従来の「サウンドカード」などのサウンド発生インターフェースを介してシステムバス1207に接続されていることにより、バス1207によって供給される音声コマンドに基づいて高品質なステレオ音声を生成するためのハードウェアおよび埋め込みソフトウェアサポートを提供する。これらのハードウェア能力は、システム1201が、記憶媒体62に格納されたソフトウェアをプレイするために十分なグラフィックスおよびサウンド速度能力を提供することを可能にする。
【0067】上述のビデオゲームシステムの特徴の一部または全部を提供するために用いられるエミュレータ1303には、また、そのエミュレータを用いて実行されるゲームの様々なオプションやスクリーンモードの選択を単純化あるいは自動化するグラフィックスユーザインターフェース(GUI)が備えられてもよい。一例において、そのようなエミュレータ1303はまた、ソフトウェアが本来意図されたホストプラットフォームに比較してより高度な機能性をさらに含んでもよい。エミュレータ内の特定のグラフィックスサポートハードウェアが、図13に示すフォグ関数を含まない場合は、エミュレータの設計者は、以下のいずれかの選択肢を有する。
・フォグコマンドを、グラフィックスハードウェアがサポートしている他のグラフィックスAPIコマンドに変換するか、・プロセッサの速度に依存して能力の低下がおこり得るが、フォグ関数をソフトウェアで実現するか、・フォグコマンドを「引き抜く」ことによって、フォグ効果を有さないレンダリング画像を提供する。
【0068】以上、本発明を、最も実用的で好ましい実施形態であると現時点で判断される内容について説明してきたが、本発明は、開示された実施形態にのみ制限されるべきものではなく、反対に記載したクレームの範囲内において、様々に変更、および同等な内容が適用されるものとする。
【図面の簡単な説明】
【図1】対話式コンピュータグラフィックスシステムの一例の全体図である。
【図2】図1の例のコンピュータグラフィックスシステムのブロック図である。
【図3】図2に示す例のグラフィックスおよび音声プロセッサのブロック図である。
【図4】図3に示す例の3Dグラフィックスプロセッサのブロック図である。
【図5】図4のグラフィックスおよび音声プロセッサの、論理フロー図例である。
【図6】従来の線形フォグ曲線を示す。
【図7】本発明による指数フォグ曲線例を示す。
【図8】本発明による指数二乗フォグ曲線例を示す。
【図9】本発明による逆指数フォグ曲線例を示す。
【図10】本発明による逆指数二乗フォグ曲線例を示す。
【図11】水平レンジ調節を用いなかったときに得られるフォグエラーの増加を示すグラフである。
【図12】図11に示すエラーを訂正するために用いられ得るフォグ補正関数の例である。
【図13】本発明に従ってフォグを計算するためのフォグ計算ユニットの一実施例である。
【図14】別の互換的な実施例を示す図である。
【図15】別の互換的な実施例を示す図である。
【0001】
【発明の属する技術分野】本発明は、コンピュータグラフィックスに関し、より特定的には、家庭用ビデオゲームプラットフォームなどの対話式グラフィックスシステムに関する。本発明は、さらに特定的には、対話式3次元(3D)グラフィックシステムにおいて改良されたフォグ(Fog)効果を提供するためのシステムおよび方法に関する。
【0002】
【従来の技術】我々の多くは、驚くほどリアルな恐竜、異星人、アニメーション化された玩具、およびその他の空想的な生物を含む映画を観たことがある。このようなアニメーションは、コンピュータグラフィックスによって可能となる。こうした技術を用いることにより、コンピュータグラフィックスアーチストは、各オブジェクトがどのように見えるべきか、また時間とともにどのように外見が変化すべきかを指定することができ、そしてコンピュータがオブジェクトをモデリングし、これらをテレビやコンピュータスクリーンなどのディスプレイ上に表示する。このコンピュータは、シーン中の各オブジェクトの位置および方向、各オブジェクトに光が入射しているように見える方向、各オブジェクトの表面テクスチャ、およびその他の要素に基づき、表示された画像の各部分がちょうど正しく色付けされかつ形付けられていることを確実にするために必要な多くの処理の実行を担当する。
【0003】コンピュータグラフィックスの生成は複雑であるため、ほんの数年前では、コンピュータ生成された3次元グラフィックスは、高価な専用のフライトシミュレータ、ハイエンドのグラフィックスワークステーション、およびスーパーコンピュータに概ね限定されていた。大衆は、これらのコンピュータシステムによって生成された画像のいくつかを映画や高価なテレビ広告で見ることはあったが、我々の大部分は、グラフィックス生成を行うコンピュータに実際に接触することはできなかった。これが全て、例えばニンテンドウ64(登録商標)などの比較的安価な3Dグラフィックスプラットフォームや、現在パーソナルコンピュータで利用可能な様々な3Dグラフィックスカードが利用可能になることにより変貌した。今や、家庭またはオフィスにて、比較的安価なコンピュータグラフィックスシステム上で刺激的な3Dアニメーションおよびシミュレーションと接触することが可能である。
【0004】過去において、グラフィックスシステムの設計者が直面した問題は、グラフィックスシステム中の3Dの仮想世界を現実世界により近くモデリングすることによって、グラフィックスシステムのリアリズムを改善することであった。グラフィックスシステムの一つの問題点は、現実世界で霧およびその他の同様な大気条件が創出する効果を、自動的には考慮しないことである。すなわち、画像全体を通じてはっきりと非常に明瞭な質感を持つコンピュータグラフィックスの画像は、現実世界と比較して非現実的に見えることがある。現実世界においては、遠くのオブジェクトは近くのオブジェクトよりも、観察者に対して明瞭さが劣って見える。この明瞭度の差は、霧、スモッグ、もや、煙、汚染、および/またはかすみ(以後単に「フォグ(Fog)」)が、観察者と観察されているオブジェクトとの間の大気中に存在し得ることに起因する。その結果、フォグを構成する分子が光を屈曲させることにより、観察者からオブジェクトへの距離が増すにしたがってオブジェクトの明瞭度が減少する。例えば、現実世界においてフォグは、ある人の近くの木を、同じ人に対してより遠い木よりも明瞭であるように、その人に対して見えるようにする。
【0005】これに対して、コンピュータグラフィックスシステムの仮想世界においては、グラフィックスシステム中にフォグの効果をシミュレートするメカニズムが用いられない限り、オブジェクトは全て同じ明瞭度を有する。この問題に対して、様々な解決策が提案された。例えば、仮想世界のよりリアルな見え方を提供するために、レンダレングされたシーン中にフォグなどの大気効果を導入するための機能および技術を、多くのグラフィックスシステムが提供している。例えば、OpenGLグラフィックスシステム(グラフィックスハードウェアに対して、一般に用いられるソフトウェアインターフェースを提供するものである)は、プログラマが大気のフォグ効果をレンダリングすることを可能にする。OpenGLは、フォグブレンディング係数fを用いて、フォグ色を受け取ったフラグメントとブレンドすることにより、以下のようにフォギングを実現する。C=fCin+(1−f)Cfog
【0006】このブレンディング係数は、以下の3つの等式のうちの1つを用いて、算出される。
1)指数(GL_EXP):f=e-(density*z)2)指数二乗(GL_EXP2):f=e-(density*z)**23)線形(GL_LINEAR):f=(end−z)/(end−start)
式中において、zは、視点とフラグメント中心との間の視点座標距離である。濃度(density)、始点(start)、および終点(end)の値は、全て特定の関数(すなわちglfog*())を用いるプログラマによって指定される。
【0007】線形フォグは、例えば、輝度−深度キューイング(観察者に対してより近いオブジェクトはより高い輝度で描画される)を実現するためにしばしば用いられる。距離の関数としての輝度の効果は、受け取ったフラグメントを黒色のフォグ色とブレンドすることにより達成される。指数的フォグ等式は、物理的基礎を有している。すなわち、これは、オブジェクトと観察者との間における均一な減衰を積分した結果である。指数関数は、例えば、フォグ色およびフォグ濃度値の異なる組み合わせを用いて、複数の大気効果を表現するために用いられ得る。フォグを用いて、遠い平面の近傍のオブジェクトのぼやけた視認性を援用することにより、描画時間のオーバーラン、詳細度の遷移、およびデータベースページングなどの様々な問題を克服することができる。しかし、実用に際して、指数関数は、遠くのフラグメントを十分に早く減衰しないことがが見いだされている。従って、よりシャープな視認性の降下を提供するために、OpenGLにおいて指数二乗が導入された。グラフィックスハードウェアに対するDirect3D(DirectX)インターフェースもまた、線形、指数、および指数二乗を濃度等式において提供する。
【0008】
【発明が解決しようとする課題】上述のように、3Dグラフィックス画像をより自然かつリアルに見せるために、過去において様々なフォグメカニズムが用いられてきた。しかし、多大な研究が過去になされてはいるが、フォグシミュレーションに関連するさらなる改良が望まれる。
【0009】本発明は、グラフィックスシステムにおけるフォグの使用をさらに強化する改良された技術および構成を提供することにより、この問題を解決する。本発明は、グラフィックスシステムにおいて、新しく、面白くかつ視覚的に楽しい効果を達成することを可能にする改良されたフォグ機能を提供する。さらに、本発明は、フォグの水平レンジの調節を提供することにより、効果をよりリアルにするためにスクリーンの端に向かってフォグ濃度を増加する能力を提供する。本発明は、さらに、象限毎につき1つのフォグ値しか定義されない場合に、通常象限およびzblit象限に対するフォグあるいはスクリーン空間zをサンプリングする方法を提供する。
【0010】
【課題を解決するための手段および効果】本発明により提供される1つの局面によれば、グラフィックスシステムにおいてフォグをシミュレートするための方法およびシステムが提供され、上記方法は、画素のための画素色を得ることと、フォグ色を前記画素色とブレンドすることとを含み、上記画素色とブレンドされるフォグ色の割合は、以下の2つのフォグ濃度関数のうちのいずれかに基づいて決定される。
Fog=2-8*(Ze-Z0)/Z1-Z0) (逆指数)
Fog=2-8*(Ze-Z0)/Z1-Z0)**2 (逆指数二乗)
ここで、Zeは、上記画素の視点空間z値であり、Z0はフォグが開始する視点空間z値であり、Z1はフォグ濃度が実質的に最大値に達する視点空間z値である。
【0011】好ましくは、フォグ濃度関数を適用する前に、x軸方向において視角がZ軸から離れる方向に増加するにつれるレンジの変化を補正するために、視点空間z値(Ze)に対してレンジ調節がなされる。
【0012】
【発明の実施の形態】図1は、対話式3Dコンピュータグラフィックスシステム50の一例を示す。システム50は、対話式3Dビデオゲームを面白いステレオ音とともにプレイするために用いられ得る。また、様々な他の応用例にも用いられ得る。
【0013】本例において、システム50は、3次元世界のデジタル表現物あるいはモデルを、対話式にリアルタイムで処理することが可能である。システム50は、その世界のうちの一部または全部を、いかなる任意の視点から表示することもできる。例えば、システム50は、手持ちコントローラ52a、52bまたはその他の入力デバイスからのリアルタイム入力に応答して、対話式に視点を変更することができる。これにより、ゲームのプレーヤが、その世界の中または外側にいる人の目を通じて、その世界を見ることが可能になる。システム50は、リアルタイム3D対話式表示を必要としない応用例(例えば、2D表示生成および/または非対話式表示)に用いられ得るが、非常に素早く高品質3D画像を表示できる能力を、非常にリアルかつ刺激的なゲームプレイまたはその他のグラフィカルな対話を創出するために用いることができる。
【0014】システム50を用いて、ビデオゲームまたはその他のアプリケーションをプレイするために、ユーザは、まず、ケーブル58を両者の間に接続することによって、メインユニット54を自分のカラーテレビ56またはその他のディスプレイデバイスに接続する。メインユニット54は、カラーテレビ56を制御するための映像信号と音声信号との両方を生成する。映像信号は、テレビスクリーン59上に表示される画像を制御するものであり、音声信号は、テレビのステレオスピーカ61L、61Rを介して音として再生される。
【0015】ユーザは、また、メインユニット54を電源に接続する必要がある。この電源は、標準的な家庭用電気コンセントに接続して家庭電流をメインユニット54に電力供給するために、適切なより低いDC電圧信号に変換する従来のACアダプタ(図示せず)であり得る。他の実施形態として、電池を用い得る。
【0016】ユーザは、メインユニット54を制御するためにハンドコントローラ52a、52bを用い得る。コントロール60は、例えば、テレビ56上に表示されたキャラクターが3D世界内で移動するべき方向(上下、左右、近くあるいは遠く)を指定するために用い得る。コントロール60は、また、他のアプリケーション(例えば、メニュー選択、ポインタ/カーソル制御など)のための入力を提供する。コントローラ52は、様々な形態を取り得る。本例においては、図示したコントローラ52は、それぞれジョイスティック、プッシュボタンおよび/または方向スイッチとしてのコントロール60を含む。コントローラ52は、ケーブルを介して、あるいは電磁(例えば高周波または赤外線)波を介して無線でメインユニット54に接続され得る。
【0017】ゲームなどのアプリケーションをプレイするためには、ユーザは自分がプレイしたいビデオゲームあるいはその他のアプリケーションを記憶している適切な記憶媒体62を選択し、その記憶媒体をメインユニット54のスロット64に挿入する。記憶媒体62は、例えば、専用にコード化されたおよび/または暗号化された光学および/または磁気ディスクであり得る。ユーザは、パワースイッチ66を操作してメインユニット54をオンにし、記憶媒体62に記憶されたソフトウェアに基づいて、メインユニットにビデオゲームあるいはその他のアプリケーションの実行を開始させ得る。ユーザは、コントローラ52を操作してメインユニット54に入力を供給し得る。例えば、コントロール60を操作することにより、ゲームあるいはその他のアプリケーションを開始させ得る。その他のコントロール60を動かすことにより、アニメーション化されたキャラクターを異なる方向に移動させたり、3D世界におけるユーザの視点を変更することができる。記憶媒体62に記憶された特定のソフトウェアに依存して、コントローラ52上の様々なコントロール60は、異なる時刻において異なる機能を実行することができる。
【0018】システム全体の電子回路例図2に、システム50の要素例のブロック図を示す。主要な要素として以下のものを含む。
・メインプロセッサ(CPU)110、・メインメモリ112、および・グラフィックスおよび音声プロセッサ114
【0019】本例において、メインプロセッサ110(例えば、機能拡張型IBM Power PC750)は、手持ちコントローラ108(および/または他の入力装置)からの入力を、グラフィックスおよびプロセッサ114を介して受け取る。メインプロセッサ110は、ユーザ入力に対話式に応答し、例えば、外部記憶媒体62から光ディスクドライブなどの大容量記憶アクセス装置106を介して供給されるビデオゲームあるいはその他のプログラムを実行する。一例としてビデオゲームプレイの場合、メインプロセッサ110は、様々な対話式機能および制御機能に加えて、衝突検出およびアニメーション処理を実行することができる。
【0020】本例において、メインプロセッサ110は、3Dグラフィックスコマンドおよび音声コマンドを生成し、これらをグラフィックスおよび音声プロセッサ114に送る。グラフィックスおよび音声プロセッサ114は、これらのコマンドを処理することにより、ディスプレイ59上に面白い視覚画像を生成し、ステレオスピーカ61R、61Lまたはその他の適切な音声生成装置上で面白いステレオ音を生成する。
【0021】例示のシステム50は、グラフィックスおよび音声プロセッサ114から画像信号を受け取って、画像信号をコンピュータモニタまたは家庭用カラーテレビ56などの標準的な表示装置上での表示に適したアナログおよび/またはデジタル映像信号に変換するビデオ符号化器120を有する。システム50はまた、デジタル化された音声信号を圧縮および伸長し、また必要に応じてデジタルおよびアナログの音声信号化フォーマット間の変換を行う音声コーデック(圧縮器/伸長器)122を有する。音声コーデック122は、バッファ124を介して音声入力を受け取り、これらをグラフィックスおよび音声プロセッサ114に処理(例えば、プロセッサが生成する、および/または大容量記憶アクセス装置106の音声ストリーミング出力を介して受け取る他の音声信号との混合)のために供給することができる。本例におけるグラフィックスおよび音声プロセッサ114は、音声関連の情報を、音声タスクについて利用可能である音声メモリ126中に記憶することができる。グラフィックスおよび音声プロセッサ114は、結果として得られた音声出力信号を、伸長およびアナログ信号への変換(例えばバッファアンプ128L、128Rを介して)のために音声コーデック122に供給することにより、スピーカ61L、61Rによって再生できるようにする。
【0022】グラフィックスおよび音声プロセッサ114は、システム50内に存在し得る様々な追加的なデバイスと連絡する能力を有する。例えば、大容量記憶アクセス装置106および/またはその他の要素と連絡するために、パラレルデジタルバス130を用い得る。シリアル周辺バス132は、例えば、・プログラム可能なリードオンリーメモリおよび/またはリアルタイムクロック134、・モデム136その他のネットワーク化インターフェース(これは、プログラム命令および/またはデータをダウンロードまたはアップロードすることができるインターネットあるいはその他のデジタルネットワークなどの通信ネットワーク138に、システム50を接続し得る)、および・フラッシュメモリ140を含む、様々な周辺デバイスまたはその他のデバイスと連絡し得る。追加的な拡張メモリ144(例えばメモリカード)やその他のデバイスと連絡するために、さらなる外部シリアルバス142を用い得る。コネクタを用いて様々なデバイスをバス130、132、142に接続し得る。
【0023】グラフィックスおよび音声プロセッサの例図3は、グラフィックスおよび音声プロセッサ114の一例のブロック図である。一例において、グラフィックスおよび音声プロセッサ114は、単一チップのASIC(アプリケーション専用集積回路)であり得る。本例において、グラフィックスおよび音声プロセッサ114は、以下を含む。
・プロセッサインターフェース150・メモリインターフェース/コントローラ152・3Dグラフィックスプロセッサ154・音声デジタル信号プロセッサ(DSP)156・音声メモリインターフェース158・音声インターフェースおよびミキサ160・周辺コントローラ162、および・ディスプレイコントローラ164
【0024】3Dグラフィックスプロセッサ154は、グラフィックス処理タスクを行う。音声デジタル信号プロセッサ156は、音声処理タスクを行う。ディスプレイコントローラ164は、メインメモリ112からの画像情報にアクセスし、これをディスプレイデバイス56上に表示するためにビデオ符号化器120に供給する。音声インターフェースおよびミキサ160は音声コーデック120とインターフェースし、また異なるソースからの音声(例えば大容量記憶アクセス装置106からの音声ストリーミング、音声DSP156の出力、および音声コーデック122を介して受け取られる外部音声入力)を混合することができる。プロセッサインターフェース150は、メインプロセッサ110とグラフィックスおよび音声プロセッサ114との間のデータおよび制御インターフェースを提供する。メモリインターフェース152は、グラフィックスおよび音声プロセッサ114とメモリ112との間の、データおよび制御インターフェースを提供する。本例において、メインプロセッサ110は、グラフィックスおよび音声プロセッサ114の一部であるプロセッサインターフェース150およびメモリインターフェース152を介して、メインメモリ112にアクセスする。周辺コントローラ162は、グラフィックスおよび音声プロセッサ114と、上述した様々な周辺機器との間の、データおよび制御インターフェースを提供する。音声メモリインターフェース158は、音声メモリ126とのインターフェースを提供する。
【0025】グラフィックスパイプラインの例図4は、3Dグラフィックスプロセッサ154の一例のより詳細な図を示す。3Dグラフィックスプロセッサ154は、特に、コマンドプロセッサ200および3Dグラフィックスパイプライン180を含む。メインプロセッサ110は、データのストリーム(例えば、グラフィックスコマンドストリームおよび表示リスト)を、コマンドプロセッサ200に通信する。メインプロセッサ110は、メモリ待ち時間を最小にするために2レベルキャッシュ115を有し、また、グラフィックスおよび音声プロセッサ114を対象とした非キャッシュデータストリーム用の書き込み収集バッファ111を有している。書き込み収集バッファ111は、部分キャッシュラインを集めて完全なキャッシュラインにし、データを一度につき1キャッシュラインずつグラフィックスおよび音声プロセッサ114に送り出すことにより、バス利用率を最大にする。
【0026】コマンドプロセッサ200は、メインプロセッサ110から表示コマンドを受け取って解析する(これらを処理するために必要な任意の追加的なデータは、共有メモリ112から得る)。コマンドプロセッサ200は、頂点コマンドのストリームを、2Dおよび/または3D処理およびレンダリングのためにグラフィックスパイプライン180に供給する。グラフィックスパイプライン180は、これらのコマンドに基づいて画像を生成する。得られた画像情報は、ディスプレイコントローラ/ビデオインターフェースユニット164(パイプライン180のフレームバッファ出力をディスプレイ56上に表示する)によるアクセスのために、メインメモリ112に転送され得る。
【0027】図5は、グラフィックスプロセッサ154の論理フロー図である。メインプロセッサ110は、グラフィックスコマンドストリーム210、表示リスト212、および頂点配列214をメインメモリ112に格納し得、バスインターフェース150を介してコマンドプロセッサ200にポインタを渡し得る。メインプロセッサ110は、メインメモリ112内に割り当てた1つ以上のグラフィックス先入れ先出し(FIFO)バッファ210に、グラフィックスコマンドを格納する。コマンドプロセッサ200は、・同期/フロー制御および負荷バランスを取るためグラフィックスコマンドを受け取りバッファリングするオンチップFIFOメモリバッファ216を介して、メインメモリ112からのコマンドストリーム、、・オンチップコールFIFOメモリバッファ218を介して、メインメモリ112からの表示リスト212、および・頂点キャッシュを介して、コマンドストリームからおよび/またはメインメモリ112中の頂点配列214からの頂点属性)を取り込む。
【0028】コマンドプロセッサ200は、属性タイプを浮動小数点フォーマットに変換し、得られた完全な頂点ポリゴンデータをレンダリング/ラスタライゼーションのためにグラフィックスパイプライン180に渡すコマンド処理動作200aを行う。プログラム可能なメモリ調停回路130(図4を参照)は、共有メインメモリ112へのアクセスを、グラフィックスパイプライン180、コマンドプロセッサ200、およびディスプレイコントローラ/ビデオインターフェースユニット164間で調停する。
【0029】図4は、グラフィックスパイプライン180が以下を含み得ることを示している。
・変換ユニット300・セットアップ/ラスタライザ400・テクスチャユニット500・テクスチャ環境ユニット600、および・画素エンジン700
【0030】変換ユニット300は、様々な2Dおよび3D変換ならびにその他の動作300aを行う(図5を参照)。変換ユニット300は、変換処理300aで用いられる行列を格納するための、1つ以上のマトリックスメモリ300bを有し得る。変換ユニット300は、受け取った図形を頂点毎にオブジェクト空間からスクリーン空間に変換し、また、受け取ったテクスチャ座標を変換し投影テクスチャ座標を生成する(300c)。変換ユニット300は、また、ポリゴンクリッピング/間引き300dを行ってもよい。やはり変換ユニット300bによって行われる照明処理300eは、一実施例において最高8個の独立の照明までに対し、頂点毎の照明演算を提供する。変換ユニット300は、また、ポリゴンクリッピング/間引き動作(300d)に加え、エンボス型のバンプマッピング効果のためのテクスチャ座標生成(300c)、を行うことができる。
【0031】セットアップ/ラスタライザ400は、変換ユニット300から頂点データを受け取り、トライアングルセットアップ情報を、境界のラスタライズ、テクスチャ座標のラスタライズおよび色のラスタライズを行う1つ以上のラスタライザユニット(400b)に送るセットアップユニットを有する。
【0032】テクスチャユニット500(オンチップテクスチャメモリ(TMEM502)を含み得る)は、テクスチャリングに関連する様々な処理を行う。これには、例えば、・メインメモリ112からのテクスチャ504の取り出し、・例えば、マルチテクスチャ処理、キャッシュ後テクスチャ伸長、テクスチャフィルタリング、エンボス化、投影テクスチャの使用を介した陰影および明暗、ならびにアルファ透明度および深度をともなうBLITを含むテクスチャ処理(500a)、・バンプマッピング、擬似テクスチャ、およびテクスチャタイル化効果(500b)についてのテクスチャ座標変位の演算のためのバンプマップ処理、および・間接テクスチャ処理(500c)
が含まれる。
【0033】テクスチャユニット500は、フィルタリングされたテクスチャ値を、テクスチャ環境処理のため(600a)にテクスチャ環境ユニット600に出力する。テクスチャ環境ユニット600は、ポリゴンおよびテクスチャ色/アルファ/深度をブレンドし、また、逆レンジ型フォグ効果を達成するためのテクスチャフォグ処理(600b)を行い得る。テクスチャ環境ユニット600は、例えば色/アルファ変調、エンボス化、詳細テクスチャリング、テクスチャスワッピング、クランピング、および深度ブレンディングに基づき、様々な他の面白い環境関連の機能を行うための段を複数提供し得る。
【0034】ピクセルエンジン700は、深度(z)比較(700a)およびピクセルブレンディング(700b)を行う。本例において、ピクセルエンジン700は、データを埋め込み(オンチップ)フレームバッファメモリ702に格納する。グラフィックスパイプライン180は、フレームバッファおよび/またはテクスチャ情報をローカルに格納するための1つ以上の埋め込みDRAMメモリ702を有し得る。z比較700a’は、また、現在有効なレンダリングモードに依存して、グラフィックスパイプライン180中のより早い段階で行われ得る(例えば、アルファブレンディングが必要でなければ、z比較は、より早くに行われ得る)。ピクセルエンジン700は、オンチップフレームバッファ702をディスプレイ/ビデオインターフェースユニット164によるアクセスのためにメインメモリ112に周期的に書き込むコピー動作700cを含む。このコピー動作700cは、また、動的テクスチャ合成効果を得るために、埋め込みフレームバッファ702の内容をメインメモリ112内のテクスチャにコピーするためにも用いられ得る。コピーアウト動作中において、アンチエイリアシングおよびその他のフィルタリングを行うことができる。グラフィックスパイプライン180のフレームバッファ出力(最終的には、メインメモリ112に格納される)は、各フレームごとにディスプレイ/ビデオインターフェースユニット164によって読み出される。ディスプレイコントローラ/ビデオインターフェースユニット164は、ディスプレイ102上に表示するためのデジタルRGB画素値を提供する。
【0035】フォグシミュレーションフォグが使用可能にされるときには、一定のフォグ色が、最終のアクティブなテクスチャ環境(TEV)段から出力された画素色とブレンドされる。ブレンドされるフォグ色の割合は、フォグ濃度に依存する。フォグ濃度は、ある視点からある象限(2×2画素)への距離の関数である。本例において、グラフィックスプロセッサ114は好ましくは、それぞれ異なるフォグ濃度関数を提供する5つのタイプのフォグをサポートする。第1のフォグタイプは、図6に示すような従来の線形フォグであり、この場合のフォグ等式は、線形フォグが開始する始点とフォグが最大値に達する終点との間において、フォグ濃度の一定の増加を提供する。この従来の線形フォグについて、フォグ等式は、Fog=(Ze−Z0)/(Z1−Z0)
である。上式において、Zeは画素の視点空間zである。Z0は「フォグ始点」値であり、これは、線形フォグが開始すなわち「動き出す」視点空間z値である。Z1は、「フォグ終点」値であり、これは、フォグ濃度がその最大値に達する視点空間z値である。図6は、「フォグ始点」=50かつ「フォグ終点」=100の場合の線形フォグ等式のグラフ例を示す。
【0036】第2および第3のタイプのフォグは、指数フォグおよび指数二乗フォグである。OpenGLおよびDirectXのフォグタイプとは対照的に、本発明は、「フォグ始点」値をフォグ等式に導入することにより、その機能性を高めている。指数および指数二乗フォグについて、各フォグ等式は、Fog=1−2-8*(Ze-Z0)/Z1-Z0)Fog=1−2-8*(Ze-Z0)/Z1-Z0)**2である。上式において、Z1は、フォグ濃度がほぼ1に達する視点空間z値である。図7および図8は、それぞれZ0=50およびZ1=100である指数フォグ等式および指数二乗フォグ等式のグラフ例を示す。
【0037】第4および第5のタイプのフォグは、全く新規なものであり、OpenGLで提供されるような以前のフォグ等式に基づくものではない。これらの2つの新規なフォグタイプとは、逆指数フォグおよび逆指数二乗フォグである。これら2つのフォグタイプについて、各フォグ等式は、Fog=2-8*(Ze-Z0)/Z1-Z0)Fog=2-8*(Ze-Z0)/Z1-Z0)**2である。上式において、Z1は、フォグ濃度がほぼ1に達する視点空間z値である。図9および図10は、それぞれZ0=50およびZ1=100であるこれら2つのフォグ等式のグラフ例を示す。指数フォグおよび指数二乗フォグとは異なり、逆指数フォグおよび逆指数二乗フォグは、最初はよりなだらかなスロープを有し、終点近くでは急なスロープを有する。これら2つのまったく新規なフォグタイプは、新しくかつ面白いフォグ効果を達成することを可能にすることにより、3Dグラフィックスシステムにおけるフォグの使用をさらに改良する。例えば、これら2つのフォグタイプは、オブジェクトが唐突にそこを通過するような改良されたカーテン型のフォグ効果を提供するために使われることができ、特定のアプリケーションについて、他の公知のフォグタイプよりも優れた面白い視覚効果を提供する。フォグ関数の近く(始点)および遠く(終点)zは、近遠のzのクリッピングに関わらず、プログラミングされ得ることに留意されたい。
【0038】フォグ計算に用いられる視点空間z値は、上述のように、観察者がZ軸と同じ方向を向いていない限り正しいレンジを表さない。すなわち、図11に示すように、もしレンジの決定に視点空間z値のみを用いた場合、視線がZ軸から遠ざかるにつれてエラーが増大する。図11に示すように、斜線部610aおよび610bによって表されるレンジエラーは、角度αがZ軸から離れる方向に増加するにつれて増大する。しかし、本発明の好適な実施例においては、この不正確さを補正するために、x値に基づくレンジ調節ファクタが用いられる。レンジ調節またはフォグ補正関数は、フォグ効果をより正確かつリアルにするために、スクリーンの端に向かってフォグ濃度を効果的に増大する。
【0039】好適な実施例において、また図12に示すように、フォグ補正関数は、sqrt((x−center)2+k2)/kである。上式において、分割スクリーンのマルチプレーヤゲームをサポートするように、「中心(center)」の値はプログラム可能である。この中心は、好ましくは、スクリーンの幅の半分プラス、ウィンドウの座標系に対するxオフセットに設定される。値kは、xの変化につれてフォグ濃度が変化する早さを決定する。調節は、関数の2つのサンプルを線形補間することにより演算される。レンジ調節関数のサンプル(r0〜r9)が、レンジ調節計算に用いられるために格納される。この関数は上記中心で対称となるため、関数の半分だけを格納する必要があることに留意されたい
【0040】本例において、各象限につき1つのフォグ値しかない。従って、フォグまたはスクリーン空間z(Zs)がサンプルされる位置は非常に重要である。通常の象限に対しては、以下の規則を用い得る。
・1画素だけがカバーされる場合、その画素が選択される。
・2画素がカバーされる場合、1つの画素が以下の順で選択される:左上、右上、左下、右下。
・3画素がカバーされる場合、2つの隣接する画素に接する画素が選択される。
・選択された画素内において、サブサンプル位置が以下の順で選択される:マルチサンプル0(MS0)、MS1、MS2。
・4つ全ての画素がカバーされる場合、象限の中心が用いられる。
【0041】通常の象限ではなくzblit象限については、zブレンディング後の4つの画素のzの最小値が、サンプル位置として用いられる。
【0042】サンプリング位置が決定された後、Zsがs2.24においてz0+zx*dx+zy*dyとして演算される。上位3ビットは、オーバーフローまたはアンダーフローを検出するために用いられる。次に、Zsは以下のようにしてU0.24にクランプされる。
000 オーバーフロー/アンダーフローなし01X オーバーフロー、Zsは1.0(0xFFFFFF)にクランプされる0X1 オーバーフロー、Zsは1.0(0xFFFFFF)にクランプされる1XX アンダーフロー、Zsは0.0(0x000000)にクランプされる
【0043】透視投影を用いるとき、フォグタイプは数個の等式にプログラムされ得る。第1の等式はスクリーン空間zから視点空間z値を演算する。
Ze=f*n/(f−(f−n)*Zs)
Ze=[n,f]およびZs=[0,1]。結果として、Zs=0のときZe=nであり、Zs=1のときZe=fである(Zeの方向が逆転している)。次のステップは、Zeを現在の象限x位置の関数である係数で乗算することにより、Zeを補正する。
Ze'=Ze*r(x)
第2の等式は、ZeをZnに対して正規化する。ここで、Ze=Z0 のときZn=0であり(フォグ始点)、Ze=Z1のときZn=1である。
Zn=(Ze'−Z0)/(Z1−Z0)
2つの等式を組み合わせることにより、Zn=A*r(x)/(B−Zs)−Cが得られる。ここで:A=f*n/((f−n)*(Z1−Z0))
B=f/(f−n)
C=Z0/(Z1−Z0)
である。ハードウェアを単純化するためには、Zeは以下のように表現され得る。
Ze=A/(B−Zs) =A/((B_mant/2−(Zs>>B_expn+1))*2(B_expn+1)) =(A/2(B_expn+1))/(B_mant/2−(Zs>>B_expn+1)) =a/(b−(zs>>b_shf))そして、 a=A/2(B_expn+1) b_mag=B_mant2 b_shf=B_expn+1である。
【0044】一方、直交投影については、以下の等式が適用される。
Zn=a*r(x)*Zs−ca=1(Z1−Z0)
c=Z0/(Z1−Z0)
Z0およびZ1は、視点空間ではなくスクリーン空間で指定される。
【0045】Znが演算された後、上述のように、選択されたフォグタイプ(すなわち線形、指数、指数二乗、逆指数、または逆指数二乗)に応じてフォグ濃度を演算するために用いることができる。
【0046】実施例の詳細図13は、本発明に従ってフォグを計算するために用いられ得るフォグ計算ユニット600bの一例を示す。図5に関連して説明したように、フォグ計算ユニット600bは、テクスチャ環境ユニット(TEV)600aの最終のアクティブなテクスチャ環境(TEV)段からの入力を受け取る。フォグ計算ユニットは次に、コンスタントなフォグ色を、その最終のアクティブなTEV段から出力された画素色とブレンドする。ブレンドされるフォグ色の割合はフォグ濃度に依存する。フォグ濃度は、ある視点からある象限への距離の関数である。
【0047】図13に示すように、適切な入力を受け取った後、フォグ計算ユニットのzオフセットブロック602は、現在の象限の重心の値(上述のように象限内の画素のカバー範囲を用いて決定される)を演算する。スクリーン−視点空間部604は、次に、スクリーン空間zからの値を視点空間zに変換し、結果を、必要なフォグ濃度に関連する定数「a」で(乗算器616を介して)乗算する。より詳細に後述するように、スクリーン−視点空間z変換関数のために減算器618で導入されるパラメータ「b」は、tev_fog_param_1レジスタにより供給される。
【0048】スクリーン−視点空間変換関数のパラメータ「a」は、tev_fog_param_0レジスタにより供給される。図13中の点線は、透視投影ではなく直交投影の場合においてこの動作を行うための別法を示している。
【0049】レンジ調節ブロック606は、現在の象限のx位置に基づいてレンジ調節値を演算する。次に、乗算器608によってスクリーンzはレンジ調節値で乗算される。次に、tev_fog_param_3レジスタにより供給されるパラメータ「c」が、減算器610においてレンジ調節後に視点空間Zから減算すべき量を指定するために導入される。次にブロック612においてクランピング動作を行うことにより、Znが得られる。
【0050】Znが演算された後、これを、選択された特定のフォグタイプに応じてフォグ濃度を演算するために用いることができる。具体的には、マルチプレクサ614a、614b、614cおよび614dへの適切な入力を選択することにより、すなわちセクション615a、615b、615cおよび615dを選択的に適用することにより、5つの利用可能なフォグタイプ(すなわち線形、指数、指数二乗、逆指数、または逆指数二乗)のうちの所望の1つを選択することができる。このように、最終のアクティブなTEV段から出力された画素色とブレンドされるフォグ色の割合を決定するために、適切なフォグ濃度が用いられる。次に計算されたフォグは、グラフィックスシステムによるさらなる処理のために、最終のマルチプレクサ614dから出力される。
【0051】好適な実施例において、フォグは以下の関数を用いて制御される。
GXSetFog:引数:GXFogTYPES Type; //フォグのタイプ (なし、線形、Exp、Exp2 Bexp、Bexp2)
GXBool Proj; //スクリーン−視点空間変換可能GXBool Range;//水平レンジ調節可能f32 StartZ;
f32 EndZ; //始点および終点(または終点近傍)
Z値f32 NearZ;
f32 FarZ; //シーン中の近Z値および遠Z値f32 SideX;//視点円錐台の右側のX値GXColor Color;//フォグ色(RGBX8)
【0052】この関数は、ハードウェアによって要求されるフォグパラメータを演算し、これらをフォグ計算ユニットにロードする。NearZ値およびFarZ値は、投影行列パラメータと一貫性を有するものでなければならない。フォグのStartZ値およびEndZ値は、NearZ値およびFarZ値と同じ単位でなければならない。パラメータStartZおよびEndZは、それぞれ、フォグ関数がどこで始まりまた終わるかを制御する。通常、EndZ値は遠平面zに設定される。NearZおよびFarZは、フォグ演算のため、ラスタライズされたスクリーンZ値を視点空間Zに変換するために必要である。Colorパラメータは、フォグ濃度が1.0のときの画素の色である。
【0053】GXInit()において、デフォルトでは、水平フォグレンジ調節はオフにされる。この特徴を使用するためには、以下の関数を呼び出し得る。: void GXInitFogAdjTable( GXFogAdjTable*Table, u16 width, f32 projmtx[4][4]); void GXSetFogRangeAdj( GXBool enable, u16 center, GXFogAdjTable*table);
【0054】上記の最初の関数は、調節テーブルを演算するために用いられる。ユーザは、このテーブルのために割り当てられた領域を提供しなければならない。widthパラメータは、視点の幅を指定する。projmtxパラメータは、ビューポートにレンダリングするために用いられる投影行列である。このパラメータは、ビューポートの視点空間における水平方向の広がりをこの関数が演算するために必要である。
【0055】このテーブルは、演算されると、GXSetFogRangeAdj()関数に渡され得る。enableパラメータは、水平フォグレンジ調節が許可されているか否かを示す。centerパラメータは、ビューポートの中心にあるX座標でなければならない。上述のように、レンジ調節関数は好ましくは中心に関して対称である。
【0056】以下のテーブルは、レジスタ種類およびフォーマットの例を示す。
【表1】
【0057】他の互換性のある実施例上述のシステム装置50は、上述の家庭用ビデオゲームコンソール構成以外としても実施可能である。例えば、システム50用に書かれたグラフィックスアプリケーションまたはその他のソフトウェアを、システム50をエミュレートするなどして互換性を有する異なる構成を持ったプラットフォーム上で実行することができる。もしその別のプラットフォームがシステム50のハードウェアおよびソフトウェアリソースの一部または全部をうまくエミュレート、シミュレートおよび/または提供することができれば、その別のプラットフォームは、ソフトウェアを首尾よく実行することができる。
【0058】一例として、エミュレータは、システム50のハードウェアおよび/またはソフトウェア構成(プラットフォーム)とは異なるハードウェアおよび/またはソフトウェア構成(プラットフォーム)を提供し得る。このエミュレータシステムは、アプリケーションソフトウェアが書かれたシステムのハードウェアおよび/またはソフトウェア要素の一部または全部をエミュレートまたはシミュレートする、ソフトウェアおよび/またはハードウェア要素を有し得る。例えば、エミュレータシステムは、システム50のハードウェアおよび/またはファームウェアをシミュレートするソフトウェアエミュレータプログラムを実行するパーソナルコンピュータなどの汎用のデジタルコンピュータからなっていてもよい。
【0059】汎用デジタルコンピュータのいくつか(例えばIBMまたはマッキントッシュのパーソナルコンピュータおよび互換機)は現在、DirectXまたはその他の標準的な3DグラフィックスコマンドAPIと適合する3Dグラフィックスパイプラインを提供する3Dグラフィックスカードを備えている。また、標準的な音声コマンドのセットに基づいて高品質なステレオ音を提供するステレオサウンドカードを備えている場合もある。このようなマルチメディア−ハードウェアを備えたパーソナルコンピュータがエミュレータソフトウェアを実行すれば、システム50のグラフィックスおよびサウンド性能に匹敵する十分な能力を有し得る。エミュレータソフトウェアは、ゲームプログラマがゲームソフトウェアを書いた対象である家庭用ビデオゲームコンソールプラットフォームの処理、3Dグラフィックス、音声、周辺およびその他の機能をシミュレートするように、パーソナルコンピュータプラットフォーム上のハードウェアリソースを制御する。
【0060】図14は、ホストプラットフォーム1201、エミュレータ要素1303、および記憶媒体62上に記憶されたゲームソフトウェア実行可能2値画像を用いたエミュレーション処理の全体例を示す。ホスト1201は、例えばパーソナルコンピュータ、ビデオゲームコンソール、または十分な演算能力を有する任意のその他のプラットフォームなどの、汎用あるいは専用のデジタル演算装置であり得る。エミュレータ1303は、ホストプラットフォーム1201上で稼働し、記憶媒体62からのコマンド、データおよびその他の情報の、ホストによって処理される形式へのリアルタイム変換を提供するソフトウェアおよび/またはハードウェアであり得る。例えば、エミュレータ1303は、システム50によって実行されることが意図される「ソース」2値画像プログラム命令を記憶媒体62から取り込み、これらのプログラム命令を、ホスト1201によって実行その他の処理を行われ得る対象形式に変換する。
【0061】一例として、ソフトウェアが、IBM PowerPCまたはその他の特定のプロセッサを用いたプラットフォーム上で実行されるように書かれており、ホスト1201が異なる(例えばインテルの)プロセッサを用いたパーソナルコンピュータである場合は、エミュレータ1303は、1つまたは一連の2値画像プログラム命令を記憶媒体62から取り込み、これらのプログラム命令を、1つ以上の同等なインテルの2値画像プログラム命令に変換する。エミュレータ1303はまた、グラフィックスおよび音声プロセッサ114によって処理されることを意図されたグラフィックスコマンドおよび音声コマンドを取り込みおよび/または生成し、これらのコマンドを、ホスト1201上において利用可能であるハードウェアおよび/またはソフトウェアグラフィックスおよび音声処理リソースによって処理され得る単数または複数のフォーマットに変換する。一例として、エミュレータ1303は、これらのコマンドを、ホスト1201の特定のグラフィックスおよび/または音声ハードウェアによって処理され得るコマンドに変換し得る(例えば、標準的なDirectX、OpenGL、および/または音声APIを用いて)。
【0062】上述のビデオゲームシステムの一部または全ての特徴を提供するために用いられるエミュレータ1303には、また、そのエミュレータを用いて実行されるゲームの様々なオプションやスクリーンモードの選択を単純化あるいは自動化するグラフィックスユーザインターフェース(GUI)が備えられてもよい。一例において、そのようなエミュレータ1303は、また、ソフトウェアが本来意図されたホストプラットフォームに比較して、より高度な機能性をさらに含んでもよい。
【0063】図15は、エミュレータ1302とともに適切に用いられるエミュレーションホストシステム1201を示す。システム1201は、処理ユニット1203およびシステムメモリ1205を有する。システムバス1207が、システムメモリ1205を含む様々なシステム要素を、処理ユニット1203に接続する。システムバス1207は、メモリバスまたはメモリコントローラを含む数種のタイプのバス構造、周辺バス、および様々なバスアーキテクチャのうちのいずれかを用いたローカルバスのうちのいずれでもよい。システムメモリ1207は、リードオンリーメモリ(ROM)1252およびランダムアクセスメモリ(RAM)1254を有する。パーソナルコンピュータシステム1201内の要素間の情報の転送(例えばスタートアップ中など)に役立つ基本的なルーチンを含んだ基本入力/出力システム(BIOS)1256が、ROM1252に格納されている。システム1201はさらに、様々なドライブおよび関連するコンピュータ可読性の媒体を有する。ハードディスクドライブ1209は、(典型的には固定の)磁気ハードディスク1211から読み出し、またこれに対して書き込む。追加的な(可能なオプションである)磁気ディスクドライブ1213は、着脱可能な「フロッピー(登録商標)」またはその他の磁気ディスク1215から読み出し、また、これに対して書き込む。光ディスクドライブ1217は、CD ROMまたはその他の光メディアなどの着脱可能な光ディスク1219から読み出し、また、いくつかの構成においては、これに対して書き込む。ハードディスクドライブ1209および光ディスクドライブ1217は、それぞれハードディスクドライブインターフェース1221および光ディスクドライブインターフェース1225によって、システムバス1207に接続されている。そのドライブおよびそれに対応するコンピュータ可読性媒体は、コンピュータ可読性の命令、データ構造、プログラムモジュール、ゲームプログラムおよびパーソナルコンピュータシステム1201のためのその他のデータを、不揮発的に記憶する。その他の構成において、コンピュータによりアクセス可能なデータを格納することができる他のタイプのコンピュータ可読性媒体、例えば、磁気カセット、フラッシュメモリカード、デジタルビデオディスク、ベルヌーイ(Bernoulli)カートリッジ、ランダムアクセスメモリ(RAM)リードオンリーメモリ(ROM)などもまた使用され得る。
【0064】エミュレータ1303を含む複数のプログラムモジュールは、ハードディスク1211、着脱式磁気ディスク1215、光ディスク1219、および/またはシステムメモリ1205のROM1252および/またはRAM1254上に記憶され得る。このようなプログラムモジュールは、グラフィックスおよび音声APIを提供するオペレーティングシステム、1つ以上のアプリケーションプログラム、その他のプログラムモジュール、プログラムデータおよびゲームデータを含んでもよい。ユーザは、キーボード1227、ポインティング装置1229、マイク、ジョイスティック、ゲームコントローラ、衛星放送用アンテナ、スキャナなどの入力装置を介して、コマンドおよび情報を、パーソナルコンピュータシステム1201に入力し得る。これらおよびその他の入力装置は、システムバス1207に接続されたシリアルポートインターフェース1231を介して処理ユニット1203に接続されることができるが、パラレルポート、ゲームポートファイヤワイヤバスまたはユニバーサルシリアルバス(USB)などの他のインターフェースによって接続されてもよい。また、モニタ1233またはその他のタイプの表示装置が、ビデオアダプタ1235などのインターフェースを介して、システムバス1207に接続される。
【0065】システム1201は、インターネットなどのネットワーク1152を介して通信を確立するための、モデム1154やその他のネットワークインターフェース手段を有し得る。内部でも外部でもよいモデム1154が、シリアルポートインターフェース1231を介してシステムバス123に接続されている。また、システム1201が、ローカルエリアネットワーク1158を介してリモート演算装置1150(例えば、別のシステム1201)と通信することを可能にするために、ネットワークインターフェース1156が提供され得る(あるいはこのような通信は、広域ネットワーク1152またはダイヤルアップやその他の通信手段などの他の通信パスを介して行われてもよい)。システム1201は典型的には、プリンタその他の標準的な周辺デバイスなどの、他の周辺出力デバイスを有し得る。
【0066】一例において、ビデオアダプタ1235は、マイクロソフトのDirectX7.0または他バージョンなどの標準的な3Dグラフィックスアプリケーションプログラマインターフェースに基づいて発せられる3Dグラフィックスコマンドに応答して、高速な3Dグラフィックスレンダリングを提供する3Dグラフィックスパイプラインチップセットを有し得る。また1組のステレオスピーカ1237が、従来の「サウンドカード」などのサウンド発生インターフェースを介してシステムバス1207に接続されていることにより、バス1207によって供給される音声コマンドに基づいて高品質なステレオ音声を生成するためのハードウェアおよび埋め込みソフトウェアサポートを提供する。これらのハードウェア能力は、システム1201が、記憶媒体62に格納されたソフトウェアをプレイするために十分なグラフィックスおよびサウンド速度能力を提供することを可能にする。
【0067】上述のビデオゲームシステムの特徴の一部または全部を提供するために用いられるエミュレータ1303には、また、そのエミュレータを用いて実行されるゲームの様々なオプションやスクリーンモードの選択を単純化あるいは自動化するグラフィックスユーザインターフェース(GUI)が備えられてもよい。一例において、そのようなエミュレータ1303はまた、ソフトウェアが本来意図されたホストプラットフォームに比較してより高度な機能性をさらに含んでもよい。エミュレータ内の特定のグラフィックスサポートハードウェアが、図13に示すフォグ関数を含まない場合は、エミュレータの設計者は、以下のいずれかの選択肢を有する。
・フォグコマンドを、グラフィックスハードウェアがサポートしている他のグラフィックスAPIコマンドに変換するか、・プロセッサの速度に依存して能力の低下がおこり得るが、フォグ関数をソフトウェアで実現するか、・フォグコマンドを「引き抜く」ことによって、フォグ効果を有さないレンダリング画像を提供する。
【0068】以上、本発明を、最も実用的で好ましい実施形態であると現時点で判断される内容について説明してきたが、本発明は、開示された実施形態にのみ制限されるべきものではなく、反対に記載したクレームの範囲内において、様々に変更、および同等な内容が適用されるものとする。
【図面の簡単な説明】
【図1】対話式コンピュータグラフィックスシステムの一例の全体図である。
【図2】図1の例のコンピュータグラフィックスシステムのブロック図である。
【図3】図2に示す例のグラフィックスおよび音声プロセッサのブロック図である。
【図4】図3に示す例の3Dグラフィックスプロセッサのブロック図である。
【図5】図4のグラフィックスおよび音声プロセッサの、論理フロー図例である。
【図6】従来の線形フォグ曲線を示す。
【図7】本発明による指数フォグ曲線例を示す。
【図8】本発明による指数二乗フォグ曲線例を示す。
【図9】本発明による逆指数フォグ曲線例を示す。
【図10】本発明による逆指数二乗フォグ曲線例を示す。
【図11】水平レンジ調節を用いなかったときに得られるフォグエラーの増加を示すグラフである。
【図12】図11に示すエラーを訂正するために用いられ得るフォグ補正関数の例である。
【図13】本発明に従ってフォグを計算するためのフォグ計算ユニットの一実施例である。
【図14】別の互換的な実施例を示す図である。
【図15】別の互換的な実施例を示す図である。
【特許請求の範囲】
【請求項1】 グラフィックスシステムにおいてフォグ(Fog)をシミュレートするための方法であって、画素のための画素色を得ることと、フォグ色を前記画素色とブレンドすることとを含み、前記画素色とブレンドされるフォグ色の割合は、以下のフォグ濃度関数に基づいて決定され、Fog=2-8*(Ze-Z0)/Z1-Z0)ここで、Zeは前記画素の視点空間z値であり、Z0はフォグが開始する視点空間z値であり、Z1はフォグ濃度が実質的に最大値に達する視点空間z値である方法。
【請求項2】 さらに、前記フォグ濃度関数を適用する前に、前記画素の前記視点空間z値(Ze)を、前記画素のX位置(x)に基づいて調節することを含む、請求項1に記載の方法。
【請求項3】 さらに、中心点のまわりに対称である調節関数をZeの前記調節のために用いることを含む、請求項2に記載の方法。
【請求項4】 前記調節関数は、sqrt((x−center)2+k2)/kであり、ここで、centerは画像の中心のx位置であり、kは前記中心から離れるにつれてフォグ濃度が変化する早さを決定する、請求項3に記載の方法。
【請求項5】 グラフィックスシステムにおいてフォグ(fog)をシミュレートするための方法であって、画素のための画素色を得ることと、フォグ色を前記画素色とブレンドすることとを含み、前記画素色とブレンドされるフォグ色の割合は、以下のフォグ濃度関数に基づいて決定され、Fog=2-8*(Ze-Z0)/Z1-Z0)**2ここで、Zeは前記画素の視点空間z値であり、Z0はフォグが開始する視点空間z値であり、Z1はフォグ濃度が実質的に最大値に達する視点空間z値である方法。
【請求項6】 さらに、前記フォグ濃度関数を適用する前に、前記画素の前記視点空間z値(Ze)を、前記画素のX位置(x)に基づいて調節することを含む、請求項5に記載の方法。
【請求項7】 さらに、中心点のまわりに対称である調節関数をZeの前記調節のために用いることを含む、請求項6に記載の方法。
【請求項8】 前記調節関数は、sqrt((x−center)2+k2)/kであり、ここで、centerは画像の中心のx位置であり、kは前記中心から離れるにつれてフォグ濃度が変化する早さを決定する、請求項7に記載の方法。
【請求項9】 画素のための画素色を得る第1のセクションと、フォグ(Fog)色を前記画素色とブレンドする第2のセクションとを備えるグラフィックスシステムであって、前記第2のセクションは、以下のフォグ濃度関数に基づいて前記画素色とブレンドされるフォグ色の割合を決定し、Fog=2-8*(Ze-Z0)/Z1-Z0)ここで、Zeは前記画素の視点空間z値であり、Z0はフォグが開始する視点空間z値であり、Z1はフォグ濃度が実質的に最大値に達する視点空間z値であるグラフィックスシステム。
【請求項10】 さらに、前記フォグ濃度関数を適用する前に、前記画素の前記視点空間z値(Ze)を、前記画素のX位置(x)に基づいて調節する第3のセクションを含む、請求項9に記載のグラフィックスシステム。
【請求項11】 前記第3のセクションは、中心点のまわりに対称である調節関数をZeの前記調節のために適用する、請求項10に記載のグラフィックスシステム。
【請求項12】 前記調節関数は、sqrt((x−center)2+k2)/kであり、ここで、centerは画像の中心のx位置であり、kは前記中心から離れるにつれてフォグ濃度が変化する早さを決定する、請求項11に記載のグラフィックスシステム。
【請求項13】 画素のための画素色を得る第1のセクションと、;フォグ(Fog)色を前記画素色とブレンドする第2のセクションとを備えるグラフィックスシステムであって、前記第2のセクションは、以下のフォグ濃度関数に基づいて前記画素色とブレンドされるフォグ色の割合を決定し、Fog=2-8*(Ze-Z0)/Z1-Z0)**2ここで、Zeは前記画素の視点空間z値であり、Z0はフォグが開始する視点空間z値であり、Z1はフォグ濃度が実質的に最大値に達する視点空間z値であるグラフィックスシステム。
【請求項14】 さらに、前記フォグ濃度関数を適用する前に、前記画素の前記視点空間z値(Ze)を、前記画素のX位置(x)に基づいて調節する第3のセクションを含む、請求項13に記載のグラフィックスシステム。
【請求項15】 前記第3のセクションは、中心点のまわりに対称である調節関数をZeの前記調節のために適用する、請求項14に記載のグラフィックスシステム。
【請求項16】 前記調節関数は、sqrt((x−center)2+k2)/kであり、ここで、centerは画像の中心のx位置であり、kは前記中心から離れるにつれてフォグ濃度が変化する早さを決定する、請求項15に記載のグラフィックスシステム。
【請求項17】 フォグ(Fog)濃度関数に基づいてフォグをシミュレートする能力を有するグラフィックスシステムにおける改良であって、以下のフォグ濃度関数を実現するフォグ計算ユニットを含み、Fog=2-8*(Ze-Z0)/Z1-Z0)ここで、Zeは前記画素の視点空間z値であり、Z0はフォグが開始する視点空間z値であり、Z1はフォグ濃度が実質的に最大値に達する視点空間z値である改良。
【請求項18】 フォグ(Fog)濃度関数に基づいてフォグをシミュレートする能力を有するグラフィックスシステムにおける改良であって、以下のフォグ濃度関数を実現するフォグ計算ユニットを包含し:Fog=2-8*(Ze-Z0)/Z1-Z0)**2ここで、Zeは前記画素の視点空間z値であり、Z0はフォグが開始する視点空間z値であり、Z1はフォグ濃度が実質的に最大値に達する視点空間z値である改良。
【請求項19】 グラフィックスシステムにおいてフォグ(Fog)をシミュレートするための方法であって、前記グラフィックスシステムによってレンダリングされる画像中の位置のための色を得ることと、フォグ色を前記色とブレンドすることとを含み、前記色とブレンドされるフォグ色の割合は、以下のフォグ濃度関数に基づいて決定され、Fog=2-8*(Ze-Z0)/Z1-Z0)ここで、Zeは前記位置の視点空間z値であり、Z0はフォグが開始する視点空間z値であり、Z1はフォグ濃度が実質的に最大値に達する視点空間z値である方法。
【請求項20】 グラフィックスシステムにおいてフォグ(Fog)をシミュレートするための方法であって、前記グラフィックスシステムによってレンダリングされる画像中の位置のための色を得ることと、フォグ色を前記色とブレンドすることとを含み、前記色とブレンドされるフォグ色の割合は、以下のフォグ濃度関数に基づいて決定され、Fog=2-8*(Ze-Z0)/Z1-Z0)**2ここで、Zeは前記位置の視点空間z値であり、Z0はフォグが開始する視点空間z値であり、Z1はフォグ濃度が実質的に最大値に達する視点空間z値である方法。
【請求項1】 グラフィックスシステムにおいてフォグ(Fog)をシミュレートするための方法であって、画素のための画素色を得ることと、フォグ色を前記画素色とブレンドすることとを含み、前記画素色とブレンドされるフォグ色の割合は、以下のフォグ濃度関数に基づいて決定され、Fog=2-8*(Ze-Z0)/Z1-Z0)ここで、Zeは前記画素の視点空間z値であり、Z0はフォグが開始する視点空間z値であり、Z1はフォグ濃度が実質的に最大値に達する視点空間z値である方法。
【請求項2】 さらに、前記フォグ濃度関数を適用する前に、前記画素の前記視点空間z値(Ze)を、前記画素のX位置(x)に基づいて調節することを含む、請求項1に記載の方法。
【請求項3】 さらに、中心点のまわりに対称である調節関数をZeの前記調節のために用いることを含む、請求項2に記載の方法。
【請求項4】 前記調節関数は、sqrt((x−center)2+k2)/kであり、ここで、centerは画像の中心のx位置であり、kは前記中心から離れるにつれてフォグ濃度が変化する早さを決定する、請求項3に記載の方法。
【請求項5】 グラフィックスシステムにおいてフォグ(fog)をシミュレートするための方法であって、画素のための画素色を得ることと、フォグ色を前記画素色とブレンドすることとを含み、前記画素色とブレンドされるフォグ色の割合は、以下のフォグ濃度関数に基づいて決定され、Fog=2-8*(Ze-Z0)/Z1-Z0)**2ここで、Zeは前記画素の視点空間z値であり、Z0はフォグが開始する視点空間z値であり、Z1はフォグ濃度が実質的に最大値に達する視点空間z値である方法。
【請求項6】 さらに、前記フォグ濃度関数を適用する前に、前記画素の前記視点空間z値(Ze)を、前記画素のX位置(x)に基づいて調節することを含む、請求項5に記載の方法。
【請求項7】 さらに、中心点のまわりに対称である調節関数をZeの前記調節のために用いることを含む、請求項6に記載の方法。
【請求項8】 前記調節関数は、sqrt((x−center)2+k2)/kであり、ここで、centerは画像の中心のx位置であり、kは前記中心から離れるにつれてフォグ濃度が変化する早さを決定する、請求項7に記載の方法。
【請求項9】 画素のための画素色を得る第1のセクションと、フォグ(Fog)色を前記画素色とブレンドする第2のセクションとを備えるグラフィックスシステムであって、前記第2のセクションは、以下のフォグ濃度関数に基づいて前記画素色とブレンドされるフォグ色の割合を決定し、Fog=2-8*(Ze-Z0)/Z1-Z0)ここで、Zeは前記画素の視点空間z値であり、Z0はフォグが開始する視点空間z値であり、Z1はフォグ濃度が実質的に最大値に達する視点空間z値であるグラフィックスシステム。
【請求項10】 さらに、前記フォグ濃度関数を適用する前に、前記画素の前記視点空間z値(Ze)を、前記画素のX位置(x)に基づいて調節する第3のセクションを含む、請求項9に記載のグラフィックスシステム。
【請求項11】 前記第3のセクションは、中心点のまわりに対称である調節関数をZeの前記調節のために適用する、請求項10に記載のグラフィックスシステム。
【請求項12】 前記調節関数は、sqrt((x−center)2+k2)/kであり、ここで、centerは画像の中心のx位置であり、kは前記中心から離れるにつれてフォグ濃度が変化する早さを決定する、請求項11に記載のグラフィックスシステム。
【請求項13】 画素のための画素色を得る第1のセクションと、;フォグ(Fog)色を前記画素色とブレンドする第2のセクションとを備えるグラフィックスシステムであって、前記第2のセクションは、以下のフォグ濃度関数に基づいて前記画素色とブレンドされるフォグ色の割合を決定し、Fog=2-8*(Ze-Z0)/Z1-Z0)**2ここで、Zeは前記画素の視点空間z値であり、Z0はフォグが開始する視点空間z値であり、Z1はフォグ濃度が実質的に最大値に達する視点空間z値であるグラフィックスシステム。
【請求項14】 さらに、前記フォグ濃度関数を適用する前に、前記画素の前記視点空間z値(Ze)を、前記画素のX位置(x)に基づいて調節する第3のセクションを含む、請求項13に記載のグラフィックスシステム。
【請求項15】 前記第3のセクションは、中心点のまわりに対称である調節関数をZeの前記調節のために適用する、請求項14に記載のグラフィックスシステム。
【請求項16】 前記調節関数は、sqrt((x−center)2+k2)/kであり、ここで、centerは画像の中心のx位置であり、kは前記中心から離れるにつれてフォグ濃度が変化する早さを決定する、請求項15に記載のグラフィックスシステム。
【請求項17】 フォグ(Fog)濃度関数に基づいてフォグをシミュレートする能力を有するグラフィックスシステムにおける改良であって、以下のフォグ濃度関数を実現するフォグ計算ユニットを含み、Fog=2-8*(Ze-Z0)/Z1-Z0)ここで、Zeは前記画素の視点空間z値であり、Z0はフォグが開始する視点空間z値であり、Z1はフォグ濃度が実質的に最大値に達する視点空間z値である改良。
【請求項18】 フォグ(Fog)濃度関数に基づいてフォグをシミュレートする能力を有するグラフィックスシステムにおける改良であって、以下のフォグ濃度関数を実現するフォグ計算ユニットを包含し:Fog=2-8*(Ze-Z0)/Z1-Z0)**2ここで、Zeは前記画素の視点空間z値であり、Z0はフォグが開始する視点空間z値であり、Z1はフォグ濃度が実質的に最大値に達する視点空間z値である改良。
【請求項19】 グラフィックスシステムにおいてフォグ(Fog)をシミュレートするための方法であって、前記グラフィックスシステムによってレンダリングされる画像中の位置のための色を得ることと、フォグ色を前記色とブレンドすることとを含み、前記色とブレンドされるフォグ色の割合は、以下のフォグ濃度関数に基づいて決定され、Fog=2-8*(Ze-Z0)/Z1-Z0)ここで、Zeは前記位置の視点空間z値であり、Z0はフォグが開始する視点空間z値であり、Z1はフォグ濃度が実質的に最大値に達する視点空間z値である方法。
【請求項20】 グラフィックスシステムにおいてフォグ(Fog)をシミュレートするための方法であって、前記グラフィックスシステムによってレンダリングされる画像中の位置のための色を得ることと、フォグ色を前記色とブレンドすることとを含み、前記色とブレンドされるフォグ色の割合は、以下のフォグ濃度関数に基づいて決定され、Fog=2-8*(Ze-Z0)/Z1-Z0)**2ここで、Zeは前記位置の視点空間z値であり、Z0はフォグが開始する視点空間z値であり、Z1はフォグ濃度が実質的に最大値に達する視点空間z値である方法。
【図1】
【図2】
【図6】
【図7】
【図8】
【図9】
【図3】
【図4】
【図10】
【図11】
【図12】
【図5】
【図13】
【図14】
【図15】
【図2】
【図6】
【図7】
【図8】
【図9】
【図3】
【図4】
【図10】
【図11】
【図12】
【図5】
【図13】
【図14】
【図15】
【公開番号】特開2002−236934(P2002−236934A)
【公開日】平成14年8月23日(2002.8.23)
【国際特許分類】
【外国語出願】有
【出願番号】特願2001−206702(P2001−206702)
【出願日】平成13年7月6日(2001.7.6)
【出願人】(000233778)任天堂株式会社 (1,115)
【Fターム(参考)】
【公開日】平成14年8月23日(2002.8.23)
【国際特許分類】
【出願番号】特願2001−206702(P2001−206702)
【出願日】平成13年7月6日(2001.7.6)
【出願人】(000233778)任天堂株式会社 (1,115)
【Fターム(参考)】
[ Back to top ]