(57)【特許請求の範囲】
【請求項１】
メモリおよび演算手段を備えたグラフィックスシステムにおいてフォグ（Ｆｏｇ）をシミュレートするための方法であって、
前記演算手段が、
前記メモリに記憶された画素のための画素色を得る処理と、
フォグ色を前記画素色とブレンドする処理とを実行し、
前記画素色とブレンドされるフォグ色の割合は、以下のフォグ濃度関数に基づいて決定され、
Ｆｏｇ＝２-8*(Ze-Z0)/Z1-Z0)
ここで、Ｚｅは前記画素の３次元空間における視点からの深度を示す視点空間ｚ値であり、Ｚ０はフォグが開始する視点空間ｚ値であり、Ｚ１はフォグ濃度が実質的に最大値に達する視点空間ｚ値であり、
前記演算手段が、さらに、前記フォグ濃度関数を適用する前に、前記画素の前記視点空間ｚ値（Ｚｅ）を、前記画素の３次元空間における視点からの深度の方向に対して垂直な方向への位置を示すＸ位置（ｘ）に基づいて調節する処理を実行する方法。
【請求項２】
前記演算手段が、さらに、中心点のまわりに対称である調節関数をＺｅの前記調節のために用いる処理を実行する、請求項１に記載の方法。
【請求項３】
前記調節関数は、
ｓｑｒｔ（（ｘ−ｃｅｎｔｅｒ）2＋ｋ2）／ｋであり、
ここで、ｃｅｎｔｅｒは画像の中心のＸ位置であり、ｋは前記中心から離れるにつれてフォグ濃度が変化する早さを決定する、請求項２に記載の方法。
【請求項４】
メモリおよび演算手段を備えたグラフィックスシステムにおいてフォグ（ｆｏｇ）をシミュレートするための方法であって、
前記演算手段が、
前記メモリに記憶された画素のための画素色を得る処理と、
フォグ色を前記画素色とブレンドする処理とを実行し、
前記画素色とブレンドされるフォグ色の割合は、以下のフォグ濃度関数に基づいて決定され、
Ｆｏｇ＝２-8*(Ze-Z0)/Z1-Z0)**2
ここで、Ｚｅは前記画素の３次元空間における視点からの深度を示す視点空間ｚ値であり、Ｚ０はフォグが開始する視点空間ｚ値であり、Ｚ１はフォグ濃度が実質的に最大値に達する視点空間ｚ値であり、
前記演算手段が、さらに、前記フォグ濃度関数を適用する前に、前記画素の前記視点空間ｚ値（Ｚｅ）を、前記画素の３次元空間における視点からの深度の方向に対して垂直な方向への位置を示すＸ位置（ｘ）に基づいて調節する処理を実行する方法。
【請求項５】
前記演算手段が、さらに、中心点のまわりに対称である調節関数をＺｅの前記調節のために用いる処理を実行する、請求項４に記載の方法。
【請求項６】
前記調節関数は、
ｓｑｒｔ（（ｘ−ｃｅｎｔｅｒ）2＋ｋ2）／ｋであり、
ここで、ｃｅｎｔｅｒは画像の中心のＸ位置であり、ｋは前記中心から離れるにつれてフォグ濃度が変化する早さを決定する、請求項５に記載の方法。
【請求項７】
メモリに記憶された画素のための画素色を得る処理を行う第１の演算部と、
フォグ（Ｆｏｇ）色を前記画素色とブレンドする処理を行う第２の演算部とを備えるグラフィックスシステムであって、
前記第２の演算部は、以下のフォグ濃度関数に基づいて前記画素色とブレンドされるフォグ色の割合を決定し、
Ｆｏｇ＝２-8*(Ze-Z0)/Z1-Z0)
ここで、Ｚｅは前記画素の３次元空間における視点からの深度を示す視点空間ｚ値であり、Ｚ０はフォグが開始する視点空間ｚ値であり、Ｚ１はフォグ濃度が実質的に最大値に達する視点空間ｚ値であり、
さらに、前記フォグ濃度関数を適用する前に、前記画素の前記視点空間ｚ値（Ｚｅ）を、前記画素の３次元空間における視点からの深度の方向に対して垂直な方向への位置を示すＸ位置（ｘ）に基づいて調節する処理を実行する第３の処理部を備えるグラフィックスシステム。
【請求項８】
前記第３の演算部は、中心点のまわりに対称である調節関数をＺｅの前記調節のために適用する処理を行う、請求項７に記載のグラフィックスシステム。
【請求項９】
前記調節関数は、
ｓｑｒｔ（（ｘ−ｃｅｎｔｅｒ）2＋ｋ2）／ｋであり、
ここで、ｃｅｎｔｅｒは画像の中心のＸ位置であり、ｋは前記中心から離れるにつれてフォグ濃度が変化する早さを決定する、請求項８に記載のグラフィックスシステム。
【請求項１０】
メモリに記憶された画素のための画素色を得る処理を行う第１の演算部と、；
フォグ（Ｆｏｇ）色を前記画素色とブレンドする処理を行う第２の演算部とを備えるグラフィックスシステムであって、
前記第２の演算部は、以下のフォグ濃度関数に基づいて前記画素色とブレンドされるフォグ色の割合を決定し、
Ｆｏｇ＝２-8*(Ze-Z0)/Z1-Z0)**2
ここで、Ｚｅは前記画素の３次元空間における視点からの深度を示す視点空間ｚ値であり、Ｚ０はフォグが開始する視点空間ｚ値であり、Ｚ１はフォグ濃度が実質的に最大値に達する視点空間ｚ値であり、
さらに、前記フォグ濃度関数を適用する前に、前記画素の前記視点空間ｚ値（Ｚｅ）を、前記画素の３次元空間における視点からの深度の方向に対して垂直な方向への位置を示すＸ位置（ｘ）に基づいて調節する処理を実行する第３の処理部を備えるグラフィックスシステム。
【請求項１１】
前記第３の演算部は、中心点のまわりに対称である調節関数をＺｅの前記調節のために適用する処理を行う、請求項１０に記載のグラフィックスシステム。
【請求項１２】
前記調節関数は、
ｓｑｒｔ（（ｘ−ｃｅｎｔｅｒ）2＋ｋ2）／ｋであり、
ここで、ｃｅｎｔｅｒは画像の中心のＸ位置であり、ｋは前記中心から離れるにつれてフォグ濃度が変化する早さを決定する、請求項１１に記載のグラフィックスシステム。
【請求項１３】
フォグ（Ｆｏｇ）をシミュレートするグラフィックスシステムのコンピュータに、
メモリに記憶された画素のための画素色を得る処理と、
フォグ色を前記画素色とブレンドする処理とを実行させ、
前記画素色とブレンドされるフォグ色の割合は、以下のフォグ濃度関数に基づいて決定され、
Ｆｏｇ＝２-8*(Ze-Z0)/Z1-Z0)
ここで、Ｚｅは前記画素の３次元空間における視点からの深度を示す視点空間ｚ値であり、Ｚ０はフォグが開始する視点空間ｚ値であり、Ｚ１はフォグ濃度が実質的に最大値に達する視点空間ｚ値であり、
さらに、前記フォグ濃度関数を適用する前に、前記画素の前記視点空間ｚ値（Ｚｅ）を、前記画素の３次元空間における視点からの深度の方向に対して垂直な方向への位置を示すＸ位置（ｘ）に基づいて調節する処理を実行させるための、プログラム。
【請求項１４】
フォグ（Ｆｏｇ）をシミュレートするグラフィックスシステムのコンピュータに、
メモリに記憶された画素のための画素色を得る処理と、
フォグ色を前記画素色とブレンドする処理とを実行させ、
前記画素色とブレンドされるフォグ色の割合は、以下のフォグ濃度関数に基づいて決定され、
Ｆｏｇ＝２-8*(Ze-Z0)/Z1-Z0)**2
ここで、Ｚｅは前記画素の３次元空間における視点からの深度を示す視点空間ｚ値であり、Ｚ０はフォグが開始する視点空間ｚ値であり、Ｚ１はフォグ濃度が実質的に最大値に達する視点空間ｚ値であり、
さらに、前記フォグ濃度関数を適用する前に、前記画素の前記視点空間ｚ値（Ｚｅ）を、前記画素の３次元空間における視点からの深度の方向に対して垂直な方向への位置を示すＸ位置（ｘ）に基づいて調節する処理を実行させるための、プログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、コンピュータグラフィックスに関し、より特定的には、家庭用ビデオゲームプラットフォームなどの対話式グラフィックスシステムに関する。本発明は、さらに特定的には、対話式３次元（３Ｄ）グラフィックシステムにおいて改良されたフォグ（Ｆｏｇ）効果を提供するためのシステムおよび方法に関する。
【０００２】
【従来の技術】
我々の多くは、驚くほどリアルな恐竜、異星人、アニメーション化された玩具、およびその他の空想的な生物を含む映画を観たことがある。このようなアニメーションは、コンピュータグラフィックスによって可能となる。こうした技術を用いることにより、コンピュータグラフィックスアーチストは、各オブジェクトがどのように見えるべきか、また時間とともにどのように外見が変化すべきかを指定することができ、そしてコンピュータがオブジェクトをモデリングし、これらをテレビやコンピュータスクリーンなどのディスプレイ上に表示する。このコンピュータは、シーン中の各オブジェクトの位置および方向、各オブジェクトに光が入射しているように見える方向、各オブジェクトの表面テクスチャ、およびその他の要素に基づき、表示された画像の各部分がちょうど正しく色付けされかつ形付けられていることを確実にするために必要な多くの処理の実行を担当する。
【０００３】
コンピュータグラフィックスの生成は複雑であるため、ほんの数年前では、コンピュータ生成された３次元グラフィックスは、高価な専用のフライトシミュレータ、ハイエンドのグラフィックスワークステーション、およびスーパーコンピュータに概ね限定されていた。大衆は、これらのコンピュータシステムによって生成された画像のいくつかを映画や高価なテレビ広告で見ることはあったが、我々の大部分は、グラフィックス生成を行うコンピュータに実際に接触することはできなかった。これが全て、例えばニンテンドウ６４（登録商標）などの比較的安価な３Ｄグラフィックスプラットフォームや、現在パーソナルコンピュータで利用可能な様々な３Ｄグラフィックスカードが利用可能になることにより変貌した。今や、家庭またはオフィスにて、比較的安価なコンピュータグラフィックスシステム上で刺激的な３Ｄアニメーションおよびシミュレーションと接触することが可能である。
【０００４】
過去において、グラフィックスシステムの設計者が直面した問題は、グラフィックスシステム中の３Ｄの仮想世界を現実世界により近くモデリングすることによって、グラフィックスシステムのリアリズムを改善することであった。グラフィックスシステムの一つの問題点は、現実世界で霧およびその他の同様な大気条件が創出する効果を、自動的には考慮しないことである。すなわち、画像全体を通じてはっきりと非常に明瞭な質感を持つコンピュータグラフィックスの画像は、現実世界と比較して非現実的に見えることがある。現実世界においては、遠くのオブジェクトは近くのオブジェクトよりも、観察者に対して明瞭さが劣って見える。この明瞭度の差は、霧、スモッグ、もや、煙、汚染、および／またはかすみ（以後単に「フォグ（Ｆｏｇ）」）が、観察者と観察されているオブジェクトとの間の大気中に存在し得ることに起因する。その結果、フォグを構成する分子が光を屈曲させることにより、観察者からオブジェクトへの距離が増すにしたがってオブジェクトの明瞭度が減少する。例えば、現実世界においてフォグは、ある人の近くの木を、同じ人に対してより遠い木よりも明瞭であるように、その人に対して見えるようにする。
【０００５】
これに対して、コンピュータグラフィックスシステムの仮想世界においては、グラフィックスシステム中にフォグの効果をシミュレートするメカニズムが用いられない限り、オブジェクトは全て同じ明瞭度を有する。この問題に対して、様々な解決策が提案された。例えば、仮想世界のよりリアルな見え方を提供するために、レンダレングされたシーン中にフォグなどの大気効果を導入するための機能および技術を、多くのグラフィックスシステムが提供している。例えば、ＯｐｅｎＧＬグラフィックスシステム（グラフィックスハードウェアに対して、一般に用いられるソフトウェアインターフェースを提供するものである）は、プログラマが大気のフォグ効果をレンダリングすることを可能にする。ＯｐｅｎＧＬは、フォグブレンディング係数ｆを用いて、フォグ色を受け取ったフラグメントとブレンドすることにより、以下のようにフォギングを実現する。
Ｃ＝ｆＣin＋（１−ｆ）Ｃfog
【０００６】
このブレンディング係数は、以下の３つの等式のうちの１つを用いて、算出される。
１）指数（ＧＬ＿ＥＸＰ）：ｆ＝ｅ-(density*z)
２）指数二乗（ＧＬ＿ＥＸＰ２）：ｆ＝ｅ-(density*z)**2
３）線形（ＧＬ＿ＬＩＮＥＡＲ）：ｆ＝（ｅｎｄ−ｚ）／（ｅｎｄ−ｓｔａｒｔ）
式中において、ｚは、視点とフラグメント中心との間の視点座標距離である。濃度（ｄｅｎｓｉｔｙ）、始点（ｓｔａｒｔ）、および終点（ｅｎｄ）の値は、全て特定の関数（すなわちｇｌｆｏｇ*（））を用いるプログラマによって指定される。
【０００７】
線形フォグは、例えば、輝度−深度キューイング（観察者に対してより近いオブジェクトはより高い輝度で描画される）を実現するためにしばしば用いられる。距離の関数としての輝度の効果は、受け取ったフラグメントを黒色のフォグ色とブレンドすることにより達成される。指数的フォグ等式は、物理的基礎を有している。すなわち、これは、オブジェクトと観察者との間における均一な減衰を積分した結果である。指数関数は、例えば、フォグ色およびフォグ濃度値の異なる組み合わせを用いて、複数の大気効果を表現するために用いられ得る。フォグを用いて、遠い平面の近傍のオブジェクトのぼやけた視認性を援用することにより、描画時間のオーバーラン、詳細度の遷移、およびデータベースページングなどの様々な問題を克服することができる。しかし、実用に際して、指数関数は、遠くのフラグメントを十分に早く減衰しないことがが見いだされている。従って、よりシャープな視認性の降下を提供するために、ＯｐｅｎＧＬにおいて指数二乗が導入された。グラフィックスハードウェアに対するＤｉｒｅｃｔ３Ｄ（ＤｉｒｅｃｔＸ）インターフェースもまた、線形、指数、および指数二乗を濃度等式において提供する。
【０００８】
【発明が解決しようとする課題】
上述のように、３Ｄグラフィックス画像をより自然かつリアルに見せるために、過去において様々なフォグメカニズムが用いられてきた。しかし、多大な研究が過去になされてはいるが、フォグシミュレーションに関連するさらなる改良が望まれる。
【０００９】
本発明は、グラフィックスシステムにおけるフォグの使用をさらに強化する改良された技術および構成を提供することにより、この問題を解決する。本発明は、グラフィックスシステムにおいて、新しく、面白くかつ視覚的に楽しい効果を達成することを可能にする改良されたフォグ機能を提供する。さらに、本発明は、フォグの水平レンジの調節を提供することにより、効果をよりリアルにするためにスクリーンの端に向かってフォグ濃度を増加する能力を提供する。本発明は、さらに、象限毎につき１つのフォグ値しか定義されない場合に、通常象限およびｚｂｌｉｔ象限に対するフォグあるいはスクリーン空間ｚをサンプリングする方法を提供する。
【００１０】
【課題を解決するための手段および効果】
本発明により提供される１つの局面によれば、グラフィックスシステムにおいてフォグをシミュレートするための方法およびシステムが提供され、上記方法は、画素のための画素色を得ることと、フォグ色を前記画素色とブレンドすることとを含み、上記画素色とブレンドされるフォグ色の割合は、以下の２つのフォグ濃度関数のうちのいずれかに基づいて決定される。
Ｆｏｇ＝２-8*(Ze-Z0)/Z1-Z0)                  （逆指数）
Ｆｏｇ＝２-8*(Ze-Z0)/Z1-Z0)**2               （逆指数二乗）
ここで、Ｚｅは、上記画素の視点空間ｚ値であり、Ｚ０はフォグが開始する視点空間ｚ値であり、Ｚ１はフォグ濃度が実質的に最大値に達する視点空間ｚ値である。
【００１１】
好ましくは、フォグ濃度関数を適用する前に、ｘ軸方向において視角がＺ軸から離れる方向に増加するにつれるレンジの変化を補正するために、視点空間ｚ値（Ｚｅ）に対してレンジ調節がなされる。
【００１２】
【発明の実施の形態】
図１は、対話式３Ｄコンピュータグラフィックスシステム５０の一例を示す。システム５０は、対話式３Ｄビデオゲームを面白いステレオ音とともにプレイするために用いられ得る。また、様々な他の応用例にも用いられ得る。
【００１３】
本例において、システム５０は、３次元世界のデジタル表現物あるいはモデルを、対話式にリアルタイムで処理することが可能である。システム５０は、その世界のうちの一部または全部を、いかなる任意の視点から表示することもできる。例えば、システム５０は、手持ちコントローラ５２ａ、５２ｂまたはその他の入力デバイスからのリアルタイム入力に応答して、対話式に視点を変更することができる。これにより、ゲームのプレーヤが、その世界の中または外側にいる人の目を通じて、その世界を見ることが可能になる。システム５０は、リアルタイム３Ｄ対話式表示を必要としない応用例（例えば、２Ｄ表示生成および／または非対話式表示）に用いられ得るが、非常に素早く高品質３Ｄ画像を表示できる能力を、非常にリアルかつ刺激的なゲームプレイまたはその他のグラフィカルな対話を創出するために用いることができる。
【００１４】
システム５０を用いて、ビデオゲームまたはその他のアプリケーションをプレイするために、ユーザは、まず、ケーブル５８を両者の間に接続することによって、メインユニット５４を自分のカラーテレビ５６またはその他のディスプレイデバイスに接続する。メインユニット５４は、カラーテレビ５６を制御するための映像信号と音声信号との両方を生成する。映像信号は、テレビスクリーン５９上に表示される画像を制御するものであり、音声信号は、テレビのステレオスピーカ６１Ｌ、６１Ｒを介して音として再生される。
【００１５】
ユーザは、また、メインユニット５４を電源に接続する必要がある。この電源は、標準的な家庭用電気コンセントに接続して家庭電流をメインユニット５４に電力供給するために、適切なより低いＤＣ電圧信号に変換する従来のＡＣアダプタ（図示せず）であり得る。他の実施形態として、電池を用い得る。
【００１６】
ユーザは、メインユニット５４を制御するためにハンドコントローラ５２ａ、５２ｂを用い得る。コントロール６０は、例えば、テレビ５６上に表示されたキャラクターが３Ｄ世界内で移動するべき方向（上下、左右、近くあるいは遠く）を指定するために用い得る。コントロール６０は、また、他のアプリケーション（例えば、メニュー選択、ポインタ／カーソル制御など）のための入力を提供する。コントローラ５２は、様々な形態を取り得る。本例においては、図示したコントローラ５２は、それぞれジョイスティック、プッシュボタンおよび／または方向スイッチとしてのコントロール６０を含む。コントローラ５２は、ケーブルを介して、あるいは電磁（例えば高周波または赤外線）波を介して無線でメインユニット５４に接続され得る。
【００１７】
ゲームなどのアプリケーションをプレイするためには、ユーザは自分がプレイしたいビデオゲームあるいはその他のアプリケーションを記憶している適切な記憶媒体６２を選択し、その記憶媒体をメインユニット５４のスロット６４に挿入する。記憶媒体６２は、例えば、専用にコード化されたおよび／または暗号化された光学および／または磁気ディスクであり得る。ユーザは、パワースイッチ６６を操作してメインユニット５４をオンにし、記憶媒体６２に記憶されたソフトウェアに基づいて、メインユニットにビデオゲームあるいはその他のアプリケーションの実行を開始させ得る。ユーザは、コントローラ５２を操作してメインユニット５４に入力を供給し得る。例えば、コントロール６０を操作することにより、ゲームあるいはその他のアプリケーションを開始させ得る。その他のコントロール６０を動かすことにより、アニメーション化されたキャラクターを異なる方向に移動させたり、３Ｄ世界におけるユーザの視点を変更することができる。記憶媒体６２に記憶された特定のソフトウェアに依存して、コントローラ５２上の様々なコントロール６０は、異なる時刻において異なる機能を実行することができる。
【００１８】
システム全体の電子回路例
図２に、システム５０の要素例のブロック図を示す。主要な要素として以下のものを含む。
・メインプロセッサ（ＣＰＵ）１１０、
・メインメモリ１１２、および
・グラフィックスおよび音声プロセッサ１１４
【００１９】
本例において、メインプロセッサ１１０（例えば、機能拡張型ＩＢＭ  Ｐｏｗｅｒ  ＰＣ７５０）は、手持ちコントローラ１０８（および／または他の入力装置）からの入力を、グラフィックスおよびプロセッサ１１４を介して受け取る。メインプロセッサ１１０は、ユーザ入力に対話式に応答し、例えば、外部記憶媒体６２から光ディスクドライブなどの大容量記憶アクセス装置１０６を介して供給されるビデオゲームあるいはその他のプログラムを実行する。一例としてビデオゲームプレイの場合、メインプロセッサ１１０は、様々な対話式機能および制御機能に加えて、衝突検出およびアニメーション処理を実行することができる。
【００２０】
本例において、メインプロセッサ１１０は、３Ｄグラフィックスコマンドおよび音声コマンドを生成し、これらをグラフィックスおよび音声プロセッサ１１４に送る。グラフィックスおよび音声プロセッサ１１４は、これらのコマンドを処理することにより、ディスプレイ５９上に面白い視覚画像を生成し、ステレオスピーカ６１Ｒ、６１Ｌまたはその他の適切な音声生成装置上で面白いステレオ音を生成する。
【００２１】
例示のシステム５０は、グラフィックスおよび音声プロセッサ１１４から画像信号を受け取って、画像信号をコンピュータモニタまたは家庭用カラーテレビ５６などの標準的な表示装置上での表示に適したアナログおよび／またはデジタル映像信号に変換するビデオ符号化器１２０を有する。システム５０はまた、デジタル化された音声信号を圧縮および伸長し、また必要に応じてデジタルおよびアナログの音声信号化フォーマット間の変換を行う音声コーデック（圧縮器／伸長器）１２２を有する。音声コーデック１２２は、バッファ１２４を介して音声入力を受け取り、これらをグラフィックスおよび音声プロセッサ１１４に処理（例えば、プロセッサが生成する、および／または大容量記憶アクセス装置１０６の音声ストリーミング出力を介して受け取る他の音声信号との混合）のために供給することができる。本例におけるグラフィックスおよび音声プロセッサ１１４は、音声関連の情報を、音声タスクについて利用可能である音声メモリ１２６中に記憶することができる。グラフィックスおよび音声プロセッサ１１４は、結果として得られた音声出力信号を、伸長およびアナログ信号への変換（例えばバッファアンプ１２８Ｌ、１２８Ｒを介して）のために音声コーデック１２２に供給することにより、スピーカ６１Ｌ、６１Ｒによって再生できるようにする。
【００２２】
グラフィックスおよび音声プロセッサ１１４は、システム５０内に存在し得る様々な追加的なデバイスと連絡する能力を有する。例えば、大容量記憶アクセス装置１０６および／またはその他の要素と連絡するために、パラレルデジタルバス１３０を用い得る。シリアル周辺バス１３２は、例えば、
・プログラム可能なリードオンリーメモリおよび／またはリアルタイムクロック１３４、
・モデム１３６その他のネットワーク化インターフェース（これは、プログラム命令および／またはデータをダウンロードまたはアップロードすることができるインターネットあるいはその他のデジタルネットワークなどの通信ネットワーク１３８に、システム５０を接続し得る）、および
・フラッシュメモリ１４０
を含む、様々な周辺デバイスまたはその他のデバイスと連絡し得る。追加的な拡張メモリ１４４（例えばメモリカード）やその他のデバイスと連絡するために、さらなる外部シリアルバス１４２を用い得る。コネクタを用いて様々なデバイスをバス１３０、１３２、１４２に接続し得る。
【００２３】
グラフィックスおよび音声プロセッサの例
図３は、グラフィックスおよび音声プロセッサ１１４の一例のブロック図である。一例において、グラフィックスおよび音声プロセッサ１１４は、単一チップのＡＳＩＣ（アプリケーション専用集積回路）であり得る。本例において、グラフィックスおよび音声プロセッサ１１４は、以下を含む。
・プロセッサインターフェース１５０
・メモリインターフェース／コントローラ１５２
・３Ｄグラフィックスプロセッサ１５４
・音声デジタル信号プロセッサ（ＤＳＰ）１５６
・音声メモリインターフェース１５８
・音声インターフェースおよびミキサ１６０
・周辺コントローラ１６２、および
・ディスプレイコントローラ１６４
【００２４】
３Ｄグラフィックスプロセッサ１５４は、グラフィックス処理タスクを行う。音声デジタル信号プロセッサ１５６は、音声処理タスクを行う。ディスプレイコントローラ１６４は、メインメモリ１１２からの画像情報にアクセスし、これをディスプレイデバイス５６上に表示するためにビデオ符号化器１２０に供給する。音声インターフェースおよびミキサ１６０は音声コーデック１２０とインターフェースし、また異なるソースからの音声（例えば大容量記憶アクセス装置１０６からの音声ストリーミング、音声ＤＳＰ１５６の出力、および音声コーデック１２２を介して受け取られる外部音声入力）を混合することができる。プロセッサインターフェース１５０は、メインプロセッサ１１０とグラフィックスおよび音声プロセッサ１１４との間のデータおよび制御インターフェースを提供する。
メモリインターフェース１５２は、グラフィックスおよび音声プロセッサ１１４とメモリ１１２との間の、データおよび制御インターフェースを提供する。本例において、メインプロセッサ１１０は、グラフィックスおよび音声プロセッサ１１４の一部であるプロセッサインターフェース１５０およびメモリインターフェース１５２を介して、メインメモリ１１２にアクセスする。周辺コントローラ１６２は、グラフィックスおよび音声プロセッサ１１４と、上述した様々な周辺機器との間の、データおよび制御インターフェースを提供する。音声メモリインターフェース１５８は、音声メモリ１２６とのインターフェースを提供する。
【００２５】
グラフィックスパイプラインの例
図４は、３Ｄグラフィックスプロセッサ１５４の一例のより詳細な図を示す。３Ｄグラフィックスプロセッサ１５４は、特に、コマンドプロセッサ２００および３Ｄグラフィックスパイプライン１８０を含む。メインプロセッサ１１０は、データのストリーム（例えば、グラフィックスコマンドストリームおよび表示リスト）を、コマンドプロセッサ２００に通信する。メインプロセッサ１１０は、メモリ待ち時間を最小にするために２レベルキャッシュ１１５を有し、また、グラフィックスおよび音声プロセッサ１１４を対象とした非キャッシュデータストリーム用の書き込み収集バッファ１１１を有している。書き込み収集バッファ１１１は、部分キャッシュラインを集めて完全なキャッシュラインにし、データを一度につき１キャッシュラインずつグラフィックスおよび音声プロセッサ１１４に送り出すことにより、バス利用率を最大にする。
【００２６】
コマンドプロセッサ２００は、メインプロセッサ１１０から表示コマンドを受け取って解析する（これらを処理するために必要な任意の追加的なデータは、共有メモリ１１２から得る）。コマンドプロセッサ２００は、頂点コマンドのストリームを、２Ｄおよび／または３Ｄ処理およびレンダリングのためにグラフィックスパイプライン１８０に供給する。グラフィックスパイプライン１８０は、これらのコマンドに基づいて画像を生成する。得られた画像情報は、ディスプレイコントローラ／ビデオインターフェースユニット１６４（パイプライン１８０のフレームバッファ出力をディスプレイ５６上に表示する）によるアクセスのために、メインメモリ１１２に転送され得る。
【００２７】
図５は、グラフィックスプロセッサ１５４の論理フロー図である。メインプロセッサ１１０は、グラフィックスコマンドストリーム２１０、表示リスト２１２、および頂点配列２１４をメインメモリ１１２に格納し得、バスインターフェース１５０を介してコマンドプロセッサ２００にポインタを渡し得る。メインプロセッサ１１０は、メインメモリ１１２内に割り当てた１つ以上のグラフィックス先入れ先出し（ＦＩＦＯ）バッファ２１０に、グラフィックスコマンドを格納する。コマンドプロセッサ２００は、
・同期／フロー制御および負荷バランスを取るためグラフィックスコマンドを受け取りバッファリングするオンチップＦＩＦＯメモリバッファ２１６を介して、メインメモリ１１２からのコマンドストリーム、、
・オンチップコールＦＩＦＯメモリバッファ２１８を介して、メインメモリ１１２からの表示リスト２１２、および
・頂点キャッシュを介して、コマンドストリームからおよび／またはメインメモリ１１２中の頂点配列２１４からの頂点属性）
を取り込む。
【００２８】
コマンドプロセッサ２００は、属性タイプを浮動小数点フォーマットに変換し、得られた完全な頂点ポリゴンデータをレンダリング／ラスタライゼーションのためにグラフィックスパイプライン１８０に渡すコマンド処理動作２００ａを行う。プログラム可能なメモリ調停回路１３０（図４を参照）は、共有メインメモリ１１２へのアクセスを、グラフィックスパイプライン１８０、コマンドプロセッサ２００、およびディスプレイコントローラ／ビデオインターフェースユニット１６４間で調停する。
【００２９】
図４は、グラフィックスパイプライン１８０が以下を含み得ることを示している。
・変換ユニット３００
・セットアップ／ラスタライザ４００
・テクスチャユニット５００
・テクスチャ環境ユニット６００、および
・画素エンジン７００
【００３０】
変換ユニット３００は、様々な２Ｄおよび３Ｄ変換ならびにその他の動作３００ａを行う（図５を参照）。変換ユニット３００は、変換処理３００ａで用いられる行列を格納するための、１つ以上のマトリックスメモリ３００ｂを有し得る。変換ユニット３００は、受け取った図形を頂点毎にオブジェクト空間からスクリーン空間に変換し、また、受け取ったテクスチャ座標を変換し投影テクスチャ座標を生成する（３００ｃ）。変換ユニット３００は、また、ポリゴンクリッピング／間引き３００ｄを行ってもよい。やはり変換ユニット３００ｂによって行われる照明処理３００ｅは、一実施例において最高８個の独立の照明までに対し、頂点毎の照明演算を提供する。変換ユニット３００は、また、ポリゴンクリッピング／間引き動作（３００ｄ）に加え、エンボス型のバンプマッピング効果のためのテクスチャ座標生成（３００ｃ）、を行うことができる。
【００３１】
セットアップ／ラスタライザ４００は、変換ユニット３００から頂点データを受け取り、トライアングルセットアップ情報を、境界のラスタライズ、テクスチャ座標のラスタライズおよび色のラスタライズを行う１つ以上のラスタライザユニット（４００ｂ）に送るセットアップユニットを有する。
【００３２】
テクスチャユニット５００（オンチップテクスチャメモリ（ＴＭＥＭ５０２）を含み得る）は、テクスチャリングに関連する様々な処理を行う。これには、例えば、
・メインメモリ１１２からのテクスチャ５０４の取り出し、
・例えば、マルチテクスチャ処理、キャッシュ後テクスチャ伸長、テクスチャフィルタリング、エンボス化、投影テクスチャの使用を介した陰影および明暗、ならびにアルファ透明度および深度をともなうＢＬＩＴを含むテクスチャ処理（５００ａ）、
・バンプマッピング、擬似テクスチャ、およびテクスチャタイル化効果（５００ｂ）についてのテクスチャ座標変位の演算のためのバンプマップ処理、および
・間接テクスチャ処理（５００ｃ）
が含まれる。
【００３３】
テクスチャユニット５００は、フィルタリングされたテクスチャ値を、テクスチャ環境処理のため（６００ａ）にテクスチャ環境ユニット６００に出力する。テクスチャ環境ユニット６００は、ポリゴンおよびテクスチャ色／アルファ／深度をブレンドし、また、逆レンジ型フォグ効果を達成するためのテクスチャフォグ処理（６００ｂ）を行い得る。テクスチャ環境ユニット６００は、例えば色／アルファ変調、エンボス化、詳細テクスチャリング、テクスチャスワッピング、クランピング、および深度ブレンディングに基づき、様々な他の面白い環境関連の機能を行うための段を複数提供し得る。
【００３４】
ピクセルエンジン７００は、深度（ｚ）比較（７００ａ）およびピクセルブレンディング（７００ｂ）を行う。本例において、ピクセルエンジン７００は、データを埋め込み（オンチップ）フレームバッファメモリ７０２に格納する。グラフィックスパイプライン１８０は、フレームバッファおよび／またはテクスチャ情報をローカルに格納するための１つ以上の埋め込みＤＲＡＭメモリ７０２を有し得る。ｚ比較７００ａ’は、また、現在有効なレンダリングモードに依存して、グラフィックスパイプライン１８０中のより早い段階で行われ得る（例えば、アルファブレンディングが必要でなければ、ｚ比較は、より早くに行われ得る）。ピクセルエンジン７００は、オンチップフレームバッファ７０２をディスプレイ／ビデオインターフェースユニット１６４によるアクセスのためにメインメモリ１１２に周期的に書き込むコピー動作７００ｃを含む。このコピー動作７００ｃは、また、動的テクスチャ合成効果を得るために、埋め込みフレームバッファ７０２の内容をメインメモリ１１２内のテクスチャにコピーするためにも用いられ得る。コピーアウト動作中において、アンチエイリアシングおよびその他のフィルタリングを行うことができる。グラフィックスパイプライン１８０のフレームバッファ出力（最終的には、メインメモリ１１２に格納される）は、各フレームごとにディスプレイ／ビデオインターフェースユニット１６４によって読み出される。ディスプレイコントローラ／ビデオインターフェースユニット１６４は、ディスプレイ１０２上に表示するためのデジタルＲＧＢ画素値を提供する。
【００３５】
フォグシミュレーション
フォグが使用可能にされるときには、一定のフォグ色が、最終のアクティブなテクスチャ環境（ＴＥＶ）段から出力された画素色とブレンドされる。ブレンドされるフォグ色の割合は、フォグ濃度に依存する。フォグ濃度は、ある視点からある象限（２×２画素）への距離の関数である。本例において、グラフィックスプロセッサ１１４は好ましくは、それぞれ異なるフォグ濃度関数を提供する５つのタイプのフォグをサポートする。
第１のフォグタイプは、図６に示すような従来の線形フォグであり、この場合のフォグ等式は、線形フォグが開始する始点とフォグが最大値に達する終点との間において、フォグ濃度の一定の増加を提供する。この従来の線形フォグについて、フォグ等式は、
Ｆｏｇ＝（Ｚｅ−Ｚ０）／（Ｚ１−Ｚ０）
である。上式において、Ｚｅは画素の視点空間ｚである。Ｚ０は「フォグ始点」値であり、これは、線形フォグが開始すなわち「動き出す」視点空間ｚ値である。Ｚ１は、「フォグ終点」値であり、これは、フォグ濃度がその最大値に達する視点空間ｚ値である。図６は、「フォグ始点」＝５０かつ「フォグ終点」＝１００の場合の線形フォグ等式のグラフ例を示す。
【００３６】
第２および第３のタイプのフォグは、指数フォグおよび指数二乗フォグである。ＯｐｅｎＧＬおよびＤｉｒｅｃｔＸのフォグタイプとは対照的に、本発明は、「フォグ始点」値をフォグ等式に導入することにより、その機能性を高めている。指数および指数二乗フォグについて、各フォグ等式は、
Ｆｏｇ＝１−２-8*(Ze-Z0)/Z1-Z0)
Ｆｏｇ＝１−２-8*(Ze-Z0)/Z1-Z0)**2
である。上式において、Ｚ１は、フォグ濃度がほぼ１に達する視点空間ｚ値である。図７および図８は、それぞれＺ０＝５０およびＺ１＝１００である指数フォグ等式および指数二乗フォグ等式のグラフ例を示す。
【００３７】
第４および第５のタイプのフォグは、全く新規なものであり、ＯｐｅｎＧＬで提供されるような以前のフォグ等式に基づくものではない。これらの２つの新規なフォグタイプとは、逆指数フォグおよび逆指数二乗フォグである。これら２つのフォグタイプについて、各フォグ等式は、
Ｆｏｇ＝２-8*(Ze-Z0)/Z1-Z0)
Ｆｏｇ＝２-8*(Ze-Z0)/Z1-Z0)**2
である。上式において、Ｚ１は、フォグ濃度がほぼ１に達する視点空間ｚ値である。図９および図１０は、それぞれＺ０＝５０およびＺ１＝１００であるこれら２つのフォグ等式のグラフ例を示す。指数フォグおよび指数二乗フォグとは異なり、逆指数フォグおよび逆指数二乗フォグは、最初はよりなだらかなスロープを有し、終点近くでは急なスロープを有する。これら２つのまったく新規なフォグタイプは、新しくかつ面白いフォグ効果を達成することを可能にすることにより、３Ｄグラフィックスシステムにおけるフォグの使用をさらに改良する。例えば、これら２つのフォグタイプは、オブジェクトが唐突にそこを通過するような改良されたカーテン型のフォグ効果を提供するために使われることができ、特定のアプリケーションについて、他の公知のフォグタイプよりも優れた面白い視覚効果を提供する。フォグ関数の近く（始点）および遠く（終点）ｚは、近遠のｚのクリッピングに関わらず、プログラミングされ得ることに留意されたい。
【００３８】
フォグ計算に用いられる視点空間ｚ値は、上述のように、観察者がＺ軸と同じ方向を向いていない限り正しいレンジを表さない。すなわち、図１１に示すように、もしレンジの決定に視点空間ｚ値のみを用いた場合、視線がＺ軸から遠ざかるにつれてエラーが増大する。図１１に示すように、斜線部６１０ａおよび６１０ｂによって表されるレンジエラーは、角度αがＺ軸から離れる方向に増加するにつれて増大する。しかし、本発明の好適な実施例においては、この不正確さを補正するために、ｘ値に基づくレンジ調節ファクタが用いられる。レンジ調節またはフォグ補正関数は、フォグ効果をより正確かつリアルにするために、スクリーンの端に向かってフォグ濃度を効果的に増大する。
【００３９】
好適な実施例において、また図１２に示すように、フォグ補正関数は、
ｓｑｒｔ（（ｘ−ｃｅｎｔｅｒ）2＋ｋ2）／ｋ
である。上式において、分割スクリーンのマルチプレーヤゲームをサポートするように、「中心（ｃｅｎｔｅｒ）」の値はプログラム可能である。この中心は、好ましくは、スクリーンの幅の半分プラス、ウィンドウの座標系に対するｘオフセットに設定される。値ｋは、ｘの変化につれてフォグ濃度が変化する早さを決定する。調節は、関数の２つのサンプルを線形補間することにより演算される。レンジ調節関数のサンプル（ｒ０〜ｒ９）が、レンジ調節計算に用いられるために格納される。この関数は上記中心で対称となるため、関数の半分だけを格納する必要があることに留意されたい
【００４０】
本例において、各象限につき１つのフォグ値しかない。従って、フォグまたはスクリーン空間ｚ（Ｚｓ）がサンプルされる位置は非常に重要である。通常の象限に対しては、以下の規則を用い得る。
・１画素だけがカバーされる場合、その画素が選択される。
・２画素がカバーされる場合、１つの画素が以下の順で選択される：左上、右上、左下、右下。
・３画素がカバーされる場合、２つの隣接する画素に接する画素が選択される。
・選択された画素内において、サブサンプル位置が以下の順で選択される：マルチサンプル０（ＭＳ０）、ＭＳ１、ＭＳ２。
・４つ全ての画素がカバーされる場合、象限の中心が用いられる。
【００４１】
通常の象限ではなくｚｂｌｉｔ象限については、ｚブレンディング後の４つの画素のｚの最小値が、サンプル位置として用いられる。
【００４２】
サンプリング位置が決定された後、Ｚｓがｓ２．２４においてｚ０＋ｚｘ＊ｄｘ＋ｚｙ＊ｄｙとして演算される。上位３ビットは、オーバーフローまたはアンダーフローを検出するために用いられる。次に、Ｚｓは以下のようにしてＵ０．２４にクランプされる。
０００  オーバーフロー／アンダーフローなし
０１Ｘ  オーバーフロー、Ｚｓは１．０（０ｘＦＦＦＦＦＦ）にクランプされる
０Ｘ１  オーバーフロー、Ｚｓは１．０（０ｘＦＦＦＦＦＦ）にクランプされる
１ＸＸ  アンダーフロー、Ｚｓは０．０（０ｘ００００００）にクランプされる
【００４３】
透視投影を用いるとき、フォグタイプは数個の等式にプログラムされ得る。第１の等式はスクリーン空間ｚから視点空間ｚ値を演算する。
Ｚｅ＝ｆ＊ｎ／（ｆ−（ｆ−ｎ）＊Ｚｓ）
Ｚｅ＝［ｎ，ｆ］およびＺｓ＝［０，１］。結果として、Ｚｓ＝０のときＺｅ＝ｎであり、Ｚｓ＝１のときＺｅ＝ｆである（Ｚｅの方向が逆転している）。次のステップは、Ｚｅを現在の象限ｘ位置の関数である係数で乗算することにより、Ｚｅを補正する。
Ｚｅ'＝Ｚｅ＊ｒ（ｘ）
第２の等式は、ＺｅをＺｎに対して正規化する。ここで、Ｚｅ＝Ｚ０  のときＺｎ＝０であり（フォグ始点）、Ｚｅ＝Ｚ１のときＺｎ＝１である。
Ｚｎ＝（Ｚｅ'−Ｚ０）／（Ｚ１−Ｚ０）
２つの等式を組み合わせることにより、
Ｚｎ＝Ａ＊ｒ（ｘ）／（Ｂ−Ｚｓ）−Ｃ
が得られる。
ここで：
Ａ＝ｆ＊ｎ／（（ｆ−ｎ）＊（Ｚ１−Ｚ０））
Ｂ＝ｆ／（ｆ−ｎ）
Ｃ＝Ｚ０／（Ｚ１−Ｚ０）
である。
ハードウェアを単純化するためには、Ｚｅは以下のように表現され得る。
Ｚｅ＝Ａ/(Ｂ−Ｚｓ)
＝Ａ/((Ｂ＿ｍａｎｔ/２−(Ｚｓ＞＞Ｂ＿ｅｘｐｎ＋１))＊２(B_expn+1))
＝(Ａ/２(B_expn+1))/(Ｂ＿ｍａｎｔ/２−(Ｚｓ＞＞Ｂ＿ｅｘｐｎ＋１))
＝ａ/(ｂ−(ｚｓ＞＞ｂ＿ｓｈｆ))
そして、
ａ＝Ａ/２(B_expn+1)
ｂ＿ｍａｇ＝Ｂ＿ｍａｎｔ２
ｂ＿ｓｈｆ＝Ｂ＿ｅｘｐｎ＋１
である。
【００４４】
一方、直交投影については、以下の等式が適用される。
Ｚｎ＝ａ＊ｒ（ｘ）＊Ｚｓ−ｃ
ａ＝１（Ｚ１−Ｚ０）
ｃ＝Ｚ０/（Ｚ１−Ｚ０）
Ｚ０およびＺ１は、視点空間ではなくスクリーン空間で指定される。
【００４５】
Ｚｎが演算された後、上述のように、選択されたフォグタイプ（すなわち線形、指数、指数二乗、逆指数、または逆指数二乗）に応じてフォグ濃度を演算するために用いることができる。
【００４６】
実施例の詳細
図１３は、本発明に従ってフォグを計算するために用いられ得るフォグ計算ユニット６００ｂの一例を示す。図５に関連して説明したように、フォグ計算ユニット６００ｂは、テクスチャ環境ユニット（ＴＥＶ）６００ａの最終のアクティブなテクスチャ環境（ＴＥＶ）段からの入力を受け取る。フォグ計算ユニットは次に、コンスタントなフォグ色を、その最終のアクティブなＴＥＶ段から出力された画素色とブレンドする。ブレンドされるフォグ色の割合はフォグ濃度に依存する。フォグ濃度は、ある視点からある象限への距離の関数である。
【００４７】
図１３に示すように、適切な入力を受け取った後、フォグ計算ユニットのｚオフセットブロック６０２は、現在の象限の重心の値（上述のように象限内の画素のカバー範囲を用いて決定される）を演算する。スクリーン−視点空間部６０４は、次に、スクリーン空間ｚからの値を視点空間ｚに変換し、結果を、必要なフォグ濃度に関連する定数「ａ」で（乗算器６１６を介して）乗算する。より詳細に後述するように、スクリーン−視点空間ｚ変換関数のために減算器６１８で導入されるパラメータ「ｂ」は、ｔｅｖ＿ｆｏｇ＿ｐａｒａｍ＿１レジスタにより供給される。
【００４８】
スクリーン−視点空間変換関数のパラメータ「ａ」は、ｔｅｖ＿ｆｏｇ＿ｐａｒａｍ＿０レジスタにより供給される。図１３中の点線は、透視投影ではなく直交投影の場合においてこの動作を行うための別法を示している。
【００４９】
レンジ調節ブロック６０６は、現在の象限のｘ位置に基づいてレンジ調節値を演算する。次に、乗算器６０８によってスクリーンｚはレンジ調節値で乗算される。次に、ｔｅｖ＿ｆｏｇ＿ｐａｒａｍ＿３レジスタにより供給されるパラメータ「ｃ」が、減算器６１０においてレンジ調節後に視点空間Ｚから減算すべき量を指定するために導入される。次にブロック６１２においてクランピング動作を行うことにより、Ｚｎが得られる。
【００５０】
Ｚｎが演算された後、これを、選択された特定のフォグタイプに応じてフォグ濃度を演算するために用いることができる。具体的には、マルチプレクサ６１４ａ、６１４ｂ、６１４ｃおよび６１４ｄへの適切な入力を選択することにより、すなわちセクション６１５ａ、６１５ｂ、６１５ｃおよび６１５ｄを選択的に適用することにより、５つの利用可能なフォグタイプ（すなわち線形、指数、指数二乗、逆指数、または逆指数二乗）のうちの所望の１つを選択することができる。このように、最終のアクティブなＴＥＶ段から出力された画素色とブレンドされるフォグ色の割合を決定するために、適切なフォグ濃度が用いられる。次に計算されたフォグは、グラフィックスシステムによるさらなる処理のために、最終のマルチプレクサ６１４ｄから出力される。
【００５１】
好適な実施例において、フォグは以下の関数を用いて制御される。
0004698893.tif 000002
【００５２】
この関数は、ハードウェアによって要求されるフォグパラメータを演算し、これらをフォグ計算ユニットにロードする。ＮｅａｒＺ値およびＦａｒＺ値は、投影行列パラメータと一貫性を有するものでなければならない。フォグのＳｔａｒｔＺ値およびＥｎｄＺ値は、ＮｅａｒＺ値およびＦａｒＺ値と同じ単位でなければならない。パラメータＳｔａｒｔＺおよびＥｎｄＺは、それぞれ、フォグ関数がどこで始まりまた終わるかを制御する。通常、ＥｎｄＺ値は遠平面ｚに設定される。ＮｅａｒＺおよびＦａｒＺは、フォグ演算のため、ラスタライズされたスクリーンＺ値を視点空間Ｚに変換するために必要である。Ｃｏｌｏｒパラメータは、フォグ濃度が１．０のときの画素の色である。
【００５３】
ＧＸＩｎｉｔ（）において、デフォルトでは、水平フォグレンジ調節はオフにされる。この特徴を使用するためには、以下の関数を呼び出し得る。：
0004698893.tif 000003
【００５４】
上記の最初の関数は、調節テーブルを演算するために用いられる。ユーザは、このテーブルのために割り当てられた領域を提供しなければならない。ｗｉｄｔｈパラメータは、視点の幅を指定する。ｐｒｏｊｍｔｘパラメータは、ビューポートにレンダリングするために用いられる投影行列である。このパラメータは、ビューポートの視点空間における水平方向の広がりをこの関数が演算するために必要である。
【００５５】
このテーブルは、演算されると、ＧＸＳｅｔＦｏｇＲａｎｇｅＡｄｊ（）関数に渡され得る。ｅｎａｂｌｅパラメータは、水平フォグレンジ調節が許可されているか否かを示す。ｃｅｎｔｅｒパラメータは、ビューポートの中心にあるＸ座標でなければならない。上述のように、レンジ調節関数は好ましくは中心に関して対称である。
【００５６】
以下のテーブルは、レジスタ種類およびフォーマットの例を示す。
【表１】
0004698893.tif 000004
【００５７】
他の互換性のある実施例
上述のシステム装置５０は、上述の家庭用ビデオゲームコンソール構成以外としても実施可能である。例えば、システム５０用に書かれたグラフィックスアプリケーションまたはその他のソフトウェアを、システム５０をエミュレートするなどして互換性を有する異なる構成を持ったプラットフォーム上で実行することができる。もしその別のプラットフォームがシステム５０のハードウェアおよびソフトウェアリソースの一部または全部をうまくエミュレート、シミュレートおよび／または提供することができれば、その別のプラットフォームは、ソフトウェアを首尾よく実行することができる。
【００５８】
一例として、エミュレータは、システム５０のハードウェアおよび／またはソフトウェア構成（プラットフォーム）とは異なるハードウェアおよび／またはソフトウェア構成（プラットフォーム）を提供し得る。このエミュレータシステムは、アプリケーションソフトウェアが書かれたシステムのハードウェアおよび／またはソフトウェア要素の一部または全部をエミュレートまたはシミュレートする、ソフトウェアおよび／またはハードウェア要素を有し得る。例えば、エミュレータシステムは、システム５０のハードウェアおよび／またはファームウェアをシミュレートするソフトウェアエミュレータプログラムを実行するパーソナルコンピュータなどの汎用のデジタルコンピュータからなっていてもよい。
【００５９】
汎用デジタルコンピュータのいくつか（例えばＩＢＭまたはマッキントッシュのパーソナルコンピュータおよび互換機）は現在、ＤｉｒｅｃｔＸまたはその他の標準的な３ＤグラフィックスコマンドＡＰＩと適合する３Ｄグラフィックスパイプラインを提供する３Ｄグラフィックスカードを備えている。また、標準的な音声コマンドのセットに基づいて高品質なステレオ音を提供するステレオサウンドカードを備えている場合もある。このようなマルチメディア−ハードウェアを備えたパーソナルコンピュータがエミュレータソフトウェアを実行すれば、システム５０のグラフィックスおよびサウンド性能に匹敵する十分な能力を有し得る。エミュレータソフトウェアは、ゲームプログラマがゲームソフトウェアを書いた対象である家庭用ビデオゲームコンソールプラットフォームの処理、３Ｄグラフィックス、音声、周辺およびその他の機能をシミュレートするように、パーソナルコンピュータプラットフォーム上のハードウェアリソースを制御する。
【００６０】
図１４は、ホストプラットフォーム１２０１、エミュレータ要素１３０３、および記憶媒体６２上に記憶されたゲームソフトウェア実行可能２値画像を用いたエミュレーション処理の全体例を示す。ホスト１２０１は、例えばパーソナルコンピュータ、ビデオゲームコンソール、または十分な演算能力を有する任意のその他のプラットフォームなどの、汎用あるいは専用のデジタル演算装置であり得る。エミュレータ１３０３は、ホストプラットフォーム１２０１上で稼働し、記憶媒体６２からのコマンド、データおよびその他の情報の、ホストによって処理される形式へのリアルタイム変換を提供するソフトウェアおよび／またはハードウェアであり得る。例えば、エミュレータ１３０３は、システム５０によって実行されることが意図される「ソース」２値画像プログラム命令を記憶媒体６２から取り込み、これらのプログラム命令を、ホスト１２０１によって実行その他の処理を行われ得る対象形式に変換する。
【００６１】
一例として、ソフトウェアが、ＩＢＭ  ＰｏｗｅｒＰＣまたはその他の特定のプロセッサを用いたプラットフォーム上で実行されるように書かれており、ホスト１２０１が異なる（例えばインテルの）プロセッサを用いたパーソナルコンピュータである場合は、エミュレータ１３０３は、１つまたは一連の２値画像プログラム命令を記憶媒体６２から取り込み、これらのプログラム命令を、１つ以上の同等なインテルの２値画像プログラム命令に変換する。エミュレータ１３０３はまた、グラフィックスおよび音声プロセッサ１１４によって処理されることを意図されたグラフィックスコマンドおよび音声コマンドを取り込みおよび／または生成し、これらのコマンドを、ホスト１２０１上において利用可能であるハードウェアおよび／またはソフトウェアグラフィックスおよび音声処理リソースによって処理され得る単数または複数のフォーマットに変換する。一例として、エミュレータ１３０３は、これらのコマンドを、ホスト１２０１の特定のグラフィックスおよび／または音声ハードウェアによって処理され得るコマンドに変換し得る（例えば、標準的なＤｉｒｅｃｔＸ、ＯｐｅｎＧＬ、および／または音声ＡＰＩを用いて）。
【００６２】
上述のビデオゲームシステムの一部または全ての特徴を提供するために用いられるエミュレータ１３０３には、また、そのエミュレータを用いて実行されるゲームの様々なオプションやスクリーンモードの選択を単純化あるいは自動化するグラフィックスユーザインターフェース（ＧＵＩ）が備えられてもよい。一例において、そのようなエミュレータ１３０３は、また、ソフトウェアが本来意図されたホストプラットフォームに比較して、より高度な機能性をさらに含んでもよい。
【００６３】
図１５は、エミュレータ１３０２とともに適切に用いられるエミュレーションホストシステム１２０１を示す。システム１２０１は、処理ユニット１２０３およびシステムメモリ１２０５を有する。システムバス１２０７が、システムメモリ１２０５を含む様々なシステム要素を、処理ユニット１２０３に接続する。システムバス１２０７は、メモリバスまたはメモリコントローラを含む数種のタイプのバス構造、周辺バス、および様々なバスアーキテクチャのうちのいずれかを用いたローカルバスのうちのいずれでもよい。システムメモリ１２０７は、リードオンリーメモリ（ＲＯＭ）１２５２およびランダムアクセスメモリ（ＲＡＭ）１２５４を有する。パーソナルコンピュータシステム１２０１内の要素間の情報の転送（例えばスタートアップ中など）に役立つ基本的なルーチンを含んだ基本入力／出力システム（ＢＩＯＳ）１２５６が、ＲＯＭ１２５２に格納されている。システム１２０１はさらに、様々なドライブおよび関連するコンピュータ可読性の媒体を有する。ハードディスクドライブ１２０９は、（典型的には固定の）磁気ハードディスク１２１１から読み出し、またこれに対して書き込む。追加的な（可能なオプションである）磁気ディスクドライブ１２１３は、着脱可能な「フロッピー」またはその他の磁気ディスク１２１５から読み出し、また、これに対して書き込む。光ディスクドライブ１２１７は、ＣＤ  ＲＯＭまたはその他の光メディアなどの着脱可能な光ディスク１２１９から読み出し、また、いくつかの構成においては、これに対して書き込む。ハードディスクドライブ１２０９および光ディスクドライブ１２１７は、それぞれハードディスクドライブインターフェース１２２１および光ディスクドライブインターフェース１２２５によって、システムバス１２０７に接続されている。そのドライブおよびそれに対応するコンピュータ可読性媒体は、コンピュータ可読性の命令、データ構造、プログラムモジュール、ゲームプログラムおよびパーソナルコンピュータシステム１２０１のためのその他のデータを、不揮発的に記憶する。その他の構成において、コンピュータによりアクセス可能なデータを格納することができる他のタイプのコンピュータ可読性媒体、例えば、磁気カセット、フラッシュメモリカード、デジタルビデオディスク、ベルヌーイ（Ｂｅｒｎｏｕｌｌｉ）カートリッジ、ランダムアクセスメモリ（ＲＡＭ）リードオンリーメモリ（ＲＯＭ）などもまた使用され得る。
【００６４】
エミュレータ１３０３を含む複数のプログラムモジュールは、ハードディスク１２１１、着脱式磁気ディスク１２１５、光ディスク１２１９、および／またはシステムメモリ１２０５のＲＯＭ１２５２および／またはＲＡＭ１２５４上に記憶され得る。このようなプログラムモジュールは、グラフィックスおよび音声ＡＰＩを提供するオペレーティングシステム、１つ以上のアプリケーションプログラム、その他のプログラムモジュール、プログラムデータおよびゲームデータを含んでもよい。ユーザは、キーボード１２２７、ポインティング装置１２２９、マイク、ジョイスティック、ゲームコントローラ、衛星放送用アンテナ、スキャナなどの入力装置を介して、コマンドおよび情報を、パーソナルコンピュータシステム１２０１に入力し得る。これらおよびその他の入力装置は、システムバス１２０７に接続されたシリアルポートインターフェース１２３１を介して処理ユニット１２０３に接続されることができるが、パラレルポート、ゲームポートファイヤワイヤバスまたはユニバーサルシリアルバス（ＵＳＢ）などの他のインターフェースによって接続されてもよい。また、モニタ１２３３またはその他のタイプの表示装置が、ビデオアダプタ１２３５などのインターフェースを介して、システムバス１２０７に接続される。
【００６５】
システム１２０１は、インターネットなどのネットワーク１１５２を介して通信を確立するための、モデム１１５４やその他のネットワークインターフェース手段を有し得る。内部でも外部でもよいモデム１１５４が、シリアルポートインターフェース１２３１を介してシステムバス１２３に接続されている。また、システム１２０１が、ローカルエリアネットワーク１１５８を介してリモート演算装置１１５０（例えば、別のシステム１２０１）と通信することを可能にするために、ネットワークインターフェース１１５６が提供され得る（あるいはこのような通信は、広域ネットワーク１１５２またはダイヤルアップやその他の通信手段などの他の通信パスを介して行われてもよい）。システム１２０１は典型的には、プリンタその他の標準的な周辺デバイスなどの、他の周辺出力デバイスを有し得る。
【００６６】
一例において、ビデオアダプタ１２３５は、マイクロソフトのＤｉｒｅｃｔＸ７．０または他バージョンなどの標準的な３Ｄグラフィックスアプリケーションプログラマインターフェースに基づいて発せられる３Ｄグラフィックスコマンドに応答して、高速な３Ｄグラフィックスレンダリングを提供する３Ｄグラフィックスパイプラインチップセットを有し得る。また１組のステレオスピーカ１２３７が、従来の「サウンドカード」などのサウンド発生インターフェースを介してシステムバス１２０７に接続されていることにより、バス１２０７によって供給される音声コマンドに基づいて高品質なステレオ音声を生成するためのハードウェアおよび埋め込みソフトウェアサポートを提供する。これらのハードウェア能力は、システム１２０１が、記憶媒体６２に格納されたソフトウェアをプレイするために十分なグラフィックスおよびサウンド速度能力を提供することを可能にする。
【００６７】
上述のビデオゲームシステムの特徴の一部または全部を提供するために用いられるエミュレータ１３０３には、また、そのエミュレータを用いて実行されるゲームの様々なオプションやスクリーンモードの選択を単純化あるいは自動化するグラフィックスユーザインターフェース（ＧＵＩ）が備えられてもよい。一例において、そのようなエミュレータ１３０３はまた、ソフトウェアが本来意図されたホストプラットフォームに比較してより高度な機能性をさらに含んでもよい。エミュレータ内の特定のグラフィックスサポートハードウェアが、図１３に示すフォグ関数を含まない場合は、エミュレータの設計者は、以下のいずれかの選択肢を有する。
・フォグコマンドを、グラフィックスハードウェアがサポートしている他のグラフィックスＡＰＩコマンドに変換するか、
・プロセッサの速度に依存して能力の低下がおこり得るが、フォグ関数をソフトウェアで実現するか、
・フォグコマンドを「引き抜く」ことによって、フォグ効果を有さないレンダリング画像を提供する。
【００６８】
以上、本発明を、最も実用的で好ましい実施形態であると現時点で判断される内容について説明してきたが、本発明は、開示された実施形態にのみ制限されるべきものではなく、反対に記載したクレームの範囲内において、様々に変更、および同等な内容が適用されるものとする。
【図面の簡単な説明】
【図１】対話式コンピュータグラフィックスシステムの一例の全体図である。
【図２】図１の例のコンピュータグラフィックスシステムのブロック図である。
【図３】図２に示す例のグラフィックスおよび音声プロセッサのブロック図である。
【図４】図３に示す例の３Ｄグラフィックスプロセッサのブロック図である。
【図５】図４のグラフィックスおよび音声プロセッサの、論理フロー図例である。
【図６】従来の線形フォグ曲線を示す。
【図７】本発明による指数フォグ曲線例を示す。
【図８】本発明による指数二乗フォグ曲線例を示す。
【図９】本発明による逆指数フォグ曲線例を示す。
【図１０】本発明による逆指数二乗フォグ曲線例を示す。
【図１１】水平レンジ調節を用いなかったときに得られるフォグエラーの増加を示すグラフである。
【図１２】図１１に示すエラーを訂正するために用いられ得るフォグ補正関数の例である。
【図１３】本発明に従ってフォグを計算するためのフォグ計算ユニットの一実施例である。
【図１４】別の互換的な実施例を示す図である。
【図１５】別の互換的な実施例を示す図である。
【図１】
0004698893.tif 000005
【図２】
0004698893.tif 000006
【図３】
0004698893.tif 000007
【図４】
0004698893.tif 000008
【図５】
0004698893.tif 000009
【図６】
0004698893.tif 000010
【図７】
0004698893.tif 000011
【図８】
0004698893.tif 000012
【図９】
0004698893.tif 000013
【図１０】
0004698893.tif 000014
【図１１】
0004698893.tif 000015
【図１２】
0004698893.tif 000016
【図１３】
0004698893.tif 000017
【図１４】
0004698893.tif 000018
【図１５】
0004698893.tif 000019