(57)【特許請求の範囲】
【請求項１】
アニメーション化したリアルタイム表示を提供するグラフィックス装置であって、前記グラフィックス装置はグラフィックスパイプラインを含み、
グラフィックスパイプラインは、テクスチャ座標発生器、使用時にテクスチャマッピング動作のためにテクスチャ座標を変換するテクスチャ変換ユニット、および制御回路を含み、
前記制御回路は、アニメーション化した頂点メッシュ上にスキン表面のステッチングを与えるように、第１および第２頂点の間での区分的線形近似補間のために複数の頂点変換を行うように、異なる頂点について異なる変換マトリクスを選択して前記テクスチャ変換ユニットを再使用する、グラフィクス装置。
【請求項２】
テクスチャ変換ユニットは、同質空間におけるテクスチャ座標を発生するために、第１頂点に関して第１組のテクスチャ座標上でテクスチャ変換を行なう第１内積計算ユニット、および前記第１内積計算ユニットに直列的に結合された第２内積計算ユニットを含み、
第２内積計算ユニットは、第１頂点および第１頂点とは異なる第２頂点の間での区分的線形補間を行なうために、第２頂点に関して前記第１組のテクスチャ座標上で異なるテクスチャ変換を行なう、請求項１記載のグラフィクス装置。
【請求項３】
前記第１内積計算ユニットと前記第２内積計算ユニットとの間に結合された正規化器をさらに備え、前記正規化器は、第１内積計算ユニットによって変換されたテクスチャ座標を正規化して前記第２内積計算ユニットに与え、それによってアニメーション化した表面の変形させたり法線を引き延ばすことによって生じる歪みを減じる、請求項１記載のグラフィクス装置。
【請求項４】
アニメーション化した表示をリアルタイムに提供するコンピュータグラフィックスシステムであって、
グラフィックスパイプラインは、テクスチャ座標発生器、
テクスチャマッピング動作のためにテクスチャ座標を変換するテクスチャ変換ユニット、および制御回路を含み、
前記テクスチャ変換ユニットは、第１および第２頂点間の補間によるアニメーション化した頂点メッシュ上でのスキン表面の区分的線形ステッチングのために、複数の頂点変換を行う付加機能を実行し、
変換ユニットに結合され、変換ユニットによって行われた計算に応答して前記区分的線形ステッチングした表面を含むアニメーション化した表示のイメージを発生するイメージ発生器、および
発生したイメージを表示のためにストアする内蔵フレームバッファを備える、コンピュータグラフィクスシステム。
【請求項５】
前記変換ユニットはカスケード接続したマトリクス乗算計算ユニットを含み、そのマトリクス乗算計算ユニットの少なくとも１つは第２頂点に関連するステッチングテクスチャを変換するために使用される、請求項４記載のコンピュータグラフィクスシステム。
【請求項６】
変換ユニットはステッチング表面に関連するテクスチャ座標を正規化するための正規化器を含み、この正規化器は、アニメーション化した表面を変形させたり関連する法線を伸長するときの歪みを減じる、請求項４記載のコンピュータグラフィクスシステム。
【請求項７】
リアルタイムアニメーションビデオゲームを表示する家庭用ビデオゲームシステムであって、
テクスチャマッパ、
テクスチャ座標変換器、
テクスチャマッパへ付与するために第１頂点についてテクスチャ座標を変換する変換ユニット、および
アニメーション化した頂点メッシュ上のスキン表面をステッチングして可視的なステッチング効果を効率的に得るように頂点毎の区分的線形ステッチングを提供するために、前記第１頂点とは異なる第２頂点について既に変換されているテクスチャ座標を変換するために変換ユニットを再使用するステッチング制御回路を備える、家庭用ビデオゲームシステム。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
この発明はコンピュータグラフィクスに関し、より特定的には、家庭用ビデオゲームプラットフォームのようなインタラクティブなグラフィクスシステムに関する。さらに具体的には、この発明は、低価格グラフィクスシステムにおいてスキニング(skinning)またはステッチング(stitching) を付与するための（たとえば、スケルトンアニメーション(skeletal animation)／逆運動学(inverse kinematics) 技術をサポートするための）システムおよび方法に関する。
【０００２】
【発明の背景】
多くの人々はかなりリアルな恐竜，エイリアン，生き生きとしたおもちゃおよび他の空想的な動物を含む映画をかつて見たことがある。そのようなアニメーションはコンピュータグラフィクスによって可能とされた。そのような技術を用いて、コンピュータグラフィクスのアーティストは、各オブジェクトがどのように見えるべきかや時間の経過とともに外見上どのように変化すべきかを特定し、コンピュータは、そのオブジェクトをモデル化してテレビジョンやコンピュータスクリーンのようなディスプレイに表示する。コンピュータは、表示される映像の各部分を、場面中の各オブジェクトの位置や向き，各オブジェクトを照らすように見える照明の方向，各オブジェクトの表面テクスチャ，および他の要素に正確に基づいて、色付けしまた形作るために必要な多くのタスクを実行する。
【０００３】
コンピュータグラフィクスの生成は複雑であるので、ここ数年前のコンピュータによって生成された３次元（３Ｄ）グラフィクスは、ほとんど高価な特殊なフライトシミュレータ，ハイエンドグラフィクスワークステーションおよびスーパーコンピュータに限られていた。大衆は映画や高価なテレビコマーシャルにおいてこれらのコンピュータシステムによって生成された映像のいくつかを見たが、大部分の人はグラフィクスを生成しているコンピュータに対して実際に相互作用をさせることはできない。たとえば、Nintendo64（登録商標）や今や利用可能であるパソコン用の種々の３Ｄグラフィクスカードのような比較的安価な３Ｄグラフィクスプラットフォームの利用によって、このすべてが変わった。今や、家庭や会社の比較的安価なコンピュータグラフィクスシステム上でエキサイティングな３Ｄアニメーションやシミュレーションに対して相互作用を及ぼすことができる。
【０００４】
グラフィクスシステムの設計者が直面した問題は、リアルタイムで、もしくはほぼリアルタイムで、本物らしく見えるアニメーションを如何に効率的にモデリングしかつレンダリングするかということである。一層興味のある動的なアニメーションを達成するために、多数のビデオおよびコンピュータゲームでは、アニメーション化した人物や動物をモデリングするために、逆運動学と呼ばれる技術を使用する。逆運動学によれば、グラフィクスアーティストは、アニメーション化したオブジェクトを階層的な方法でモデリングすることができ、そのために、オブジェクトの一部の動きがそのオブジェクトの接続された他の部分を動かす。
【０００５】
たとえば、腕を上げたとき、手は腕と共に動きかつ指は手とともに動くことがわかる。たとえば、逆運動学によれば、アニメータは、コンピュータモデルのトルソ(torso) ，上腕，前腕，手および指をアニメーターが接続することができ、したがって、手を動かせば前腕が動き、前腕が動けば上腕が動くようになる。このことは現実世界においては直感的であるが、アニメーションの世界においては、すべてのモデルがこの方法で振る舞うわけではない。
【０００６】
逆運動学モデルの階層的モデルは時々スケルトン(skeleton)と呼ばれ、そのスケルトンの各部分は骨（bone：ボーン）と呼ばれる。この骨（ボーン）は、形状において本物の骨を正確にモデリングする必要はなく、それらは剛線のセグメントであってよい。このような逆運動学的スケルトンモデルを使ってイメージを創るために、通常骨の各々に「スキン（skin：肌ないし表皮）」表面を付ける。「スキン」表面が一旦付着されると、そのスキン表面は、骨が動くとその骨の動きに自動的に追従する。人間または動物を相互接続された骨のスケルトンとしてモデリングすることによって（すなわち、本物の人間や動物が構成されていると同じ方法で）、本物のようで自然に見える動きを達成することができる。ゲームアニメータは、そのような技術を使って、かなり本物らしいアニメーション化した動きを達成することができた。
【０００７】
スケルトンアニメーションの１つの弱点は、骨間の接続点を取り扱う方法である。一般的に各骨は固く、それの動きは変換によって規定される。もしその変換がその接続点を曲げさせれば、小さくないギャップが作られてしまう。たとえば、アニメーション化したキャラクタの上腕および前腕が出会う肘、またはそのキャラクタの上腕がそれのトルソと出会う肩は、動きの広い範囲に亘ってできるだけ自然に見えるべきである。接続部分のこれらの点での不自然なギャップがリアリズム（本物らしさ）の錯覚ないし幻想を壊すかもしれない。
【０００８】
骨間の交点（接続点）での本物の人間や動物の肌や肉は、実際には、種々の交差する骨の各々に付いていてかつ各々による影響を受ける。たとえば、肘を曲げて「力こぶ」を作るとき、上腕の肌や肉は前腕の位置／動きだけでなく上腕の位置／動きによって影響を受けることがわかる。アニメーション化したモデルの接続領域における表面が１つの骨によって影響を受けるとすると、いくらかの見えないデフォルメが結果的に生じ、アニメーションの本物らしさやインパクトを減じる。人々は、アニメーション化した人体モデルのリアリズム（本物らしさ）を評価するときには比較的大目にみないものである。アニメーションモデルが本物らしくなればなるほどモデルの表現の不自然なもしくは本物らしくない特徴に気づき、そしてたぶんそれに満足しないであろう。
【０００９】
スキニングと呼ばれる技術を用いることによってこの弱点は克服され得る。このスキニングは、接続点の回りの頂点の位置を調整しかつブレンドして、骨が出会う「骨」間のスムーズな遷移を与える表面をカバーする連続的な柔軟なスキン（肌）を作る。この遷移的な「スキン」表面は、位置および相対的な動きの範囲に亘って２つまたはそれ以上の交差する「骨」の異なる相対的な位置を適合させることができる。その結果得られる効果は、本物らしさの錯覚を非常に増すことができる。
【００１０】
より詳細なレベルでいえば、スキンは典型的には頂点のメッシュによって規定される。スキニングは、一般的には、そのメッシュ中の各頂点の位置をスケルトンアニメーションモデルにおける１つ以上の骨の動きによって影響を受けるようにすることによって達成される。異なる骨の影響が、そのスキン頂点位置を計算する際に異なる重みを割り付けることによって決定できる。モデルはそれのスケルトンの動きを規定することによってアニメーション化され得て、スキンを規定する頂点の動きはグラフィクスシステムによって自動的に（たとえば、数学的に）発生され得る。
【００１１】
マトリクス変換と呼ばれる数学的な関数は、通常、スケルトンアニメーションの各フレーム中における各頂点の位置を計算するために使用される。別の変換マトリクスは、典型的には、或る頂点に影響を与える各骨について使用される。たとえば、スキンの頂点が２つの骨の交点近くに位置すると、通常、その頂点に影響を与える２つの骨のそれぞれについて１つ、つまり２つの変換マトリクスを必要とする。自然に曲がる接続点を作るためには、各頂点毎に各マトリクスの重みを変更するのが望ましい。接続点の回りの各頂点毎の異なる頂点の重みによって、頂点スキンのメッシュを一方の骨から他方の骨へだんだんにブレンドすることができる（「頂点スキニング(vertex skinning) 」）。
【００１２】
アニメーション化オブジェクトのモデリングのためのこのような頂点スキニング技術は、高度なリアリズムを与えることにおいて完全に成功した。多くのハイエンドアニメーションレンダリングエンジンやモデリングツールがそのような技術をサポートしている。しかしながら、スキニングに伴う１つの問題は、頂点スキニングのために必要なマトリクス変換が非常な計算集中を生じることである。スキニング／ステッチングのための表面情報を付与するために、通常、２つの頂点位置間において多数の補間点を必要とする。このことが、１頂点規定(specification)に基づかないテクスチャ座標毎の付加的でユニークな変換の必要性を暗示している。このユニークなテクスチャ変換はテクスチャ毎に、ジオメトリまたは法線に適用される。したがって、複数のマトリクス乗算がスキニング表面を正確に変換するために必要となる。用いられる各付加的なマトリクスに応じて複雑さが増す。
【００１３】
マトリクス乗算は、もちろん、グラフィクスレンダリングシステムにおいては陳腐なことである。たとえば、３Ｄオブジェクト表現を２Ｄ可視平面上に投影するために、１つの空間から他への（たとえばモデリング空間から目空間へ）モデルパラメータを変換するためにマトリクス乗算を行うことは普通のことである。しかしながら、リアルタイムシステムは、典型的には、それらが実行するマトリクス乗算の数を最小化する。もしソフトウェア的に計算する場合には各マトリクス乗算に多くのプロセササイクルが必要であり、そしてマトリクス乗算のハードウェアがグラフィクスチップ上の大量の「不動産」を必要とするからである。この理由によって、家庭用ビデオゲームプラットフォームや安価なパソコン用グラフィクスアクセラレータカードのような低価格リアルタイムレンダリングシステムにおいて利用可能なスキニングサポートは多くなかった。そのようなシステムの汎用プロセサがスキニングのためのマトリクス乗算計算を行うために使用され得るが、そのような計算は、通常、アニメータがスキニング効果を望む場合に、イメージの複雑さや速度性能を犠牲にしなければならないほどの時間を消費する。
【００１４】
【発明の概要】
この発明はこの問題に対するソリューションを提供する。この発明の１つの局面によれば、低価格コンピュータグラフィクスシステムは、「ステッチング」と呼ばれるスキニングのより限定された形のもののためのハードウェアサポートを含む。ステッチングによれば、表面が、異なる頂点に対応する２つの頂点毎の値に基づいて変換され得る。付加的な補間／マトリクス乗算が、レンダリングパイプラインを遅くしない、スキニングの制限された（区分的線形の：piecewise linear) もの、すなわち「ステッチング」を提供する。
【００１５】
この発明の局面によれば、リアルタイムグラフィクスレンダリングシステムは１対のマトリクス乗算内積計算要素を含む。カスケード環境における第１内積計算要素は従来の態様で、モデルビュー(modelview)（または他の）変換を行うために使用される。第２内積計算要素はステッチングを付与するように付加的な補間を行うために使用され得る。２つの内積計算要素は同じテクスチャ座標値上で連続的に動作し、頂点メッシュ上にスキン表面をテクスチャマッピングする際に使用するために、変換した「ステッチングされた」テクスチャ座標を与える。
【００１６】
この発明によって提供される他の局面によれば、２つの内積計算ユニット間に正規化ブロックを設ける。この正規化ブロックの機能は、或る状況下で、たとえば表面がデフォルメされるとき、さもなくば発生する歪みを回避するための手助けとなる。
【００１７】
付加的な内積計算ユニットおよび関連のマトリクスメモリならびに正規化ブロックは、比較的コンパクトで、チップ上の大きな不動産を占有しない。それらはフルスキニングをすることはできないが、スキニングの区分的線形(piecewise linear)近似が、ゲームアニメーションプロセサをスキニング計算の実行から救済しながら、スケルトンアニメーションモデルの「骨」間の本物らしい相互接続を付与するために使用され得る。付加的なマトリクス乗算計算ユニットはレンダリングパイプラインの速度性能に逆に影響を与えることはない。パイプラインのレイテンシ(latency)の増加はバッファリングを通して吸収され得る。このシステムによれば、変換マトリクスのインデックスの頂点毎の規格が、異なる変換マトリクスを頂点ベース(vertex-by-vertex basis)で選択できる。
【００１８】
実施例に設けられた第２マトリクス乗算計算ユニットは、ステッチング以外の他のアプリケーションのために使用され得る。たとえば、種々の形式の環境および／または反射マッピングがこの付加的なテクスチャ座標マトリクス変換を用いて実行され得る。
【００１９】
この発明の上述の目的，その他の目的，特徴および利点は、図面を参照して行う以下の実施例の詳細な説明から一層明らかとなろう。
【００２０】
【実施例】
図１は対話型（インタラクティブ）３Ｄコンピュータグラフィクスシステム５０の一例を示す。システム５０は対話型３Ｄビデオゲームをステレオ音声とともにプレイするのに用いられ得る。これはまた多様な他のアプリケーションにも用いられ得る。
【００２１】
この実施例において、システム５０は３次元世界のディジタル表現ないしモデルをインタラクティブにかつリアルタイムに処理することができる。システム５０は、任意の視点から、その世界の一部または全部を表示することができる。たとえば、システム５０は、手持ちコントローラ５２ａおよび５２ｂまたは他の入力デバイスからのリアルタイム入力に応答して、視点をインタラクティブに変化できる。このことによって、ゲームプレーヤは、その世界内もしくは外の誰かの目を通してその世界を見ることができる。システム５０は、リアルタイム３Ｄインタラクティブ表示を必要としないアプリケーション（たとえば２Ｄ表示の発生やおよび／またはノンインタラクティブ表示）に使用できるが、高品質の３Ｄ映像を非常に速く表示する能力は、非常にリアルでエキサイティングなゲームプレイや他のグラフィクスインタラクションを創造するのに使用され得る。
【００２２】
システム５０を用いてビデオゲームまたは他のアプリケーションをプレイするために、ユーザはまず、主ユニット５４を、カラーテレビ５６または他の表示装置に、両者の間にケーブル５８を接続することによって、接続する。主ユニット５４はカラーテレビ５６を制御するためのビデオ信号およびオーディオ信号を発生する。ビデオ信号はテレビジョン画面５９上に表示されている映像を制御するものであり、オーディオ信号はテレビのステレオスピーカ６１Ｌおよび６１Ｒを通して音声として再生される。
【００２３】
ユーザはまた主ユニット５４を電源につなぐ必要がある。この電源は従来のＡＣアダプタ（図示せず）であってよく、そのＡＣアダプタは家庭用の標準的な壁ソケットに差し込まれ、家庭用電源を、主ユニット５４を駆動するのに適した低いＤＣ電圧信号に変換する。他の実施例ではバッテリが用いられてもよい。
【００２４】
ユーザは主ユニット５４を制御するために手持ちコントローラ５２ａおよび５２ｂを用いる。コントロール６０は、たとえば、３Ｄ世界内においてテレビ５６に表示されているキャラクタが移動すべき方向（上または下、左または右、近づいてまたは遠ざかって）を指示するために使用され得る。コントロール６０は、また他のアプリケーションのための入力（たとえばメニュー選択，ポインタ／カーソル制御，その他）を与える。コントローラ５２は多様な形態をとり得る。この実施例においては、図示されるコントローラ５２は、各々ジョイスティック，押しボタンおよび／または方向スイッチのようなコントロール６０を含む。コントローラ５２は、ケーブルによって、もしくは電磁波（たとえば電波または赤外線）を介してワイヤレスで、主ユニット５４に接続され得る。
【００２５】
ゲームのようなアプリケーションをプレイするために、ユーザはビデオゲームもしくはプレイしたいと思う他のアプリケーションをストアしている適宜の記憶媒体６２を選択し、その記憶媒体を主ユニット５４のスロット６４に差し込む。記憶媒体６２は、たとえば、特別にエンコードされおよび／または記号化された光学的ならびに／もしくは磁気的ディスクであってよい。ユーザは主ユニット５４をオンするために電源スイッチ６６を操作し、主ユニットがその記憶媒体６２にストアされているソフトウェアに基づいてビデオゲームもしくは他のアプリケーションを実行し始めるようにする。ユーザは主ユニットに入力を与えるためにコントローラ５２を操作する。たとえば、コントロール６０を操作することによってゲームもしくは他のアプリケーションをスタートさせる。他のコントロール６０を動かすことによって、動画キャラクタを異なる方向に移動させ、または３Ｄ世界におけるユーザの視点を変化させる。記憶媒体６２にストアされている具体的なソフトウェアによって、コントローラ５２上の種々のコントロール６０は異なる時間で異なる機能を達成することができる。
全体システムの例
図２はシステム５０の例示的なコンポーネントのブロック図であり、重要なコンポーネントは、
・主プロセサ（ＣＰＵ）１１０、
・主メモリ１１２、および
・グラフィクス／オーディオプロセサ１１４
を含む。
【００２６】
この実施例において、主プロセサ１１０（たとえばＩＢＭパワーＰＣ７５０の改良版）は、手持ちコントローラ５２（および／または他の入力デバイス）からの入力をグラフィクス／オーディオプロセサ１１４を通して受ける。主プロセサ１１０はユーザ入力にインタラクティブに応答し、光ディスクドライブのような大容量記憶媒体アクセス装置１０６を介して、たとえば外部記憶媒体６２から供給されるビデオゲームもしくは他のプログラムを実行する。一例として、ビデオゲームプレイの状況では、主プロセサ１１０は、多様なインタラクティブ制御機能に加えて、衝突検出および動画処理を実行する。
【００２７】
この実施例では、主プロセサ１１０は３Ｄグラフィクス／オーディオコマンドを発生し、それらをグラフィクス／オーディオプロセサ１１４に送る。グラフィクス／オーディオプロセサ１１４はこれらのコマンドを処理し、ディスプレイ５９上での可視映像を生成し、ステレオスピーカ６１Ｒおよび６１Ｌもしくは他の適宜の音声発生デバイス上でのステレオ音声を生成する。
【００２８】
実施例のシステム５０はビデオエンコーダ１２０を含み、このビデオエンコーダは、グラフィクス／オーディオプロセサ１１４からの映像信号を受けて、その映像信号をコンピュータモニタや家庭用テレビ５６のような標準的な表示装置上での表示に適したアナログおよび／またはディジタルビデオ信号に変換する。システム１００はまたオーディオコーデック（圧縮器／伸長器）１２２を含み、このオーディオコーデックはディジタル化されたオーディオ信号を圧縮しかつ伸長するとともに、必要に応じてディジタルオーディオ信号のフォーマットとアナログオーディオ信号のフォーマットとの間で変換を行う。オーディオコーデック１２２はバッファ１２４を介してオーディオ入力を受けることができ、処理（たとえば、プロセサが生成したおよび／または大容量記憶媒体アクセス装置１０６のストリームオーディオ出力を介して受信した他のオーディオ信号とのミキシング）するために、そのオーディオ入力をグラフィクス／オーディオプロセサ１１４に与える。この実施例におけるグラフィクス／オーディオプロセサ１１４は、オーディオタスクに利用可能なオーディオメモリ１２６にオーディオ関連情報をストアすることができる。グラフィクス／オーディオプロセサ１１４は、結果的に得られるオーディオ出力信号を、圧縮およびアナログ信号への変換のために、オーディオコーデック１２２に与え、したがってそのオーディオ出力信号が（たとえばバッファアンプ１２８Ｌおよび１２８Ｒを介して）スピーカ６１Ｌおよび６１Ｒによって再生され得る。
【００２９】
グラフィクス／オーディオプロセサ１１４はシステム１００内に存在するであろう種々の付加的なデバイスと通信する能力を有する。たとえば、パラレルディジタルバス１３０は大容量記憶媒体アクセス装置１０６および／または他のコンポーネントと通信するために用いられる。シリアル周辺バス１３２は多様な周辺機器または、たとえば、
・ＰＲＯＭおよび／またはＲＴＣ（リアルタイムクロック）１３４、
・モデム１３６もしくは他のネットワークインタフェース（それはシステム１００を、プログラム命令および／またはデータがダウンロードもしくはアップロードされ得るインターネットあるいは他のディジタルネットワークのようなテレコミュニケーションネットワーク１３８に接続する）、および
・フラッシュメモリ１４０
を含む他のデバイスと通信する。
別の外部シリアルバス１４２は、付加的な拡張メモリ１４４（たとえばメモリカード）もしくは他のデバイスと通信するために使用され得る。コネクタが種々のデバイスをバス１３０，１３２および１４２に接続するために使用され得る。
グラフィクス／オーディオプロセサの例
図３は実施例のグラフィクス／オーディオプロセサ１１４を示すブロック図である。或る実施例においては、グラフィクス／オーディオプロセサ１１４はシングルチップＡＳＩＣであってよい。この実施例においては、グラフィクス／オーディオプロセサ１１４は、
・プロセサインタフェース１５０、
・メモリインタフェース／コントローラ１５２、
・３Ｄグラフィクスプロセサ１５４、
・オーディオディジタル信号プロセサ（ＤＳＰ）１５６、
・オーディオメモリインタフェース１５８、
・オーディオインタフェース／ミキサ１６０，
・周辺コントローラ１６２、および
・表示コントローラ１６４
を含む。
【００３０】
３Ｄグラフィクスプロセサ１５４はグラフィクス処理タスクを実行する。オーディオディジタル信号プロセサ１５６はオーディオ処理タスクを実行する。表示コントローラ１６４は主メモリ１１２からの映像情報にアクセスし、表示装置１０２上での表示のためにその映像情報をビデオエンコーダ１２０に与える。オーディオインタフェース／ミキサ１６０はオーディオコーデック１２２をインタフェースし、また異なるソースからのオーディオ（たとえば、大容量記憶媒体アクセス装置１０６からのオーディオストリーム，オーディオＤＳＰ１５６の出力，およびオーディオコーデック１２２を通して受ける外部オーディオ入力）をミックスすることができる。プロセサインタフェース１５０は主プロセサ１１０およびグラフィクス／オーディオプロセサ１１４の間のデータおよび制御インタフェースを提供する。
【００３１】
メモリインタフェース１５２はグラフィクス／オーディオプロセサ１１４とメモリ１１２との間のデータおよび制御インタフェースを提供する。この実施例においては、主プロセサ１１０は、プロセサインタフェース１５０およびグラフィクス／オーディオプロセサ１１４の一部であるメモリインタフェース１５２を介して、主メモリ１１２にアクセスする。周辺コントローラ１６２はグラフィクス／オーディオプロセサ１１４と上で述べた種々の周辺機器との間のデータおよび制御インタフェースを提供する。オーディオメモリインタフェース１５８はオーディオメモリ１２６とのインタフェースを提供する。
グラフィクスパイプラインの例
図４は図３の３Ｄグラフィクスプロセサ１５４をより詳細に示すグラフィクス処理システムを示す。この３Ｄグラフィクスプロセサ１５４は、とりわけ、コマンドプロセサ２００および３Ｄグラフィクスパイプライン１８０を含む。主プロセサ１１０はデータストリーム（たとえばグラフィクスコマンドストリームおよび表示リスト）をコマンドプロセサ２００に通信する。主プロセサ１１０はメモリレイテンシを最小化するために２レベルキャッシュ１１２を有し、さらにまたグラフィクス／オーディオプロセサ１１４に向けられたキャッシュされていないデータストリームのための書込収集(write-gathering)バッファ１１１を有する。この書込収集バッファ１１は部分キャッシュラインを全キャッシュラインに集め、バスの最大使用時に、グラフィクス／オーディオプロセサ１１４からのデータを１つのキャッシュラインに送る。
【００３２】
コマンドプロセサ２００は主プロセサ１１０からの表示コマンドを受け、それらを解剖し、メモリコントローラ１５２を介して共用メモリ１１２からのそのコマンドを処理するに必要な付加的なデータを入手する。コマンドプロセサ２００は、２Ｄおよび／または３Ｄ処理およびレンダリングのために、頂点コマンドのストリームをグラフィクスパイプライン１８０に与える。グラフィクスパイプライン１８０はこれらのコマンドに基づいて映像を生成する。結果として得られた映像情報は、表示コントローラ／ビデオインタフェースユニット１６４によるアクセスのために主メモリ１２０に転送され得て、この映像情報は表示装置１５６上にパイプライン１８０のフレームバッファ出力を表示する。
【００３３】
図５はグラフィクスプロセサ１５４を用いて実行される処理を図解的に示すブロック論理フロー図である。主プロセサ１０は、グラフィクスコマンドストリーム２１０，表示リスト２１２および頂点アレイ２１４を主メモリ１１２にストアし、ポインタをバスインタフェース１５０を介してコマンドプロセサ２００に送る。主プロセサ１１０は主メモリ１１０内に割り付けられた１つ以上のグラフィクスＦＩＦＯバッファ２１０にグラフィクスコマンドをストアする。このコマンドプロセサ２００は、
・同期／フロー制御および負荷バランスのためにグラフィクスコマンドを受けかつバッファするオンチップＦＩＦＯメモリバッファ２１６を介して主メモリ１１２からのコマンドストリーム、
・オンチップコールＦＩＦＯメモリバッファ２１８を介して主メモリ１１２からの表示リスト２１２、および
・コマンドストリームからおよび／または主メモリ１１２の頂点アレイ２１４からの頂点アトリビュート
を頂点キャッシュ２２０を介して取り込む。
【００３４】
コマンドプロセサ２００はコマンド処理動作２００ａを実行し、そのコマンド処理動作２００ａはアトリビュート形式を浮動小数点フォーマットに変換し、結果的に得られた完全頂点ポリゴンデータをレンダリング／ラスタライゼーションのためにグラフィクスパイプライン１８０に与える。プログラマブルメモリ調停回路１３０（グラフィクスメモリ要求調停回路：図４）は、グラフィクスパイプライン１８０，コマンドプロセサ２００および表示コントローラ／ビデオインタフェースユニット１６４の間での共用主メモリ１１２へのアクセスを調停する。
【００３５】
図４は、グラフィクスパイプライン１８０が
・変換ユニット３００、
・セットアップ／ラスタライザ４００、
・テクスチャユニット５００、
・テクスチャ環境ユニット６００、および
・ピクセルエンジン７００
を含むことを示す。
【００３６】
変換ユニット３００は多様な２Ｄおよび３Ｄ変換および他の動作３００ａ（図５）を実行する。変換ユニット３００は変換処理３００ａに用いられるマトリクスをストアするための１つ以上のマトリクスメモリ３００ｂを含む。変換ユニット３００は、入来する頂点毎のジオメトリをオブジェクト空間からスクリーン空間へ変換し、そして入来するテクスチャ座標を変換しかつ投影テクスチャ座標（３００ｃ）を計算する。変換ユニット３００はまたポリゴンクリッピング／カリング(clipping/culling)３００ｄを実行する。変換ユニット３００ｂによってまた達成される照明処理３００ｅが、この実施例では８つまでの独立した照明について、頂点毎に照明計算を行う。変換ユニット３００は、エンボス(embossed)タイプのバンプマッピング効果およびポリゴンクリッピング／カリング動作（３００ｄ）のために、テクスチャ座標を発生する（３００ｃ）。
【００３７】
セットアップ／ラスタライザ４００はセットアップユニットを含み、このセットアップユニットは、変換ユニット３００からの頂点データを受け、三角形セットアップ情報を、エッジラスタライゼーション，テクスチャ座標ラスタライゼーションおよびカラーラスタライゼーションを実行する１つ以上のラスタライザユニット（４００ｂ）に送る。
【００３８】
テクスチャユニット５００は、オンチップテクスチャメモリ（ＴＭＥＭ）５０２を含んでもよく、たとえば、
・主メモリ１１２からのテクスチャ５０４の検索、
・たとえばマルチテクスチャ処理，ポストキャッシュテクスチャ伸長，テクスチャフィルタリング，エンボシング，投影テクスチャの使用を通しての陰影付け，およびアルファトランスパーレンシおよびデプスを用いるＢＬＩＴを含むテクスチャ処理（５００ａ）、
・バンプマッピング，偽(pseudo)テクスチャおよびテクスチャタイル(tiling)効果（５００ｂ）のためのテクスチャ座標置換を計算するバンプマップ処理、および
・間接テクスチャ処理（５００ｃ）
を含むテクスチャリングに関連する種々のタスクを実行する。
【００３９】
テクスチャユニット５００はテクスチャ環境処理（６００ａ）のためにフィルタされたテクスチャ値をテクスチャ環境ユニット６００に出力する。テクスチャ環境ユニット６００は、ポリゴンおよびテクスチャカラー／アルファ／デプスをブレンドし、また逆レンジベース(reverse range based)のフォグ効果を達成するために、テクスチャフォグ処理（６００ｂ）を実行する。テクスチャ環境ユニット６００はたとえばカラー／アルファ変調，エンボシング，詳細テクスチャ，テクスチャスワッピング，クランピングおよびデプスブレンディングに基づく多様な他の環境関連機能を実行するマルチステージ(multi stages)を提供する。
【００４０】
ピクセルエンジン７００はデプス（ｚ）比較（７００ａ）およびピクセルブレンディング（７００ｂ）を実行する。この実施例では、ピクセルエンジン７００はデータを埋め込み（オンチップ：内蔵）フレームバッファメモリ７０２にストアする。グラフィクスパイプライン１８０は、フレームバッファおよび／またはテクスチャ情報をローカルにストアするために１つ以上の内蔵ＤＲＡＭメモリ７０２を含む。ｚ比較７００ａは、現在有効なレンダリングモードに依存して、グラフィクスパイプライン１８０におけるより早いステージで実行される（たとえば、ｚ比較は、もしアルファブレンディングが要求されていないならば早くに実行され得る）。このピクセルエンジン７００は表示コントローラ／ビデオインタフェースユニット１６４による主メモリ１１２へのアクセスのために、オンチップフレームバッファ７０２を周期的に書き込むコピー動作７００ｃを含む。このコピー動作７００ｃはまた動的テクスチャ合成効果のために、埋め込みフレームバッファ７０２の内容を主メモリ１１２中のテクスチャにコピーするために使用され得る。エイリアス補正ないしアンチエイリアシング（anti-aliasing：エイリアス補正）および他のフィルタリングがコピーアウト動作中に実行され得る。最終的に主メモリ１１２にストアされるグラフィクスパイプライン１８０のフレームバッファ出力は、表示コントローラ／ビデオインタフェースユニット１６４によってフレーム毎に読み出される。表示コントローラ／ビデオインタフェース１６４は表示装置５６上での表示のためにディジタルＲＧＢピクセル値を与える。
ステッチングおよび他の応用のための３重テクスチャ座標変換の例
図６は、システム５０によって実現され得る例示的なステッチングしたテクスチャ座標の発生およびテクスチャリングパイプラインを示す。この実施例において、変換ユニット３００は、他のものの間で、内積計算器（マトリクス変換）３０２，正規化器３０４，および第２内積計算器（マトリクス変換）３０６を含む。
【００４１】
内積計算器３０２は、オブジェクト空間中において表面に関連するテクスチャ座標，ジオメトリもしくは法線を規定するテクスチャ発生ソースデータを受け、第１の頂点に基づくマトリクス変換を適用して、同質の(homogeneous)目空間(eye space)において（投影された）テクスチャ座標ｓ′，ｔ′（およびオプションとしてｑ′）を生成する。そのようにして発生された結果的なテクスチャ座標は、オプションとして正規化器ブロック３０４によって正規化され、そして、テクスチャ座標上における付加的なマトリクス変換を行う第２の内積計算器３０６へ与えられる。この付加的なマトリクス変換は、ステッチングしたテクスチャ座標ｓ″，ｔ″を与えるために、第２の頂点に対してテクスチャ座標を補間する。これらのステッチングしたテクスチャ座標はテクスチャマッパ(mapper)５００へ与えられる。このテクスチャマッパ５００はテクスチャメモリ５０２内にステッチング／スキニングしたテクスチャｔｘをストアする。テクスチャマッパ５００は、変換ラスタライズ表面を表すラスタライズしたピクセルとのブレンドのためのテクセルを与えるように、頂点によって規定されるスキニング表面上にテクスチャｔｘをマッピングする。この実施例においては、ブレンドは、テクスチャ環境ブロック６００ａによって行われる。ブレンド出力は表示のための内蔵フレームバッファ７０２内にストアされる。
【００４２】
より詳細にいうと、変換ユニット３００は、主プロセサ１１０から、イメージ化されるべきステッチング表面を特定する頂点毎のデータを受ける。実施例における変換ユニット３００は、そのようなデータをオブジェクト空間内の頂点のジオメトリ（ｘ，ｙ，ｚ）規格の形で受け入れることができ、あるいは表面に対応する法線（すなわち、Normal（法線），Binormal（２重法線），Tangent（タンジェント：接線））の規格であってもよい。変換ユニット３００は、従来のモデルビュー（もしくは他の）変換を行い、同質の（たとえば目）空間における新たなジオメトリおよび／または新たな法線を発生する。
【００４３】
変換ユニット３００は、モデル空間の頂点毎のソース値（たとえば、頂点ジオメトリ［ｘ，ｙ，ｚ］または法線［Ｎｘ，Ｎｙ，Ｎｚ］もしくはテクスチャ座標［ｓ，ｔ］）を対応するテクスチャ座標に変換するために並列演算を行う。このテクスチャ座標発生のための内積計算（図６のブロック３０２）は同質（たとえば、目）空間におけるテクスチャ座標を発生する。変換のために使用されるマトリクスはモデルビューマトリクスであり、あるいはそれは幾分異なるテクスチャ変換マトリクスであってよい。ブロック３０２によって行われるマトリクス変換は頂点ベースで行われ、特定の頂点についてテクスチャ座標ｘ′，ｔ′［２′］の適宜のセットを与える。他の頂点情報で特定されるマトリクスインデックスを通して、異なる変換マトリクスが選択されてもよい。
【００４４】
頂点毎に１つのマトリクスを使用することによって、境界ポリゴンが「骨」間の接続点をカバーするように伸びることができる。しかしながら、この引き延ばしは必ずしもスムーズ（平滑）ではない。ステッチングは、通常、付加的な頂点間を補間することによって、スムーズな接続点を達成するために、より以上のマトリクス変換を必要とする。好ましい実施例は、テクスチャ座標を同質空間へ変換するために使用される１つのマトリクス（ブロック３０２）に加えて、１つのマトリクス乗算（ブロック３０６）を実行することによって節約を図る。この第２の、内積計算器３０６によって行われるカスケードなマトリクス変換が、同じテクスチャ座標上であるが今回は第２の頂点について、異なるテクスチャ変換を行う。このことによって第１の頂点と第２の頂点との間の補間を行う。たとえば、第２の頂点がスケルトンアニメーションモデルの他の「骨」上の頂点であってよい。補間の方法は、（典型的なスキニングのアプリケーションとは異なり）リニア（直線的）である必要はない。第２のテクスチャ変換３０６はこれら２つの頂点間を補間する能力を提供し、それらの間の適宜の点を特定するテクスチャ座標を与える。これによって、２つの頂点のステッチング補間が行われる。１つのマトリクスだけが或る頂点を変換するために使用され、異なる頂点には異なるマトリクスが使用され得る。
【００４５】
望まれる各出力テクスチャ毎にユニークな変換を適用するために内積計算器３０２を再循環させることができるが、ステッチングを包含するすべての頂点についての付加的な頂点毎の遅延が原因となって結果的に生じた速度性能における低下は、望ましくないものである。性能を最大にするために、好ましい実施例の変換ユニット３００は、第１の内積計算器３０２にカスケードな第２のハードウェアベースの内積計算器３０６を備え、その第２の内積計算器３０６が内積計算器３０２からの第１パスでのテクスチャ座標を取り込み、それらが第２の頂点に対するさらなる変換を行うので、ステッチングしたテクスチャ座標として使用され得る変換したテクスチャ座標の新たなセットを発生する。
【００４６】
第１内積計算器３０２と第２内積計算器３０６との間に正規化器(normalizer)３０４を設ける。この正規化器３０４は、表面がデフォルメされかつ法線が引き延ばされることに応じて生じる歪みを除去するために使用され得る。ブロック３０２によって行われるモデルビュー変換によって発生されるテクスチャ座標は正規化されていないが、ブロック３０６によって行われるテクスチャ変換は正規化した入力を想定している。したがって、第２の変換のための有効データを得るために逆正規化を適用することが望ましい。逆正規化は頂点ベースで変化し、主プロセサ１１０がこの効果のための要因となる適宜のテクスチャ変換マトリクスを提供するのを困難にしている。正規化器は、内積計算器３０２によって発生されたテクスチャ座標ｓ′，ｔ′（および含まれたｑ′座標）を取り込むことによって、このことを処理し、そしてこれらのテクスチャ座標を第２の内積計算器３０６へ与える前にそのテクスチャ座標を正規化する。
【００４７】
正規化器３０４は、テクスチャのステッチング座標を発生するために補間を行うブロック３０６によって実行される正規化変換に与えられる前に、その計算した頂点データが正規化されることを保障する。正規化器３０４は、法線の歪みに起因する表面のゆがみを回避する。正規化器がなければ、或る状況下におけるテクスチャ座標の引き延ばしが美しくない視覚効果を与えることになろう。しかしながら、この実施例においては、正規化器３０４が選択的にイネーブルされまたはディスエーブルされ得て、正規化器がすべての状況下において必要とされずもしくは使用されないかもしれない。
【００４８】
図６のパイプラインは特にステッチングのために有用であるけれども、環境マッピングや反射マッピングのような他のアプリケーションのために使用され得る。第１内積計算器３０２は主プロセサ１１０が与える頂点ベースでの任意のパラメータ（たとえば、法線，カラー，テクスチャ座標の他のセット，２法線，等）を演算することができる。内積計算器３０２によって提供される変換は、ソースを任意の位置に変換し、一方、第２内積計算器３０６は同質空間からのテクスチャ発生のためのテクスチャ座標空間への再マッピングを行う。これらの技術は汎用であり、オブジェクトのジオメトリに依存する任意の形式のテクスチャリング（たとえば、環境マッピング、反射マッピング、および他のアプリケーション）のために使用され得る。
より詳細な実施例
図７は変換ユニット３００によって提供されるステッチングテクスチャ座標発生パイプラインのより詳細な例を示す。この実施例においては、変換ユニット３００は頂点毎に複数対のテクスチャ座標を取り扱うことができる。第１内積計算器３０２は、対応する複数のテクスチャマトリクスを使用して、テクスチャ対／トリプレート(triplets)のセットもしくはテクスチャ座標の対を変換する。入力座標は、この実施例においては、次の４つの任意のものであってよい。
【００４９】
・主プロセサ１１０からのテクスチャ座標ｓｎ，ｔｎ  １．０，１．０
・主プロセサ１１０からのモデル空間における頂点ジオメトリｘ，ｙ，ｚ，１．０
・モデル空間における法線ｎｘ，ｎｙ，ｎｚ，１．０
この実施例における入力座標はオブジェクト座標におけるものである（すなわち、変換前）。（ｎ）インデックスはテクスチャマトリクスについてのテクスチャに基づくアドレスである。ユニークなインデックスｎが各可能なテクスチャ座標のために使用され得る。
【００５０】
マトリクスメモリ３０８が、ブロック３０２による使用のために種々のテクスチャ変換マトリクスをストアするために設けられる。マトリクス選択はテクスチャ数に基づいてハードウェアによって自動的行われる。
【００５１】
第２内積計算器３０６はテクスチャ座標への「第２パス」変換を行う。この付加的な変換はすべてのテクスチャ座標に対してオプション的に適用され得る。イネーブルされると、この付加的な変換は、実施例において、すべてのアクティブな通常の(regular)テクスチャ座標に適用される。
【００５２】
図７のパイプラインは第３のテクスチャ座標ｑの計算とともにあるいはそれなしで動作する。ｑの計算はより高い速度性能を達成するために削除されてもよい。実際の場合（２つのテクスチャ座標ｓ，ｔだけを有する１つの通常のテクスチャ）、１．０に等しい包含されたｑｔはＳｔ′ｎおよびＴｔ′ｎを計算するために使用されるが、Ｑｔ′ｎは計算されない。他の場合において、もしＳｔの発生（包含したＱ）が第１パスのために特定されたとしても、３つの（Ｓｔ′ｎ，Ｑｔ′ｎ）すべての２重パス(dual)テクスチャ座標が計算される。
【００５３】
実施例において、第２内積計算器は、マトリクスメモリ３０８とは別のメモリ領域である「２重(dual)テクスチャ」マトリクスメモリ３１０にストアされたテクスチャ変換マトリクスの別々のセットを使用する。メモリ３１０にストアされているマトリクスのフォーマットは、実施例においてはマトリクスメモリ３１０内のすべての「デュアルテクスチャ」変換マトリクスが３つの行を有すること（すなわち、それらはすべて３×４マトリクスであること）を除いて、メモリ３０８にストアされているマトリクスのフォーマットと同じであってよい。主プロセサ１１０によって与えられる頂点毎の情報は頂点毎のマトリクスインデックスを含み、それによって、異なるマトリクスおよび頂点ベースでの関連の変換を選択することができる。
【００５４】
上で述べたように、テクスチャ座標のオプションとしての正規化はブロック３０４によって行われる。基本的に、各入力テクスチャトリプレートはその法線の逆数でスケーリングされる。（Ｓｔｎ，Ｔｔｎ，Ｑｔｎ，１．０）または（Ｓｎｎ，Ｔｎｎ，Ｑｎｎ，１．０）の間の選択は頂点座標ベースで行われ得る。Ｑ座標がない実際の場合が正規化（これは一般的には有用ではない）とともに使用されるとき、どんな正規化も生じない。
【００５５】
正規化器３０４は、たとえば、平方を行うために２４ビット浮動小数点計算器、および開平計算を行いかつ正規化を生成する制限された精度の１２ビットルックアップを用いて実現され得る。これはほぼ１２−１４ビットの精度を提供し、それは１０ビットのテクスチャ座標精度および８ビットのサブピクセル精度について受け入れ可能である。丸めによる誤差はより小さいテクスチャ（たとえば、１０２４×１０２４に対する５１２×５１２）を使用することによって補償され得る。もちろん、異なる実施例が異なる精度のものを用いることは可能である。
【００５６】
この実施例において、「２重(dual)パス」変換がアクティブでないとき（すなわち、第２内積計算器３０６がイネーブルされていないとき）、この特徴は完全にディスエーブルされかつどんなテクスチャ座標にも影響を及ぼさない。このことが図７に図解されていて、そこでは、マルチプレクサ３１４が第２内積計算器３０６の出力（それがイネーブルされているとき）または第１内積計算器３０２の出力（第２内積計算器がイネーブルされていないとき）のいずれかをテクスチャユニット５００へのテクスチャ座標として与えるために選択できる。
【００５７】
具体的な実施例においては、正規化器３０４および第２内積計算器３０６はジオメトリ計算のためには利用可能でなく、ライティングのための法線／ジオメトリ計算について使用することもできない。さらに、第２内積計算器３０６によって発生された通常のテクスチャ座標は、一般的には、エンボシング(embossing) のために使用されるべきである。したがって、もしエンボシングがイネーブルされれば、この実施例における乗算器３１４は、常に、第１内積計算器３０２の出力を選択する。さらに、この実施例において、正規化器３０４および第２内積計算器３０６は、第１内積計算器３０２の出力をよりどころにする。もちろん、他の実施例が異なる構成や付加的な柔軟性を与えるようにしてもよい。
【００５８】
図８は変換ユニット３００の高位全体ブロック図の例である。詳細については、同じ出願人によるアメリカ特許出願第              を参照されたい。次表１〜７は、主プロセサ１１０がステッチングを行うために変換ユニット３００を制御するために使用できる種々のレジスタについてのレジスタ定義の例である。
【００５９】
【表１】
0004846120.tif 000002
【００６０】
【表２】
0004846120.tif 000003
【００６１】
【表３】
0004846120.tif 000004
【００６２】
【表４】
0004846120.tif 000005
【００６３】
【表５】
0004846120.tif 000006
【００６４】
【表６】
0004846120.tif 000007
【００６５】
【表７】
0004846120.tif 000008
【００６６】
ＡＰＩコールの例
次表８はステッチングを制御するために使用され得る関連のアプリケーションプログラマのインタフェースコールの例を示す。
【００６７】
【表８】
0004846120.tif 000009
【００６８】
GXLoadPosMtxImm
説明
この関数は３×４モデルビューマトリクスmtxPtrをマトリクスメモリ中の位置idへロードするために使用される。このマトリクスはモデル空間における位置を可視空間へ変換するために使用され、現在のもの（GXSetCurrentMtx 参照）のマトリクスを作ることによって、あるいは各頂点毎のマトリクスidを設定することによって、変換する。パラメータmtxPtrは３×４（行×列）マトリクスへのポインタである。パラメータidはマトリクスの位置を指示するために使用され、マトリクスメモリ中においてGXPosNrmMtx によって列挙される。
【００６９】
また、法線マトリクス（GXLoadNrmMtxImm またはGXLoadNrmMtxIndx）を同じidへロードすることができる。一般的には、法線マトリクスは位置マトリクスの逆転置(inverse transpose)である。法線マトリクスは頂点ライティング中に使用される。モデルビューとモデルビューの逆転置（トランスレーションを除く）とが同じ場合には、位置変換および法線変換の両方のために同じマトリクスをロードすることができる。
【００７０】
マトリクスはＤＲＡＭからＣＰＵキャッシュを通してグラフィクスＦＩＦＯへコピーされ、そしてこの関数を用いてロードされたマトリクスは常にＣＰＵキャッシュとコヒーレント(coherent)である。
【００７１】
【表９】
0004846120.tif 000010
【００７２】
GXLoadNrmMtxImm
説明
この関数は、３×４マトリクスmtxPtrから３×３法線変換マトリクスをマトリクスメモリの位置idにロードするために使用される。このマトリクスは、モデル空間中の法線を可視空間へ変換するために、現在のマトリクス（GXSetCurrentMtx 参照）を作ることによって、または頂点毎にマトリクスidを設定することによって、使用される。パラメータmtxPtrは３×４（行×列）マトリクスへのポインタである。３×４マトリクスにおけるトランスレーション項(translation terms)は法線回転のためには必要でなく、ロード中無視される。パラメータidはGXPosNrmMtx によって列挙され、マトリクスメモリ中の宛先マトリクス位置を指示するために使用される。
【００７３】
また、位置マトリクス(GXLoadPosMtxImm) を同じidへロードすることができる。通常、法線マトリクスは位置（モデルビュー）マトリクスの逆転置であり、頂点ライティング中に使用される。モデルビューとモデルビューマトリクスの逆転置（トランスレーションを除く）とが同じ場合には、法線および位置マトリクスの両方のために同じマトリクスをロードすることができる。３×３マトリクスから法線マトリクスをロードするために、GXLoadNrmMtxImm 3x3を用いる。
【００７４】
マトリクスデータは主メモリもしくはＣＰＵキャッシュからグラフィクスＦＩＦＯへコピーされ、この関数によってロードされたマトリクスはＣＰＵキャッシュと常にコヒーレントである。
【００７５】
【表１０】
0004846120.tif 000011
【００７６】
GXMatrixIndex
説明
この関数は頂点のためのマトリクスインデックスデータを特定するために使用される。それは、GXBegin およびGXEnd の間でのみコールされる。マトリクスインデックスは、この頂点のデータを変換するために使用するマトリクス（先にマトリクスメモリにロードしている。GXLoadPosMtxImm ，GXLoadNrmMtxImm ，およびGXLoadTexMtxImm 参照）を特定する。
【００７７】
頂点のためにこの関数を使うために、まず、現在の頂点記述子(current vertex descpriptor)中のマトリクスインデックスをイネーブルする。現在の頂点記述子はGXSetVtxDescを用いてセットされる。インデックスが未符号化(un-signed)８ビット数であるので、頂点アトリビュートフォーマット(GXSetVtxAttrFmt) をセットする必要はない。GXMatrixIndex1u8およびGXMatrixIndex1x8は同じである。
【００７８】
頂点関数がコールされるべき順番がGXSetVtxDescによって特定される。各頂点は、グラフィクスハードウェアによる適当な解釈を補償するために、特定した順序でアトリビュート（位置，カラー，法線，等）を送らなければならない。
【００７９】
GXMatrixIndex1u8(GXMatrixIndex1x8)は最適性能のためのインライン(inline)関数として実現される。GXMatrixIndex1u8(GXMatrixIndex1x8)は正規関数として実現され、そのために、ライブラリはGXBegin ／GXEnd 間における頂点関数コールの正しい順序（エラーのコモンソース(common source)）を立証する。
【００８０】
【表１１】
0004846120.tif 000012
【００８１】
【表１２】
0004846120.tif 000013
【００８２】
GXSetVtxDesc
【００８３】
【表１３】
0004846120.tif 000014
【００８４】
説明
この関数は現在の頂点記述子中に１つのアトリビュート(attr)の形式を設定する。現在の頂点記述子はどのアトリビュートが頂点中に存在するかあるいは各アトリビュートがどのように参照されるかを定義する。現在の頂点記述子はＧＸＡＰＩによって作られたグラフィクスコマンドストリームを解釈するためにグラフィクスプロセサ（ＧＰ）によって使用される。特に、現在の頂点記述子はコマンドストリーム中に存在する頂点データを説明するために使用される。
【００８５】
アトリビュート
GX_VA_POSMTXIDX
attrパラメータはアトリビュートに名前を付ける。アトリビュートGX_VA_POSMTXIDX が、頂点毎のマトリクスインデックス（８ビット）を特定するために使用される。このインデックスは、マトリクスメモリ中の位置（もしライティングなら、および法線）に索引を付けるために使用される。頂点毎のマトリクスインデックスを与えることによってキャラクタのスキニングを可能にする。
【００８６】
GX_VA_TEX0MTXIDX-GX_VA_TEX7MTXIDX
また、GX_VA_TEX0MTXIDX-GX_VA_TEX7MTXIDXを使って、頂点毎に、テクスチャマトリクスインデックスを特定することができる。各マトリクスインデックスはマトリクスメモリ中のテクスチャマトリクスの行アドレスである８ビット値である。マトリクスインデックスの数値はGXSetTexCoordGenにおいて用いられる発生したテクスチャ座標に対応する。たとえば、GX_VA_TEX3MTXIDXはGX_TEXCOORD3 を発生するときに使用するマトリクスを示す。テクスチャマトリクスのインデックスを順次の順序で与えるが、マトリクスインデックスをスキップすることも可能である。たとえば、GX_VA_TEX0MTXIDXおよびGX_VA_TEX2MTXIDXを与えることができる。テクスチャ座標GX_TEXCOORD1 はGXSetTexCoordGenにおいて特定されたマトリクスを使用する。換言すれば、GXSetTexCoordGenによって与えられるデフォルトのテクスチャマトリクスインデックスは、もし１つが与えられると、頂点毎のマトリクスインデックスによって無視される。頂点毎にテクスチャマトリクスインデックスを与えることは、たとえば、スキニングモデルを反射マッピングするときに、スキニングした（ステッチングした）モデルからのテクスチャ座標を発生するときに使用される。
【００８７】
GX_VA_POS
このGX_VA_POS アトリビュートは位置について使用される。位置は各頂点毎に必要となるアトリビュートだけである。
【００８８】
GX_VA_NRM ，GX_VA_NBT
GX_VA_NRM アトリビュートは３エレメント法線のために使用される。GX_VA_NBT は、バンプマッピングのためなどのように３つの法線(normal,binormal,tangent) が必要なときにイネーブルされる。GX_VA_NRM およびGX_VA_NBT は同時にイネーブルされるべきではない。GX_VA_NRM およびGX_VA_NBT は頂点アトリビュートフォーマットにおいて同じフォーマットを共用する（GXSetVtxAttrFmt 参照）。
【００８９】
アトリビュート形式
アトリビュート形式GX_NONEはこのアトリビュートのためにデータやインデックスが送られないことを示す。アトリビュート形式GX_DIRECTはこのアトリビュートのためのデータがグラフィクスコマンドストリームに直接パスされることを示す。アトリビュート形式GX_INDEX8はコマンドストリーム中に８ビットインデックスが送られることを示す。８ビットインデックス0xffは反転値である。それはグラフィクスプロセサにおいて頂点をディスエーブルするために使用される。また、この８ビットインデックスを使って、新たな表示リストを再発生することなしに、表示リストにおける或る三角形(triangles) を「オフ」することができる。グラフィクスプロセサは、アトリビュートアレイのベースポインタとストライド（GXSetArray参照）とに従って、インデックスを用いて、アトリビュートデータをルックアップする。GX_INDEX16 のアトリビュート形式は頂点データ中に１６ビットインデックスが存在することを示す。この１６ビットインデックス0xffffはグラフィクスプロセサにおける頂点をディスエーブルするために使用される反転値である。
【００９０】
GXInitはGXClearVtxDescを用いて現在の頂点記述子をクリアする。
【００９１】
【表１４】
0004846120.tif 000015
【００９２】
イメージの結果の例
図９は実施例によって与えられるステッチングしたイメージの結果の例を示す。
互換性のある他の実施例
上述のシステム５０は上で述べた家庭用ビデオゲームコンソールの構成以外としても実現できる。たとえば、或るものは、システム５０をエミュレートする異なる構成を有するプラットフォームもしくはそれと同等のものにおいて、システム５０のために書かれたグラフィクスアプリケーションや他のソフトウェアを実行させることができる。もし、他のプラットフォームがシステム５０のいくつかのもしくはすべてのハードウェアおよびソフトウェアリソースをエミュレートしシミュレートしおよび／または提供することができれば、その他のプラットフォームはそのソフトウェアを成功裏に実行することができる。
【００９３】
一例として、エミュレータがシステム５０のハードウェアおよび／またはソフトウェア構成（プラットフォーム）とは異なるハードウェアおよび／またはソフトウェア構成（プラットフォーム）を提供できる。そのエミュレータシステムは、それのためにアプリケーションソフトウェアが書かれているシステムのいくつかのもしくはすべてのハードウェアおよび／またはソフトウェアコンポーネンツをエミュレートしもしくはシミュレートするソフトウェアおよび／またはハードウェアコンポーネンツを含む。たとえば、エミュレータシステムはパソコンのような汎用ディジタルコンピュータを含み、それはシステム５０のハードウェアおよび／またはファームウェアをシミュレートするソフトウェアエミュレータプログラムを実行する。上述のオーディオシステムのＤＳＰ処理がパソコンによってエミュレートされ得る。
【００９４】
或る汎用ディジタルコンピュータ（たとえばＩＢＭやマッキントッシュのパソコンおよびそれらの同等物）は、ダイレクトＸ(DirectX)または他の標準的な３ＤグラフィクスコマンドＡＰＩｓに従った３Ｄグラフィクスパイプラインを提供する３Ｄグラフィクスカードを備える。それらはまた、音声コマンドの標準的なセットに基づいて高品質のステレオ音声を提供するステレオ音声カードを備える。エミュレータソフトウェアを実行するそのようなマルチメディアのハードウェアを備えるパソコンは、システム５０のグラフィクスおよび音声性能とほぼ等しい十分な性能を有する。エミュレータソフトウェアはパソコンプラットフォーム上のハードウェアリソースを制御して、それのためにゲームプログラマがゲームソフトウェアを書いた家庭用ビデオゲームコンソールプラットフォームの処理，３Ｄグラフィクス，音声，周辺および他の能力をシミュレートする。
【００９５】
図１０はホストプラットフォーム１２０１，エミュレータコンポーネント１３０３および記憶媒体６２上のゲームソフトウェア実行可能バイナリ映像を用いる全体のエミュレーション処理を図解する。ホスト１２０１は、たとえばパソコン，ビデオゲームコンソールあるいは十分な計算力を有する任意の他のプラットフォームのような汎用または特定目的ディジタル計算装置である。エミュレータ１３０３はそのホストプラットフォーム１２０１上で走るソフトウェアおよび／またはハードウェアであり、記憶媒体６２からのコマンド，データおよび他の情報のそのホスト１２０１によって実行可能な形態へのリアルタイム変換を行う。たとえば、エミュレータ１３０３は記憶媒体６２からシステム５０によって実行されるように意図された「ソース」であるバイナリ映像プログラム命令を取り込み、これらのプログラム命令をホスト１２０１によって実行されもしくは処理され得るターゲットとなる形態に変換する。
【００９６】
一例として、ソフトウェアがＩＢＭパワーＰＣまたは他の特定のプロセサを用いるプラットフォーム上での実行のために書かれかつホスト１２０１が異なる（たとえばインテル）プロセサを用いるパソコンである場合、エミュレータ１２０３は記憶媒体１３０５からの１つのもしくは一連のバイナリ映像プログラム命令を取り込み、これらのプログラム命令を１つまたはそれ以上の同等のインテルのバイナリ映像プログラム命令に変換する。エミュレータ１２０３はまたグラフィクス／オーディオプロセサ１１４によって処理されるように意図されたグラフィクスコマンドおよびオーディオコマンドを取り込みかつ／あるいは生成し、そしてホスト１２０１上で利用可能なハードウェアおよび／またはソフトウェアグラフィクス／オーディオ処理リソースによって処理され得る形態にこれらのコマンドを変換する。一例として、エミュレータ１３０３はホスト１２０１の特別なグラフィクスおよび／または音声ハードウェア（たとえば標準的なダイレクトＸ，オープンＧＬおよび／または音声ＡＰＩｓ）によって処理され得るコマンドにこれらのコマンドを変換する。
【００９７】
上で述べたビデオゲームシステムのいくつかのもしくはすべての特徴を与えるために用いられるエミュレータ１３０３は、また、エミュレータを使ってゲームを走らせている種々のオプションおよびスクリーンモードの選択を簡単化しもしくは自動化するグラフィックユーザインタフェース（ＧＵＩ）を備える。一例において、そのようなエミュレータ１３０３はさらにそのソフトウェアが本来的に目的とされたホストプラットフォームに比べてより増強された機能性を含むこともできる。
【００９８】
図１１はエミュレータ１３０３で用いるに適したエミュレーションホストシステム１２０１を図解的に示す。このシステム１２０１は処理ユニット１２０３およびシステムメモリ１２０５を含む。システムバス１２０７がシステムメモリ１２０５を含む種々のシステムコンポーネンツを処理ユニット１２０３に結合する。システムバス１２０７は多様なバスアーキテクチャのいずれかを用いるメモリバスもしくはメモリコントローラ，周辺バスおよびローカルバスを含むいくつかのタイプのバス構造の任意のものである。システムメモリ１２０７はＲＯＭ１２５２およびＲＡＭ１２５４を含む。起動中においてのようにパソコンシステム１２０１中のエレメント（要素）間に情報を伝送する手助けをする基本ルーチンを含む基本入力／出力システム（ＢＩＯＳ）１２５６がＲＯＭ１２５２中にストアされる。システム１２０１はさらに種々のドライブおよび関連のコンピュータ読出可能な媒体を含む。ハードディスクドライブ１２０９が（典型的には固定の）磁気ハードディスク１２１１から読み出しそれへ書き込む。付加的な（たぶんオプションとしての）磁気ディスクドライブ１２１３が着脱可能な「フロッピィ」または他の磁気ディスク１２５１から読み出しかつそれへ書き込む。光ディスクドライブ１２１７はＣＤ−ＲＯＭあるいは他の光学媒体のような着脱自在な光ディスク１２１９から読み出しかつそれへ書き込む。ハードディスクドライブ１２０９および光ディスクドライブ１２１７は、ハードディスクドライブインタフェース１２２１および光ディスクドライブインタフェース１２２５によって、システムバス１２０７にそれぞれ接続される。これらのドライブおよびその関連するコンピュータ読出可能な媒体は、パソコンシステム１２０１のためのコンピュータ読出可能な命令，データ構造，プログラムモジュール，ゲームプログラムおよび他のデータの不揮発性の記憶媒体を提供する。他の構成では、コンピュータによってアクセス可能なデータをストアすることができる他のタイプのコンピュータ読出可能な媒体（たとえば磁気カセット，フラッシュメモリカード，ディジタルビデオディスク，ベルヌーイカートリッジ，ＲＡＭ，ＲＯＭあるいはその他のもの）がまた使用できる。
【００９９】
エミュレータ１３０３を含む多数のプログラムモジュールがハードディスク１２１１，着脱可能な磁気ディスク１２１５，光ディスク１２１９および／またはシステムメモリ１２０５のＲＯＭ１２５２および／またはＲＡＭ１２５４にストアされ得る。このようなプログラムモジュールはグラフィクス／音声ＡＰＩｓ，１つ以上のアプリケーションプログラム，他のプログラムモジュール，プログラムデータおよびゲームデータを提供するオペレーティングシステム（ＯＳ）を含む。ユーザは、キーボード１２２７，ポインティングデバイス１２２９，マイクロフォン，ジョイスティック，ゲームコントローラ，衛星アンテナ(satellite dish)，スキャナあるいはその他のもののような入力デバイスを通して、パソコンシステム１２０１にコマンドおよび情報を入力することができる。これらのそして他の入力デバイスは、システムバス１２０７に結合されたシリアルポートインタフェース１２３１を通して処理ユニット１２０３に接続され得るが、パラレルポート，ゲームポートファイヤワイヤバス(Fire Wire)もしくはユニバーサルシリアルバス（ＵＳＢ）のような他のインタフェースによって接続されてもよい。モニタまたは他のタイプの表示デバイスがまたビデオアダプタ１２３５のようなインタフェースを介してシステムバス１２０７に接続される。
【０１００】
システム１２０１はモデム１１５４またはインターネットのようなネットワーク１１５２を通しての通信を確立するための他のネットワークインタフェース手段を含む。内部もしくは外付けであってよいモデム１１５４はシリアルポートインタフェース１２３１を介してシステムバス１２３に接続される。システム１２０１がローカルエリアネットワーク１１５８を介して遠隔コンピュータ装置１１５０（たとえば他のシステム１２０１）と通信するのを許容するために、ネットワークインタフェース１１５６がまた設けられてもよい（もしくはそのような通信はダイヤルアップもしくは他の通信手段のようなワイドエリアネットワーク１１５２もしくは他の通信経路を介してもよい）。システム１２０１はプリンタのような周辺出力装置および他の標準的な周辺装置を含む。
【０１０１】
一例では、ビデオアダプタ１２３５は、マイクロソフト(Microsoft)のダイレクトＸ７．０、または他のバージョンのような標準的な３Ｄグラフィクスアプリケーションプログラマインタフェースに基づいて発行された３Ｄグラフィクスコマンドに応答して、高速の３Ｄグラフィクスレンダリングを提供する３Ｄグラフィクスパイプラインチップセットを含んでもよい。１組のスピーカ１２３７はまた、バス１２０７によって与えられる音声コマンドに基づいて高品質ステレオ音声を生成するハードウェアおよび埋め込みソフトウェアを提供する従来の「音声カード」のような音声生成インタフェースを介して、システムバス１２０７に接続される。これらのハードウェア能力によって記憶媒体１３０５中にストアされているソフトウェアを再生するためにシステム１２０１に十分なグラフィクスおよび音声の速度性能を与えることができる。
【０１０２】
上で言及したすべての書類を、ここで、参照によって取り入れる。
【０１０３】
最も現実的かつ好ましい実施例であると現在考えられているものに関連してこの発明が説明されたが、この発明は開示された実施例に限定されるものではなく、逆に、特許請求の範囲内に含まれる種々の変形例や等価的な構成をカバーするように意図されていることを理解されたい。
【図面の簡単な説明】
【図１】図１はインタラクティブコンピュータグラフィクスシステムの実施例を示す全体図である。
【図２】図２は図１実施例のコンピュータグラフィクスシステムのブロック図である。
【図３】図３は図２に示す実施例のグラフィクス／オーディオプロセサのブロック図である。
【図４】図４は図３に示す実施例の３Ｄグラフィクスプロセサのブロック図である。
【図５】図４のグラフィクス／オーディオプロセサの例示的な論理フロー図である。
【図６】図６は例示的なステッチングしたテクスチャ座標の発生およびテクスチャリングパイプラインを示す。
【図７】図７はより詳細な例示的なステッチングしたテクスチャ座標の発生器を示す。
【図８】図８は変換ユニット３００の例示的なブロック図を示す。
【図９】実施例によって提供されるステッチングしたイメージの結果の例を示す。
【図１０】図１０は別の互換性のある実施例を示す。
【図１１】図１１は別の互換性のある実施例を示す。
【符号の説明】
５０  …インタラクティブ３Ｄコンピュータグラフィクスシステム
１１０  …主プロセサ
１１２  …主メモリ
１１４  …グラフィクス／オーディオプロセサ
１８０  …グラフィクスパイプライン
３０２，３０６  …内積計算器
３０４  …正規化器
３０８  …マトリクスメモリ
３１０  …２重テクスチャマトリクスメモリ
３１２，３１４  …乗算器
５００  …テクスチャユニット（テクスチャマッパ）
５０２  …テクスチャメモリ
【図１】
0004846120.tif 000016
【図２】
0004846120.tif 000017
【図３】
0004846120.tif 000018
【図４】
0004846120.tif 000019
【図５】
0004846120.tif 000020
【図６】
0004846120.tif 000021
【図７】
0004846120.tif 000022
【図８】
0004846120.tif 000023
【図９】
0004846120.tif 000024
【図１０】
0004846120.tif 000025
【図１１】
0004846120.tif 000026