(57)【要約】  【課題】  本発明は，３次元コンピュータグラフィックスにおいて用いられるアルゴリズムなどにおける入力情報として用いられる，再分割表面パッチや，NURBSパッチ，隣接する三角形など，拡張された幾何学的プリミティブに関するチップ上のプロセッシングに関する問題を解決することを目的とする。  【解決手段】上記課題は，３次元コンピュータグラフィックスに用いられるシステムであって，初期頂点バッファストア（Primary Vertex Cache Store, ＰＶＣ）と，頂点プロセッシングユニット（ＶＰＵ）と，第2の頂点キャッシュストア（ＳＶＣ）と，プリミティブエンジン（ＰＥ）と，固定プリミティブアセンブリ（ＦＰＡ）と，頂点キャッシュ制御装置（ＶＣＣ）とを具備するシステムなどにより解決される。    【選択図】図３
2008053597.tif 000002
【特許請求の範囲】
【請求項１】
単純プリミティブを記述するとともに，可変サイズの拡張されたプリミティブ列を，可変サイズの拡張されたプリミティブごとに４つ以上の頂点データを用いて記述する３次元コンピュータグラフィックスのための方法であって，
複数の属性を含む頂点列を保存でき，前記属性のバッファメモリ上の位置を，前記頂点列における頂点番号であるインデックスを整数倍した値と，属性のタイプを示す番号を用いてバイアスすることにより求めることができるようにされる頂点バッファを用いて特定するとともに，前記インデックスと前記属性のタイプを示す番号とを用いて，前記頂点バッファにおける，ある頂点の頂点属性のメモリ上の位置を特定する，頂点バッファの特定工程と，
前記頂点列に関連して前記頂点バッファにおける頂点位置属性値列を格納し，可変サイズの拡張されたプリミティブのサイズであるプリミティブサイズに関するインデックスを記憶し，前記固定サイズのプリミティブ列を，前記頂点列を用いて再構築できるようにし，前記可変サイズの拡張されたプリミティブ列を，プリミティブサイズに関するインデックスを用いることにより再構築できるようにする，インデックスバッファにおけるインデックスを特定する，インデックスバッファの特定工程と，そして，
前記工程で求められなかった残りの頂点属性について，可変サイズの拡張されたプリミティブであってもプリミティブサイズに関するインデックスを用いないことを除けば，頂点位置属性を求める方法と同じ方法によって，残留している全ての頂点属性を求める，複数のインデックスバッファの特定工程と，
を有する方法。
【請求項２】
前記“複数のインデックスバッファを特定する工程”の替わりに，
属性列における属性インデックスを頂点において全ての属性が共有され，頂点位置属性列におけるインデックスバッファは，その他の頂点属性についても同様に参照するために用いられる請求項１に記載の方法。
【請求項３】
固定サイズの拡張されたプリミティブを記述するために前記インデックスバッファを用いずに，前記固定サイズの拡張されたプリミティブ列を頂点バッファ中の頂点列から形成する請求項１に記載の方法。
【請求項４】
３次元コンピュータグラフィックスにおいて，頂点キャッシュを用いて固定サイズ又は可変サイズの拡張されたプリミティブ列の演算処理を行うための方法であって，
可変サイズの拡張されたプリミティブのプリミティブサイズを頂点位置属性のインデックスバッファからフェッチングし，前記プリミティブサイズを固定された論理回路又はプログラマブルな拡張されたプリミティブのアッセンブル及び演算処理を行うユニットであるプリミティブエンジンへ配送する工程と，
頂点キャッシュから頂点データがなくなった際には，頂点キャッシュ中の拡張されたプリミティブの頂点に関する頂点データをフェッチし，頂点データを変換し，そして蓄積する工程と，
拡張されたプリミティブをアッセンブルし，演算処理するために，変換された頂点データを前記プリミティブエンジンへ配送する工程と，
前記プリミティブエンジンにおける拡張されたプリミティブをアッセンブルし演算処理する工程と，
プリミティブエンジンにおける拡張されたプリミティブの演算処理によって生じる固定サイズの単純プリミティブをアッセンブルし，更にプリミティブのラスタライズ用パイプラインへ運ぶために固定サイズプリミティブ集積回路へ配送する工程と，
を含む方法。
【請求項５】
前記可変サイズの拡張されたプリミティブをフェッチングする工程は，
拡張されたプリミティブの頂点についての頂点位置属性列を記述するインデックスバッファを加速することと，プリミティブを形成する頂点を参照する次のNiインデックスとともに，そのプリミティブに関する最初のインデックス値を取り戻すことにより行われ，
ここで，Niはi番目のプリミティブの取り戻された値を示し，前記インデックスバッファにおけるそれより前のプリミティブのサイズ位置に続いて，次のプリミティブのサイズはNi +1番目の位置に格納される，
請求項４に記載の方法。
【請求項６】
前記変換されていない頂点データの頂点属性の列の形式によるフェッチングは，
固定サイズの拡張されたプリミティブの場合には，固定サイズの拡張されたプリミティブ又は頂点バッファに記憶されるものを整列することにより示される頂点バッファから行われ，
可変サイズの拡張されたプリミティブの演算を行う場合には，頂点バッファ内の内容を参照することにより関係しない頂点位置属性のインデックスを含むインデックスバッファのプリミティブと関連する最初のインデックスを有する固定サイズの拡張されたプリミティブ又は可変サイズの拡張されたプリミティブの場合は，１又は複数のインデックスバッファから選択された列の頂点バッファから行われる，
請求項４に記載の方法。
【請求項７】
３次元コンピュータグラフィックスに用いられるシステムであって，
最近用いられた頂点バッファの部分の内容にアクセスでき，前記頂点バッファから前記頂点データを取得するための初期頂点バッファストア（Primary Vertex Cache Store, ＰＶＣ）と，
前記初期頂点バッファストア（ＰＶＣ）から得られた前記頂点データを用いて頂点を移送するための１つ又は複数の頂点プロセッシングユニット（ＶＰＵ）と，
前記頂点プロセッシングユニット（ＶＰＵ）により最近処理された変換された頂点データにアクセスするための第2の頂点キャッシュストア（ＳＶＣ）と，
単純プリミティブ列により構成される単純及び拡張されたプリミティブのプロセッシングやそれらに必要な情報を回収するためのプリミティブエンジン（ＰＥ）と，
固定されたプリミティブのタイプについての列から単純プリミティブの収集を実現し，そして，ラスタライズのために前記単純プリミティブをラスタライズパイプラインへ出力するための固定プリミティブアセンブリ（ＦＰＡ）と，
インデックスバッファの内容にアクセスし，配送し，
前記拡張された可変サイズのプリミティブを処理する際には，プリミティブサイズに関する情報を前記プリミティブエンジン（ＰＥ）に伝え，
前記初期頂点バッファストア（ＰＶＣ）における頂点バッファ部分のフェッチングを制御し，
前記初期頂点バッファストア（ＰＶＣ）に蓄積された属性値から頂点情報の収集を制御するとともに，移送された頂点が初期頂点バッファストア（ＰＶＣ）から喪失した場合は，移送のために前記頂点プロセッシングユニット（ＶＰＵ）へ収集された頂点を移送するように制御し，そして，
単純プリミティブ及び拡張されたプリミティブに関する情報を収集すると共にそれらの処理を行うために，前記第2の頂点キャッシュストア（ＳＶＣ）から前記プリミティブエンジン（ＰＥ）への配送された頂点情報を配送されることを制御する
頂点キャッシュ制御装置（ＶＣＣ）とを具備する，
システム。
【請求項８】
前記変換された頂点データをプリミティブエンジンに配送する工程を用いずに，
前記頂点データを直接前記固定サイズのプリミティブ集積回路へ配送でき，
固定サイズプリミティブ集積回路，固定サイズの単純プリミティブ，固定サイズの拡張されたプリミティブ及び可変サイズの拡張されたプリミティブの演算処理がプリミティブエンジンにより実現される
請求項7に記載のシステム。
【請求項９】
可変サイズの拡張されたプリミティブの演算処理を行う場合に，プリミティブエンジンへプリミティブサイズを配送する工程は，前記プリミティブを形成する頂点を形成するためにプリミティブエンジンへと変換された頂点データもともに配送される，
請求項７に記載のシステム。
【請求項１０】
前記頂点プロセッシングユニット（ＶＰＵ）が固定サイズのプリミティブや可変サイズのプリミティブの処理するモードを行うように設計されており，前記固定サイズのプリミティブの処理モードは固定サイズの単純プリミティブの演算処理及び固定サイズの拡張されたプリミティブの演算処理に用いられ，一方，可変サイズのプリミティブの演算処理モードは可変サイズの拡張されたプリミティブの演算処理に用いられる，
請求項７に記載のシステム。
【請求項１１】
請求項７に記載のシステムを含む集積回路であって，
前記集積回路上の複数のコンポーネントはリアルタイムに実行され，固定されたサイズの拡張されたプリミティブ列又は可変サイズの拡張されたプリミティブ列の演算処理をリアルタイムに行うことができる集積回路。
【請求項１２】
請求項11に記載の集積回路を具備するグラフィックスカード。
【請求項１３】
請求項11に記載の集積回路を具備するビデオゲームマシーン。
【請求項１４】
請求項11に記載の集積回路を具備するリアルタイム表面再分割レンダリングシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，３次元コンピュータグラフィックスの分野に関する。より詳しく説明すると，本発明は，本明細書において拡張されたプリミティブと呼ばれる複雑な多くの頂点を有する幾何学的プリミティブのための情報処理をハードウェアにおいて高速に処理するための方法及びシステムに関する。
【背景技術】
【０００２】
伝統的に、対話型コンピュータ図形は、複雑な幾何学的な形に近似して、ポイント、線、および三角形のような簡単な幾何学的なプリミティブを使用する。既存のコンピュータグラフィックスハードウェアは，そのような簡単なプリミティブ、特に三角形のメッシュの処理を高速化するように最適化されている。プリミティブの単純三角形は、3D表面のフラグメントの線形近似に使用することができる中で最も簡単な多角形である。様々な三角形、線、およびポイントでかなり複雑な形に近似することができる。現在既存のハードウェアの設計は大いに互いからそれらの系列でプリミティブの頂点を独自に処理する可能性の利益を得ることができる。【０００３】
複雑な多頂点プリミティブの処理の必要性は3Dコンピュータグラフィックスの様々な領域に起こる。事実上、NURBSパッチとサブディビジョンサーフェスのような高次平面プリミティブで多くの複雑な形をモデルする。どちらの場合も、粗い制御メッシュと規則のセットは、滑らかできめ細かくかつ制御メッシュに影響することで容易に変形できるような形状を生成させるのに使用される。通常、パッチ自体はテッセレーションの過程を制御する追加情報と同様に制御メッシュの頂点の可変サイズセットによって形成される。ハードウェアでNURBSかサブディビジョンサーフェスパッチテッセレーションを有効にするのは対話的な3Dグラフィックスが大いに利益を得ることができる結果として、形状操作の格納、帯域幅要件、および単純さを大いに減少させる。もう1セットのアルゴリズムは一度に近似におけるただ一つの三角形より処理形のさらに複雑な一部分へのアクセスを必要とする。通常、三角形のいくらかの限られた近隣頂点へのアクセスがシルエット縁を検出するのに必要であり、メッシュ頂点での湾曲などについて計算する。【０００４】
複雑なプリミティブの処理のサポートはいくつかの理由で既存の3Dグラフィックスアクセラレータ構造の中では難しい。アクセスが簡単な三角形のためだけに3つの頂点に制限されるとき、複雑なプリミティブの処理はすぐに、処理アルゴリズムのために複数の頂点への速いアクセスを必要とする。サブディビジョンサーフェスに使用されるものとNURBSパッチのようなプリミティブの複合体の頂点のための属性データがメモリの向こう側に点在する場合、アクセスはデータ転送におけるかなりのレイテンシをもたらすため処理アルゴリズムは低性能になるかもしれない。一度に単一の頂点を処理するために現在のプログラマブルアーキテクチャのジオメトリックパイプラインのプログラマブル処理要素を最適化する。そして、固定論理回路(いかなる他のプリミティブのタイプの上でも操作することができませんが、簡単なもの)で頂点の系列からプリミティブをアセンブリする。【０００５】
パーソナルコンピュータとワークステーションに利用可能な3Dグラフィックスハードウェアアクセラレータのカーネル構造はいくつかの場合また、三角形、線、およびポイントのように簡単なプリミティブのリストの速い処理と表現で適応する。図１に、典型的な3Dグラフィックスハードウェアアクセルパイプラインの一部が示す。プリミティブのリストはインデックスバッファ1100と頂点バッファ1200によって説明される。通常、ホスト・マシンメモリ1000に記憶され、インデックスと頂点バッファの中身は図2Aと図2Bで例示される。図2Aの場合では、ことによるとある頂点を共有する1セットの三角形101が頂点バッファ1200とインデックスバッファ1100に連続して詰め込まれた1セットの頂点データによって表される。後者のコンテンツが頂点バッファのそばで頂点に参照をつけていて、インデックスバッファの三角形セット101、3位置の場合では、1100は三角形を定義する。次期3つの位置がセット101における次の三角形などを定義していて、頂点バッファ1200の中の頂点の大部分が再利用されるなら、どの点で、頂点バッファ1200の中の再利用された頂点が点を打たされた中詰めパターンでマークされる頂点データが通常インデックスバッファのインデックスよりはるかに多くの集積スペースを必要とするとき、三角形セットの代理はかなりコンパクトである場合がある。図2Bを参照して、表現は三角形片102の場合でさらに簡潔である。この場合、前の2つの頂点がインデックスバッファで参照をつけられている状態で取られた頂点は三角形を形成する。その結果、1つのインデックスだけが、最初のものが処理された後にさらなる三角形を定義するのに必要とされる。インデックスバッファの内容は、この場合1つの三角形あたりのインデックスリストの数に関してさらに効果的に三角形セットについて説明する。インデックスと頂点バッファを使用することで2つの頂点と1セットの先が1ポイントあたり1つの頂点で定義されている状態で1セットの線区分が定義した同様の方法を述べることができる。【０００６】
インデックスと頂点バッファを使用することで定義されたプリミティブのセットの処理を加速するために、頂点キャッシュ装置が用いられる。図1によると、インデックスバッファ1100の内容は、頂点バッファ1200を抽出するのに使用されるだけではなく、最近、同じインデックスがある頂点が処理されたかどうかまた検出するのに使用されて、キャッシュでまだ利用可能であるかもしれない。頂点キャッシュコントローラ2000は、インデックスバッファ1100の内容を取得し、それを分析する。初めはキャッシュが空であるので、頂点キャッシュコントローラはインデックスバッファ1100から第一の頂点キャッシュ3000に取得されたインデックスリストのための頂点データを含む頂点バッファ内容の配送を初期化する。通常、メモリアクセス潜在するペナルティを現在頂点キャッシュコントローラによってインデックスリストだけに処理されていない頂点データ対応を含むことができる比較的大きい連続したメモリブロック最小にする方法で頂点バッファから取得する。それにもかかわらず、それは第一の頂点キャッシュ3000でそれが後で分類調査されたインデックスリストによって使用されるかもしれないというので保持される。インデックスが第一の頂点に既にあるので頂点データが3000をキャッシュするなら、ホストメモリアクセスは全く実行されない。   【０００７】
通常、第一の頂点キャッシュ3000に送られた頂点データは、変換される必要がある。
例えば、頂点の位置は、1個の座標系から別のものに変換される必要があることがある。頂点色は標準、位置などに基づいて計算される。頂点キャッシュコントローラ2000は頂点データの第一の頂点キャッシュから頂点処理装置4000までの配送を制御する。変換した頂点データを二次頂点キャッシュ5000に配送する。二次頂点キャッシュ5000から、変換した頂点データを用いて，頂点列から三角形、線、およびポイントのような固定セットのプリミティブを形成して、三角形セットアップ7000とラスタライザ8000が固定された処理パイプラインの残りにプリミティブをアセンブルし，固定プリミティブのアセンブリ6000に達する。インデックスが二次頂点キャッシュ5000でそれを提示するので、オーバーヘッドなしでいかなる他のものも変換した頂点データをプリミティブのアセンブリ6000に配送する。【０００８】
拡張プリミティブのハードウェアの加速している処理が特に複雑な形のモデルと画像分野にある状態で導入することができる利益のために、チップにおけるそのようなプリミティブの処理ができるハードウェアを設計するのに大きな努力がそそがれた。チップの上のサブディビジョンサーフェスとNURBS表面テッセレーションを含んでいて、それにもかかわらず、ほとんど問題の複雑なプリミティブの処理タスクに構造が捧げた完全に異なったハードウェアを紹介するか、既存の構造の中のプログラマブル要素の使用のために試みをした。簡単なプリミティブだけの定数と伝統的なアーキテクチャが、プリミティブ生成施設の不在のサポートでまだ制限されている。【０００９】
WO03/081528（特許文献1）には、それはいかなる他の目的のためにもそのハードウェアを再利用するか、または簡単なプリミティブの処理のために装置を共有する可能性とアプリケーションが複雑な構造を準備する必要性の不足がハードウェア処理に適したフォームで制御メッシュのための接続性情報について説明している状態でサブディビジョンサーフェスに制御メッシュの特別な記述を処理する専用ハードウェアユニットが開示されている。同様のアプローチは米国特許出願明細書2005/0012750（特許文献２）にも開示されており、NURBSパッチのハードウェアで加速している処理が実現されている。【００１０】
プログラマブル3D加速ハードウェアの導入で、それで複雑なプリミティブの処理を実行するのをいくつかの試みが行われた。それにもかかわらず、有効な実現は処理がまだ簡単なプリミティブだけにもかかわらず、どんなプリミティブの生成にも制限されていないとき施設が商業的に利用可能なハードウェアでは実現できていない。【００１１】
ランダムアクセス、頂点データに、特にサブディビジョンサーフェステッセレーションの場合における拡張プリミティブの処理に関する問題の1つは、必要な情報を処理アルゴリズムに提供することである。ランダムメモリアクセスは、現在既存のハードウェアで高価であって、処理パイプラインの限られた場所だけで可能である。現在既存のハードウェアで最も多能な能力はプログラマブルハードウェアで頂点かフラグメントプログラムで制御することができるメッシュ状のサンプリング抽出に関連する。メッシュ単位のランダムメモリアクセスの有用性のために、実現はメッシュに詰め込まれたメッシュ接続性情報を取得する。専用テッセレーションハードウェアの場合では、テッセレーションアルゴリズム実現に必要な情報の取得を許容する特別なメッシュ表現が、高い準備の欠点と共に使用されて、コストを維持している。ランダムなメモリアクセスができる伝統的アーキテクチャにおける現在の別の装置は、頂点キャッシュである。  【００１２】
【特許文献１】WO03/081528パンフレット
【特許文献２】米国特許出願明細書2005/0012750
【発明の開示】
【発明が解決しようとする課題】
【００１３】
本発明は，３次元コンピュータグラフィックスにおいて用いられるアルゴリズムなどにおける入力情報として用いられる，再分割表面パッチや，NURBSパッチ，隣接する三角形など，拡張された幾何学的プリミティブに関するチップ上のプロセッシングに関する問題を解決することを目的とする。そのようなアルゴリズムとして，４−３細分割スキームであるCatmull-Clarkループや，NURBS表面分割，シルエット発見，最も簡単な平面状の幾何学的プリミティブである三角形を構成するために３対状の頂点を要求するようなアルゴリズムなど，公知のコンピュータグラフィックスにおいて実装される様々なスキームを含む。【００１４】
完全にチップ上で拡張された幾何学的プリミティブに関する情報処理を行うことは，複雑な幾何学的形状を迅速にレンダリングすることにつながる。さらには，コンピュータグラフィックスを用いてよりリアルな映像を得ることにつながり，三角形のような簡単なプリミティブを用いて直接に拡張されたプリミティブを得ることにもつながる。【００１５】
現在の３次元コンピュータグラフィックスにおけるプリミティブのサイズは，固定されている。例えば，三角形の場合には３つの頂点であり，直線の場合には２頂点であり，点の場合は１頂点である。一方，特に表面パッチの細分割における場合に用いられる，拡張されたプリミティブでは，プリミティブのサイズが任意のサイズであり得る。合理的な範囲での，最大範囲において，拡張されたプリミティブを用いる際には，チップ上で実現するために様々な頂点数のプリミティブが必要となる。  【００１６】
次なる問題は，特に拡張されたプリミティブを用いて情報を処理する際に用いられるランダムなメモリアクセスを達成する困難性である。プリミティブを構成する頂点データは,単純なプリミティブにおけると同様，記憶部において分散されて記憶されうる。ここで問題とされるのは，拡張されたプリミティブにおける頂点の数であり，それは通常より何倍か大きく，それに対応するだけの頂点データをフェッチするためにランダムにメモリにアクセスする必要が生ずることである。グラフィックス装置におけるランダムアクセスは，適切にキャッシングを行わなければ，重大な欠陥を生み出すために制限されており，通常は頂点キャッシュに関連した装置とテクスチャのサンプリングに関する装置に限って用いられている。【００１７】
三角形のような簡単な幾何学的プリミティブのみをハードウェアを用いて効果的に利用すると，ゲート数を減らすことができなくなって，その結果，チップの構成を複雑にするという問題がある。拡張されたプリミティブを描画するための論理回路を単純なプリミティブ用の処理回路と別に設けることによっても，チップの構成を複雑にすることとなる。よって，単純なプリミティブと拡張されたプリミティブとを別々の処理回路ではなく，一つの処理系統で処理できれば，チップが複雑になるという問題を解決できる。【００１８】
さらに，拡張されたプリミティブを表現する際の問題がある。様々なタイプの拡張されたプリミティブに広く用いられるように，単純プリミティブ及び拡張されたプリミティブに対して，プロセッシングやAPI，すなわちアプリケーションプログラミングインターフェース，を統一するため，単純プリミティブにおけると同様に，記憶容量を軽減させ，データの転送速度を下げることが望まれる。以下では，本発明が上記の課題をどのようにして解決したのかについて説明する。
【課題を解決するための手段】
【００１９】
本発明は，基本的には，頂点にそれぞれインデックスを付して，そのインデックスをインデックスバッファに格納し，格納したインデックスを用いてプリミティブにおける頂点を表現した後，インデックスと関連する頂点情報を頂点バッファから読み出し，プリミティブの演算処理に用いる。さらに，通常のプリミティブは，三角形や四角形など定形のものを用いるが，本発明はこれら定形のものを用いつつも，頂点の数が4以上と通常より多いプリミティブをも用いる。このような頂点の数が可変で通常より多いプリミティブを可変サイズの拡張されたプリミティブとよぶ。本発明では，あるプリミティブに関する頂点情報が入力されると，そのプリミティブが通常のプリミティブか，可変サイズの拡張されたプリミティブかどうか判断する。この判断は，ひとつのプリミティブにおける頂点の数により容易に判断できる。そして，通常のプリミティブの場合は，通常と同様の装置を用いて通常と同様に演算処理を行ってもよい。一方，可変サイズの拡張されたプリミティブの場合は，中心となる多角形のインデックスを読みとり，その後中心となる三角形又は四角形に隣接する多角形のインデックスを読み取る。その上で，それらインデックスに関連する頂点データを取得し，プリミティブをアセンブルする演算処理を行う。本発明のシステムは，コンピュータから各種情報を受け取り，頂点に関する情報を変換する頂点エンジンと，頂点エンジンから変換された頂点情報などを受け取り，プリミティブをアセンブルするプリミティブエンジンとを具備する。そして，プリミティブエンジンによりアセンブルされたプリミティブは，ラスタライザによりラスタライズされ，３次元コンピュータグラフィックスなどとして，フレームバッファなどに格納され，モニタなどに描画される。頂点変換は，頂点に対する視点変換等の演算処理を意味する。プリミティブが，点であるか，線であるか，三角形であるか四角形以上の多角形であるか関係なしに，頂点情報に必要な演算処理を行う。プリミティブアセンブル（Primitive Assemble）は，変換された個別の頂点を組み立ててプリミティブとすることを意味する。プリミティブアセンブル以後はプリミティブ毎に個別処理が行われる。本発明では，プリミティブが可変サイズを含んでもよい。プリミティブが三角形の場合のように，プリミティブサイズが３である場合は，インデックステーブルは３の倍数ごとにアクセスすればよい。そのため，装置は，３という数字を覚えているだけでよく，記述する必要は無い。しかし，本発明では，プリミティブサイズがプリミティブごとに変わりうるので，どこまでが次のプリミティブであるかわかりにくくなる。そこで，本発明では，常に次の何要素がプリミティブを構成するかわかるように記述することが好ましい。本発明では，プリミティブサイズをインデックステーブルに記述する。そして，本発明の好ましい態様である複数のインデックステーブルがある場合は，位置属性を含むインデックステーブルの中にプリミティブサイズを記述することが好ましい。【００２０】
より多くのオブジェクトを描画するために，頂点の数を減らすことが好ましい。たとえば，三角形のプリミティブごとに頂点を記述して隣接する２つの三角形を描画することを考える。第1の三角形は，頂点をｖｍとして，（ｖ１，ｖ２，ｖ３：ただし，ｖｍは（ｘｍ，ｙｍ，ｚｍ））から構成され，それぞれの頂点の色が，赤，白及び黄色とする。第1の三角形と隣接する第２の三角形は，ｐ２，及びｐ３を共有するので（ｖ２，ｖ３，ｖ４：ただし，ｐ４は青）のように記述できる。すると，実際は頂点が４つしかないにもかかわらず，６つの頂点に関する記述が必要とされることとなる。すなわち，この方法は，簡単であるものの，n個の３角形を描画するために，3×n個の頂点に関する記述が必要となる。すなわち，記述しなければならない頂点数が多いので，多くのメモリを消費する。次に，三角形ストリップを使う場合について説明する。この描画方法は，第1のプリミティブの頂点に関する記述を行った後，次のプリミティブの記述を行う際に，共有する頂点に関する記述を利用するというものである。たとえば，プリミティブが三角形の場合，次の三角形は，前の三角形の２個の頂点を利用するという条件をつけて描画する。つまり、先に記述された三角形の頂点のうち先頭の頂点を除く頂点が次の三角形の2頂点となり，これと別の頂点を用いて，次の三角形を表現する。この方法では，メモリコストを大幅に軽減できる。しかしながら，依然としてｎ個の三角形を描画するために２×n個以上の頂点を記述する必要がある。【００２１】
本発明では，（ｖ１，ｖ２，ｖ３：ただし，ｖｍは（ｘｍ，ｙｍ，ｚｍ））を表現するために，インデックステーブルを用いる，すなわち，インデックステーブルには，座標値ではなく単に（ｖ１，ｖ２，ｖ３）のような情報が格納され，この情報を用いて各頂点情報（例えば，ｖ１は（ｘ１，ｙ１，ｚ１）であり，赤という情報）を読み出す。すなわち，インデックステーブルには，ｖ１，ｖ２，ｖ３で1個の三角形を形成し，ｖ２，ｖ３，ｖ４で次の三角形を形成するように，インデックスを格納する。このように頂点エンジンの頂点バッファなどから頂点データを読み出すことができるインデックステーブルを用いるので，１個の頂点は１回記述すればよくなり、その結果、頂点の記述量が小さくて済む。一方，この方法では,インデックスを記述する必要がある。インデックステーブルの幅は、プリミティブによって異なり，プリミティブが三角形であれば３である。この方法では，一個の頂点が複数の三角形に共有されるため，ひとつの頂点に関する情報を繰り返し配送する必要がある。インデックステーブルは、通常は１個持つのが普通であり殆どの状況下で十分である。事実、OpenGL/ES インターフェースでは、インデックステーブルは１個だけ持つ。しかし頂点の属性、たとえばXYZ座標（位置属性）や色（頂点カラー属性）、テクスチャ座標（テクスチャ属性）それぞれに独立のインデックステーブルを持つインターフェースもある。そのようなインターフェースの有名な例としてはDirect3Dなどがあげられる。【００２２】
本発明の要旨は，拡張された幾何学的プリミティブをプロセッシングできるようにするために，適切なグラフィックアクセレレータにおける頂点キャッシュ装置（vertex cache facilities）を用いることに関する。これは，従来技術に比べて追加された装置である，本発明において提案される拡張されたプリミティブのアッセンブルとプロセッシングを行うために用いられるプリミティブエンジン（プリミティブエンジン）と，拡張されたプリミティブを表現するために用いられるポリゴンメッシュを表現するための拡張されたインデックス／頂点バッファとを組み合わせて用いることにより達成される。【００２３】
本発明において，拡張されたプリミティブは，ポリゴンメッシュを表現するための拡張されたインデックス／頂点バッファに基づいて表現される。Direct3DやopenGLのような3次元グラフィックライブラリが現在あり、このような表現物を，ハードウェアを用いてポリゴンメッシュを迅速に処理する方法を提供している。表現過程において，頂点バッファは，プロセッシングされるポリゴンメッシュのそれぞれの頂点における頂点の属性（vertex attributes）を記憶し，一方，インデックスバッファの内容は，メッシュの接続情報を含む。インデックスバッファは，頂点バッファの内容を示すインデックス列を構成する頂点番号と関連した同じサイズのポリゴン列に関する記述を含む。あるポリゴンに属するインデックス列は，例えば頂点バッファにおける頂点データを参照することにより，そのポリゴンの頂点列を記述し，そして，ポリゴンにおける頂点の連続的な接続により形成されるポリゴンエッジ列を記述する。本発明においては，インデックスバッファは，ある決まったサイズの拡張されたプリミティブ列を記述するのと同じ方法のインデックスバッファを用いることができる。様々なサイズの拡張されたプリミティブを表現するため，プリミティブサイズとともに様々なサイズの拡張されたプリミティブを形成する頂点を参照する他のインデックスに前もってフィックスしておいたインデックス値を記憶する，インデックスバッファが用いられる。【００２４】
そのように拡張されたプリミティブに関する演算処理を行うためにインデックスバッファ及び頂点バッファを改良することで，上述した問題を解決できる。拡張されたプリミティブやインデックスバッファのみに記憶されるインデックスを介した頂点リストにおける，付加的な頂点の数である頂点の数を特定しなければならないような，異なるサイズの固定サイズの拡張されたプリミティブや異なるサイズの可変サイズの拡張されたプリミティブを表現するのに十分である。サイズ，頂点リスト，及びある特別なタイプのプリミティブの形成は，プリミティブ形成アルゴリズムそのものによって行われ，それゆえ表現（representation）はプリミティブサイズによらない。これは，単純プリミティブの表現と同様である。グラフィックライブラリの観点からは，表現は，単純プリミティブの場合と同様であり，単純プリミティブ列を演算処理する場合に比べて拡張されたプリミティブ列を演算処理する場合であってもＡＰＩに大きな変化は必要とされず，必要なメモリを軽減できる。【００２５】
その表現により，頂点が頂点バッファに一度だけ格納されるようなプリミティブ間で頂点を共有するような場合においてメモリコストを軽減できる。単純プリミティブの場合と同様，インデックスを参照することは，ずっと少ないメモリ空間しか要求しない。【００２６】
本発明は，ハードウェアにより拡張されたプリミティブを迅速に演算処理するために，頂点キャッシュとプリミティブエンジンを組み合わせたものを用いる。頂点キャッシュは，直前に演算処理された頂点への短い待ち時間によるアクセスを可能とする。インデックスバッファ及び頂点バッファによる表現の場合は，頂点のインデックスがキャッシュタグとして用いられうる。それゆえ，頂点のインデックスがキャッシュ内のものと同じであれば，後者に格納されるものは，更なる演算処理のために用いられる。本発明は，好ましくは，頂点キャッシュを拡張されたプリミティブの演算処理のためにも用いる。【００２７】
単純プリミティブと拡張されたプリミティブでは表現が類似しているので，拡張されたプリミティブにおいても単純プリミティブにおけると同様に直前に演算処理された頂点への待ち時間の短いアクセスにより頂点キャッシュを利用できる。これにより，拡張されたプリミティブの頂点データをフェッチする際に要求される沢山のランダムなアクセスによるパフォーマンスの劣化を解消できる。また，単純プリミティブと拡張されたプリミティブの演算処理において同じ頂点キャッシュのハードウェアを用いるので，ハードウェアサイズを軽減できる。また，頂点キャッシュを用いるので，拡張されたプリミティブの最大サイズに上限がなくなる。さらに，頂点キャッシュは固定サイズの拡張されたプリミティブにおける頂点にも，可変サイズの拡張されたプリミティブにおける頂点にも用いられる。しかしながら，演算処理を行う拡張されたプリミティブの最大サイズに合理的な上限が設けられる頂点キャッシュ中の頂点データを有するプリミティブを演算処理することで効果的な演算処理が可能となる。これにより，単純プリミティブより大きなサイズの固定サイズ又は可変サイズの拡張されたプリミティブを演算処理する際の問題を解決できることとなる。  
【発明の効果】
【００２８】
本発明においては，拡張されたプリミティブのアッセンブル及び演算処理は，従来のハードウェアに付加されたモジュールであるプリミティブエンジンによって処理される。このモジュールは，入力情報を，頂点キャッシュから拡張されたプリミティブのそれぞれの頂点についての変換された頂点データの形式で受け取り，付加的に，キャッシュコントローラから可変サイズの拡張されたプリミティブに関するサイズ情報を受け取る。【００２９】
プリミティブエンジンは，拡張されたプリミティブの演算処理アルゴリズムを実行する。そのアルゴリズムは，拡張されたプリミティブの頂点列を解釈し，演算処理された結果を単純プリミティブの列として出力する。これにより以下の問題を解決できる。まずは，拡張されたプリミティブを演算処理する際の融通性（versatility）である。プリミティブエンジンにより制御されプログラマブルな場合は，どのような拡張されたプリミティブであっても，本発明により提案される拡張されたインデックスバッファ及び頂点バッファによる表現を用いることで，演算処理を実現でき，頂点データへの迅速なアクセスを行うことができる。頂点キャッシュへ直接接続するので，拡張されたプリミティブをアッセンブルし，演算処理するための頂点データを取得するための待ち時間の問題は大幅に軽減される。演算処理のためのパイプラインを再利用することや拡張されたプリミティブのチップ上で演算処理を行うこともこれに貢献する。拡張されたプリミティブに関する演算処理結果は，単純プリミティブ列であり演算処理パイプラインの結果により直接サポートされるので，ホストコンピュータへの演算処理結果を用いずに，拡張されたプリミティブ列が直接単純プリミティブ列へと変換されるので，チップ上のみでの演算処理を行うという問題を解決できる。【００３０】
拡張されたインデックス／頂点バッファ表現，単純プリミティブを演算処理する頂点キャッシュ論理回路に加えたわずかな修正と，プリミティブエンジンとを組み合わせて用いることで，固定サイズの拡張されたプリミティブ及び可変サイズの拡張されたプリミティブの演算処理を可能とし，ＮＵＲＢＳテッセレーション（tessellation）など現状の３次元グラフィックハードウェアでは存在しない再分割表面レンダリングなどについての，チップ上での演算処理を可能とする。
【図面の簡単な説明】
【００３１】
【図１】図１は，頂点キャッシュ装置の従来におけるハードウェアアーキテクチャを示す。
【図２Ａ】図２Ａは，三角形列をサンプリングするためのインデックス／頂点バッファのレイアウトを示す。
【図２Ｂ】図２Ｂは，三角形ストリップ列をサンプリングするためのインデックス／頂点バッファのレイアウトを示す。
【図３】図３は，本発明におけるアーキテクチャの頂点キャッシュを示す。
【図４Ａ】図４Ａは，三角形とその近隣の固定サイズの拡張されたプリミティブを示す。
【図４Ｂ】図４Ｂは，三角形とその近隣の固定サイズの拡張されたプリミティブストリップ列を示す。
【図４Ｃ】図４Ｃは，三角形とその近隣の固定サイズの拡張されたプリミティブのインデックス／頂点バッファのレイアウトを示す。
【図４Ｄ】図４Ｄは，三角形とその近隣の固定サイズの拡張されたプリミティブストリップ列のインデックス／頂点バッファのレイアウトを示す。
【図５Ａ】図５Ａは，三角形とその近隣の固定サイズの拡張されたプリミティブスファン列を示す。
【図５Ｂ】図５Ｂは，エッジベースのフラップのシルエットの構造を示す。
【図５Ｃ】図５Ｃは，三角形とその近隣の固定サイズの拡張されたプリミティブスファン列のインデックス／頂点バッファのレイアウトを示す。
【図６Ａ】図６Ａは，可変サイズの拡張されたプリミティブを示す。
【図６Ｂ】図６Ｂは，可変サイズの拡張されたプリミティブによるCatmull-Clark再分割パッチを示す。
【図６Ｃ】図６Ｃは，可変サイズの拡張されたプリミティブによるCatmull-Clark再分割パッチのインデックス／頂点バッファのレイアウトを示す。
【図７】図７は，本発明により導入される頂点キャッシュ制御部, プリミティブエンジン及び固定サイズプリミティブ集積回路間の連絡通路を示す。
【図８Ａ】図８Ａは，シルエット検出と視覚化を行わない場合のレンダリング結果を示す。
【図８Ｂ】図８Ｂは，シルエット検出と視覚化を行った場合のレンダリング結果を示す。
【図９Ａ】図９Ａは，再分割を行わない場合のワイヤーフレーム形状のレンダリング結果を示す。
【図９Ｂ】図９Ｂは，再分割を行った場合のワイヤーフレーム形状のレンダリング結果を示す。
【図１０Ａ】図１０Ａは，再分割を行わない場合のワイヤーフレームのレンダリング結果を示し，ボックス内はメッシュの粗い要素を示す。
【図１０Ｂ】図１０Ｂは，再分割を行った場合のワイヤーフレームのレンダリング結果を示し，ボックス内は再分割中にスムージングを施されたメッシュの粗いエレメントを示す。
【図１１Ａ】図１１Ａは，再分割を行わない場合のレンダリング像を示す。
【図１１Ｂ】図１１Ｂは，再分割を行った場合のレンダリング像を示す。
【符号の説明】
【００３２】
101  単純三角形列
102  単純三角形ストリップ列
103  隣接するプリミティブを有する単純三角形
104  隣接するプリミティブを有する単純三角形ストリップ列
105  隣接するプリミティブファン列を有する単純三角形
106  Catmull-Clark 再分割表面パッチ群
107  Catmull-Clark 再分割表面パッチ群のモザイク
110-115  メッシュフラグメントの三角形
210  キャッシュデスティネーションマルチプレクサ
220  固定サイズプリミティブ集積回路ユニットソースマルチプレクサ
1000  ホストメモリ
1100  インデックスバッファ
1200  頂点バッファ
2000  頂点キャッシュ制御部
2100  頂点カウンタ
2300  頂点キャッシュ制御部とプリミティブエンジンとの間で頂点配送完了信号をやり取りする情報伝達パス
3000  頂点キャッシュ記憶部
4000  頂点処理ユニット
5000  第２の頂点キャッシュ記憶部
6000  固定サイズプリミティブ集積回路ユニット
7000  固定サイズプリミティブセットアップユニット
8000  プリミティブラステライザー
9000  プリミティブエンジン
9100  プリミティブサイズレジスタ
【発明を実施するための最良の形態】
【００３３】
以下，本発明の実施の形態について説明する。本発明は，基本的には，固定された又は可変の頂点数によって形成される複雑な幾何学的プリミティブ（拡張されたプリミティブともよぶ）のチップ上での処理に関する。【００３４】
本発明の第1の側面は，単純プリミティブを記述するとともに，可変サイズの拡張されたプリミティブ列を，可変サイズの拡張されたプリミティブごとに４つ以上の頂点データを用いて記述する３次元コンピュータグラフィックスのための方法であって，複数の属性を含む頂点郡を保存でき，前記属性のバッファメモリ上の位置を，頂点列における頂点番号であるインデックスを整数倍した値と，属性のタイプを示す番号を用いてバイアスすることにより求めることができる頂点バッファを用いて，インデックスと属性のタイプを示す番号とを用いて，前記頂点バッファにおける，ある頂点の頂点属性のメモリ上の位置を特定する，頂点バッファの特定工程と，頂点列に関連して頂点バッファにおける頂点位置属性値列を格納し，可変サイズの拡張されたプリミティブのサイズをインデックスとして記憶し，前記固定サイズのプリミティブ列を，前記頂点列を用いて再構築できるようにし，前記可変サイズの拡張されたプリミティブ列を，プリミティブサイズをあわせて用いることにより再構築できるようにする，インデックスバッファにおけるインデックスを特定する，インデックスバッファの特定工程と，そして，前記工程で求められなかった残りの頂点属性について，可変サイズの拡張されたプリミティブであってもプリミティブサイズに関するインデックスを用いないことを除けば，頂点位置属性を求めると同様の方法によって，残留している全ての頂点属性を求める，複数のインデックスバッファの特定工程と，を有する方法に関する。本明細書において，拡張されたプリミティブは4つ以上の頂点を含んでもよく，頂点の数は，例えば，4,5,6,7,8,9又は10があげられる。 【００３５】
前記の方法は，前記固定サイズのプリミティブ列を前記頂点列を用いて再構築できるようにし，可変サイズの拡張されたプリミティブ列の場合はプリミティブサイズを用いることにより再構築できるように，頂点バッファにおける頂点位置属性の頂点列に対応したインデックス列を記憶するとともに，可変サイズの拡張されたプリミティブのサイズを前記インデックスバッファのインデックス値として記憶するインデックスバッファを特定する工程を含むので，いずれの固定サイズのそれを構成する頂点列から幾何学的プリミティブ列を再構築することができる。さらに，可変サイズの拡張されたプリミティブの頂点位置属性を参照するインデックス列の前にプリミティブサイズを含むことができるので，その方法は，そのサイズとそのサイズを形成する頂点列により再構築されうる可変サイズの拡張されたプリミティブを記述することができる。その方法は，さらに，残りの全ての頂点属性のために複数のインデックスバッファを特定する工程を含んでもよいので，それぞれの属性が自己のインデックスによりアドレスされ，それゆえ分離されたインデックスバッファが必要とされる場合，近隣の点など拡張されたプリミティブの頂点について全ての必要とされる頂点属性を特定することができる。【００３６】
本発明により導入された拡張されたプリミティブ列を特定するための方法の工程は，以下のメリットを有する。例えば，固定されたサイズ又は可変サイズの頂点列から再構築できるタイプなど，様々なタイプの拡張されたプリミティブを特定することができる。コンパクトインデックスにより参照されるプリミティブ列により共有される頂点として表現されることによりコンパクトになる。本方法は，三角形メッシュ／四角形メッシュを特定するための３次元グラフィックライブラリに用いられるインデックスバッファ／頂点バッファによる表現まで拡張されるので，拡張されたプリミティブ列及び三角形，四角形，線，点など単純プリミティブの列と比較して，拡張されたプリミティブ列を準備し複製するための応用のために，ライブラリＡＰＩｓをわずかに修正するだけですむ。各工程を以下に詳細に説明する。【００３７】
本方法は，固定されたサイズ又は可変サイズの拡張されたプリミティブ列を記述するために，単純プリミティブ列を表現するためのインデックス／頂点バッファを拡張する。本明細書において，単純プリミティブとは，三角形，四角形，線，点などコンピュータグラフィックスにおいて用いられる基本形状を意味する。そのようなプリミティブ列の演算処理は，openＧＬやdirect３Ｄなど３次元グラフィックライブラリにおいて通常最も大きな問題である。本明細書において，拡張されたプリミティブとは，４つ以上の頂点数を有する固定された数又は可変な数の頂点列により形成された幾何学的プリミティブを意味する。【００３８】
単純プリミティブを表現するためのインデックスバッファ／頂点バッファは，単純プリミティブがプリミティブを構成する頂点列として表現される単純プリミティブ列として表現されるものを意味する。頂点バッファは，コンピュータグラフィックスにおいて用いられる頂点属性の記憶装置を意味する。本明細書において，頂点属性は，プリミティブの頂点として用いられる４次元単一空間（homogeneous space）中の点と関連する属性を意味する。頂点属性の好ましい例は，空間内の点，色，テクスチャ座標，法線ベクトル，タンジェントベクトルなどを含む。属性は，スカラー，２つのコンポーネントベクトル，３つのコンポーネントベクトル，など様々な次元でありうるし，１バイト整数，２バイト整数，４バイト整数，４バイト浮動小数点など様々な値のタイプを取りうる。それぞれの属性の例は，その次元と値のタイプによって決めされるある固定されたメモリサイズの記憶装置を必要とする。頂点バッファを特定する方法は，同じ属性タイプの属性値がメモリ中に同じように配置されるような方法で，メモリ中に属性列を配置することを含む。それゆえ，頂点バッファ内のある属性の位置は，属性タイプと関連した列における位置と配置により容易にリカバーできる。従って，属性値は，その列における整数位置又はインデックスにより表すことができる。もしも全ての属性列が同じサイズを有するものであれば，当該列における頂点の数に関連して属性価の頂点列に由来する頂点のインデックス値は増加することとなる。そのような場合では，頂点列を特定することができ，それゆえ，インデックスバッファを用いずに単純プリミティブ列を特定できる。【００３９】
本明細書において，そのような状況は，「頂点バッファのみの表現」“vertex buffer-only representation”とよばれる。用語「インデックスバッファ」は，頂点属性インデックスと特定するための整数値の列を含むメモリ中のアレイを意味する。頂点列はそれに関連する頂点属性の全てのタイプのインデックス列のうち唯一のもののみを含む場合は，全ての頂点属性について頂点列を完全に記述するために，ひとつのインデックスバッファを特定すれば十分である。逆に，それぞれの頂点属性タイプが頂点列に関連して頂点インデックスの頂点属性に特異なものが存在する場合がある。そのような場合では，特定するためのインデックスバッファの数は，属性タイプの数と同じだけになる。頂点バッファとそれにおける全ての必要とされるインデックスアレイを有するインデックスバッファとを組み合わせることは，単純プリミティブの列により表現するインデックス／頂点バッファを形成することとなる。【００４０】
頂点バッファを特定する工程は，上述したように，簡単なプリミティブ列におけるインテックスバッファ及び／又は頂点バッファのように各頂点に関連する頂点の属性（attributes）を特定するための工程である。【００４１】
インデックスバッファを特定する工程は，頂点が拡張されたプリミティブを形成するために頂点位置の属性に関するインデックスを特定するための工程である。拡張されたプリミティブにおける様々な拡張されたサイズの属性のために,この工程は，頂点位置の特定のためのインデックスバッファ内のインデックス値によるプリミティブサイズを特定する工程を含む。可変サイズのプリミティブを用い頂点列がプリミティブを構成するものを実装する場合，この工程は，プリミティブごとにプリミティブサイズを特定することによる，拡張されたプリミティブ列を特定する工程を含んでも良い。本発明は，プリミティブのサイズと，プリミティブを形成できる頂点列と，頂点列の特定値とにより必要な情報の全てをそろえることができるような拡張されたプリミティブに用いることができる。【００４２】
本発明において，固定されたサイズの拡張されたプリミティブの例は，隣接を含む三角形“Triangle with Neighborhood”（TWN）プリミティブである。そのようなプリミティブは，三角形の各辺に隣接する３つの三角形を含むメッシュを構成するそれぞれの三角形を，３次元空間における三角形によって閉じた空間を構成するメッシュ（三角形が複数辺を共有することで連なってメッシュ状になったもの）において検討することで形成することができる。【００４３】
図４（Ａ）を参照して，上記を説明する。図４（Ａ）は，三角メッシュの概念図である。図４（Ａ）に示されるように，三角メッシュ上にフラグメント１０３が描画される。
頂点{v1, v2, v3}によって形成される三角形に対しては，ＴＷＮプリミティブは，その三角形と，その三角形{v1, v2, v3}の各辺{v2,v1}, {v1,v3}, {v3,v2}に隣接する三角形{v0,v1,v2}, {v1,v5,v3},
{v2,v3,v4}によって形成される。本明細書において，三角形{v1, v2, v3}は，“中心”三角形とも呼ばれる。このようにＴＷＮプリミティブを表現するために，全部で6個の頂点列が必要とされる。ＴＷＮプリミティブにおける頂点決定，すなわち，頂点位置間のマッピング方法とプリミティブ内での各頂点と他の頂点との接続関係の好ましい例は，たとえば以下のものがあげられる。頂点列{v0,v1,v2}によって形成される三角形に隣接する三角形について，辺{v0,v1}, {v1,v2}, {v2,v0}に対応する頂点をv01, v12, v20（ただし，v01, v12, v20はそれぞれ中心三角形に隣接する三角形であって，上記の辺を共有する三角形の{v0,v1,v2}以外の頂点）としたときに，ＴＷＮプリミティブを表現するための頂点列は，{v0,v1,v01,v2,v20,v12}である。図４（Ａ）に示される三角形{v2,v1,v3}については，ＴＷＮプリミティブを表現するための頂点が{v2,v1,v0,v3,v4,v5}となる。すなわち，vjを，属性インデックスｊを有する頂点位置とすると，中心三角形{v2,v1,v3}のＴＷＮプリミティブの特定インデックスの頂点位置列は，{2,1,0,3,4,5}となる。もしも，もともとのメッシュの端部が開いていれば，それらに隣接した少なくとも一つの三角形を隣接させることができ，もしもメッシュ中の全てのエッジが２つ以下の隣接する三角形しか有しない場合は，そのような全ての三角形に対して更にＴＷＮプリミティブを生成できる。さらに，一つしか隣接する三角形を有しない辺に対しては，人工的に欠けた三角形を補うことも可能である。その一つの方法は，人工的に作られたオープンな辺の頂点を二度用いることによって，縮退された（degenerate）三角形を作ることである。上記と別の方法は，開端（open edge）とは反対位置にある中心三角形の頂点を用いる方法であり，その場合は三角形は縮退せずに中心三角形と（coincide）する。【００４４】
固定サイズの拡張されたプリミティブ列は，プリミティブ列におけるそれぞれのプリミティブの頂点列を連結（concatenate）することにより形成することができる。頂点位置の属性についてのインデックスバッファは，連結された列における頂点の頂点位置属性のインテックス列として表現することができる。ＴＷＮプリミティブについては，３つの好ましいプリミティブ列の表現方法がある。すなわち，別々のＴＷＮプリミティブ列として表現するもの，ＴＷＮストリップとして表現するもの，及びＴＷＮファンとして表現するものである。それらは，別々の中心三角形列に基づくもの，中心三角形のストリップに基づくもの，及び中心三角形のファンに基づくものである。【００４５】
セパレートされたＴＷＮプリミティブ列は，それぞれの三角形に対するＴＷＮプリミティブを中心三角形とし，それぞれの生成されたＴＷＮプリミティブに対する頂点を（concatenate）することにより，設計できる。図４（A）では，中心三角形{v&shy;2,v1,v3}と{v&shy;3,v1,v5}からなる列により形成されるTWNプリミティブのフラグメント（fragment）を図示している。対応する頂点は{v2,v1,v0,v3,v4,v5,v3,v1,v2,v5,v6,v7}であり，対応する頂点位置の属性に対応するインデックス列は図４(C)に示されるように{2,1,0,3,4,5,3,1,2,5,6,7}.である。【００４６】
TWNストリップは，三角形ストリップにより構成することができる。三角形ストリップにおいて，２つの連続する三角形が２つの頂点を共有するという事実により，それぞれのプリミティブにつき２つの頂点のみによりストリップにおける第２の又は次のTWNプリミティブを定義付けることができる。本発明において，頂点列{v0,v1,v2,v3,v4,v5,…}によって形成される三角形ストリップ，{v&shy;0v1,v0v2,v1v3,v2v4,v3v5,…}辺に沿ってその辺に対して反対側にある三角形ストリップに隣接する三角形に隣接する三角形の頂点列{v01,v02,v13,v24,v35,…}によって形成される三角形ストリップに対して，TWBストリップにより定義される頂点列は以下のようになる。すなわち，{v0,v1,v01,v2,v02,v3,v13,v4,v24,v5,v35,…}であって，最初の６個の頂点列は，最初のＴＷＮプリミティブを定義するものであり，次の２つずつの頂点は，それに続くＴＷＮプリミティブをあらわすものである。図４（Ｂ）では，２つの三角形{v&shy;2,v1,v3}と{v&shy;3,v1,v5}により構成される三角形ストリップ１０４によるメッシュフラグメントが表現されている。このストリップは，４つの長さの頂点列{v&shy;2,v1,v3,v5}により形成することができる。図４（Ｂ）の例では，ＴＷＮストリップを定義する２つのＴＷＮプリミティブは，{v2,v1,v0,v3,v4,v5,v7,v6}となり，それに対応する頂点位置の特定に対するインデックス列は，図４（D）に示されるように{2,1,0,3,4,5,7,6}となる。【００４７】
ＴＷＮストリップと同様にして，ＴＷＮファンも三角形ファンから形成することができる。ＴＷＮファンによっても，相当する中心となる三角形ファン列のＴＷＮプリミティブ列を表現するために必要とされるインデックスバッファの数を軽減することができる。本発明において，三角形ファンは，頂点列{v0,v1,v2,v3,v4,v5,…}と，{v&shy;0v1,v1v2,v2v3,v3v4,v4v5,…}辺に沿って，その辺の反対側の頂点における三角形ファンにおける三角形に隣接する三角形の頂点{v01,v12,v23,v34,v45,…}により形成することができる。ＴＷＮファンを定義づける頂点列は，{v0,v1,v01,v2,v12,v3,v23,v4,v34,v5,v45,…}で表され，最初の６つの頂点は最初のＴＷＮプリミティブ を意味し，続く２つごとの頂点は，連続するＴＷＮプリミティブを定義するものである。ここで，最初の６つの頂点列がＴＷＮストリップの場合と異なることに留意されたい。図５（Ａ）は，三角形ファン１０５を構成する２つの三角形{v&shy;2,v1,v3}と{v&shy;2,v3,v4}とによるメッシュフラグメントを示す。このファンは，長さが４の頂点列{v&shy;1,v2,v3,v4}により表現することができる。図５（Ａ）に示される本発明においては，２つのＴＷＮプリミティブによるＴＷＮファンの頂点列は{v2,v1,v0,v3,v5,v4,v6,v7}となり，それに対応する頂点位置の属性に対するインデックス列は図５(C)に示されるように{2,1,0,3,5,4,6,7}となる。【００４８】
可変サイズの拡張されたプリミティブの好ましい例は，カトマル−クラーク（Catmull-Clark）の細分割パッチプリミティブ（CCSP）を含む。本発明において，ＣＣＳＰは，それぞれのポリゴンにおいて，４つと異なる隣接するエッジと異なる番号のひとつ以上の頂点を有する四角形メッシュにより表現されるポリゴンから構成される。Catmull-Clarkの再分割による四角形メッシュという観点から，４つと異なる隣接するエッジと異なる番号のひとつ以上の頂点（a vertex with a number of adjacent edges being different from four）は，イレギュラーな頂点とよばれる。また，ある頂点に隣接するエッジの数は，頂点価（a valence of vertex）とよばれる。つまり，頂点価が４以外の場合は，Catmull-Clarkの再分割の観点からするとイレギュラーな頂点とみなされる。CCSPプリミティブは，四角形における各頂点と，それら四角形の各頂点を共有するポリゴンにおける隣接する全ての頂点とによって形成される。CCSPプリミティブにおいて，その中心に位置する四角形を中心四角形とよぶ。もしもイレギュラー頂点の頂点値が存在する場合，中心四角形は，メッシュにおける他の四角形と異なり，中心四角形の周囲の四角形や，CCSPプリミティブにおける頂点の数も変化する。CCSPプリミティブでは，イレギュラーな頂点価に関連する頂点の数は，VをCCSPプリミティブにおける頂点の数とし，Vをイレギュラーな頂点の頂点価とすると，N=2*V+8のように表すことができる。なお，この場合においてVに所定数を乗算することをスケーリング，２をスケールとよび，８など所定の数を加えることをバイアスとよぶ。【００４９】
サイズが知られているので，ＣＣＳＰプリミティブは，連続する頂点列における頂点間にマッピングされる頂点列（sequence）によって表現することができ，それによりＣＣＳＰプリミティブの位置が決定される。本発明の好ましい態様では，頂点列（sequence）とマッピングは以下のように形成される。四角形のメッシュについては，ＣＣＳＰプリミティブは，頂点{v0,v1,v2,v3}を有しており，それらは四角形の辺（v0v1, v1v2, v2v3,
v3v0）をそれぞれ形成する。なお，イレギュラーな頂点がもしあればv0である。ＣＣＳＰプリミティブを記述する頂点列は以下のように形成される。まず，四角形の頂点は，番号順{v0,v1,v2,v3}に並べられる。その後，例えば，v0とv1とのメッシュを構成する四角形に属する，v0を共有する隣接する辺の頂点が選択される。六番目は，v1と同じ辺上にあり，v0と同じ四角形状の頂点である。残りの隣接する頂点は，以下の規則に従って選択される。隣接するある頂点が選択された後に，以前に選択された辺を共有するように次の頂点が選択される。図６（Ａ）に示されるように，制御メッシュ（１０６）のフラグメントは，２つの隣接するＣＣＳＰプリミティブ{v9,v5,v6,v10}及び{v9,v10,v16,v15}を中心四角形として記述される。頂点v9は，頂点価が５のイレギュラーな頂点である。最初のプリミティブ及び第２のプリミティブを記述する頂点列は，それぞれ{v9,v5,v6,v10,v8,v4,v0,v1,v2,v3,v7,v11,v17,v16,v15,v14,v13,v12}と{v9,v10,v16,v15,v5,v6,v7,v11,v17,v21,v20,v19,v18,v14,v13,v12,v8,v4}である。本発明において，ＣＣＳＰプリミティブの頂点位置の属性（attribute）を示すインデックスは，頂点位置の属性を示すインデックスを含むインデックスバッファにおいてＣＣＳＰプリミティブとともに前もって決定されている。すなわち，図６（Ａ）に示される２つのＣＣＳＰプリミティブにおける頂点郡の内容として，図６（Ｃ）に示されるように，インデックスバッファ１２００(または頂点バッファ１１００)は{18,9,5,6,10,8,4,0,1,2,3,7,11,17,16,15,14,13,12,18,9,10,16,15,5,6,7,11,17,21,20,19,18,14,13,12,8,4}を記憶する。【００５０】
残りの頂点属性についてのインデックスバッファ列を特定する工程は，頂点の全ての属性を参照するために同じインデックスが用いられないように別のインデックスが要求されるように頂点属性が特定される工程である。この場合において，頂点は属性インデックスの組によって形成され，そのインデックスは，頂点の異なる属性に関連するインデックスである。上記が当てはまらない場合，全ての頂点属性は，頂点位置属性に相当する一つのインデックスによって特定されうる。そうでなければ，全ての頂点属性を特定するためにインデックスバッファの組は特定されなければならない。頂点位置属性に関するインデックスバッファはプリミティブサイズを含むので，上述したように可変なサイズの拡張されたプリミティブを扱う場合は特別な扱いがなされる。他のインデックスバッファは，プリミティブサイズに関する情報を持たず，可変サイズのプリミティブを表現する場合に頂点位置属性のものと比べて小さい長さとすることができる。本発明では，ある頂点に対する頂点属性のインデックスは以下のように決められる。固定サイズの拡張された属性の場合，ｉ番目の位置のインデックスバッファ価はNを頂点列の長さとして，iは０以上N未満であるインデックスバッファ中のｉ番目頂点のインデックス列に由来するすべての属性の価となる。サイズが可変な拡張されたプリミティブの場合は，状況がより複雑となる。可変サイズの拡張されたプリミティブ列を表現するための頂点列を連結することにより形成される頂点列については，ｉ番目の頂点のインデックス列は，頂点位置属性を示すインデックスバッファ中の(ｉ＋Ｎｉ−１)番目の価と他のインデックスバッファのｉ番目の価とに基づいて形成され，ここで，Ｎｉはプリミティブ数の初期値を１として，ｉ番目の頂点が含むプリミティブの数である。【００５１】
本発明の第二の側面は，頂点キャッシュ（頂点バッファ）を用いて，固定サイズ又は可変サイズの拡張されたプリミティブを高速に処理するための方法であって，頂点位置属性のインデックスバッファから，可変サイズのプリミティブのプリミティブサイズをフェッチングし，前記プリミティブサイズを特定の回路か又は拡張されたプリミティブアセンブリを処理できるようにプログラマブルにされた演算装置であるプリミティブエンジンに配送する工程と，頂点キャッシュから頂点データを得られない場合は，頂点キャッシュにおける拡張されたプリミティブの頂点についての頂点データをフェッチし，変換して，蓄積する工程と，拡張されたプリミティブのアセンブリと演算処理のために，変換された頂点をプリミティブエンジンへ配送する工程と，プリミティブエンジンにおいて，拡張されたプリミティブをアセンブリし，演算処理する工程と，プリミティブエンジンにおける拡張されたプリミティブの演算処理により得られる固定サイズの単純プリミティブをプリミティブラスタライズのためのパイプラインを経由して固定サイズのプリミティブ集積回路へ配送する工程と，を含む。【００５２】
本方法は，固定されたサイズ又は可変なサイズの拡張されたプリミティブのプロセッシングを実装するための拡張された３次元コンピュータグラフィックスの高速ハードウェアにおける頂点キャッシュ装置を拡張することに基づくものである。本明細書において，頂点キャッシュ装置（vertex cache facility）は，インデックスや頂点バッファからの価を用いて特定された簡単なプリミティブの列を高速にプロセッシングすることを達成するためのシステムを意味する。本明細書において頂点キャッシュ装置の機能は，インデックス／頂点バッファからの価を用いて特定された頂点列を横断（掃引）し，プロセッシングを行う頂点列における対応する頂点の属性列を決定する。頂点キャッシュ記憶部（ストア）としての，頂点キャッシュ装置における記憶部における入手可能な属性と同じ列の頂点かどうか決める。インデックスバッファからサンプリングされた頂点属性インデックスに従って頂点バッファから頂点属性値をサンプリングするか，もしも頂点が頂点キャッシュになく，頂点キャッシュ記憶部に記憶されている場合は，頂点バッファを順次生成しても良い。頂点変換についての属性値に基づいてアセンブルされた頂点を送り，そして付加的に，変形結果を頂点キャッシュの記憶部に記憶する。変換された頂点を，インデックス／頂点バッファにより表現される単純プリミティブ列を表現するために，固定サイズプリミティブ集積回路装置へ配送する。頂点変換を加速するか，又は，頂点データが頂点キャッシュに存在する場合，頂点バッファをサンプリングする必要をなくし，頂点を再度変換する必要をなくするために，変換された頂点を固定サイズプリミティブ集積回路装置へ配送してもよい。実装した態様に応じて付加的な装置を適宜具備しても良い。固定されたプリミティブアセンブル装置（固定されたプリミティブアセンブル装置）との用語は，頂点列から単純なプリミティブを集めて再構築することを実現するシステムを意味する。本明細書において，プリミティブを集めること（assembling of primitive）は，プリミティブを再構築するために必要な全ての情報を集めること，例えば，更に処理を行うためにプリミティブにおける全ての頂点についての情報を蓄積することを意味する。例えば，別々の三角形列の場合は，各々の三角形に存在する３つの頂点列が必要な情報に相当する。同様にして，別々の線については，その線を構成する２つの連続する頂点がそれに相当する。三角形ストリップの場合は，最初の三角形の３つの頂点と，隣接する三角形の頂点列がそれに相当する。固定されたプリミティブアセンブル装置は，演算処理され，配送されるプリミティブのタイプに応じた頂点列を，単純プリミティブを演算処理するのみのラスタライズパイプラインに送れるよう単純プリミティブの状態に戻す。【００５３】
本発明の第２の側面にかかる方法は，様々な面で頂点キャッシュ装置を拡張する。第一に，本発明の第２の側面によれば，可変サイズの拡張されたプリミティブをフェッチするために新たなロジック回路が必要となる。次に，頂点キャッシュ装置と固定されたプリミティブアセンブル装置との間で機能するプリミティブエンジン（拡張されたプリミティブに関する情報をアッセンブルし，処理するための別個の装置）との情報交換をもたらす。【００５４】
その方法は，頂点位置属性についてインデックスバッファからプリミティブのサイズをフェッチする工程を含むので，本発明の第１の側面による方法を用いて表現された可変サイズの拡張されたプリミティブの頂点列をプロセッシングするために用いることができる。頂点キャッシュにおける拡張されたプリミティブの頂点データをフェッチし，移送し，そして蓄積する工程により，頂点の属性値から頂点をアッセンブルすることができ，頂点を移送することができ，そして，同じ頂点を後に参照する場合は迅速に取戻しが行われ，頂点キャッシュストアに頂点を記憶することができる。この工程は，拡張されたプリミティブ列や単純プリミティブ列がプロセッシングされるか否かに拘わらず同様である。この方法は，移送された頂点をプリミティブエンジンに配送する工程，プリミティブエンジンにおいて拡張されたプリミティブのプロセッシングを行う工程，及びプロセッシングされた結果を単純プリミティブ列の形で残りのプロセッシングパイプラインに配送する工程をも含む。最初の工程について検討すると，その工程により拡張されたプリミティブをアッセンブルするための必要な情報や，プリミティブエンジンを駆動するプロセッシングアルゴリズムが供給される、そして，プリミティブの干渉が無かったかのような場合におけると同様のプロセッシングを行うために出力結果が配送される。組み合わせることで，以下のようなメリットがある。頂点キャッシュにおいて頂点データをフェッチし，配送し，そして蓄積する工程は，単純プリミティブを処理するのであっても，拡張されたプリミティブ列を処理するのであっても実質的には同様であるので，この方法は，インデックスバッファからフェッチされた属性インデックスに関連した属性から拡張されたプリミティブの頂点をアセンブルするための頂点バッファへのランダムなアクセスを特に特別な方法を用いずに実現することができる。先に説明したと同じ理由で，頂点データをフェッチし，配送し，そして蓄積する工程に用いられるほとんどの論理回路は，単純プリミティブの演算処理と拡張されたプリミティブの演算処理とで共用することができ，拡張されたプリミティブの処理を実現するために実装される論理回路のハードウェアコストを軽減することができる。頂点キャッシュを用いることは，プリミティブエンジンの頂点データを拡張されたプリミティブのアセンブル及び演算処理アルゴリズムへと配送する際の待ち時間を軽減することになる。これにより，拡張されたプリミティブの演算処理に関するパフォーマンスが向上することとなる。インデックスバッファから可変サイズのプリミティブのプリミティブサイズをフェッチングする工程とそれをプリミティブエンジンへ配送する工程と，拡張されたプリミティブをアセンブルし，演算処理するために変換された頂点をプリミティブエンジンへ配送する工程は，プリミティブエンジン上で，本発明の第一の側面により導入された方法を用いて拡張されたプリミティブを演算処理するために必要な全ての情報を配送することを可能とする。プリミティブエンジンによって演算処理された拡張されたプリミティブの出力は，単純プリミティブのものと同様な方法により達成され，拡張されたプリミティブの演算処理を行うためにプリミティブ演算処理用のパイプラインは特に修正する必要がない。さらに，単純プリミティブ列の処理は，単純プリミティブ列の演算処理による変換された頂点は，頂点キャッシュからプリミティブエンジンによりバイパスされる残りの演算処理パイプラインへと直接配送される。この方法は，単純プリミティブ列を演算処理することに比べて追加となるような付加を何ら要求しない。【００５５】
頂点位置属性のインデックスバッファから，可変サイズのプリミティブのプリミティブサイズをフェッチングし，前記プリミティブサイズを特定の回路か又は拡張されたプリミティブアセンブリを処理できるようにプログラマブルにされた演算装置であるプリミティブエンジンに配送する工程は，以下のような内容である。すなわち，頂点位置属性のインデックスバッファからプリミティブサイズを取り戻す工程である。本発明の第１の側面と関連して求められた拡張されたプリミティブを表現するために可変サイズの拡張されたプリミティブをそこに位置させるものである。プリミティブサイズは，拡張されたプリミティブの演算処理において必要とされるかもしれないので，プリミティブエンジンへと配送される。 【００５６】
本発明においては，プリミティブサイズに関する情報が，頂点位置属性のインデックスバッファにおけるプリミティブの頂点に関する情報よりも先行する。プリミティブサイズのフェッチングが終わった結果として，後者がプリミティブに関するほかのどの情報にも先駆けてプリミティブエンジンへと配送される。プリミティブサイズを知ることは，次の可変サイズのプリミティブの始まりに関する頂点位置属性のインデックスアレイのオフセットを決めることができ，それにより，前記インデックスは次のプリミティブのサイズ情報を含むこととなる。プリミティブサイズは，可変サイズのプリミティブに関する演算処理を始めることができる状態とするためにも必要とされる。後者は，プリミティブサイズによって制御される全てのプリミティブの頂点をプリミティブエンジンが得た後に終えられる。この工程は，可変サイズの拡張されたプリミティブを実現する場合にのみ必要とされる工程である。他のプリミティブの演算処理を行う場合は，この工程を省略できる。【００５７】
頂点キャッシュから頂点データを得られない場合は，頂点キャッシュにおける拡張されたプリミティブの頂点についての頂点データをフェッチし，変換して，蓄積する工程は，以下のような工程である。上述したように，頂点キャッシュ装置により頂点キャッシュにおいて，フェッチし，変換して，蓄積される工程である。頂点キャッシュ装置は，拡張されたプリミティブの演算処理を行うものではないので，この工程の処理は，頂点キャッシュ装置に関して単純プリミティブであっても固定されたサイズの拡張されたプリミティブ列の処理であっても変わらない。それゆえ，単純プリミティブの演算処理と，拡張されたプリミティブの演算処理を行うための回路など装置面でシェアすることができる。この工程は，頂点キャッシュに既に必要な頂点情報が蓄積されている場合は，省略することができる。この工程は，インデックスバッファ／頂点バッファが拡張されたプリミティブ列を表現する場合でも行われる。そのような場合，頂点属性インデックスがインデックスバッファからサンプリングされる。また，頂点バッファが固定サイズの拡張されたプリミティブのみを表現する場合，頂点属性インデックスは，順番に生成される。【００５８】
可変サイズの拡張されたプリミティブを演算処理する場合はプリミティブサイズをフェッチングする工程では，もし異なる頂点属性の別々のインデックスバッファが用いられる場合はプリミティブの頂点データをフェッチングする工程を修正する必要が生じうる。その理由は，頂点位置属性のインデックスバッファの長さの相違と，他の全ての属性列を記述するインデックスバッファはプリミティブサイズに関する情報を含んでおり，その長さはプリミティブ列の数だけ他のインデックスバッファよりも大きいからである。ある頂点について頂点データをフェッチングする工程は，問題とされている頂点に対応するそれぞれの頂点属性のインデックス列を形成する必要がある。異なる頂点属性のための分離されたインデックスアレイや，固定サイズのプリミティブ，又は単純プリミティブ列を演算処理する場合は，このフォーメーションが，頂点の位置に対応した全てのインデックスバッファの位置をサンプリングすることにより行われる。可変サイズの拡張されたプリミティブ列を演算処理する場合は，このフォーメーションは以下のように修正される。すなわち，頂点位置属性以外の全ての属性についてのインデックス値が，頂点位置によって決められるインデックスバッファの位置をサンプリングすることにより得られるが，頂点位置属性のインデックスが他の属性のものと現在演算処理を行っている以前のプリミティブの数を足したものにより得られる位置の頂点位置属性のインデックスバッファにより得られる。この工程は，可変サイズの拡張されたプリミティブ列を，インデックスバッファ及び頂点バッファを用いるもので，前記本発明の第１の側面により導入されるものである。【００５９】
拡張されたプリミティブのアセンブリと演算処理のために，変換された頂点をプリミティブエンジンへ配送する工程は，入力された頂点情報を拡張されたプリミティブのアセンブルと演算処理を行うためのプリミティブエンジンによるアルゴリズムへと配送するための工程である。本発明においては，この工程は，固定されたプリミティブアセンブル装置の代わりに，頂点キャッシュからの変換された頂点が配送されるプリミティブエンジンを選択することにより達成される。本明細書においては，“プリミティブエンジン”という語は，以下により，拡張されたプリミティブの演算処理を実現するための固定回路又はプログラマブルシステムを意味する。可変サイズの拡張されたプリミティブの場合は，プリミティブサイズに関する情報を受け取って内部に記憶するプリミティブの頂点に関する情報を蓄積する。蓄積されたプリミティブに関する情報に基づいてプリミティブを再構築する。可変サイズの拡張されたプリミティブを演算処理した結果,固定されたプリミティブアセンブル装置によってアクセスできる単純プリミティブ列となるようなアルゴリズムに従って，プリミティブを再構築する演算処理を行う。【００６０】
プリミティブエンジンにおける拡張されたプリミティブの演算処理により得られる固定サイズの単純プリミティブをプリミティブラスタライズのためのパイプラインを経由して固定サイズのプリミティブ集積回路へ配送する工程は，以下の工程を含む。固定されたプリミティブアセンブル装置により処理できる形式とされた拡張されたプリミティブを配送する工程である。本発明において，この配送は，頂点キャッシュ装置により単純プリミティブ列が処理された場合に変換された頂点が頂点キャッシュから固定されたプリミティブアッセンブル装置へと直接配送されるのとまさに同じ方法で配送される。従って，固定されたプリミティブアセンブル装置を修正する必要はなく,拡張されたプリミティブの演算処理を行えるようにするためにラスタライゼーションパイプラインも修正する必要がない。【００６１】
プリミティブエンジンにおいて，拡張されたプリミティブをアセンブルし，演算処理する工程は，プリミティブエンジンにより所定のアルゴリズムを実装し，これを用いて拡張されたプリミティブに関する演算処理を行うための工程である。プリミティブエンジンによって実現される固定サイズの拡張されたプリミティブを演算処理するアルゴリズムの好ましい例は，以下のものがあげられるが，これに限定されるものではない。すなわち，メッシュシルエットの検出と視覚化を実現するためにＴＷＮプリミティブ列を演算処理するというものである。本明細書において，メッシュシルエットは，一方が視点方向を向き他方がそうではない方向を向いている１組の三角形によって共有されるトライアングル辺の集合を意味する。メッシュシルエットを視覚化するとは，メッシュをレンダリングする際に，シルエットエッジを視覚的に強調する方法を意味する。シルエットを検出し，視覚化するためのアルゴリズムの概要は以下のとおりである。ＴＷＮプリミティブのための頂点データを蓄積する。中心三角形と隣接する三角形の方向を決定する。この工程は，部分的に並行して行われても良い。そして，中心三角形の三つの辺のそれぞれから三角形の方向を比較することでシルエットエッジを検出する。検出されたシルエットエッジの四角形フラップを生成し，ラスタライズのためにそれを配送する。次のプリミティブについて同様の処理を行う。プリミティブサイズが固定されているので，プリミティブサイズをフェッチする工程は行う必要がない。【００６２】
ＴＷＮストリップやＴＷＮファンの場合は，ストリップ／ファンにおいて最初とそれ以降のプリミティブは異なる方法で蓄積される。最初のプリミティブは，プリミティブに関する演算処理が始まる前に，６つの頂点を必要とする。第２及びそれ以降のプリミティブは，既に蓄積された頂点を利用することができるので，さらなる２つの頂点のみを要求する。分離されたＴＷＮプリミティブ列の場合は，第２以降のプリミティブであっても，最初のプリミティブと同様に頂点データが蓄積される。【００６３】
図４（Ｂ）示されるように，それぞれ頂点列{v2,v1,v3} と {v3,v1,v5}により構成される２つの中心三角形111及び113に相当するＴＷＮプリミティブストリップは，図４（Ｄ）に示されるように{2,1,0,3,4,5,7,6}で示される頂点位置属性列に相当するインデックスバッファのコンテンツとして表現される。頂点キャッシュ装置はインデックスバッファからインデックスに相当する頂点を読み出して，プリミティブエンジンに伝える。たとえば，頂点キャッシュ装置から，プリミティブエンジンに伝えられる第６番目の頂点は，インデックス価５に相当するものである。プリミティブエンジンが，中心三角形１１１と隣接する三角形１１０，１１２，及び１１３についての全ての頂点に関する情報を入手すれば，プリミティブエンジンはＴＷＮストリップ列における最初の三角形の方向やシルエット辺などを検出し始めることができる。三角形の方向の計算は，システム座標における三角形の頂点位置のｘ，ｙ，ｗにより構成される３つのコンポーネントベクトルからなる３つの内積によるスカラーにより評価され，以下のマトリックスにより評価される。【００６４】
【数１】
2008053597.tif 000003
【００６５】
ここで，下付の０，１，及び２は，それぞれ三角形における第１，第２及び第３の頂点を意味する。このサインが辺を共有する２つの三角形と異なる場合は，この辺はシルエットである。それゆえ，シルエット辺を決定するために，ＴＷＮプリミティブの中心三角形と，３つの隣接する三角形の４つの評価が必要となる。【００６６】
シルエット辺を検出するために，観察者の視野方向と垂直な方向，すなわち視点座標におけるＺ軸の方向の長方形のフラップ（flap）を構成する余分な幾何学図形が設計され，それは対象物の外側に伸びる。その対象物の外側の方向は，頂点キャッシュ装置からプリミティブエンジンへは頂点が運ばれた後に入手することができる他の頂点の属性とそのメッシュの各々の頂点における法線ベクトルにより表現される法線方向に変換される。例えば，そのシルエット辺を構成する第１及び第２の頂点は，x0,y0,z0,w0 視点座標系及びx1,y1,z1,w1視点座標系においてｖ０及びｖ１と命名され，それぞれに関連して法線ベクトルn0及びn1を有する。生成したフラップは，視点座標系において以下の座標値を有する頂点により表現される長方形である{x0,y0,z0,w0}, {x1,y1,z1,w1}, {x1+offsetX*n1x*w1,y1+offsetY*n1y,z1,w1},及び{x0+offsetX*n0x,y0+offsetY*n0y,z0,w0}。このようにして得られたフラップは，観察者との距離によらずスクリーン空間において一定の幅を有するようにして生成される。図５（Ｂ）は，係数offsetXと係数offsetYとが同じ値であり，n0zとn1zとが０である場合における，そのようなフラップの構成を示す図である。【００６７】
次のプリミティブのために，頂点キャッシュ装置からインデックス値が７と６である２つの頂点が配送され，それによりさらに２つの三角形１１５及び１１４が定義される。この情報により，ストリップにおける第２の三角形のシルエット計算を行うことができる。ただし，以前求めた４つの頂点が再び用いられることに留意しなければならない。さらに，三角形の方向を計算することにより，２つの三角形が再び用いられることとなる。すなわち，一つは問題となる三角形であり，もうひとつは隣接する三角形である。図４Ｂに示される場合では，それら２つの三角形はそれぞれ１１３と１１１である。この方法によれば，シルエットを検出するアルゴリズムを実装する際の計算コストを大きく軽減できる。シルエット辺において重複した幾何学的フラップが生成する事態を防止するため，例えば，観察者に面する方向などある三角形のある方向のＴＷＮプリミティブとなるようにフラップが生成されなければならない。そのほかのプリミティブは，無視することができる。【００６８】
最後に，それぞれのプロセッシングされたＴＷＮプリミティブについて，プリミティブエンジンが単純な固定サイズのプリミティブを出力することもできる。シルエット検出アルゴリズムや視覚化アルゴリズムの特別な場合においては，その出力は，不変な中心三角形と，シルエット辺を形成する幾何学的フラップを構成する２つの三角形とを含む。フラップについて，アルゴリズムを実装するに当たり，いくつかの属性は変化されうる。例えば，色は，黒い外観を形成する場合は，黒のものに置き換えられる。出力された三角形は，頂点キャッシュ装置から直接配送されたかのように，固定されたプリミティブアセンブル装置へと配送され，処理される。【００６９】
プリミティブエンジンが，可変サイズの拡張されたプリミティブを処理することを実現するためのアルゴリズムの例としてCatmull-Clark再分割法を実装するものがあげられるが，これに限定されない。同様に，他の再分割スキーム，例えばループ再分割スキームや，４−３再分割スキームなどを実現できる。Catmull-Clark，ＣＣ，再分割法は，複数の工程からなり，荒いメッシュから，滑らかで細かな碁盤目状のメッシュを生成し，各工程はひとつ前の工程で得られたメッシュを再分割する工程である。すなわち，再帰的な方法で基本メッシュにある規則を当てはめて細かくする。その規則は，その前の工程で得られたメッシュのそれぞれの面について新たな頂点を生成し，前の工程で得られたメッシュのそれぞれの辺について新たな頂点を生成し，前の工程での位置に関してメッシュの頂点位置を再配置する。上記の３つのいずれの場合も，次の工程のメッシュの頂点位置は，それが属する辺や面と隣接するものの頂点の線形結合に限られる。より具体的に説明すると，面点（face points）は，もとの頂点の面の位置の平均に位置する。辺点（edge
point）の位置は，もとの辺の中心位置の平均，及び２つの新しく隣接する面点の平均として計算される。前工程からの頂点は，以下の式で示されるように位置される。S’=(Q + 2R + S(n-3)) /n。ここで，S’は，頂点の最新の位置であり，Qは，その頂点の周辺に位置する新たな面点の平均値であり, Rは前記頂点を共有する辺の中点の平均値であり,Sは前の工程での頂点位置であり,そしてnは頂点を共有する辺の数，すなわち頂点価である。【００７０】
次の再分割工程において頂点位置を計算するために必要とされる頂点の数は，辺の頂点は６，面の頂点は４と固定される。一方，前の工程からの頂点の位置を決めるためには，再配置される１つの隣接したものに属する全ての頂点に関する情報が必要となる。頂点のある隣接するものは，それとメッシュ面を共有する全ての頂点によって形成される。図６（Ａ），図６（Ｂ）及び図６（Ｃ）に示される場合では，基本メッシュ１０６における頂点v9の隣接するものは，頂点v13,v12,v8,v4,v5,v6,v10,v16,v15及びv14により形成され，その価は５である。頂点の価は，任意の価を取ることができ，したがって，再分割ルールを実行する場合，隣接における多数の頂点の数に関する情報を必要とする。しかしながら，実際は，最大の頂点価を限定することができ，ある計上を再分割するために特にぎりぎりまで制限されない状態で再分割ルールを実装することができる。【００７１】
ＣＣスキームを全てのメッシュに用いることもできるが，パッチごとに異なるルールを用いることもできる。再分割表面パッチは，その面のひとつの隣接するものに属する頂点列としての基本メッシュの面から外れるように形成されうる。すなわち，再分割ルールがひとつの隣接するものに限定されるので，面頂点のある隣接するものの集まりは，面そのものの頂点を含む。ＣＣ再分割を２工程行った後に，再分割されたメッシュにおける全ての面は，長方形であり，面についてひとつ異常のイレギュラーな頂点がなくなることが知られている。基本となる面は，そのようにして設計しうるが，同じ結果を得るためにただ１つのＣＣ再分割工程を行えばよい。いずれにせよ，一般的なＣＣスキームを失うことなく面ごとのイレギュラーな頂点を１つ以上有するイレギュラーな長方形でないように形成されるパッチの再分割を考慮することができる。本発明の第１の側面において記載したＣＣＳＰプリミティブは，上記の要件を満たし，基本メッシュの四角形郡に相当するＣＣＳＰプリミティブ郡によりＣＣ再分割が実現できる。【００７２】
図６を参照して，インデックス／頂点バッファからＣＣＳＰプリミティブを形成する方法や，プリミティブエンジンにおいてＣＣ再分割を行うアルゴリズムについて説明する。図６（Ａ）は，中心四角形{v9,v5,v6,v10}及び{v9,v10,v16,v15}により形成され頂点価５のイレギュラーな頂点v9を共有する２つの隣接するＣＣＳＰプリミティブ列を有する基本となる制御メッシュ１０６を示す図である。頂点位置属性のインデックス列を含むインデックスバッファは以下のとおりである。
{18,9,5,6,10,8,4,0,1,2,3,7,11,17,16,15,14,13,12,18,9,10,16,15,5,6,7,11,17,21,20,19,18,14,13,12,8,4}。そして，ＣＣＳＰ列の処理は以下のとおりである。プリミティブサイズをフェッチングする工程は，頂点位置属性のインデックス群における最初の位置からプリミティブサイズの値18を取り戻し，それをプリミティブエンジンに配送する，頂点キャッシュ装置により実行される。頂点キャッシュ装置は，18個の頂点を頂点位置属性のインデックスに従ってプリミティブエンジンに配送する。頂点v12に相当するプリミティブの最後の頂点がプリミティブエンジンに配送されると，ＣＣＳＰプリミティブの演算処理が始まる。プリミティブサイズ，頂点列を入手できるようになっているので，プリミティブエンジンにより実装されるアルゴリズムにより本発明の第1の側面によって導入された記述方法によりＣＣＳＰプリミティブを再構築できる。プリミティブを再構築した後は，再分割を行うための全ての情報が入手されているので，再構築されたＣＣＳＰプリミティブは，Catmull-Clark再分割表面（Jeffrey Bolz and Peter
Schroder, in Proceedings of the Web3D 2002 Symposium (WEB3D-02), pages 11-18,
New York, February 24 28 2002, ACM Press）などのパッチごとの再分割アルゴリズムにより再分割することができる。用いられた再分割スキームは，モザイクメッシュ(107)の断片として描画されるように演算処理されたＣＣＳＰプリミティブの中心四角形の細かなモザイク（tessellation）に相当する四角形の組となる。その得られた四角形のそれぞれは，さらに演算処理を施し，ラスタライズするために二つの三角形に分割され，固定されたプリミティブアセンブル装置へと配送される。これらの工程は，次のＣＣＳＰプリミティブの演算処理のために繰り返される。【００７３】
本発明の第３の側面は，本発明の第２の側面にかかる方法を用いて，固定サイズのプリミティブ又は可変サイズのプリミティブ列を処理する本発明の第１の側面に係る処理方法を実現するためのシステムに関する。【００７４】
図３に示されるように，本発明の第３の側面に係るシステムは，拡張されたプリミティブを処理するために，従来技術の頂点処理に関する工程を変化するようにされている。インデックスバッファ１１００に記憶され，生成されるインデックスにしたがって，頂点バッファ１２００からの頂点データをフェッチし，頂点処理ユニット４０００に頂点データを変換する。変換された頂点データは，プリミティブエンジン９０００に配送され，ここで拡張されたプリミティブのアセンブル（ａｓｓｅｍｂｌｅ）や処理が行われる。プリミティブエンジン９０００で拡張されたプリミティブのアセンブル処理によって発生した単純プリミティブは，固定されたプリミティブを処理する集積回路６０００のような残りの処理パイプラインへと配送される。このような工程は，拡張されたプリミティブを処理する際にのみ特に有効である。単純プリミティブを処理する場合は，前記の第２の工程がなく，転送された頂点は固定されたプリミティブを処理する集積回路６０００に直接配送されればよい。そして，固定されたプリミティブを処理する集積回路６０００は，例えば，図１に示されるような公知のものを適宜採用すればよい。【００７５】
図３に示されるように，本発明のシステムの具体例としては,以下のモジュールを含むシステムがあげられる。すなわち，本発明のシステムは，頂点キャッシュ制御部, VCC, 2000，第１の頂点キャッシュ記憶部, PVC, 3000，第２の頂点キャッシュ記憶部, SVC, 5000，１又は複数の頂点処理ユニット, VPU, 4000，プリミティブエンジン, PE, 9000，及び固定サイズプリミティブ集積回路, FPA, 6000である。残りのパイプラインは，三角形のように単純プリミティブの固定された列の処理を実現する固定サイズプリミティブセットアップユニット 7000 及びラステライザー 8000を具備するシステムに関する。【００７６】
図３には，上記のシステムと情報の授受や処理を行う他のユニットを示していない。それは簡潔にするためと，本発明に特徴のあるものにアッセンブルするためである。具体的に記載を省略したものとして，ホストＣＰＵやホストメモリ，三角形のラスタライズ用パイプラインなどがある。それらの相互の情報授受は，本発明との関係で必要な範囲で説明を行う。上記したモジュールにおいては，プリミティブエンジンと可変サイズの拡張されたプリミティブを処理することに関する頂点キャッシュ制御部の論理回路を適宜修正し，その他は公知のものを適宜用いることができる。すなわち，上記以外のモジュールは，点，線，三角形など単純固定サイズのプリミティブの処理を実現するためには，現在の３次元コンピュータグラフィックスにおいて用いられているものと類似したものを適宜採用することができる。【００７７】
頂点キャッシュ制御部,ＶＣＣ,２０００は，以下の処理を行う。インデックスバッファの内容を解析する。ＰＶＣ３０００とＳＶＣ５０００の状態に従って，インデックスバッファ１１００からフェッチされた頂点インデックスにしたがって，ＰＶＣ３０００の頂点バッファの内容をフェッチする。頂点データの頂点ごとの処理を実行するために，ＰＶＣ３０００からＶＰＵ（ｓ）４０００へ伝えられる頂点データを制御する。ＶＰＵ（ｓ）４０００からＳＶＣ５０００へと伝えられうる転送された頂点データの蓄積を制御する。プリミティブの種類（可変なサイズの拡張されたプリミティブかどうか）に応じて，ＳＶＣ５０００の内容を，ＰＥ９０００又はＦＰＡ６０００に配送する（具体的には，プリミティブの種類を判断し，プリミティブが可変なサイズの拡張されたプリミティブであればＳＶＣ５０００の内容を，ＰＥ９０００に配送する）。可変なサイズの拡張されたプリミティブを処理する場合は，ＰＥ９０００にプリミティブのサイズに関する情報を配送する。ＰＥ９０００に，プリミティブのサイズに関する情報と，全てのプリミティブの頂点に関する頂点データが配送された後には，可変なサイズの拡張されたプリミティブに関する処理を始める可能性があることを伝える。上記のとおり，本発明の好ましい態様は，プリミティブサイズはＰＥ９０００にのみ配送される。さらに，ＳＶＣの内容はＰＥに配送され，ＰＥ９０００に，プリミティブのサイズに関する情報と，全てのプリミティブの頂点に関する頂点データが配送された後には，可変なサイズの拡張されたプリミティブに関する処理を始める可能性があることを伝えられる。インデックスバッファを解析する工程も，本発明に特有の工程であり，プリミティブサイズの抽出や，可変サイズの拡張されたプリミティブの処理に関連するものである。他の処理工程は，単純プリミティブに行われている公知の処理工程を適宜採用することができる。【００７８】
第１の頂点キャッシュ記憶部ＰＶＣは，ホストメモリから連続的に大量の頂点バッファからの情報が伝えられてキャッシュされる場所である。ＰＶＣは，頂点ごとのプロセッシング（per-vertex processing）において，配送されなかった頂点データがＶＰＵ（ｓ）に配送されるように貯蔵するものとしても機能する。比較的大きく連続的なメモリブロックに対して，配送されなかった頂点データによりＰＶＣが埋められることにより，メモリ移送に関して待ち時間の問題を軽減できる。また，ＰＶＣとＶＰＵ（ｓ）が物理的，又は電気的に近くに設けられることにより，ＰＶＣ中に配送されておらず処理されなければならない頂点データがある場合の移送のための待ち時間を軽減できる。【００７９】
頂点処理ユニットＶＰＵ（ｓ）は，ある固定された機能を達成するモジュールであるか，例えば，ＯｐｅｎＧＬ及び／又はＤｉｒｅｃｔ３Ｄ
３Ｄ  ｇｒａｐｈｉｃｓ  ＡＰＩｓなどに基づく頂点処理を実行できるようにプログラマブルなモジュールであっても良い。ＶＰＵ（ｓ）は，位置，色，テキスト座標など様々な移送されなかった頂点属性を入力として受け取り，位置，色，テキスト座標，視点ベクトルなど移送される頂点の様々な属性を生成する。入力と出力の数や次元，すなわち入力と出力の頂点情報のフォーマットは異なっても良い。ＶＰＵ（ｓ）は，ＰＶＣから情報を受け取り，その出力をＳＶＣへと伝える。【００８０】
プリミティブエンジンＰＥは拡張されたプリミティブに関する情報処理を行うためのある固定された機能を実現するモジュールか，又はプログラマブルなモジュールである。ＰＥを固定された機能を実現するモジュールとして実装することは，高いパフォーマンスを持って，限られた機能を実現するといった用途には有効である。ＰＥをプログラマブルなモジュールとして実現することは，拡張されたプリミティブを処理するアルゴリズムに選択の自由度を与えることができるので，好ましい。拡張されたプリミティブを処理するモードにおいて，ＰＥは，ＳＶＣから移送された頂点に関する出力を受け取り，プリミティブをアッセンブルし，プリミティブに関する処理を行って，ＦＰＡが理解できる単純プリミティブの列として出力する。ＰＥは，本発明に独特なモジュールである。一方，プログラマブルなモジュールとして実装する場合は，単純なプリミティブ列の形で得られる拡張されたプリミティブについての演算結果をＦＰＡに移送するように制御する機能を付加するほかは，プログラマブルなＶＰＵ（ｓ）と多くの機能ロジックを共用するなど，プログラマブルなＶＰＵ（ｓ）と同様の機能を有すればよい。ＰＥは，ＦＰＡの場合と同様に，ＳＶＣとＶＣＣから入力情報を受け取る。ＰＥと他の装置との主な違いは，拡張されたプリミティブサイズの情報と，可変サイズの拡張されたプリミティブを処理する際には拡張されたプリミティブの全ての頂点を配送するための頂点データを配送したことについての通知信号の授受が必要であることに起因する。ＶＣＣは,以下に説明されるように頂点データのためにプリミティブサイズに関する情報をＰＥに伝えるために同じデータチャネルを用いる。【００８１】
最後に，ＳＶＣから配送された頂点列から固定サイズプリミティブ集積回路は，点，線及び三角形といった単純プリミティブのアッセンブルを行うための固定された機能を有するモジュールである。ＳＶＣは，点，線，ラインループ，三角形，三角形ストリップ，及び三角形ファンといった，openＧＬやdirect３Ｄといった最近の３ＤグラフィックＡＰＩｓに用いることができるプリミティブの集合を実現する。拡張されたプリミティブをプロセッシングする場合は，ＦＰＡはＰＥから入力情報を受け取るが，ＰＥが，移送された頂点に関する情報の授受についてのプロトコルとして，ＳＶＣやＶＣＣがＦＰＡへの頂点データ移送を行うためのものと同じものを用いるために，このモジュールにとって情報源は完全に透明であっても良い。【００８２】
頂点キャッシュ制御部は，チップ上のすべてのプリミティブ処理を制御する。頂点キャッシュ制御部は，プリミティブのための頂点データがＰＶＣ及びＳＶＣに記憶された情報を用いて，インデックスバッファに記憶された情報を介して間接的に参照される場合において，インデックスバッファ及び頂点バッファの処理を加速することができる。また，頂点キャッシュ制御部は，プリミティブのための頂点データがＰＶＣを用いて頂点バッファ内の頂点データ列によって形成される場合は，頂点バッファのみを参照することにより，処理を加速できる。ＶＣＣは，固定されたサイズのプリミティブを処理するモードと，拡張されたサイズのプリミティブを処理するモードの２つのモードを，プリミティブに応じて演算処理する。ＶＣＣの演算処理は，単純プリミティブや固定されたサイズの拡張されたプリミティブの演算処理する場合と同様の処理が行われる。【００８３】
最初に，現在処理する頂点に対応する頂点属性インデックスセットの演算処理を行うために，移送されなかった頂点に関する頂点データをロードして，ＶＰＵ（ｓ）に送る。もしも，現在サンプルされたＳＶＣから頂点属性インデックス列に相当する移送された頂点がなく，ＰＶＣにも移送されていない頂点データがない場合は，ＶＣＣは，ホストメモリからＰＶＣへと頂点バッファに記憶される内容の塊をアップロードする。その塊は，ＰＶＣの空いているスペースを用いて質問とされるインデックス列に関する頂点データを含んでいるか，そこに前から記憶されている使用されていないデータを上書きする。その塊は，他のインデックスの頂点データを含んでいてもよく，それゆえその塊はＰＶＣに存在するのであれば更に利用されても良い。ＰＶＣにおいて頂点データが利用可能となると，ラウンドロビン（round-robin）方式か又は他の方法により，ＶＣＣはＶＰＵ（ｓ）への配送を始める。もし変換された頂点データが，ＳＶＣには存在せず，ＰＶＣに移送されないものが存在する場合は，ＶＣＣはホストメモリにアクセスせずにＶＰＵ（ｓ）からＰＶＣへの頂点データの移送を始める。このため，ホストメモリへのアクセス時間を削減できる。このようにして，ＰＶＣは，移送されない頂点データに関する演算処理をする処理速度を向上させることにつながる。【００８４】
ホストメモリにおいて異なる頂点属性の記憶位置は，異なるスペーシングと属性サイズのために，好ましくは，分散配置される。ＶＣＣは，そのような分散された頂点属性からのＶＰＵへの入力データをアッセンブルする。具体的な実装では，ＶＰＵへの入力は４つのコンポーネントのフローティングベクターであり，それぞれの頂点に関する入力データはそのようなベクトルのいくつかにまたがることができる。ＶＣＣは，必要なタイプの変換処理を行うことで，分散された頂点属性から入力データのアッセンブルを行う。例えば，２バイトの整数値を浮動小数点のものに変換し，パッキング属性をそのコンフィグレーションに応じて４つのベクトルに変換する。例えば，2セットの２つのコンポーネントテクスチャー座標属性は，４つのコンポーネント入力ベクトルへ変換される。そして，ＶＰＵが動作可能な時間に沢山の入力データとして移送される。【００８５】
頂点データに関する演算処理を終えて，１つ又はいくつかのＶＰＳ（ｓ）が利用可能な状態となった際には，移送されるべき次の頂点に関する入力がＶＰＵに４つのコンポーネントの浮動小数点ベクトル（4 component floating point vectors）として配送される。ある数のベクトルを受け取った後に，ＶＰＵは頂点に関する演算処理を始める。その数は，頂点ごとの属性の数や，それらのパッキングに依存し，ＶＰＵを経て決定される。ＶＰＵが移送を終えると，ＶＰＵは，４つのコンポーネントの浮動小数点ベクトルをＳＶＣへと出力する。いくつかのＶＰＵが並行して動作するときは，ＶＣＣは頂点列を表現するためのＶＰＵがＳＶＣへアクセスすることを管理する。移送された頂点のフォーマット，すなわち，属性の数や出力ベクターへのパッキングは，入力されたものと異なるものであっても良い。【００８６】
ＳＶＣの貯蔵エンティティも４つのコンポーネントの浮動小数点ベクトルである。それ故，それぞれの移送されたベクトルは，ＳＶＣへの入力列によって占められる。
実際の態様においては，ＳＶＣは，単にＦＩＦＯキューを行い，移送されたデータを最近処理された頂点へと移送する際にＦＩＦＯがオーバーフローした場合には，最も古いデータを急いで出力する。勿論，ＬＲＵ（least recently used）のようなその他の方法をＳＶＣが格納することを妨げるものではない。本発明の本質は，そのような些細な事柄とは関係ないところにある。【００８７】
単純プリミティブ列の演算処理においては，移送された頂点データは，頂点列の順番に応じてＳＶＣからＦＰＡへと配送される。ＦＰＡは，所定の数の４コンポーネントベクターをＳＶＣから受け取った場合に，頂点演算を始めるようにされている。所定の数は，移送された頂点についてＶＰＵが出力したベクトルの数と等しい。ＦＰＡは，移送された頂点列から三角形をアッセンブルし，そしてラスタライズ処理のためにラスタライゼーションパイプラインへと配送される。【００８８】
拡張されたプリミティブの演算処理はＰＥにおいてなされるので，変換された頂点データは，最初にＰＥへ送られる。ＰＥも，固定されたサイズのプリミティブの演算処理と，可変サイズの拡張されたプリミティブの演算処理という，主に２つの演算モードを有する。固定サイズのプリミティブの演算モードにおいて，ＰＥは，ＦＰＡと同様にＳＶＣから所定の数の４つのコンポーネントベクトルを受けると，頂点の演算処理を開始する。拡張されたプリミティブの演算処理結果は，単純なプリミティブの列からなる形式で，ＰＥからＦＰＡへと配送される。ＰＥから出力される単純なプリミティブの列は，単純プリミティブの頂点列として再現可能な形式で実現され，プリミティブ列は４つのコンポーネントベクトルをもって表現される。これは，ＶＣＣ，ＰＶＣ，ＶＰＵｓ，ＳＶＣ，ＦＰＡなど単純プリミティブの演算処理に用いられる多くのハードウェアは，ＰＥに拡張されたプリミティブ処理のための演算処理機構を付加するのみで，拡張されたプリミティブを処理する際にも再利用できることを意味する。更に，ホストメモリに格納される頂点属性に関しては，単純プリミティブの演算処理と同程度しか頂点キャッシュを利用しないので，拡張されたプリミティブの演算処理を迅速に行うことができ，その結果，拡張されたプリミティブに関するチップ上での迅速な演算処理を実現できる。【００８９】
固定サイズの拡張されたプリミティブを処理するモードにおいて，ＰＥはそれぞれの頂点データを受け取った後，すなわち，特定の数の４つのベクトルをＳＶＣから受け取った後に演算処理アルゴリズムを実行する。演算処理アルゴリズムは，受け取った頂点データの蓄積を管理するとともに，固定サイズの拡張されたプリミティブを頂点列から再構築した瞬間やその演算処理が簡潔された瞬間を検出する。【００９０】
固定サイズの拡張されたプリミティブを演算処理する際のひとつの好ましい動作システム例は，ＴＷＮプリミティブ列を演算処理するモードであり，それは上述した固定サイズの拡張されたプリミティブの演算処理にしたがって行われる。ＴＷＮプリミティブの列は，中心三角形列の中のひとつと同様の空間的な整合性を有する。しかしながら，プリミティブのサイズは，単なる三角形の２倍であるから，キャッシュサイズがキャッシュヒットレートが中心三角形列の演算処理のものと同様に刷るために，２次的キャッシュのサイズを大きくしなければならない。【００９１】
ＴＷＮプリミティブの列は，頂点データのフェッチング，移送，及びキャッシングに関して，単純プリミティブの列と同様の演算処理が行われる。相違点は，変換された頂点データの送り先がＦＰＡではなくＰＥであるという点である。そして，変換された頂点データは，入力された頂点の順にＳＶＣからＰＥへとひとつひとつ配送される。【００９２】
可変サイズの拡張されたプリミティブの演算処理を行うために，ＶＣＣの論理回路は，本発明において，以下の手段を提供するように修正される。すなわち，インデックスバッファの内容を正確に解析して，プリミティブを形成する頂点の頂点位置属性の頂点属性インデックスからプリミティブサイズを分離する手段，ＰＥへとプリミティブサイズに関する情報を配送する手段，及び，これから処理を行う，まだ配送されていない可変サイズの拡張されたプリミティブの頂点の数を計測して，ＰＥへ伝えるとともに，プリミティブに関する演算処理を始めさせるために頂点データの配送が終わったことをＰＥへと知らしめる手段，である。この修正は，本発明の特有のものである。ＶＣＣの残りの機能は固定されたサイズのプリミティブを演算処理するものをそのまま用いることができ，したがって固定されたサイズのプリミティブを演算処理するための機能をそのまま用いることができる。【００９３】
具体的な具現例では，頂点位置属性のためのインデックスバッファ中のプリミティブの初めのインデックスは，ＶＣＣ論理回路の可変サイズの拡張されたプリミティブ演算処理のモードにおいてそのサイズを決定する。図７に基づいて説明すると，ＶＣＣ２０００は，その内部にある頂点カウンター２１００を初期化し，次のプリミティブの始まりを検出するために次に処理をされるインデックスごとにカウンター値を減らす。プリミティブの演算処理においてＰＥが利用可能となっているので，サイズは，拡張されたプリミティブを形成するための頂点列の頂点属性がＳＶＣから配送されると同じパスを用いてＰＥ内のプリミティブサイズレジスタ９１００へと配送される。プリミティブサイズレジスタ９１００は，ＰＥ内のプリミティブ演算処理アルゴリズムによりアクセスできるように実装され，頂点列を用いてプリミティブを再構築できるようにされている。【００９４】
プリミティブサイズに関する情報がＰＥからＶＣＣへと配送されるので，ＶＣＣがＳＶＣからＰＥへと変換された頂点データを送り始めることができることとなる。頂点データのフェッチング，移送及びＳＶＣへの配送に関する演算処理は，固定プリミティブのものと同様である。頂点の配送指令は，サイズ情報を含む最初のインデックスに続くインデックスバッファに記憶されるインデックス列により決められる。ＰＥにプリミティブを演算処理するためのアルゴリズムは，頂点情報を蓄積し，ＶＣＣの頂点カウンター２１００の数値を減らすために，それぞれの頂点の属性列がＰＥへと配送された後となるように実装される。カウンターが０になったときは，全ての頂点データがＰＥへと配送されたことを意味し,その旨の通知の信号が接続２３００を介して，ＶＣＣからＰＥへと配送される。接続２３００を介して信号を受領すると，ＰＥは内部でのプリミティブ演算処理を始める。システムオペレーションのひとつの好ましい例は，基本となるＣＣＳＰプリミティブ列として記述されるコントロールメッシュから再分割表面を発生させるためのＣＣＳＰプリミティブ列に関する処理を行うことである。演算処理は，可変サイズの拡張されたプリミティブの演算処理にしたがって行われる。ＣＣＳＰプリミティブ列との空間的な整合性（Spatial coherency）は極めて高い。実際に，イレギュラーな頂点以外の隣接するパッチの演算処理において，ＣＣＳＰプリミティブは１６個の頂点のうち１２個もの頂点を共有することができ，したがって次のCCSPプリミティブを演算処理するために４つのみの頂点を加える演算処理を行い，ＳＶＣへと配送すればよい。このようにして，拡張されたプリミティブを演算処理するための頂点キャッシュの使用は，データのアクセスコストを大幅に軽減し，パッチの近隣における再分割パッチのチップ上での演算処理を実現できることとなる。図６に示される例では，全てで２２個の頂点のうち１４個を共有する連続する２つのパッチであり，ＳＶＣのヒット率は，約６４％であり，より長い列の場合はより高くなると考えられる。そのような大きなプリミティブに関する処理を行うために，頂点キャッシュやインデックスバッファ／頂点バッファを用いなければ，頂点処理のために，極めて大きなメモリコストが必要となると考えられる。【００９５】
上述のような接続２３００から信号を受領して処理を行うＣＣＳＰプリミティブの再分割パッチの場合は，演算処理に必要な全ての情報はＰＥに配送されているので，ＰＥがCatmull-Clark再分割表面アルゴリズム（Jeffrey Bolz and
Peter Schroder, in Proceedings of the Web3D 2002 Symposium (WEB3D-02)）や，the Web3D 2002 Symposium (WEB3D-02), pages 11-18, New York, February
24 28 2002, ACM Press,に開示された演算処理や他のパッチごとの再分割アルゴリズムに従って，ＣＣＳＰプリミティブの中心四角形に含まれる再分割メッシュを作成し始めることができる。
再分割パッチの演算処理の結果は，他の拡張されたプリミティブと同様に，入力情報に応じて，三角形や，ＦＰＡにおける三角形ストリップ，などとされる。本発明の別の側面は，上記のようなシステムを集積回路において実現するものであり，固定された又は可変サイズの拡張されたプリミティブをオンチップで演算処理できるものである。また，そのような集積回路を含むグラフィックカードや，そのような集積回路を含むビデオゲーム装置をも提供する。【００９６】
本発明は，Catmull-Clark再分割スキームによって生成された再分割表面の高速な処理を実現するために，上記のような集積回路を用いるシステムに関する。本発明の拡張されたプリミティブを演算処理するための装置は，リアルタイムレンダリングのインタラクティブな３次元コンピュータグラフィックスに用いることができる。その３次元コンピュータグラフィックスとして，同時にポリゴンのメッシュの多数の頂点にアクセスするためのアルゴリズムを実装するとともに，ＮＵＲＢＳパッチによる碁盤の目や再分割された表面により表現された複雑な幾何学的な形状のリアルタイムなレンダリングに関するものがあげられる。【００９７】
例えば，そのような装置は，３次元画像を視覚化する３次元コンピュータグラフィックスにおけるハードウェアアクセレータカード，パーソナルデジタルアシスタンス，ビデオゲーム装置，カーナビゲーションシステムなどに用いることができる。
【実施例１】
【００９８】
これらの画像は，株式会社デジタルメディアプロフェッショナルのＰＩＣＡとして知られるエミュレーターに本発明の装置を実装させて，各種3次元コンピュータグラフィックス画像を得た。図８Ａ，図８Ｂ，図９Ａ，図９Ｂ，図１０Ａ，図１０Ｂ，図１１Ａ及び図１１Ｂは，本発明の装置を用いて得られた画像結果を示す。図８Ａと図８Ｂとは，シルエットの方向を比較し，視覚化の可否を検討するものであり，図８Ａは視覚化できず，図８Ｂは視覚化できたものである。例えば，マンガのキャラクタをアニメーションするといった形状のアウトラインを強調する必要があるような用途には，図８Ｂに示されるようなシルエットによる視覚化を用いることができる。【００９９】
図９Ａと図９Ｂとは，本発明における再分割を行う前後の簡単なディスクのような形状のものをレンダリングした図を示す。図９Ａは，もとの荒いメッシュを用いたものを示し，図９Ｂは，再分割過程においてポリ銀を追加して再分割したメッシュを用いたものを示す。図１０Ａと図１０Ｂとは，図９Ａ及び図９Ｂに比べてより複雑な形状のものに再分割を行ったものを示す図である。図１１Ａ，図１１Ｂは，それぞれワイヤーフレームを除いた図１０Ａと図１０Ｂのシェーディングに関する。本発明は，頂点キャッシュによりアクセレートされ，再分割アルゴリズムをオンチップで実装できる。よって，本発明は，ビデオゲームで重要な特徴である単純なメッシュに基づいて再分割を行うことにより得られる複雑な形状について実時間での発生や視覚化を行うことができることとなる。
【産業上の利用可能性】
【０１００】
本発明の拡張されたプリミティブを演算処理する装置は，リアルタイム３次元コンピュータグラフィックスの分野などで利用されうる。
【図１】
2008053597.tif 000004
【図２】
2008053597.tif 000005
【図３】
2008053597.tif 000006
【図４】
2008053597.tif 000007
【図５】
2008053597.tif 000008
【図６】
2008053597.tif 000009
【図７】
2008053597.tif 000010
【図８】
2008053597.tif 000011
【図９】
2008053597.tif 000012
【図１０】
2008053597.tif 000013
【図１１】
2008053597.tif 000014
【国際調査報告】
2008053597.tif 000015
2008053597.tif 000016