(57)【特許請求の範囲】
【請求項１】
コンピュータ・システムであって：
複数の表示用オブジェクトのデータを生成するプロセッサを備え；
前記プロセッサに結合され、相対的表示深さにそれぞれ対応する複数の層に対応できるように構成されたＺバッファを備え、１ピクセルについての前記データを前記Ｚバッファの複数のメモリ・ロケーションに格納でき；
前記Ｚバッファ中のメモリ・ロケーションを示すアドレスをそれぞれ含むポインタが１ピクセルにつき複数あり、前記Ｚバッファに結合されていて、少なくとも１ピクセル分の前記複数と同数のポインタを格納できる第１メモリを備え、
前記第１メモリに結合され、当該１ピクセルについて、Ｚ値をそれぞれ有する複数のオブジェクトに含まれる１つのオブジェクトを、前記複数の層の何れの層へ挿入すべきかを決定できる回路を備え、前記挿入により、当該１つのオブジェクトが、それよりも大きなＺ値を持つ他のオブジェクトの手前に示されるように、ポインタのアドレスの選択的更新がなされ；
当該１ピクセルについて見える可能性のあるデータが含まれている前記層の数を格納する第２メモリを備え、見える可能性のあるデータは、最も手前の不透明オブジェクトおよび不透明オブジェクトより手前の非不透明に関するデータである
ことを特徴とする、コンピュータ・システム。
【請求項２】
コンピュータ・システムにおいて、Ｚバッファ中のデータを維持する方法であって：
複数の表示用オブジェクトのデータを生成するステップを備え；
相対的表示深さにそれぞれ対応する複数層に構成されたＺバッファに、１ピクセルについての前記データを格納するステップを備え、オブジェクトはより小さなＺ値を持つ方が、より大きなＺ値を持つオブジェクトよりも手前にあり；
当該１ピクセルについて、前記Ｚバッファの層に対応していて当該層に対応するデータを格納するアドレスをそれぞれ特定する複数のポインタを、第１レジスタに格納するステップを備え；
着信オブジェクトのデータを挿入する挿入層を、前記着信オブジェクトのＺ値に依存して決定するステップを備え、前記第１レジスタ中のポインタのアドレスは、前記着信オブジェクトのデータの挿入を反映する選択的更新がなされ；
当該１ピクセルについて見える可能性のあるデータが含まれている前記層の数を、前記Ｚバッファに既に格納されているオブジェクトのＺ値および不透明度に対する、前記着信オブジェクトのＺ値および不透明度に従って決定し、第２レジスタに格納するステップを備える、
Ｚバッファ中のデータを維持する方法。
【請求項３】
Ｚ値およびカラー値をそれぞれ含む複数のオブジェクト・データをピクセルごとに格納し、ソート操作の後でデータの合成をするコンピュータ・システムにおいて：
表示するオブジェクト・データを生成するプロセッサを備え；
Ｚ値がそれぞれ含まれる所定数のデータをピクセル毎に格納し得るＺバッファを備え、前記Ｚバッファは、前記所定数と同数のメモリ・ロケーションをピクセル毎に有していて前記所定数と同数の層に構成され、前記層に対応する前記メモリ・ロケーションは、ポインタ値によってピクセル毎に示され；
前記所定数と同数のポインタ値を、ピクセル毎に、前記所定数と同数の前記層と前記メモリ・ロケーションとの対応が示されるよう格納する第１レジスタを備え、前記第１レジスタ中のポインタ値の順序を変えることによって、Ｚ値が含まれるデータについてある層から他の層への移動をピクセル毎にシミュレートすることができ；
見える可能性のあるデータが含まれている前記層の数をピクセル毎に格納する第２レジスタを備え、見える可能性のあるデータは、最も手前の不透明オブジェクトおよび不透明オブジェクトより手前の非不透明オブジェクトに関するデータであり；
前記プロセッサから着信するＺ値が含まれるデータが、ピクセル毎に、前記第１レジスタによって示される前記Ｚバッファの最後の層に格納され、そして、Ｚ値および不透明度に関するソート操作が、ピクセル毎に、前記第２レジスタによって示される数の前記見える可能性のあるデータが含まれている前記層について前記Ｚバッファ中のデータに応じて行われ、データの合成が、前記第２レジスタによって示される数の前記見える可能性のあるデータが含まれている前記層について、行われる
ことを特徴とするコンピュータ・システム。
【発明の詳細な説明】
発明の分野
本発明はコンピュータ・グラフィックス・ディスプレイ・システムに関する。詳細にいえば、本発明はコンピュータ・グラフィックス・ディスプレイ・システムにおける高性能複数層Ｚバッファの装置および方法に関する。
発明の背景
コンピュータ・システムが適用されるのが増加している分野の１つに、グラフィック・アートの分野がある。コンピュータの速度、処理能力、およびメモリにおける技術進歩がコストが低いことと相俟って、コンピュータをグラフィックス表示システムで使用するのに理想的なものとしている。コンピュータで生成された表示によって、ユーザは２次元および３次元の物体を視覚化することが可能となった。ユーザはグラフィック・ディスプレイの情報内容を、同一の情報が他の形式で提示された場合に比べてより効果的にグループ化することができる。画像は1000語の言葉の価値がある。
さらに、コンピュータ・グラフィックスはコンピュータとユーザの間の自然でなめらかな対話ももたらす。ディスプレイに対する変更はコンピュータ入力され、コンピュータはディスプレイを適宜修正することによって、希望する変更を実施する。このプロセスは各種のイベントのモデル化、予測、および実験を行うのに便利な手段を提供する。また、高解像度ディスプレイ・スクリーンが開発されたことによって、ますます多くの複雑な形状のオブジェクトを、ますます精密に、かつ明瞭にレンダリングできるようになった。コンピュータ・グラフィックスの用途の例としては、パイロット訓練生のためのフライト・シミュレーション、エンジニアや建築家を援助するコンピュータ支援設計、医師用の診断医療スキャナ、映画やビデオ・ゲームにおけるアニメーションなどがある。
基本的に、コンピュータ・グラフィックス・システムは３つの主要構成要素に分けることができる。フレーム・バッファ、モニタ、およびディスプレイ制御装置である。フレーム・バッファは一連の２進値として表示される画像を格納するためのディジタル・メモリである。モニタはピクセルと呼ばれる画素のアレイを有するスクリーンで構成されている。各ピクセルはスクリーン上のドットを表し、特定の色または輝度にプログラムすることができる。このようにプログラムされた数千個の個々のピクセルを使用して、表示される画像を表す。フレーム・バッファに格納されるのはこれらの個々のピクセル値である。ディスプレイ制御装置はフレーム・バッファの内容をモニタに渡すために使用されるインターフェースである。ディスプレイ制御装置はディスプレイ・バッファからデータを読み取り、これをビデオ信号に変換する。ビデオ信号はモニタに供給され、モニタが画像を表示する。
画像は繰り返してディスプレイにレンダリングされ、新しい各フレームは表示される画像の新しい位置または形状を表す。スクリーン上に安定したピクセルを維持するには、画像を反復してモニタに送らなければならない。人間の目の保持能力によって、モニタを１秒間に最低限30回リフレッシュする必要がある。これを行わない場合、ディスプレイはきわめて不快で、混乱を引き起こす態様でちらつくこととなる。今日のコンピュータ・グラフィックス・システムでは、リフレッシュ周波数は通常約72ヘルツ（すなわち、１秒間に72回）である。リフレッシュ・レートが速ければ速いほど、ちらつきは少なくなる。それ故、画像表示の継続期間は比較的小さく、約１秒の1/72すなわち14ミリ秒である。これらの制約を与えた場合、応答時間が遅くなり、表示された画像の動きがぎこちなくなるのを避けるため、グラフィックスの描画プロセスの速度を上げることが不可欠である。さらに、画像の描画を速くできればできるほど、ディスプレイに与えることのできる情報は多くなる。これによってよりなめらかで、より動的で、しかもより明瞭な画像がもたらされる。
通常、フレーム・バッファに画像をレンダリングする３次元グラフィックス・レンダリング装置は、ピクセルごとにフレーム・バッファ自体には必要のない付加的な情報（たとえば、アルファ、Ｚなど）も格納している。アルファ値はブレンディング機能を表す。Ｚ値はユーザからのピクセルの距離を表す。通常、小さいＺ値はオブジェクトが観察者に近いことを示し、大きいＺ値はオブジェクトが離されていることを示す。ピクセルごとの付加的なＺの格納を通常、Ｚバッファと呼ぶ。
通常DRAMの形態でＺバッファを実現することにより、Ｚ値を格納することができる。Ｚバッファはあるオブジェクトが他のオブジェクトの前に表示されるのか、後ろに表示されるのかを示す際に使用される距離情報を含んでいる。最も一般的なＺバッファでは、Ｚソート操作を着信データのＺ値を既存のデータのＺ値と比較することによって行っている。着信データがより近いものであれば（すなわち、Ｚ値がより小さい）、着信カラー・データがフレーム・バッファ内の既存のデータと置き換えられ、古いＺ値は新しいＺ値で置き換えられる。他の場合には、着信データは廃棄される。他の着信データがなくなった場合、Ｚ値は完全なものとなり、各フレーム・バッファ内容/Zバッファの位置はその特定なピクセルに対する最終的なカラー／輝度を表す。
Ｚソート操作はデータによって表されるすべてのオブジェクトが不透明である場合、比較的単純なものである。しかしながら、バッファ内のオブジェクトが不透明でない場合には、廃棄されるデータに関する情報を保持し、ピクセルの最終的なカラー輝度を判定する必要がある。データの損失を避けるために、多くのＺバッファ・システムでは、すべての不透明データのレンダリングの後で、すべての非不透明データをレンダリングすること、および非不透明データをＺソート順（たとえば、最も近いものから最も遠いものへ）でレンダリングすることが必要であった。バッファ内の不透明オブジェクトの背後にある非不透明オブジェクトは廃棄される。残っている非不透明オブジェクトはフレーム・バッファ内のデータと複合され、結果がフレーム・バッファに格納されるので、必要な情報が失われることはない。複合操作を特定のＺの順序で行わなければならないため、非不透明オブジェクトをＺ深さごと（すなわち、近いものから遠いもの、あるいは遠いものから近いもの）に配列してから、バッファ内のデータのＺ値と比較しなければならない。
残念なことに、非不透明オブジェクトをレンダリングするこの方法は幾つもの欠点を有している。Ｚ値ごとに非不透明オブジェクトをソートするのは、多大な演算能力を必要とする。また、この方法は非不透明オブジェクトを正しく解釈してレンダリングするものではない。これらのオブジェクトを明示的に調べ、特別な処理を行わなければならず、これは演算能力をさらに増加させる。したがって、Ｚソート処理を行うと、画像を実際に描画するのに残された時間が少なくなり、これは表示プロセス全体に悪影響を及ぼす。
非不透明オブジェクトのレンダリングの問題を解決するための、これらの欠点を回避した他のシステムが提案されている。これらのシステムは通常ピクセルごとに２つ以上のＺ値およびカラー値を格納し、若干数の最も近い非不透明オブジェクトをセーブし、後で複合することを可能としている。しかしながら、これらのシステムでは、ピクセル当たり複数のＺ値を維持し、ソートするのに必要なＺバッファRAMアクセスの数を大幅に増加させることが必要である。このことはＺバッファ・メモリの帯域幅の要件を高くし、性能を低下させたり、コストを増加させたりする。しかしながら、この方法の利点はピクセルごとのＺソートが完了するまで複合を遅らせることで、これは後でより近いオブジェクトによって覆われるオブジェクトの不必要な複合を回避することによって性能を改善する。
したがって、従来技術のコンピュータ・グラフィックス・システムでは、Ｚ操作を行うのに必要な時間を最小限とする事のできる装置または方法が必要であった。このような装置または方法がＺソートの完了後まで、非不透明オブジェクトの複合に必要なデータを失うことなく、複合を遅らせることができれば好ましい。このような機構がDRAMのアクセス回数を最小限とすることができればきわめて好ましい。
発明の概要および目的
本発明はコンピュータ・グラフィックス・システムに適用される。ピクセルの各々のＺ値を含んでいる複数層Ｚバッファは、各ピクセルに対して用いられる２つのレジスタの値にしたがって制御される。一方のレジスタはActiveLayersレジスタと呼ばれ、見える可能性のあるオブジェクト・データが何枚の層を占めているかを示す値を含む。他方のレジスタはLayerPointerレジスタと呼ばれ、各層に対するデータを格納するメモリ・ロケーションを示すポインタ値を含む。
１つのフレームが完全にレンダリングされた後、ActiveLayersレジスタは０に初期化される。第１の着信オブジェクトはActiveLayersレジスタを増加させる。次の着信オブジェクトが不透明なオブジェクトの背後におかれるものである場合には、これが不透明であるか否かにかかわりなく、廃棄される。次の着信オブジェクトが不透明なものである（かつ、隠されない）場合には、ActiveLayersレジスタはその着信不透明オブジェクトの背後に隠される既存の各オブジェクトに対して１回減分される。次いで、着信不透明オブジェクトを反映するようにActiveLayersレジスタが増分され留。それ以外の場合、次の着信オブジェクトが非不透明であれば（かつ、隠されない）、ActiveLayersレジスタは増分される。
LayerPointerレジスタは実装される層の数に等しい数のポインタを含んでいる。各ポインタは一意のアドレスを指定する。着信オブジェクトが既存の不透明オブジェクトの背後に隠される場合には、着信オブジェクトは廃棄され、LayerPointerレジスタは変化せず、そのままである。それ以外の場合には、着信オブジェクトを挿入しなければならない層が決定される。この決定はバッファ内にすでに存在しているＺ値に関する着信オブジェクトのＺ値に基づいて行われる。着信オブジェクトの不透明度がActiveLayersレジスタに影響を及ぼす。着信オブジェクトのデータはポインタが指定したアドレスに書き込まれる。よって、ポインタが適宜調整される。
現在好ましい実施形態において、着信データは最後の層に対応するポインタが指定したアドレスに書き込まれる。着信データに対するInsertLasyerが決定される。最後の層からのポインタがInsertLayerに挿入される。InsertLayerのものの後に層のすべてのポインタは右へ１つシフトする。InsertLayerの左側に対するポインタは変化せず、そのままである。ActiveLayersレジスタおよびLayerPointerレジスタの値を操作すると、Ｚバッファリング・プロセスが最適化される。
【図面の簡単な説明】
本発明を添付図面の各図に一例として、限定を行うことなく、説明する。図中、同様な参照符号は同様な要素を示す。
第１図は、本発明の好ましい実施形態が実現されるコンピュータ・システムの図である。
第２図は、走査線Ｚバッファリングを利用したグラフィックス・システムのブロック図である。
第３図は、着信不透明オブジェクトと着信非不透明オブジェクトの処理方法のさまざまな組合せを示す図である。
第４図は、本発明のActiveLayersレジスタおよびLayerPointerレジスタが６つの連続した着信データに対して作動する態様の例を示す図である。
第５図は、LayerPointerレジスタを維持するための機構の１つを示す回路図である。
第６図は、Ｚソート中に行われる操作を示す流れ図である。
詳細な説明
コンピュータ・グラフィックス・システムにおける高性能複数層Ｚバッファを説明する。以下の記載において、説明のために、レジスタ、ビット長、層数などの各種の特定の詳細を、本発明を完全に理解するために記載する。当分野の技術者には、しかしながら、本発明をこれらの特定の細部なしに実施できることが明らかであろう。他の場合には、本発明を不必要に曖昧なものとしないために、周知の構造および装置をブロック図の形で示した。
第１図を参照すると、本発明の好ましい実施形態を実施できるコンピュータ・システムが100で示されている。コンピュータ・システム100はディジタル・データの内部伝送のためのバス101を含んでいる。ディジタル・データを処理するための中央演算処理装置102には、情報を処理するためにバス101が結合されている。さらに、多数のコプロセッサ103をバス101に結合して、付加的な処理能力および速度を得ることができる。
コンピュータ・システム100はさらにランダム・アクセス・メモリ（RAM）104（メイン・メモリと呼ぶ）を含んでおり、これもバス101に結合されている。メイン・メモリ104は情報およびプロセッサ102によって実行される命令を格納する際に使用される。メイン・メモリ104はCPU102による実行中に一時変数やその他の中間情報を格納するためにも使用される。コンピュータ・システム100は読取り専用メモリ（ROM）あるいはその他のタイプのスタティック記憶装置106も含んでいる。ROM106はバス101に結合されており、プロセッサ102に対する静的情報および命令を格納するために使用される。データ記憶装置107（たとえば、ハード・ディスク装置、フロッピー・ディスク装置など）をバス101に結合して、情報および命令を格納することもできる。
バス101には、ハードウェア・グラフィックス・アクセラレータ108、フレーム/Zバッファ109、およびディスプレイ制御装置110も結合されている。ハードウェア・グラフィックス・アクセラレータ108はインタラクティブ3Dグラフィックス・ソフトウェアの拡張機能を加速するように設計されている。該アクセラレータはASIC、スタティックRAMキャッシュ、およびテクスチャ・マッピングRAMを含んでいる。アクセラレータ108は高帯域幅ピクセル・ストリームをフレーム/Zバッファ109に出力する。同時に、ホストCPU102は、アクセラレータ108に入力され、これによってレンダリングされるプリミティブを含んでいる信号を生成する。ディスプレイ制御装置110はコンピュータ・システム100をディスプレイ装置121にインターフェースする。
ディスプレイ装置121の１例としてはコンピュータ・ユーザに対して情報を表示するために使用される陰極線管（CRT）がある。キーボードなどの英数字入力装置122をバス101ならびにカーソル制御装置123に結合することもできる。カーソル制御装置123は表示装置121上でのカーソルの運動を制御するために使用される。この入力装置は通常、２つの軸、すなわち第１軸（たとえば、ｘ）および第２軸（たとえば、ｙ）に２度の自由度を有しており、これによって、装置は平面上の任意の位置を指定することができる。本発明においては、Ｚ軸に第３の自由度を有する３次元カーソルが利用されている。カーソル制御装置123の例としては、マウス、ジョイスティック、トラックボール、タッチ・パッドなどがある。
本発明は従来のスクリーンＺバッファリングならびに走査線Ｚバッファリング技法にも同等に適用できる。スクリーンＺバッファリングの場合、ピクセルのレンダリングに必要な状態情報は、スクリーン上のすべてのピクセルに関して格納される。レンダリングされる各オブジェクトは別々に変形され、ラスタ化される。従来のスクリーンＺバッファリング技法はきわめて高い帯域幅ならびに大量の高速メモリを伴うことがよくあり、また複雑なキャッシングおよびプリフェッチ機構と結合されることがよくある。これに対して、走査線Ｚバッファリングはスクリーン空間でオブジェクト・データベースを事前ソートし、各走査線を個別にレンダリングする。ピクセル状態情報の走査線１本が保持される。
第２図は走査線Ｚバッファリングを利用したグラフィックス・システムを示すブロック図である。ホストCPU201は変形、シェーディング、および活動リスト保守のために使用される。走査線ラスタライザ202はＺバッファ203によるシェーディングおよび陰面除去、シャドウ・ボリューム、ならびにアルファ・ブレンディング204を行う。ラスタライザ202は活動ポリゴン・リストから走査線とともに転送されてきたポリゴンに交差し、一連の水平スパンを生成する。得られたスパンはラスタ化される。さらに、陰面除去、シャドウ平面テスト、およびアルファ・ブレンディングが行われる。レンダリングが開始されるのは、CPU201が3Dデータベースを走査し、変形ポリゴン、投影ポリゴン、部分ポリゴン、およびシェード付きポリゴンを生成したときである。ポリゴンはこれらが最初に活動状態となった第１走査線の番号ごとにバケット・ソートされる。主データベースの走査が完了すると、ホストはバケット・ソートされたリストをスクリーンのＹ順に走査し、RGBフレーム・バッファ205へのレンダリングのためにラスタライザ202に転送された活動ポリゴン・リストを維持する。
Ｚ値は23ビットの部分正規化仮数部と８ビットの指数部を備えた浮動小数点数として表される。また、オブジェクトがフロントフェーシング（frontfacing）の場合にアサートされる１ビットのタグもある。比較の際に、２つのＺ値が等しい場合には、着信オブジェクトがフロントフェーシングかどうかを判断する必要がある。その目的のために設計されたフラグがオブジェクトにある。着信オブジェクトがフロントフェーシングの場合、これはバッファ内にあるオブジェクトの前にあるとみなされる。本発明において、Ｚバッファは不透明ならびに非不透明なオブジェクトを処理するために複数の層と複数のピクセルで構成されている。任意の数の層およびピクセルを本発明で実施できるが、現在好ましい実施形態では、８枚の層と８個のピクセルを利用している。
特定のピクセルに対する着信データのＺ値は、これをバッファ内のどこにおくか、あるいはおくべきかどうかが判定されるまで、このバッファ内の各層と比較される。ソート処理を最適化するために、各ピクセルに関連づけられたActiveLayersレジスタとLayerPointerレジスタという２つのレジスタがある。ActiveLayersレジスタは見える可能性のあるオブジェクト・データが何枚の層を占めているかを示す。非不透明オブジェクトがサポートされているため、合成操作が完了するまで、オブジェクトが見えるのかどうかはわからない。LayerPointerレジスタは各層のデータをどのメモリ・ロケーションに格納するのかを示す。
これら２つのレジスタの作動をここで詳細に説明する。ActiveLayersレジスタはまずゼロに初期化される。最初のオブジェクトを受け取ったら、これをActiveLayersレジスタの指示にしたがってＺバッファの層に書き込む。ActiveLayersレジスタがゼロに初期化されているので、最初のオブジェクトは層０に書き込まれ、ActiveLayersレジスタは１増分される。次の着信オブジェクトを受け取ったら、これを層０のオブジェクトのＺ値と比較する。着信オブジェクトの不透明度はActiveLayersレジスタだけに影響を及ぼし、LayerPointerレジスタにも、Ｚバッファにも影響を及ぼさない。着信オブジェクトを書き込むかどうかは、バッファおよびオーバフロー内のオブジェクトの不透明度によって決定される。その書込み位置は相対Ｚ値によって決定される。
第３図は着信不透明オブジェクトと非不透明オブジェクトをどのように処理するかのさまざまな組合せを示す。オブジェクトがさまざまな層にどのように割り当てられるかをActiveLayersレジスタに行われる変更とともに示す、考えられる組合せの各々の例が挙げられている。例１において、ActiveLayersレジスタは、レンダリング完了後にゼロという値に初期化される。着信オブジェクト301を受け取るたびに、これをActiveLayersレジスタによって指定される層に書き込む。例１において、最初のオブジェクトは不透明であり、層０に書き込まれる。次いで、ActiveLayersレジスタは１増分される（すなわち、０から１へ増分される）。例２において、第２の着信オブジェクト302を受け取る。オブジェクト302は不透明であり、オブジェクト301よりも小さいＺ値を有している（すなわち、オブジェクト302はオブジェクト301よりも視点に近い）。オブジェクト302に対応する着信データが層０に書き込まれる。ActiveLayersレジスタの内容は変更されず、そのままである（すなわち、１にセットされたままである）。オブジェクト301に対応するデータが効果的に上書きされたことに留意されたい。LayerPointerだけが変化し、データは依然ＺバッファRAMに存在している。それ故、着信オブジェクトが既存の不透明オブジェクトの背後におかれる場合には、着信オブジェクトは不透明なオブジェクトの背後に「隠され」、したがって、廃棄できる。
例３は第２の着信オブジェクト302が層０に存在しているオブジェクト301よりも大きいＺ値を有している場合に生じるイベントを説明している。オブジェクト302が不透明オブジェクト301の背後に「隠される」ため、その着信データは安全に廃棄できる。他はすべて同じである。例４において、着信オブジェクト303は非不透明であり、小さいＺ値を有している。それ故、オブジェクト301に対応するデータは移動させられて、層１に対応するようになり、着信データは層０に書き込まれる。ActiveLayersレジスタは２へ増分される。例５において、着信非不透明オブジェクトは大きいＺ値を有している。したがって、その着信データは廃棄される。
例６〜９を参照すると、既存のオブジェクト304は非不透明である。例６において、着信オブジェクト305は不透明で、小さいＺ値を有している。それ故、着信データは層０に書き込まれ、オブジェクト304に関連するデータは廃棄される。着信不透明オブジェクト305が大きいＺ値を有している場合には、そのデータは層１に対応する。ActiveLayersレジスタは２へ増分される。オブジェクト304に対応するデータは例７に示す層１に格納されたままである。
例８は着信オブジェクトが非不透明であり、Ｚ値が小さい場合に生じるイベントを示す。このような状況のもとで、既存のオブジェクト304に対応するデータは層１に移動させられ、着信データは層０に書き込まれ、ActiveLayersレジスタは１つ増分され２となる。例９において、着信非不透明オブジェクト306は大きいＺ値を有している。したがって、着信データは変更されて、層１に対応するようになり、ActiveLayersレジスタは２へ増分される。次の表１は着信データに関連した考えられる８つの異なるシナリオをリストしたものである。
0003557208.tif 000002
ActiveLayersレジスタを実現することによって、可視となりうるオブジェクトを含んでいる層だけが、ソート操作中に比較される。ActiveLayersレジスタまたはその同等物を使用しないと、着信データを８枚の層すべてについて調べることが必要となることに留意されたい。オブジェクト・データの読取りおよび書込みはＺバッファDRAMにアクセスする必要があるため、速度の点で負担がかかるものである。典型的な従来技術のＺバッファが１枚、多くても２枚の層しか持っておらず、ソート操作を完了するのには、１回または２回の読取りだけしか要しないことに留意されたい。複数の層はＺソートを複雑にするが、複合操作を遅らせ、非不透明データを整理する必要を排除するために必要である。
ActiveLayersレジスタは遮られたオブジェクトのＺバッファからの除去も単純化する。何らかのオブジェクトが不透明なオブジェクトの背後におかれた場合には、これをバッファから除去しなければならず、これはRAMへの書込みが必要となる。RAMへ書き込む代わりに、ActiveLayersレジスタの値を調節して、新しい条件を反映するようにする。
さらに、ActiveLayersレジスタは８枚の層の各々を最大Ｚ値（すなわち、無限大）に初期化する必要を排除することによって時間を節減する。その代わりに、各フレームが完全にレンダリングされた後に、ActiveLayersレジスタをゼロにリセットする。典型的な従来技術のＺバッファにおいては、すべてのＺ値を書き込んで、最大値および透明オブジェクト・データにしなければならなかった。
ＺバッファDRAMのアクセスを最小とするために、ActiveLayersレジスタに加えて、第２のレジスタ、すなわちLayerPointerレジスタが設けられる。LayerPointerレジスタは利用される層の数と等しい数のポインタを含んでいる。現在好ましい実施形態において、８つの３ビット・ポインタが利用される。ポインタは８枚の層の各々に対応するオブジェクトのデータの一意のアドレスを含んでいる。第１のポインタは層０に対応している。第２のポインタは層１に対応している。以降の各ポインタは層７までの以降の各層に対応している。
LayerPointerレジスタのこれらのポインタを利用することによって、ある層から他の層へのオブジェクトの移動は本質的に、Ｚバッファに対する実際の読取りおよび書込みを行うことなく、シミュレートすることができる。本発明は既存のオブジェクトのデータの読取り、他の層へのその書込み、および着信データの第１層への書込みを必要としない。その代わりに、本発明はポインタ値を操作することによって同じ結果を達成する。現在好ましい実施形態において、最下位のポインタ（すなわち、層７に対応するもの）を使用して、Ｚバッファに書き込まれる着信オブジェクトのアドレスを指定する。換言すると、着信データが層７に対応するポインタが指定したアドレスに書き込まれる。
第４図は本発明のActiveLayersレジスタおよびLayerPointerレジスタが６つの連続した着信データに対して作動する例を示す。フレームのレンダリングが完了すると、ActiveLayersレジスタは０に初期化され、LayerPointerレジスタは各ポインタが一意のアドレスを指定するようにセットされる。ポインタを何らかの順序で指定する必要はないが、各ポインタが一意のアドレスを指定しなければならないことに留意されたい。本例において、８つの３ビットポインタが次のアドレスに初期化される。それぞれ層０〜７に対応する７、６、５、４、３、２、１および０である。
最初の着信オブジェクト401は不透明であり、15というＺ値を有している。層７に対応するポインタは０というアドレスを指定する。これは最初のオブジェクトであるから、データを層０に挿入しなければならない。ActiveLayersレジスタは増分される。１桁右へのバルブ・シフトがLayerPointerレジスタの層０〜７に行われる。それ故、ActiveLayersレジスタが１になり、LayerPointerレジスタの内容は０、７、６、５、４、３、２および１になる。アドレス０に格納されている着信データは層０に適切におかれることを留意されたい。
第２の着信オブジェクト402は不透明であり、10というＺ値を持っている。そのデータは層７のポインタが指定したアドレスに書き込まれる。この場合、データはアドレス１に書き込まれる。オブジェクト402のＺ値はオブジェクト401のものと比較される。オブジェクト402が不透明であり、オブジェクト401よりも小さいＺ値を有しているので、オブジェクト401はオブジェクト402の背後に隠される。したがって、着信データを層０に挿入しなければならない。ActiveLayersレジスタは変化せず、そのままである。右へのバレル・シフトがLayerPointerレジスタの層０〜７で行われるので、１、０、７、６、５、４、３および２となる。層０のポインタがオブジェクト402のデータを含んでいるアドレスを適正に指定していることに留意されたい。また、オブジェクト401のデータが依然アドレス０に残っているが、ActiveLayersレジスタが１枚の層だけを指定するのであるから、このデータは無意味にレンダリングされることにも留意されたい。
第３の着信オブジェクト403は非不透明であり、８というＺ値を持っている。オブジェクト403のデータは層７のポインタによる指定にしたがってアドレス２に書き込まれる。８というＺ値がオブジェクト402に対する10というＺ値よりも小さいのであるから、オブジェクト403はオブジェクト402の前にある。したがって、着信データを層０に挿入しなければならない。オブジェクト403が非不透明なのであるから、オブジェクト402に対応したデータを依然維持しなければならない。それ故、ActiveLayersレジスタは増分される。右へのバレル・シフト操作がPointerLayerレジスタの層０〜７に対して行われる。LayerPointerレジスタはここで２、１、０、７、６、５、４および３を読み取る。結果として、ActiveLayersレジスタは２枚の層（すなわち、層０および１）を指定する。層０のポインタはオブジェクト403のデータを含んでいるアドレス２を適正に指定し、また層１のポインタはオブジェクト402のデータを含んでいる１というアドレスを指定する。
第４の着信オブジェクト404は非不透明であり、９というＺ値を持っている。層７のポインタは３というアドレスを指定する。着信データはそのアドレスに書き込まれる。オブジェクト403のＺ値＜オブジェクト404のＺ値＜オブジェクト402のＺ値であるから、オブジェクト404のデータを層１のオブジェクト403と402の間に挿入しなければならない。オブジェクト402のデータを変更して、層２に対応するようにするとともに、オブジェクト403のデータを層０のままにしておかなければならない。これはレベル１〜７だけに対して右へバレル・シフト操作を行うことによって達成される。LayerPointerレジスタの得られる内容は２、３、１、０、７、６、５、および４となる。ActiveLayersレジスタは増分される。それ故、最初の３枚の層のポインタはアドレス２、３および１を指定し、これらのアドレスはそれぞれオブジェクト403、404、および402のものに対応している。
第５の着信オブジェクト405は非不透明であり、11というＺ値を持っている。このオブジェクトが不透明なオブジェクト402の背後におかれるので、着信データは廃棄される。ActiveLayersレジスタにも、LayerPointerレジスタにも変更は行われない。
第６の着信オブジェクト406は不透明であり、５というＺ値を持っている。オブジェクト406は既存のオブジェクト402〜404のすべての前にあり、これらを隠す。着信データはアドレス４に書き込まれ、層０に挿入される。右へのバレル・シフトがLayerPointerレジスタの層０〜７に対して行われるので、該レジスタは４、２、３、１、０、７、６、および５を読み取る。さらに、ActiveLayersレジスタは１にリセットされる。指摘しておくべきなのは、ActiveLayersレジスタおよびLayerPointerレジスタを修正するのは、レジスタが占めるビット数がはるかに少ないので、DRAMにアクセスして、最大Ｚ値および透明アルファ値を書き込むのよりもはるかに迅速なことである。
１実施形態において、着信オブジェクトをチェックして、これがＺバッファの最後部のオブジェクトの背後におかれるのかどうか判定する。このオブジェクトが最後部のオブジェクトの背後におかれ、不透明である場合には、着信データは廃棄される。最後部のオブジェクトが不透明ではない場合、着信データはその背後におかれ、ActiveLayersレジスタおよびLayerPointerレジスタは適宜修正される。本実施形態において、着信データを廃棄すべきかどうかの判定には、１回の比較が必要なだけである。
第５図はLayerPointerレジスタ500を維持するための機構の１つを示す回路図である。着信オブジェクトのデータを挿入すべき層（すなわち、InsertLayer）が決定されると、回転および挿入信号が次の表２にしたがって生成される。挿入層は、着信オブジェクトのＺ値および不透明度、Ｚバッファに既に格納されているオブジェクトのＺ値および不透明度にしたがって決定される。
0003557208.tif 000003
上位マルチプレクサ501〜508は、特に着信オブジェクトがＺバッファ内の他の既存のオブジェクトの前におかれる状況で、ポインタを回転させるために使用される。回転操作は右へのバレル・シフトによって行われる。右へのバレル・シフトはライン521上の８ビットのディジタル回転信号にしたがって実行される。８ビットの各々は８つのマルチプレクサ501〜508の各々を制御する。換言すると、回転信号の制御ビット０はマルチプレクサ501を制御し、ビット１はマルチプレクサ502を制御するなどとなる。制御ビットはマルチプレクサへの２つの入力のうちどちらに出力すべきかを選択する。LayerPointerレジスタ500が８枚の層を有しており、層あたり３ビット、合計24ビットを有していることに留意されたい。各マルチプレクサはLayerPointerレジスタから供給される２つの３ビットの入力を有している。制御ビットが０の場合、特定のポインタに対応する３つのビットがライン523の出力に対して選択される。逆に、制御ビットが１の場合には、３つの連続した次の有効ビットがライン524の出力に対して選択される。たとえば、制御ビット０が０の場合、LayerPointerレジスタ500のビット０〜２がマルチプレクサ501による出力に対して選択される。制御ビット０が１であった場合、ビット３〜５がマルチプレクサ501による出力に対して選択される。
下位マルチプレクサ511〜518は層７に関連したポインタを、着信データの受信前に、着信オブジェクトを挿入すべき層に移動するために使用される。挿入操作はライン522上の８ビットのディジタル挿入信号にしたがって行われる。挿入信号の８つの制御ビットの各々は８つのマルチプレクサ511〜518の１つを制御する。制御ビットは出力のために、マルチプレクサへの２つの入力信号のうち１つを選択する。入力信号の一方は上位マルチプレクサの１つからの３ビットの出力である。他方の入力信号はLayerPointerレジスタ500の３つの最下位ビットである（すなわち、層７のポインタに対応しているビット０〜２）。たとえば、挿入信号の制御ビット０が０である場合、マルチプレクサ511はマルチプレクサ501からの３ビットの出力を選択して、ライン524に出力する。制御ビット０が１の場合、マルチプレクサ511はLayerPointerレジスタ500のビット０〜２を選択して、ライン524に出力する。
このLayerPointer回路の作動を第４図に示し、上述した着信オブジェクトを参照して説明する。ライン525のリセット信号はLayerPointerレジスタ500を７、６、５、４、３、２、１、および０＝111110101100011010001000に初期化する。オブジェクト401に対応するデータを受け取った場合、そのInsertLayerは０であると判断される。表２を参照すると、０というInsertLayerは０×7F＝01111111という回転信号に代わり、挿入信号は０×80＝10000000になる。回転信号にしたがって、マルチプレクサ501はビット３〜５を選択して出力し、マルチプレクサ502はビット６〜８を選択し、マルチプレクサ503はビット９〜11を選択し、マルチプレクサ504はビット12〜14を選択し、マルチプレクサ505はビット15〜17を選択し、マルチプレクサ506はビット18〜20を選択し、マルチプレクサ507はビット21〜23を選択し、マルチプレクサ508はビット21〜23を選択する。また、挿入信号にしたがって、マルチプレクサ511〜517はそれぞれマルチプレクサ501〜507の出力を選択し、マルチプレクサ518はビット０〜２を選択して、出力する。結果として、層０〜６に対するポインタは右へシフトされる。層７に対応するポインタは層０に挿入される。LayerPointerレジスタの得られる内容は、000111110101100011010001＝０、７、６、５、４、３、２、１となる。
第６図はＺソート中に行われる操作を示す流れ図であり、ActiveLayersレジスタおよびLayerPointerレジスタの内容が計算される。第１の操作、ステップ601において、LayerCounterが０に初期化され、RAM読取りアドレス（RAdd）がLayerPointer［０］に初期化され、RAM書込みアドレス（WAdd）がLayerPointer［７］に初期化される。次いで、ActiveLayersレジスタが０であるかどうかの判断が行われる（ステップ602）。０である場合には、ActiveLayersレジスタが１に増分され、InsertLayerが０にセットされ、ZInが書込みアドレスのRAMに書き込まれる。ActiveLayersレジスタが０でない場合には、オブジェクトの各々に対するＺ値が比較される（ステップ604）。着信オブジェクトのＺ値が現在層０と関連づけられているＺ値よりも近いものである場合には、ステップ605が行われる。そうでない場合には、ステップ617が実行される。ステップ617において、着信オブジェクトのＺ値が現在層０と関連づけられているＺ値と等しいかどうか、Frontビットがセットされているかどうかの判断が行われる。そうである場合には、ステップ605が実行される。そうでない場合には、ステップ609が実行される。
ステップ605において、着信オブジェクトが不透明であるかどうかの判断が行われる。着信オブジェクトが不透明な場合には、ActiveLayersレジスタがLayerCounter＋１にセットされる（ステップ606）。InsertLayerはLayerCounterにセットされ、ZInが書込みアドレスのRAMに書き込まれる（ステップ607）。着信オブジェクトが不透明ではないと判断された場合には、ActiveLayersレジスタが増分される（ステップ608）。ステップ607において、InsertLayerがLayerCouterにセットされ、ZInが書き込まれる。
ステップ609において、LayerCounterが増分される。LayerCounterがActiveLayersと等しいかどうかが判断される（ステップ610）。両者が等しい場合、これはRAM内に比較のためのＺ値がもうないことを意味する。この場合には、最後の層のオブジェクトが不透明であるかどうかの判断が行われる（ステップ611）。最後の層のオブジェクトが不透明でない場合には、ステップ608が実行される。それ以外の場合には、ZInは可視ではなく、廃棄される（ステップ612）。
LayerCounterがActiveLayersレジスタの値と等しくない場合には、Ｚバッファをチェックして、該バッファがいっぱいかどうかを判断することが必要となる（ステップ613）。ActiveLayersレジスタの値が最大層（たとえば、８）に等しい場合、これはＺバッファがいっぱいであることを意味する。次いで、層８のオブジェクトが不透明であるかどうかの判断が行われる（ステップ614）。不透明である場合には、ZInは廃棄される（ステップ612）。それ以外の場合には、オーバフロー状態と判断される（ステップ615）。しかしながら、ActiveLayersレジスタの値が最大層と等しくない場合には、ZInはRAM内の他のＺ値と比較される。次の層に対する読取りアドレスは、LayerPointerレジスタを読み取ることによって判断される。ZInが新しい読取りアドレスを使用して、RAMから読み取られたＺ値と比較される（ステップ616）。次いで、ステップ604が繰り返される。
これで、高性能複数層Ｚバッファを有するコンピュータ・グラフィックス・システムが開示された。
【図１】
0003557208.tif 000004
【図２】
0003557208.tif 000005
【図３】
0003557208.tif 000006
【図４】
0003557208.tif 000007
【図５】
0003557208.tif 000008
【図６】
0003557208.tif 000009