(57)【特許請求の範囲】
【請求項１】
複数のポリゴンを表示する為の画像データを生成する画像処理装置において、
前記ポリゴンの表示画面内の位置データを含むポリゴンデータから、表示画面内の前記ポリゴンの有効ピクセル領域を示す第１のマスクデータと該有効ピクセル毎の表示画面内の奥行きを示すＺ値とを生成し、該第１のマスクデータの有効ピクセル領域のうち既に処理済の他のポリゴンのＺ値よりも手前側のＺ値のピクセルの領域を有効ピクセル領域とする第２のマスクデータを生成し、生成された第２のマスクデータの有効領域を生成済の他のポリゴンの第２のマスクデータの有効領域から削除する排他処理を行って新たな第２のマスクデータを生成し、上記新たな第２のマスクデータの生成をポリゴン毎に行うマスク生成部と、
前記マスク生成部から供給される新たな第２のマスクデータに従って、該新たな第２のマスクデータが示す有効領域について、前記各ポリゴンのレンダリング処理を行うレンダリング処理部とを有する画像処理装置。
【請求項２】
複数の半透明ポリゴンを表示する為の画像データを生成する画像処理装置において、
前記半透明ポリゴンの表示画面内の位置データを含むポリゴンデータから、表示画面内の前記半透明ポリゴンの有効ピクセル領域を示す第１のマスクデータと該有効ピクセル毎の表示画面内の奥行きを示す半透明Ｚ値とを生成し、該第１のマスクデータの有効ピクセル領域のうち既に処理済の他の半透明ポリゴンの半透明Ｚ値よりも奥側の半透明Ｚ値のピクセルの領域を有効ピクセル領域とする第２のマスクデータを生成し、生成された第２のマスクデータの有効領域を生成済の他の半透明ポリゴンの第２のマスクデータの有効領域から削除する排他処理を行って新たな第２のマスクデータを生成し、上記新たな第２のマスクデータの生成を半透明ポリゴン毎に行うマスク生成部と、
前記マスク生成部から供給される前記新たな第２のマスクデータに従って、該新たな第２のマスクデータが示す有効領域について、画像データを生成する前記各ポリゴンのレンダリング処理を行うレンダリング処理部とを有し、
前記マスク生成部は、更に、前記第１のマスクデータの有効領域から前記新たな第２のマスクデータの有効領域を削除する排他処理を行って新たな第１のマスクデータを生成し、前記新たな第１のマスクデータに基づいて次の前記新たな第２のマスクデータを生成し、前記レンダリング処理部は、前記次の新たな第２のマスクデータに従って前記レンダリング処理を行う画像処理装置。
【請求項３】
描画対象ポリゴン上の影領域を表示する為の画像データを生成する画像処理装置において、
シャドーボリュームを規定するシャドーポリゴンの表示画面内の位置データを含むシャドーポリゴンデータから、表示画面内の前記シャドーポリゴンの有効ピクセル領域を示す第１のマスクデータと該有効ピクセル毎の表示画面内の奥行きを示すＺ値とを生成し、前記第１のマスクデータの有効ピクセル領域のうち前記描画対象ポリゴンのＺ値より手前側（または奥側）のＺ値のピクセルの領域を有効ピクセル領域とする第２のマスクデータを生成し、視線方向であって前記描画対象ポリゴンと視点（または無限遠）との間に位置するシャドーポリゴンの枚数の奇偶データを有する影処理マスクデータの該奇偶データを、前記第２のマスクデータの有効領域について奇偶反転して新たな影処理マスクデータを生成し、上記影処理マスクデータの生成を前記シャドーボリュームを規定する全てのシャドーポリゴンに対して行うマスク生成部と、
前記マスク生成部から供給される前記影処理マスクデータに従って、レンダリング処理を行うレンダリング処理部とを有する画像処理装置。
【請求項４】
複数のポリゴンを表示する為の画像データを生成する画像処理方法において、
前記ポリゴンの表示画面内の位置データを含むポリゴンデータから、表示画面内の前記ポリゴンの有効ピクセル領域を示す第１のマスクデータと該有効ピクセル毎の表示画面内の奥行きを示すＺ値とを生成し、該第１のマスクデータの有効ピクセル領域のうち既に処理済の他のポリゴンのＺ値よりも手前側のＺ値のピクセルの領域を有効ピクセル領域とする第２のマスクデータを生成し、生成された第２のマスクデータの有効領域を生成済の他のポリゴンの第２のマスクデータの有効領域から削除する排他処理を行って新たな第２のマスクデータを生成し、上記新たな第２のマスクデータの生成をポリゴン毎に行うマスク生成工程と、
前記マスク生成工程により生成された前記新たな第２のマスクデータに従って、該新たな第２のマスクデータが示す有効領域について、前記各ポリゴンのレンダリング処理を行うレンダリング処理工程とを有する画像処理方法。
【請求項５】
複数の半透明ポリゴンを表示する為の画像データを生成する画像処理方法において、
前記半透明ポリゴンの表示画面内の位置データを含むポリゴンデータから、表示画面内の前記半透明ポリゴンの有効ピクセル領域を示す第１のマスクデータと該有効ピクセル毎の表示画面内の奥行きを示す半透明Ｚ値とを生成し、該第１のマスクデータの有効ピクセル領域のうち既に処理済の他の半透明ポリゴンの半透明Ｚ値よりも奥側の半透明Ｚ値のピクセルの領域を有効ピクセル領域とする第２のマスクデータを生成し、生成された第２のマスクデータの有効領域を生成済の他の半透明ポリゴンの第２のマスクデータの有効領域から削除する排他処理を行って新たな第２のマスクデータを生成し、上記新たな第２のマスクデータの生成を半透明ポリゴン毎に行うマスク生成工程と、
前記マスク生成工程で生成された前記新たな第２のマスクデータに従って、該新たな第２のマスクデータが示す有効領域について、画像データを生成する前記各ポリゴンのレンダリング処理を行うレンダリング処理工程とを有し、
前記マスク生成工程で、更に、前記第１のマスクデータの有効領域から前記新たな第２のマスクデータの有効領域を削除する排他処理を行って新たな第１のマスクデータを生成し、前記新たな第１のマスクデータに基づいて次の前記新たな第２のマスクデータを生成し、
前記レンダリング処理工程で、前記次の新たな第２のマスクデータに従って前記レンダリング処理を行う画像処理方法。
【請求項６】
請求項５において
前記マスク生成工程では、更に、
前記第１のマスクデータの有効領域から前記新たな第２のマスクデータの有効領域を削除する排他処理を行って新たな第１のマスクデータを生成し、前記新たな第１のマスクデータに基づいて次の前記新たな第２のマスクデータを生成することを、
前記新たな第１のマスクデータから有効領域がなくなるまで、繰り返し行うことを特徴とする画像処理方法。
【請求項７】
請求項５または６において
前記レンダリング処理工程で、前記次の新たな第２のマスクデータに従って行うレンダリング処理において、前に供給した前記新たな第２のマスクデータの有効領域と前記次の新たな第２のマスクデータの有効領域とで重なる領域に、所定のブレンディング処理を行うことを特徴とする画像処理方法。
【請求項８】
描画対象ポリゴン上の影領域を表示する為の画像データを生成する画像処理方法において、
シャドーボリュームを規定するシャドーポリゴンの表示画面内の位置データを含むシャドーポリゴンデータから、表示画面内の前記シャドーポリゴンの有効ピクセル領域を示す第１のマスクデータと該有効ピクセル毎の表示画面内の奥行きを示すＺ値とを生成し、前記第１のマスクデータの有効ピクセル領域のうち前記描画対象ポリゴンのＺ値より手前側（または奥側）のＺ値のピクセルの領域を有効ピクセル領域とする第２のマスクデータを生成し、視線方向であって前記描画対象ポリゴンと視点（または無限遠）との間に位置するシャドーポリゴンの枚数の奇偶データを有する影処理マスクデータの該奇偶データを、前記第２のマスクデータの有効領域について奇偶反転して新たな影処理マスクデータを生成し、上記影処理マスクデータの生成を前記シャドーボリュームを規定する全てのシャドーポリゴンに対して行うマスク生成工程と、
前記マスク生成工程で生成された前記影処理マスクデータに従って、レンダリング処理を行うレンダリング処理工程とを有する画像処理方法。
【請求項９】
請求項８において、
複数のシャドーボリュームが存在し、
前記マスク生成工程で、更に、前記複数のシャドーボリュームに対してそれぞれ前記影処理マスクデータを生成し、該複数の影処理マスクデータの有効領域を重ね合わせた有効領域を有する合成影処理マスクデータを生成し、
前記レンダリング処理工程で、該合成影処理マスクデータを前記影処理マスクデータとして取り扱って前記レンダリング処理を行うことを特徴とする画像処理方法。
【請求項１０】
請求項８または９において、
前記レンダリング処理工程は、前記影処理マスクデータに従って、該影処理マスクデータが示す有効領域について、前記描画対象ポリゴン上に影領域を表示するレンダリング処理を行うことを特徴とする画像処理方法。
【請求項１１】
複数のポリゴンを表示する為の画像データを生成する画像処理手順をコンピュータに実行させる画像処理プログラムを記録した該コンピュータ読み取り可能な記録媒体において、
前記画像処理手順は、
前記ポリゴンの表示画面内の位置データを含むポリゴンデータを供給され、表示画面内の前記ポリゴンの有効ピクセル領域を示す第１のマスクデータと該有効ピクセル毎の表示画面内の奥行きを示すＺ値とを生成し、該第１のマスクデータの有効ピクセル領域のうち既に処理済の他のポリゴンのＺ値よりも手前側のＺ値のピクセルの領域を有効ピクセル領域とする第２のマスクデータを生成し、生成された第２のマスクデータの有効領域を生成済の他のポリゴンの第２のマスクデータの有効領域から削除する排他処理を行って新たな第２のマスクデータを生成し、上記新たな第２のマスクデータの生成をポリゴン毎に行うマスク生成手順と、
前記マスク生成手順により生成された新たな第２のマスクデータに従って、該新たな第２のマスクデータが示す有効領域について、前記各ポリゴンのレンダリング処理を行うレンダリング処理手順とを有する画像処理プログラムを記録した記録媒体。
【請求項１２】
複数の半透明ポリゴンを表示する為の画像データを生成する画像処理手順をコンピュータに実行させる画像処理プログラムを記録した該コンピュータ読み取り可能な記録媒体において、
前記画像処理手順は、
前記半透明ポリゴンの表示画面内の位置データを含むポリゴンデータから、表示画面内の前記半透明ポリゴンの有効ピクセル領域を示す第１のマスクデータと該有効ピクセル毎の表示画面内の奥行きを示す半透明Ｚ値とを生成し、該第１のマスクデータの有効ピクセル領域のうち既に処理済の他の半透明ポリゴンの半透明Ｚ値よりも奥側の半透明Ｚ値のピクセルの領域を有効ピクセル領域とする第２のマスクデータを生成し、生成された第２のマスクデータの有効領域を生成済の他の半透明ポリゴンの第２のマスクデータの有効領域から削除する排他処理を行って新たな第２のマスクデータを生成し、上記新たな第２のマスクデータの生成を半透明ポリゴン毎に行うマスク生成手順と、
前記マスク生成手順で生成された前記新たな第２のマスクデータに従って、該新たな第２のマスクデータが示す有効領域について、画像データを生成する前記各ポリゴンのレンダリング処理を行うレンダリング処理手順とを有し、
前記マスク生成手順で、更に、前記第１のマスクデータの有効領域から前記新たな第２のマスクデータの有効領域を削除する排他処理を行って新たな第１のマスクデータを生成し、前記新たな第１のマスクデータに基づいて次の前記新たな第２のマスクデータを生成し、
前記レンダリング処理手順で、前記次の新たな第２のマスクデータに従って前記レンダリング処理を行う画像処理プログラムを記録した記録媒体。
【請求項１３】
描画対象ポリゴン上の影領域を表示する為の画像データを生成する画像処理手順をコンピュータに実行させる画像処理プログラムを記録した該コンピュータ読み取り可能な記録媒体において、
前記画像処理手順は、
シャドーボリュームを規定するシャドーポリゴンの表示画面内の位置データを含むシャドーポリゴンデータから、表示画面内の前記シャドーポリゴンの有効ピクセル領域を示す第１のマスクデータと該有効ピクセル毎の表示画面内の奥行きを示すＺ値とを生成し、前記第１のマスクデータの有効ピクセル領域のうち前記描画対象ポリゴンのＺ値より手前側（または奥側）のＺ値のピクセルの領域を有効ピクセル領域とする第２のマスクデータを生成し、視線方向であって前記描画対象ポリゴンと視点（または無限遠）との間に位置するシャドーポリゴンの枚数の奇偶データを有する影処理マスクデータの該奇偶データを、前記第２のマスクデータの有効領域について奇偶反転して新たな影処理マスクデータを生成し、上記影処理マスクデータの生成を前記シャドーボリュームを規定する全てのシャドーポリゴンに対して行うマスク生成手順と、
前記マスク生成手順で生成された前記影処理マスクデータに従って、レンダリング処理を行うレンダリング処理手順とを有する画像処理プログラムを記録した記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、コンピュータを利用した画像処理装置に関し、特に、レンダリング処理における複数のポリゴンの処理及び陰面処理の演算を少ないハードウエアでより効率的に行うことができる画像処理装置、その画像処理方法及びその画像処理プログラムを記録した記録媒体に関する。
【０００２】
【従来の技術】
コンピュータを利用した画像処理装置は、ゲーム装置やシミュレーション装置等で広く利用される。かかる画像処理装置では、表示されるオブジェクトを形成するポリゴンが、ゲームプログラムやシミュレーションプログラムにより生成される。このポリゴンデータは、通常その頂点毎のパラメータを含む。頂点パラメータは、例えば、頂点の三次元空間内の座標や、頂点のテクスチャー座標、法線ベクトル、透明度を表すアルファ値、色関連データが含まれる。
【０００３】
かかるポリゴンデータをもとに、まず、表示画面内のポリゴンをクリッピングにより選択し、それらの選択されたポリゴンについて、頂点の三次元座標が視点位置に従って表示画面上の二次元座標と奥行きを示すＺ値とに透視変換される。その後、レンダリング処理により表示画面内に表示されるポリゴンのピクセルにおける画像データが求められる。この画像データは、例えばＲＧＢの色データを有する。
【０００４】
上記したレンダリング処理において、ポリゴン内のピクセルのパラメータの演算は、通常、ラスタスキャン法によりポリゴン内のピクセル座標を特定し、そのピクセル座標に従い頂点パラメータを補間演算する。即ち、頂点座標とピクセル座標から内分比を求め、その内分比に従って上記した頂点パラメータを補間演算する。
【０００５】
また、レンダリング処理は、１つのフレーム単位で処理される。レンダリング処理において、表示すべきポリゴンをピクセル毎に判定する陰面処理の為に、ポリゴンのピクセルの奥行きを示すＺ値が利用される。Ｚ値を比較して、最もＺ値が小さい（表示画面内で最も手前）場合に、その色データをフレームバッファメモリに格納する。従って、フレームバッファメモリに書き込まれたピクセルのＺ値を格納するＺ値バッファメモリが利用される。
【０００６】
【発明が解決しようとする課題】
上記のラスタスキャンにおける補間演算では、頂点間を結ぶ直線上のエッジ点の座標やパラメータを演算し、両側のエッジ点から内部のピクセルの座標やパラメータを演算する。かかる補間演算では、通常除算演算を含み、かかる除算演算はコンピュータの演算回路にとって最も負荷の大きい演算である。しかも、ラスタスキャンに伴う補間演算は頻繁に行われるので、上記の負荷の高い演算はできれば避けるべきである。
【０００７】
更に、不透明ポリゴンのレンダリング処理では、Ｚ値比較を行って、表示画面の手前側のポリゴンのピクセルを有効にする。かかる演算処理において、例えばＺ値バッファメモリに最も手前のピクセルのＺ値を記憶して、逐次フレームバッファメモリに画像データを記憶することが行われる。かかる方法では、より奥に位置するポリゴンに対する画像データの生成とフレームバッファメモリへの画像データの書込みの処理工程が、後で処理され、より手前に位置するポリゴンの存在により無駄になることがあり、処理の効率を下げる原因となる。
【０００８】
或いは、それを避ける方法として、最終的に表示すべきピクセルが決定するまで、ピクセル毎のポリゴンのＩＤをＺ値バッファメモリに記憶しておくことが考えられるが、かかる方法でも、Ｚ値バッファメモリへのポリゴンＩＤの書込み処理が無駄になることがあり、同様に処理の効率を下げる原因となる。
【０００９】
更に、不透明でもない透明でもない半透明ポリゴンのレンダリング処理では、表示画面の奥側に位置するポリゴンの色と手前側に位置する半透明ポリゴンの色とをブレンディングする必要がある。かかる場合は、半透明ポリゴンのＺ値に従って一旦ソーティングしてから、奥側から順にブレンディング処理を行う。しかし、かかるソーティング処理は、Ｚ値の比較等を伴い処理の効率を下げる原因となる。
【００１０】
更に、画像処理において、光源により形成される影の部分については、光源からの光に従ってその輝度を上げる等の処理を行わない影処理（影を付ける処理）が必要である。かかる影処理は、複雑なアルゴリズムが種々提案されているが、いずれも複雑な演算を必要とし、処理の効率を下げる原因となっている。
【００１１】
そこで、本発明の目的は、上記の従来の課題を解決し、処理効率の高いレンダリング処理が可能な画像処理装置、その画像処理方法及びその画像処理プログラムを記録した記録媒体を提供することにある。
【００１２】
更に、本発明の目的は、不透明ポリゴンのレンダリング処理を効率良く行うことが可能な画像処理装置、その画像処理方法及びその画像処理プログラムを記録した記録媒体を提供することにある。
【００１３】
更に、本発明の目的は、半透明ポリゴンのレンダリング処理を効率良く行うことが可能な画像処理装置、その画像処理方法及びその画像処理プログラムを記録した記録媒体を提供することにある。
【００１４】
更に、本発明の目的は、レンダリング処理における影処理を効率良く行うことが可能な画像処理装置、その画像処理方法及びその画像処理プログラムを記録した記録媒体を提供することにある。
【００１５】
【課題を解決するための手段】
上記の目的を達成する為に、本発明は、ピクセルに対応して有効か無効か、或いは奇数か偶数かなどの２値データを保存するマスクレジスタを有効に利用して、それらのマスクデータに対する排他処理、排他的論理和処理、論理和処理等を行って、不透明ポリゴンの陰面処理、半透明ポリゴンのブレンディング処理、影の領域を求める影処理を効率的に行う。
【００１６】
第１の発明は、複数のポリゴンを表示する為の画像データを生成する画像処理方法において、
前記ポリゴンの表示画面内の位置データを含むポリゴンデータから、表示画面内の前記ポリゴンの有効ピクセル領域を示す第１のマスクデータと該有効ピクセル毎の表示画面内の奥行きを示すＺ値とを生成し、該第１のマスクデータの有効ピクセル領域のうち既に処理済の他のポリゴンのＺ値よりも手前側のＺ値のピクセルの領域を有効ピクセル領域とする第２のマスクデータを生成し、生成された第２のマスクデータの有効領域を生成済の他のポリゴンの第２のマスクデータの有効領域から削除する排他処理を行って新たな第２のマスクデータを生成し、上記新たな第２のマスクデータの生成をポリゴン毎に行うマスク生成工程と、
前記マスク生成工程により生成された前記新たな第２のマスクデータに従って、該新たな第２のマスクデータが示す有効領域について、前記各ポリゴンのレンダリング処理を行うレンダリング処理工程と
を有することを特徴とする。
【００１７】
上記の第１の発明は、不透明ポリゴン間の陰面処理を行うにあたり、第２のマスクデータによる排他処理を利用することで、それぞれのポリゴンの有効領域を新たな第２のマスクデータとして効率的に求めることができる。この第２のマスクデータは、最終的にレンダリング処理に利用されるものであり、以下に示される実施の形態例ではトランスマスクに格納される。
【００１８】
第２の発明は、複数の半透明ポリゴンを表示する為の画像データを生成する画像処理方法において、
前記半透明ポリゴンの表示画面内の位置データを含むポリゴンデータから、表示画面内の前記半透明ポリゴンの有効ピクセル領域を示す第１のマスクデータと該有効ピクセル毎の表示画面内の奥行きを示す半透明Ｚ値とを生成し、該第１のマスクデータの有効ピクセル領域のうち既に処理済の他の半透明ポリゴンの半透明Ｚ値よりも奥側の半透明Ｚ値のピクセルの領域を有効ピクセル領域とする第２のマスクデータを生成し、生成された第２のマスクデータの有効領域を生成済の他の半透明ポリゴンの第２のマスクデータの有効領域から削除する排他処理を行って新たな第２のマスクデータを生成し、上記新たな第２のマスクデータの生成を半透明ポリゴン毎に行うマスク生成工程と、
前記マスク生成工程で生成された前記新たな第２のマスクデータに従って、該新たな第２のマスクデータが示す有効領域について、画像データを生成する前記各ポリゴンのレンダリング処理を行うレンダリング処理工程とを有し、
前記マスク生成工程で、更に、前記第１のマスクデータの有効領域から前記新たな第２のマスクデータの有効領域を削除する排他処理を行って新たな第１のマスクデータを生成し、前記新たな第１のマスクデータに基づいて次の前記新たな第２のマスクデータを生成し、
前記レンダリング処理工程で、前記次の新たな第２のマスクデータに従って前記レンダリング処理を行うことを特徴とする。
【００１９】
上記の第２の発明では、半透明ポリゴンについて表示画面内で最も奥側に位置する領域を逆陰面処理と排他処理により新たな第２のマスクデータとして効率的に求めることができる。この第１のマスクデータは、処理すべき領域を示すマスクデータであり、以下に示される実施の形態例ではエリアマスクに格納される。また、第２のマスクデータは、最終的にレンダリング処理に利用されるものであり、以下に示される実施の形態例ではトランスマスクに格納される。
【００２０】
更に、上記の第２の発明において、上記次の新たな第２のマスクデータの生成工程が、前記新たな第１のマスクデータから有効領域がなくなるまで繰り返されることを特徴とする。単にかかる工程を繰り返すことにより、重なり合った半透明ポリゴンのブレンディング処理を効率的に行うことができる。
【００２１】
第３の発明は、描画対象ポリゴン上の影領域を表示する為の画像データを生成する画像処理方法において、
シャドーボリュームを規定するシャドーポリゴンの表示画面内の位置データを含むシャドーポリゴンデータから、表示画面内の前記シャドーポリゴンの有効ピクセル領域を示す第１のマスクデータと該有効ピクセル毎の表示画面内の奥行きを示すＺ値とを生成し、前記第１のマスクデータの有効ピクセル領域のうち前記描画対象ポリゴンのＺ値より手前側（または奥側）のＺ値のピクセルの領域を有効ピクセル領域とする第２のマスクデータを生成し、視線方向であって前記描画対象ポリゴンと視点（または無限遠）との間に位置するシャドーポリゴンの枚数の奇偶データを有する影処理マスクデータの該奇偶データを、前記第２のマスクデータの有効領域について奇偶反転して新たな影処理マスクデータを生成し、上記影処理マスクデータの生成を前記シャドーボリュームを規定する全てのシャドーポリゴンに対して行うマスク生成工程と、
前記マスク生成工程で生成された前記影処理マスクデータに従って、レンダリング処理を行うレンダリング処理工程とを有することを特徴とする。
【００２２】
上記の第３の発明によれば、光源による影領域を影処理マスクデータとして効率的に求めることができる。この影処理マスクデータは、描画対象ポリゴン上の影の領域を示すマスクデータであり、以下に示す本実施の形態例では、エリアマスク領域に格納される。
【００２３】
上記の第３の発明において、前記影処理マスクデータの生成がシャドーボリュームの数だけ繰り返し行われ、それぞれ生成された影処理マスクデータを最後に論理和処理して合成影処理マスクデータを生成し、前記のレンダリング処理工程で、その合成影処理マスクデータに従って影処理が行われる。
【００２４】
【発明の実施の形態】
以下、本発明の実施の形態について図面に従って説明する。しかしながら、本発明の技術的範囲がその実施の形態に限定されるものではない。
【００２５】
図１は、本実施の形態例の画像処理装置の全体構成図である。図１の例は、ゲームプログラムやシミュレーションプログラムに従ってポリゴンデータや視点データなどを生成するＣＰＵ４０と、そのポリゴンデータに含まれる頂点の三次元座標から、表示画面内に位置するポリゴンの表示画面内の二次元座標に透視変換を行うジオメトリ処理部４８と、ジオメトリ処理部４８が生成するポリゴンデータにしたがってレンダリングすべきポリゴンのピクセルを示すトランスマスクなどの各種マスクを生成するマスク生成部５０と、マスク生成部５０により生成されたトランスマスクやライトマスクなどを供給されて、ピクセルの画像データを生成するレンダリング処理部６２と、レンダリング処理部６２により生成された画像データが保存されるフレームバッファメモリ６６とを有する。
【００２６】
ＣＰＵ４０には、上記のプログラムを実行する為に、ＲＡＭ４２、ゲームプログラムが格納されるＲＯＭ４４、オペレータにより操作される操作部４７からの操作信号を取り込む入力バッファ４６とが、例えば共通のバスにより接続される。また、ジオメトリ処理部４８には、ポリゴンデータを格納しておくポリゴンバッファ４９が接続される。また、レンダリング処理部６２には、テクスチャーデータが格納されるテクスチャーバッファメモリ６４が接続される。そして、フレームバッファメモリ６６の画像データが、ＣＲＴなどの表示装置６８に供給される。
【００２７】
図２は、上記のマスク生成部５０の構成例を示す図である。図２のマスク生成部５０の例は、ジオメトリ生成部４８により生成されたポリゴンデータが供給され保存されるプリミティブバッファ５２を有する。このプリミティブバッファ５２は、ポリゴンデータ以外にも直線や点などの表示される要素のデータも供給されて保存する。直線や点の場合も、前述のジオメトリ処理部４８で、その三次元データが表示画面の二次元座標に透視変換される。
【００２８】
マスクコントロール部５３は、２種類のマスクレジスタ、トランスマスクレジスタ５３３、エリアマスクレジスタ５３４を有し、マスクレジスタ内のビットデータに対して排他処理を行う排他処理部５３１と排他的論理和の処理を行う排他的論理和処理部５３２とを少なくとも有する。これらの処理部５３１，５３２の入力側と出力側にはマルチプレクサ５４０〜５４５が設けられ、これらのマルチプレクサの接続を適宜変更することにより、処理対象となる入力または出力マスクデータを選択することができる。
【００２９】
これらのマスクレジスタは、例えばフレーム内を細分化したフラグメント領域内の全てのピクセルに対するビットデータを有するレジスタである。従って、後述する通りフラグメント領域が８×８の６４ピクセルを有する領域の場合は、マスクレジスタは６４ビットのレジスタの集合である。即ち、６４個の２値データであり、より具体的には「１」と「０」の２値データを６４個有する。
【００３０】
トランスマスクレジスタ５３３は、例えば最終的に生成されたマスクデータを格納し、レンダリング処理部６２にトランスファーされる。或いは、トランスマスクレジスタ５３３は、最終的なマスクデータを生成する過程で、半透明（translucent 、トランスルーセント) ポリゴンの描画位置のデータを格納する。更に、エリアマスクレジスタ５３４は、例えばポリゴンの描画対象の領域のデータを格納する。或いは、影処理におけるシャドーポリゴンの領域のデータ（影処理マスクデータ）を一時的に格納する。
【００３１】
上記のトランスマスクレジスタとエリアマスクレジスタとを有するマスクコントロール部５３は、上記のフラグメント領域の６４ピクセルに対応して、６５セット有する。即ち、６４ピクセル全てが異なるポリゴンになっても、トランスマスクレジスタ５３３やエリアマスクレジスタ５３４が対応できる様に構成される。
【００３２】
但し、エリアマスクレジスタ５４３は、影処理マスクデータを格納する場合は、シャドーボリュームの個数分だけ利用される。そして、それらのエリアマスクレジスタ５４３は、論理和処理部５３８により論理和処理されて、レンダリング処理部に合成影処理マスクデータとして供給される。
【００３３】
これらのマスクレジスタに保存されたマスクデータは、供給されるマスクデータと或いはお互いのマスクデータと排他処理、排他的論理和処理或いは論理和処理される。そしてそれらの処理されたマスクデータが、再度所定のマスクレジスタに保存され、或いはレンダリング処理部に供給される。上記の処理は、排他処理部５３１、排他的論理和処理部５３２及び論理和処理部５３８で行われる。
【００３４】
排他処理部５３１は、入力Ｉ1 Ｉ2 に対して、Ｉ1 ・（！Ｉ2 ）を出力する。ここで、！Ｉ2 はＩ2 の否定論理を意味する。また、排他的論理和処理部５３２は、入力Ｉ1 Ｉ2 に対して、｛Ｉ1 ・（！Ｉ2 ）｝＋｛！Ｉ1 ・（Ｉ2 ）｝を出力する。更に論理和処理部５３８は、入力Ｉ1 Ｉ2 ... Ｉ65に対して、Ｉ1 ＋Ｉ2 ＋....＋Ｉ65を出力する。２値データであるマスクデータに対する上記の論理演算は、簡単な論理回路により行うことが可能である。
【００３５】
マスク生成部５０での処理の概略について説明する。ジオメトリ処理部４８で生成されたポリゴンデータは、プリミティブバッファ５２に供給され、保存される。そして、フラクタル処理に必要なポリゴンデータはフラクタルセットアップ部５４に与えられる。また、エリアマスクレジスタ内のエリアマスクデータが、マルチプレクサ５４６を経由して、フラクタル処理部５５に与えられる。
【００３６】
フラクタル処理については、後に詳細に説明するが、フラクタル処理部５５を利用することで、ポリゴンデータからフラグメント領域内のピクセルがいずれのポリゴンに属するかの演算、その場合の各ピクセルのＺ値等のポリゴンデータの補間演算などを比較的容易に且つ短時間で行うことができる。
【００３７】
フラクタル処理部５５により生成されたマスクデータは、比較部５６にて、Ｚ値比較処理に従って、所定の処理が施されたマスクデータに加工され、再度マスクコントローラ部５３に供給される。従って、比較部５６内には、Ｚ比較器５６４、トランスＺ値比較器５６５が設けられる。それらの比較器５６４，５６５は、不透明ポリゴンのＺ値を保存するＺ値レジスタ５６１と、半透明ポリゴンのＺ値等を保存するトランスＺ値レジスタ５６２とを参照する。
【００３８】
図２に示されたマスク生成部５０の動作は、後述するマスク生成の詳細な説明によってより明確化される。
【００３９】
図３は、ジオメトリ処理部により生成されるポリゴンデータの例を示す図である。図３には、二つのポリゴンＩＤ０，ＩＤ１のデータ例が示される。ポリゴンは、通常ラスタスキャン法や補間法での演算を簡単にするために、３角形で形成される。従って、それぞれのポリゴンは頂点００，０１，０２及び頂点１０，１１，１２を有する。そして、各頂点のパラメータとして、表示画面上での二次元座標（ｘ、ｙ）と表示画面内の奥行きを示すＺ値、そのポリゴンに与えられるテクスチャを示すテクスチャ座標（Ｔｘ、Ｔｙ）、三次元空間内での法線ベクトル（Ｎｘ，Ｎｙ，Ｎｚ）、透明度を示すα値及び色データが含まれる。法線ベクトルにより光源に対する処理が行われ、透明度を示すα値により半透明ポリゴンに対するブレンディング処理が行われる。
【００４０】
更に、ポリゴンデータには、それぞれのポリゴンの属性を示すフィルタイプデータが含まれる。フィルタイプデータには、例えば、不透明ポリゴン、半透明ポリゴン、シャドーボリュームを構成するシャドーポリゴンなどである。本実施の形態例では、これらのポリゴンの属性に応じて異なる処理が施される。
【００４１】
本実施の形態例における不透明ポリゴンに対する描画処理、半透明ポリゴンに対する描画処理及び影処理に対する描画処理を理解するためには、マスクレジスタに格納されるマスクデータと、それを効果的に生成するフラクタル処理を説明する必要がある。フラクタル処理とは、逐語的にいえば、自己相似的に処理することをいう。この処理は、ポリゴン内の各ピクセルのデータを演算する為に利用されるラスタスキャン法に代わる方法である。
【００４２】
図４は、フラクタルな順番で領域をより小さい相似形に分裂しピクセルの座標データを求める方法（以下単にフラクタル法と称する。）について説明する図である。この図には、表示画面の一部のあるフラグメント領域２０内の８×８のピクセルの座標を求める方法が示される。図４Ａには、フラグメント領域２０内の中心Ｐ0 に対して、それぞれ中心Ｐ1 、Ｐ2 、Ｐ3 、Ｐ4 の領域に４分割した状態が示される。中心Ｐ0 の座標（ｘ0 ，ｙ0 ）に対して、４分割後の中心Ｐ1 、Ｐ2 、Ｐ3 、Ｐ4 の座標は、フラグメント２０の一辺の長さを単純に８とすると、
Ｐ1 ＝（ｘ0 −２，ｙ0 −２）＝（ｘ1 ，ｙ1 ）
Ｐ2 ＝（ｘ0 −２，ｙ0 ＋２）＝（ｘ2 ，ｙ2 ）
Ｐ3 ＝（ｘ0 ＋２，ｙ0 ＋２）＝（ｘ3 ，ｙ3 ）
Ｐ4 ＝（ｘ0 ＋２，ｙ0 −２）＝（ｘ4 ，ｙ4 ）
で求められる。この演算には、除算は含まれず単に加算と減算だけからなる。
【００４３】
図４Ｂには、更に、中心Ｐ1 、Ｐ2 、Ｐ3 、Ｐ4 それぞれの領域を４分割し、フラグメント領域２０を新たな中心Ｐ11、Ｐ12、Ｐ13、Ｐ14、Ｐ21、Ｐ22．．．Ｐ43、Ｐ44の領域に１６分割した状態が示される。それぞれの分割後の領域の中心Ｐ11、Ｐ12、．．．Ｐ43、Ｐ44の座標は、
Ｐ11＝（ｘ1 −１，ｙ1 −１）＝（ｘ11，ｙ11）
Ｐ12＝（ｘ1 −１，ｙ1 ＋１）＝（ｘ11，ｙ11）
Ｐ43＝（ｘ4 ＋１，ｙ4 ＋１）＝（ｘ43，ｙ43）
Ｐ44＝（ｘ4 ＋１，ｙ4 −１）＝（ｘ44，ｙ44）
で求められる。
【００４４】
更に、図４Ｃには、中心Ｐ11、Ｐ12、Ｐ13、．．．Ｐ42、Ｐ43、Ｐ44それぞれの領域を４分割し、フラグメント領域２０を新たな中心Ｐ111 、Ｐ112 ．．．Ｐ443 、Ｐ444 の領域に６４分割した状態が示される。それぞれの分割後の領域の中心Ｐ111 、Ｐ112 、Ｐ443 、Ｐ444 の座標は、
Ｐ111 ＝（ｘ11−０．５，ｙ11−０．５）＝（ｘ111 ，ｙ111 ）
Ｐ112 ＝（ｘ11−０．５，ｙ11＋０．５）＝（ｘ111 ，ｙ111 ）
Ｐ443 ＝（ｘ44＋０．５，ｙ44＋０．５）＝（ｘ443 ，ｙ443 ）
Ｐ444 ＝（ｘ44＋０．５，ｙ44−０．５）＝（ｘ444 ，ｙ444 ）
で求められる。
【００４５】
以上、図４Ａ，Ｂ，Ｃに示される通り、フラクタル法によれば、フラグメント領域２０を１領域、４領域、１６領域、そして６４領域と、それぞれの領域を更に小さい相似形の領域に分割していく。このフラクタル法によれば、それぞれの領域の表示画面での座標値は、上記した通り加算と減算だけで次々に求めることができる。しかも、このフラクタル法によれば、図４Ｃに示される通り、フラグメント領域２０内のピクセルに対応できる６４個の微小領域に対して、同時にその座標値や色関連データ等の属性データを求めることができる。その演算の回数は、上記した通り、３階層の演算で行うことができ、それぞれの演算は並列演算が可能である。このことは、この演算回路を構成する場合、並列演算器を３階層に形成すればよいことを意味する。この演算回路の構成については、後述する。
【００４６】
上記したフラクタル法は、フラグメント領域内の中心Ｐ0 をスタートにして、６４個のピクセルの表示画面内の座標を加算と減算により簡単に求めることができる。そこで、レンダリング処理の為に、各ピクセルにどのポリゴンの色をつければよいかを示すマスクデータを生成する必要がある。別の言葉でいえば、ポリゴン内に位置するピクセルを検出する必要がある。
【００４７】
図５は、任意の点Ｐ（ｘ，ｙ）が、三角形のポリゴン１０内に位置するか否かの判断のアルゴリズムについて説明する図である。二次元座標内の三点Ｌ，Ｍ，Ｎを頂点とする三角形の各辺ＬＭ，ＭＮ，ＮＬについて、三角形の単位法線ベクトルを（ａ1 ，ｂ1 ）、（ａ2 ，ｂ2 ）、（ａ3 ，ｂ3 ）と、座標の原点から各辺に下ろした垂線の距離をｃ1 、ｃ2 、ｃ3 とする。この場合、任意の点Ｐ（ｘ，ｙ）が三角形の内部に位置するか外部に位置するかは、次の式の値ｄが負か正かにより判断できる。
【００４８】
ｄ1 ＝ａ1 ｘ＋ｂ1 ｙ＋ｃ1 
ｄ2 ＝ａ2 ｘ＋ｂ2 ｙ＋ｃ2 
ｄ3 ＝ａ3 ｘ＋ｂ3 ｙ＋ｃ3 
上記のｄ1 ，ｄ2 ，ｄ3 が共に負になる場合は、点Ｐ（ｘ，ｙ）が三角形の内部に位置することは、数学的に自明である。かかる、アルゴリズムは、任意の点がある多角形の内部に位置するか否かの判断を行う場合に利用される。
【００４９】
そこで、上記のフラクタル法に従って、６４個のピクセルがあるポリゴンの内部に属するか否かの演算を行うことができる。例えば、点Ｐ0 に対しては、
ｄ1 ＝ａ1 ｘ0 ＋ｂ1 ｙ0 ＋ｃ1 
ｄ2 ＝ａ2 ｘ0 ＋ｂ2 ｙ0 ＋ｃ2 
ｄ3 ＝ａ3 ｘ0 ＋ｂ3 ｙ0 ＋ｃ3 
を演算して、ｄ1 ，ｄ2 ，ｄ3 が共に負になるか否かの判断を行えば良い。
【００５０】
更に、４分割した中心Ｐ1 、Ｐ2 、Ｐ3 、Ｐ4 の領域があるポリゴンの内部に属するか否かの演算は、点Ｐ1 に対しては、
ｄ1 ＝ａ1 ｘ1 ＋ｂ1 ｙ1 ＋ｃ1 ＝ａ1 （ｘ0 -2）＋ｂ1 （ｙ0 -2）＋ｃ1 
ｄ2 ＝ａ2 ｘ1 ＋ｂ2 ｙ1 ＋ｃ2 ＝ａ2 （ｘ0 -2）＋ｂ2 （ｙ0 -2）＋ｃ2 
ｄ3 ＝ａ3 ｘ1 ＋ｂ3 ｙ1 ＋ｃ3 ＝ａ3 （ｘ0 -2）＋ｂ3 （ｙ0 -2）＋ｃ3 
である。結局、点Ｐ0 の時に求めたｄ1 、ｄ2 、ｄ3 に対して、それぞれ
ｄ1 ＝ｄ1 −２ａ1 −２ｂ1 
ｄ2 ＝ｄ2 −２ａ2 −２ｂ2 
ｄ3 ＝ｄ3 −２ａ3 −２ｂ3 
という単純な減算を行うことで求めることができる。
【００５１】
同様にして、１６分割した中心Ｐ11、Ｐ12、Ｐ13、Ｐ14、Ｐ21、Ｐ22．．．Ｐ43、Ｐ44の領域についても、点Ｐ1 、Ｐ2 、Ｐ3 、Ｐ4 の時に求めたｄ1 、ｄ2 、ｄ3 に対して簡単な減算を行うことで求めることができる。例えば、中心Ｐ11の場合は、
ｄ1 ＝ｄ1 −ａ1 −ｂ1 
ｄ2 ＝ｄ2 −ａ2 −ｂ2 
ｄ3 ＝ｄ3 −ａ3 −ｂ3 
により求められる。
【００５２】
同様にして、６４分割した中心Ｐ111 、Ｐ112 ．．．Ｐ443 、Ｐ444 の領域についても簡単に演算を行うことができる。例えば、中心Ｐ111 の場合は、
ｄ1 ＝ｄ1 −０．５ａ1 −０．５ｂ1 
ｄ2 ＝ｄ2 −０．５ａ2 −０．５ｂ2 
ｄ3 ＝ｄ3 −０．５ａ3 −０．５ｂ3 
により求められる。
【００５３】
以上の通り、各領域の中心点があるポリゴンの内部に属するか否かの判断の為の演算は、フラクタル法を利用することにより、極めて簡単に行うことができる。
【００５４】
図６は、表示画面３０内に３つのポリゴンＰＧ１，ＰＧ２，ＰＧ３が表示される例を示す図である。この図６に示される通り、表示画面３０は、複数のフラグメント領域ＦＭに分割されている。そこで、中央付近のフラグメントＦＭ９においては、ポリゴンＰＧ１，ＰＧ２の一部が位置している。このフラグメントＦＭ９を拡大すると、図６の左下の図になる。図に示される通り、６４個のピクセルＰ1 〜Ｐ64に分割されている。その場合、ピクセルＰ1 〜Ｐ4 、Ｐ9 〜Ｐ15、Ｐ17〜Ｐ24、Ｐ25〜Ｐ32が、ポリゴンＰＧ１に属する。更に、ピクセルＰ24、Ｐ31、Ｐ32、Ｐ38〜Ｐ40、Ｐ45〜Ｐ48、Ｐ51〜Ｐ56、Ｐ58〜Ｐ64が、ポリゴンＰＧ２に属する。
【００５５】
上記したフラクタル法により、６４個のピクセルＰ1 〜Ｐ64がポリゴンに属するか否かの演算が、フレーム内のポリゴン全てに対して行われることで、フラグメント領域２０内において、ポリゴンの位置が確認される。図６の右下に示される通り、フラグメント領域ＦＭ９において、ポリゴンＰＧ１とＰＧ２の位置が確認される。図中、一部分で二つのポリゴンＰＧ１とＰＧ２とが重なりあう。
【００５６】
従来のポリゴン内をラスタスキャンする方法は、ポリゴン内のピクセルの座標を求めることで、各ピクセルにどのポリゴンの色を与えるかを求める。これに対して、上記の方法では、フラグメント領域内の全てのピクセルについて、その座標データを求めてその座標データからポリゴン内に位置するか否かの判断を行うことで、各ピクセルにどのポリゴンの色を与えれば良いかを求めることができる。
【００５７】
レンダリング処理において、もう一つの基本的な処理は、重なりあうポリゴンについて、どのポリゴンを表示すべきかの判定をピクセル毎に行うことである。その為に、各ポリゴンのＺ値を比較して、Ｚ値が最も小さい（手前側の）ポリゴンを選択するアルゴリズムが知られている。或いは、半透明のポリゴンをレンダリングする時は、例えば奥側に位置するポリゴンの色データにそれと重なる手前側のポリゴンの色データを、手前側のポリゴンの透明度α値に従ってブレンディングすることが行われる。その場合も、Ｚ値が比較される。
【００５８】
このＺ値比較法を行うためには、各ピクセルにおけるポリゴンのＺ値を求める必要がある。このポリゴン毎のＺ値の計算は、上記のフラクタル処理を行う場合に、非常に簡単に行うことができる。
【００５９】
例えば、図４、５に戻って、点Ｐ0 のＺ値Ｚ0 は、次の演算式で求めることができる。
【００６０】
Ｚ0 ＝（∂ｚ／∂ｘ）ｘ0 ＋（∂ｚ／∂ｙ）ｙ0 ＋ｃｚ
それぞれの定数（∂ｚ／∂ｘ）、（∂ｚ／∂ｙ）及びｃｚは、ポリゴンの１平面からユニークにきまる定数である。具体的には、（∂ｚ／∂ｘ）はポリゴンの平面のＸ軸方向の傾きであり、（∂ｚ／∂ｙ）はポリゴンの平面のＹ軸方向の傾きである。また、ｃｚは原点における平面のＺ値である。
【００６１】
かかる演算式から理解される通り、更に４分割した領域の例えば中心Ｐ1 のＺ値Ｚ1 は、
Ｚ1 ＝Ｚ0 −２（∂ｚ／∂ｘ）−２（∂ｚ／∂ｙ）
で求められる。更に１６分割した領域の例えば中心Ｐ11のＺ値Ｚ11は、
Ｚ11＝Ｚ1 −（∂ｚ／∂ｘ）−（∂ｚ／∂ｙ）
で求められ、更に６４分割した領域の例えば中心Ｐ111 のＺ値Ｚ111 は、
Ｚ111 ＝Ｚ11−０．５（∂ｚ／∂ｘ）−０．５（∂ｚ／∂ｙ）
で求められる。従って、座標の場合と同様に、加算と減算により６４個のピクセルにおけるポリゴンのＺ値を簡単に求めることができる。
【００６２】
従って、フラクタル法により、各ピクセルがポリゴンに属するか否かの判定と共に、そのピクセルのポリゴンのＺ値の演算とを同時に行うこともできる。かかる演算は、フラグメント領域内において、ポリゴンの個数分だけ繰り返される。フレーム内の全てのポリゴンに対して、上記の演算が行われると、そのフラグメント領域内における、各ピクセルの表示すべきポリゴンとそのＺ値とが求められる。
【００６３】
ラスタライズ法によるラスタスキャンでは、ポリゴン内を走査して、その座標とＺ値を演算し、各ピクセルの表示すべきポリゴンとそのＺ値とが求められるが、上記した通りその演算には除算が含まれ、コンピュータからなる演算器にとって演算時間が長くなる。それに対して、上記のフラクタル法を使用することにより、その演算には基本的に加算と減算しか含まれない。従って、その演算時間は極めて短くなる。また、後述する通り、フラクタル法によれば、６４ピクセルの場合は、並列演算を３階層だけ行うことにより６４個分の座標、ポリゴン、Ｚ値を求めることができる。従って、その点においても演算に要する時間を短くすることができる。
【００６４】
図７は、フラクタル処理部５５の具体的構成例を示す図である。図中、フラクタル処理に必要な初期値を求めるフラクタルセットアップ５４から処理中のフラグメント領域の中心点での初期値が、フラクタル処理器の最初のフラクタル分割器ＦＲ0 に供給される。この初期値は、例えば、フラグメント領域の中心点Ｐ0 の二次元座標（ｘ0 ，ｙ0 ）、処理中のポリゴンに対するポリゴン内か外かの判定値ｄ1 ，ｄ2 ，ｄ3 、及びＺ0 値である。そして、フラクタル分割器ＦＲ0 では、点Ｐ0 の初期値から、４分割した点Ｐ1 、Ｐ2 、Ｐ3 、Ｐ4 での二次元座標（ｘ1 ，ｙ1 ）〜（ｘ4 ，ｙ4 ）、その座標が処理中のポリゴンに対するポリゴン内か外かの判定値ｄ1 ，ｄ2 ，ｄ3 （４種類）、及びＺ値Ｚ1 〜Ｚ4 が求められる。この演算は、既に説明した通り、初期値に対して加算と減算だけで構成される。
【００６５】
次に、フラクタル分割器ＦＲ1 〜ＦＲ4 では、４点Ｐ1 、Ｐ2 、Ｐ3 、Ｐ4 での二次元座標（ｘ1 ，ｙ1 ）〜（ｘ4 ，ｙ4 ）、その座標が処理中のポリゴンに対するポリゴン内か外かの判定値ｄ1 ，ｄ2 ，ｄ3 （４種類）、及びＺ値Ｚ1 〜Ｚ4 から、それぞれ４分割した点Ｐ11、Ｐ12、Ｐ13、Ｐ14．．．Ｐ43、Ｐ44のでの同様の値が演算される。
【００６６】
同様に、三階層目の演算として、フラクタル分割器ＦＲ11〜ＦＲ14では、点Ｐ11〜Ｐ14の二次元座標（ｘ11，ｙ11）〜（ｘ14，ｙ14）、その座標が処理中のポリゴンに対するポリゴン内か外かの判定値ｄ1 ，ｄ2 ，ｄ3 （４種類）、及びＺ値Ｚ11〜Ｚ14から、更に分割した点Ｐ111 ，Ｐ112 〜Ｐ143 ，Ｐ144 に対する同様の値が求められる。
【００６７】
フラクタル分割器ＦＲ21〜ＦＲ24では、点Ｐ21〜Ｐ24の同様の値から、更に分割した点Ｐ211 ，Ｐ212 〜Ｐ243 ，Ｐ244 の同様の値が求められる。フラクタル分割器ＦＲ31〜ＦＲ34及びＦＲ41〜ＦＲ44においても、同様の演算が行われる。
【００６８】
三階層目のフラクタル分割器ＦＲ11〜ＦＲ44では、それぞれのピクセル毎に設けたｄ1 ，ｄ2 ，ｄ3 が全て負か否かの判断が行われる。全て負の場合は、そのピクセルは処理中のポリゴン内に属することになる。そこで、更に、そのピクセルのＺ値をＺ値レジスタ５６１内のＺ値と比較する。或いは、ピクセルのＺ値をトランスＺ値レジスタ内のＺ値と比較する。若しくは、シャドーボリュームのＩＤと比較する。そして、例えば不透明ポリゴン内のピクセルのＺ値がＺ値レジスタ５６１内のＺ値よりも小さい場合は、そのポリゴンが表示画面内で手前に位置することを意味するので、ピクセルのＺ値がＺ値レジスタ５６１に記録される。同時に、マスクレジスタ６０の対応するマスクレジスタ５３３〜５３７にデータが書き込まれる。
【００６９】
フラクタル処理を利用する場合は、図６で示したフラクタル処理器の通り、加算と減算の単純な演算を並列的に行うことができる。従って、１つのフラグメント領域について、各ピクセル毎の描画すべきポリゴンを求める演算を、初期値が与えられてから、この例では３階層の演算で完了することができる。それは、パイプライン処理におけるレイテンシーを短くすることができることを意味する。単純に１ピクセル毎に処理する場合に６４回同じ演算を行うことに比較すると、フラクタル処理を利用する場合は演算時間を飛躍的に短縮することができる。
【００７０】
図８は、マスクレジスタ６０の詳細な構成例を示す図である。この図には、最下位層のフラクタル分割器ＦＲ11〜ＦＲ44が示される。このマスクレジスタは、６４ビットのフラグビットが格納されるレジスタで構成される。フラグメント領域が６４ピクセルで構成される場合は、そのレジスタが６４＋１個設けられる。そして、各レジスタにポリゴンが割り当てられる。
【００７１】
例えば、ポリゴンＰＧ１のポリゴンデータがフラクタルセットアップ部５４に供給された時、フラクタル処理器５５内で６４ピクセルがポリゴンＰＧ１に属するか否かの判断がなされて、ポリゴンＰＧ１内に属することが判明すると、ポリゴンＰＧ１が割り当てられているマスクレジスタ６０１の対応するピクセルのフラグビットが「１」にされる。或いは、ピクセルのＺ値がＺ値レジスタのＺ値よりも小さい（手前側の）場合は、ポリゴンＰＧ１が割り当てられているマスクレジスタ６０１（ＰＧ１）内の対応するピクセルのフラグビットが「１」にされる。その結果、そのピクセルはポリゴンＰＧ１に属するデータであることが、或いはそのピクセルは表示対象のポリゴンＰＧ１内のピクセルであることが記録される。即ち、フラグビットが「１」のピクセルがそのポリゴンの有効ピクセル領域を意味する。
【００７２】
フラグメント領域が６４ピクセルを有するので、マスクレジスタは、最大で６４個必要になる。そして、演算中に使用される１つのマスクレジスタを加えて、合計６５個のマスクレジスタが設けられる。
【００７３】
図９は、上記したフラクタル処理のフローチャート図である。上記したフラクタル処理が図９のフローチャート図によって、より明確に理解される。ステップＳ３０にてフラグメント領域が指定され、フレーム内のポリゴンデータがジオメトリ処理部４８からプリミティブバッファ５２に供給される（Ｓ３２）。この場合、例えば頂点座標とそのＺ値が与えられる。かかるポリゴンデータはマスクコントロール部５３からフラクタルセットアップ部５４に供給され、フラグメント領域の中心点Ｐ0 に対して、ｄ値とＺ値の初期値が求められる（Ｓ３４）。その演算式は、すでに説明した通りである。
【００７４】
そこで、マスクコントロール部５３は、例えば全てのピクセルが有効領域となっているマスクデータをフラクタル処理部５５に供給する。フラクタル処理部５５では、上記の中心点Ｐ0 に対するｄ値とＺ値の初期値から、４分割のフラクタ処理（Ｓ３６）、１６分割のフラクタ処理（Ｓ３８）、そして６４分割のフラクタ処理（Ｓ４０）が行われる。その結果、フラグメント領域内のピクセル毎のｄ1 、ｄ2 、ｄ3 及びＺ値が求められる。そして、ｄ1 、ｄ2 、ｄ3 値が全て負か否かの判断により、そのピクセルが処理中のポリゴンの内部に属するか否かの判断が行われる（Ｓ４２）。ｄ1 、ｄ2 、ｄ3 値が全て負の場合は、ピクセルがポリゴン内部に属する。従って、ｄ値が全て負にならないピクセルは上記マスクデータの有効領域から削除（データ「０」）される。
【００７５】
更に、そのピクセルのＺ値がＺ値レジスタ５６１のＺ値と比較される（Ｓ４４）。Ｚ値がＺ値レジスタ内のＺ値より小さい（手前側の）場合は、そのＺ値がＺ値レジスタ５６１に格納され、マスクレジスタの対応するレジスタにフラグ「１」が格納される（Ｓ４６）。
【００７６】
或いは、別の処理においては、ピクセルのＺ値がトランスＺ値レジスタ５６２のＺ値と比較される（Ｓ４４）。Ｚ値がＺ値レジスタ内のＺ値より大きい（奥側の）場合は、そのＺ値がトランスＺ値レジスタ５６２に格納され、マスクレジスタの対応するレジスタにフラグ「１」が格納される（Ｓ４６）。
【００７７】
上記のいずれの処理を行うかは、目的とする処理に応じて異なる。上記のステップＳ４４、Ｓ４６は、図２において比較部５６が処理する。
【００７８】
上記の構成のマスクレジスタは、各ポリゴンのどのピクセルを描画すべきか、或いは有効にすべきかをフラグビットで記録する。従って、マスクレジスタは、ポリゴンの描画領域をマスクする機能或いはポリゴンの有効領域をマスクする機能を持つ。そして、フラグビットは１と０のデータであるので、複数のマスクデータに対して所定の論理計算を行う場合は、単にＡＮＤ，ＯＲ，ＮＡＮＤ，ＮＯＲなどの論理ゲート回路を利用することができる。従って、かかるマスクデータに対する排他処理、排他的論理和処理及び論理和処理の演算は、簡単な論理ゲート回路により、短時間で効率的に行うことができる。
【００７９】
以上の通り、フラクタル処理とそれにより生成されるフラグメント領域内のマスクデータが明確になった。そこで、以下に、フレーム内に含まれる不透明マスク、半透明マスク及びシャドーボリュームに対する描画処理について説明する。
【００８０】
［描画処理の全体の流れ］
図１０は、描画処理の全体の流れを示すフローチャート図である。この例では、フレーム内に不透明ポリゴンと、半透明ポリゴンとが存在し、更に光源による影処理が施される場合に、上記したフラクタル処理を利用してマスクデータを適宜生成して効率的に描画処理を行う。
【００８１】
マスク生成部５０は、ジオメトリ処理部４８から不透明ポリゴンのデータを順次供給されて、不透明ポリゴンについての処理を行う（Ｓ１０、Ｓ１２）。概略的に説明すると、不透明ポリゴンの場合は、Ｚ値が小さい（手前にある）ピクセルが最終的に描画されるピクセルである。従って、フラクタル処理を利用して不透明ポリゴン内の有効ピクセル領域を検出し同時にそのＺ値を求める。そして、そのＺ値がＺ値レジスタ５６１内のＺ値より小さい場合は、ポリゴンに対するトランスマスクデータを「１」にし、Ｚ値レジスタ内のＺ値を書き換える。その結果、ポリゴン毎に描画すべきピクセルのデータがトランスマスクデータとして生成される（Ｓ１０）。このトランスマスクデータは、それまでに生成された別の不透明マスクのトランスマスクデータと排他処理されて保存される（Ｓ１２）。
【００８２】
全ての不透明ポリゴンに対して工程Ｓ１０，Ｓ１２が行われると、次に、ジオメトリ処理部４８から光源からの光線が遮断された影空間であるシャドーボリュームを規定するシャドーポリゴンのデータがマスク生成部５０に供給される。マスク生成部５０では、影処理が行われ、不透明ポリゴン上であって光源からの光が照射されない影の領域を示す影処理マスクデータが生成される（Ｓ１４）。
【００８３】
そして、不透明ポリゴンのトランスマスクデータと、影処理により求められエリアマスク内に格納された影処理マスクデータとから、不透明ポリゴンのレンダリング処理が行われる（Ｓ１６）。具体的には、マスクコントロール部５３内のトランスマスクレジスタ５３３のトランスマスクデータとエリアマスクレジスタ５３４の影処理マスクデータとが、レンダリング処理部６２に供給される。レンダリング処理部６２では、トランスマスクデータで示された有効ピクセル領域に対応するポリゴンの画像データを生成して、フレームバッファ６６に記録する。また、画像データの生成は、ピクセルのテクスチャ座標からテクスチャバッファ６４内のテクスチャデータを取得し、また、色データから色データを取得し、法線ベクトルを利用して光源処理を施す。即ち、光源からの光が照射される領域では、例えば輝度値を高くする。また、影処理マスクデータに従う光源からの光が照射されない領域では、光源による処理を行わない。
【００８４】
次に、半透明ポリゴンの処理が行われる（Ｓ１８）。ここでの半透明ポリゴンとは、不透明でも透明でもないポリゴンであり、透明度α値が最大のポリゴンを含むポリゴンである。半透明ポリゴンの場合は、その透明度に応じて奥側に位置するポリゴンの色とブレンディング処理を行う必要がある。そこで、本実施の形態例では、後述するアルゴリズムにより、表示画面内の最も奥に位置する半透明ポリゴンの領域を示すトランスマスクを最初に生成する（Ｓ１８）。そして、マスクコントロール部５３がそのトランスマスクデータをレンダリング処理部５２に与える。そして、レンダリング処理部５２では、フレームバッファ６６内の画像データと処理中の半透明ポリゴンの色データとでブレンディング処理を行う（Ｓ２０）。そのブレンディング処理された画像データが再度フレームバッファ６６に格納される。
【００８５】
上記の工程Ｓ１８，Ｓ２０が、半透明ポリゴンの重なりの全ての層に対して繰り返して行われる。そして、最後にフレームバッファ６６内の画像データが、表示装置６８に供給され、表示される（Ｓ２２）。
【００８６】
以下、上記のそれぞれの処理について、具体的な例を利用して詳細に説明する。
【００８７】
［不透明ポリゴンの処理］
図１１は、不透明ポリゴンの処理を説明する為の例を示す図である。図１１（Ａ）には、表示画面１０１の例が示される。この表示画面１０１内には、ポリゴンＡ、ポリゴンＢ及びポリゴンＣが図示される通り一部重なっている。図１１（Ｂ）は、表示画面１０１の中央水平線に沿ったポリゴンの奥行きの関係を示す。即ち、ポリゴンＡは最も奥（Ｚ値最大）に位置し、ポリゴンＢ、ＣはポリゴンＡよりも手前側に位置するが、互いに交差している。
【００８８】
かかる不透明ポリゴンの場合は、ポリゴンが重なりあう領域は、奥側に位置するポリゴンの領域を消去する陰面消去処理が行われる。最も一般的な方法は、ラスタスキャン法によりそれぞれのポリゴンのピクセルのＺ値を求め、Ｚ値レジスタに既に書き込まれたＺ値と比較するＺバッファ法である。
【００８９】
図１２は、本実施の形態例の不透明ポリゴンの処理のフローチャート図である。本実施の形態例の不透明ポリゴンの処理は、フラクタル処理を利用してトランスマスクデータを生成する手法を利用する。図２に示された、マスクコントロール部５３では、トランスマスクレジスタ５３３と排他処理部５３１とが使用され、比較器５６では、不透明ポリゴンＺ値レジスタ５６１と、Ｚ比較器５６４とが使用される。そして、不透明ポリゴンのデータに従って、フラクタル処理部５５でポリゴン領域を示すマスクデータを生成し、Ｚ比較器５６４により陰面消去処理して奥側に位置する領域をマスクデータから削除して、それぞれのトランスマスクレジスタに保存する。また、各不透明ポリゴンのトランスマスクデータは、それぞれ排他処理部５３１により排他処理され、再度トランスマスクレジスタ５３３に保存される。上記の処理が全ての不透明ポリゴンに対して行われる。そして、最終的に形成されたトランスマスクレジスタのマスクデータがレンダリング処理部５２に転送される。
【００９０】
図１３〜１６は、図１１の例を処理する場合のトランスマスクデータの変化を示す図である。また、図３４〜３７は、図１２のフローチャートの各処理におけるデータの流れを示す図である。図３４は、ステップＳ５０〜Ｓ５５の処理を、図３５，３６は、ステップＳ５６の処理を、そして、図３７はステップＳ５７の処理をそれぞれ示す。これらの図１２〜１６、３４〜３７を参照しながら、不透明ポリゴンの処理を説明する。
【００９１】
不透明ポリゴンの処理の順番は特に問わない。仮に、図１１の例のポリゴンＡ，Ｂ，Ｃの順番に処理されるとする。先ず、ポリゴンＡについて、プリミティブバッファ５２は、ジオメトリ処理部４８からポリゴンデータであるプリミティブデータまたはそのＩＤを受け取り、保存する（Ｓ５０）。そして、プリミティブバッファ５２は、ポリゴンデータのうちフラクタル処理に必要なデータをフラクタルセットアップ部５４に供給する。このフラクタル処理に必要なデータとは、例えば、頂点パラメータの内の表示座標（Ｘ，Ｙ）及びＺ値である（Ｓ５１）。マスクコントロール部５３は、空いているエリアマスクレジスタ５３４にマスクパターンをセットして、フラクタル処理部５５に初期マスクデータとして供給する（Ｓ５２）。
【００９２】
この初期マスクデータは、図１３のマスク１０２を示すデータである。最初の処理では、初期マスクデータは全てのビットが有効「１」にセットされる。図１３以下、黒い部分は有効領域であることを示す。
【００９３】
次に、フラクタルセットアップ部５４は、領域判定の為の初期値を求め、フラクタル処理部５５に供給する（Ｓ５３）。この初期値は、図９のステップＳ３で示された通り、ｄ１，ｄ２，ｄ３，（∂ｚ／∂ｘ）、（∂ｚ／∂ｙ）、ｃｚなどである。そして、フラクタル処理部５５は、初期値をもとに領域判定のフラクタル処理を行いマスクデータを求め、初期マスクデータと論理積演算する。フラクタル処理部５５は、更にピクセルのＺ値演算をフラクタル処理で求める（Ｓ５４）。かかる領域判定のフラクタル処理とＺ値演算のフラクタル処理は、既に説明した通りである。
【００９４】
上記のフラクタル処理部５５により生成されたマスクデータは、図１３のマスクデータ１０３に示される通りである。ポリゴンＡは、最初のポリゴンであるので、全ての領域が有効領域として判定される。かかるマスクデータ１０３及びＺ値は、比較器５６のＺ比較器５６４に与えられる。
【００９５】
Ｚ比較器５６４は、上記フラクタル処理で求めたＺ値とＺレジスタ５６１のＺ値と比較し、陰面消去処理によりマスクデータ１０３から陰の領域を削りマスクコントロール部５３に与える。また、有効な領域に対応するＺ値を不透明ポリゴンＺ値レジスタ５６１に保存、更新する（Ｓ５５）。この場合も、最初のポリゴンであるので陰面消去処理によっても削られる領域はなく、Ｚ比較器５６４から出力されるマスクデータは、図１３のマスク１０４の如くなる。このマスク１０４はマスクコントロール部５３に与えられる。
【００９６】
そして、マスクコントロール部５３は、供給されたマスク１０４のデータをトランスマスクレジスタ５３３に保存し（Ｓ５６、図３５）、他のトランスマスクレジスタのマスクデータと排他処理を行い、他のマスクデータを削除する（Ｓ５６、図３６）。即ち、マスク１０４がポリゴンＡに対応するトランスマスクレジスタ５３３に記録される。また、他のポリゴンは未だ処理されていないので、他のトランスマスクレジスタは存在しない。従って、ここでは他のトランスマスクとの排他処理は行われない。
【００９７】
次に、ポリゴンＢの処理が行われる。ポリゴンＢについても、ポリゴンＡと同様に、図１２中のステップＳ５０からＳ５６の処理が行われる。図１４に、ポリゴンＢの場合の、ステップＳ５２での初期値マスク１０７、ステップＳ５４でフラクタル処理部が生成したマスク１０８及びステップＳ５５でＺ比較器５６４が生成してトランスマスクレジスタに保存されるマスク１０９が示される。そして、ステップＳ５６にて、排他処理部５３１は、ポリゴンＢのトランスマスク１０９とポリゴンＡのトランスマスクレジスタ内のマスク１０４との排他処理演算を行い、重なり合う領域をポリゴンＡのトランスマスク１０４から削除し、図１６に示される新たなトランスマスク１０５を生成し、ポリゴンＡのトランスマスクレジスタ５３３に保存する。
【００９８】
ポリゴンＢのトランスマスク１０９は、Ｚ値比較の結果有効となった領域を有するので、先に処理されたポリゴンＡのトランスマスク１０４と重なる領域は、ポリゴンＡのトランスマスク１０４から削除されて、新たなトランスマスク１０５（図１５）となる。
【００９９】
図３６に示される通り、この排他処理は、比較部５６から供給されるポリゴンＢのトランスマスクデータと、すでに保存されているポリゴンＡのトランスマスクレジスタ５３３内のトランスマスクデータとの間で行われる。処理されたポリゴンＡのトランスマスクデータは、再度トランスマスクレジスタ５３３内に保存される。また、ポリゴンＢのトランスマスクデータは、異なるレイヤー内のトランスマスクレジスタ５３３内に保存される。
【０１００】
上記の説明から理解されるとおり、トランスマスク１０９と１０４との排他処理は、有効領域のデータを「１」とすると、（１０９）・（！１０４）なる論理演算である。トランスマスク１０９とトランスマスク１０４の反転データとの論理積である。尚、本明細書内にて！は、反転論理を意味し、（！１０４）は（１０４）の反転或いは否定ビットを意味する。
【０１０１】
次に、ポリゴンＣの処理が行われる。ポリゴンＣについても、ポリゴンＡと同様に、図１２中のステップＳ５０からＳ５６の処理が行われる。図１５に、ポリゴンＣの場合の、ステップＳ５２での初期マスク１１１、ステップＳ５４でフラクタル処理部が生成したマスク１１２及びステップＳ５５でＺ比較器５６４が生成してトランスマスクレジスタに保存されるマスク１１３が示される。ポリゴンＣの場合は、Ｚ比較による陰面消去処理にて、処理済のポリゴンＢの背面の領域が削除され、マスク１１３が生成される。そして、ステップＳ５６にて、排他処理部５３１は、ポリゴンＣのトランスマスク１０４とポリゴンＡのトランスマスクレジスタ内のマスク１０５との排他処理演算を行い、重なり合う領域をポリゴンＡのトランスマスク１０５から削除し、図１６に示される新たなトランスマスク１０６を生成し、ポリゴンＡのトランスマスクレジスタ５３３に保存する。同様に、排他処理部５３１は、ポリゴンＣのトランスマスク１０４とポリゴンＢのトランスマスクレジスタ内のマスク１０９との排他処理演算を行い、重なり合う領域をポリゴンＢのトランスマスク１０９から削除し、図１６に示される新たなトランスマスク１１０を生成し、ポリゴンＢのトランスマスクレジスタ５３３に保存する。
【０１０２】
全ての不透明ポリゴンの処理が終了したので、最終的に各トランスマスクレジスタ内のトランスマスク１０６（ポリゴンＡ）、トランスマスク１１０（ポリゴンＢ）及びトランスマスク１１３（ポリゴンＣ）のデータが、それぞれのポリゴンデータと共にレンダリング処理部６２に出力される（Ｓ５７、図３７）。
【０１０３】
レンダリング処理部では、ポリゴンＡのトランスマスク１０６に従って、レンダリングすべき領域について、ポリゴンデータから画像データを演算で求め、フレームバッファ６６に書き込む。同様に、ポリゴンＢ、Ｃのトランスマスク１１０，１１３に従って、レンダリングすべき領域について、画像データを求め、フレームバッファ６６に書き込む。トランスマスク１０６，１１０，１１３はそれぞれ排他処理済であるので、重なり合う領域は存在しない。従って、レンダリング処理部での画像データを求める演算処理は無駄なく行われる。
【０１０４】
フラグメント領域が６４ピクセルで構成される場合は、それぞれのトランスマスクレジスタは６４ビットのデータから構成される。従って、上記の排他処理部５３１は、６４組の排他論理（Ａ・！ＩＮ、Ｂ・！ＩＮ、Ｃ・！ＩＮ）の演算回路を有する。即ち、トランスマスク１０５は論理演算Ａ・！Ｂにより求められ、トランスマスク１０６は論理演算Ａ・！Ｃにより求められる。また、トランスマスク１１０は論理演算Ｂ・！Ｃにより求められる。尚、上記のＡ，Ｂ，ＣはそれぞれポリゴンＡ，Ｂ，Ｃのトランスマスクデータを、！Ｂ、！ＣはそれぞれポリゴンＢ、Ｃのトランスマスクデータの反転データを示す。
【０１０５】
上記の通り、半透明ポリゴンの画像処理では、トランスマスクレジスタを利用して、それぞれのポリゴンの有効領域を示すマスクデータを生成し、Ｚ値比較による陰面消去処理により手前側に位置する有効領域を示すマスクデータをトランスマスクとして生成し、そのトランスマスクと他のポリゴンのトランスマスクとの排他処理を行う。特に、ポリゴンの処理の順番に起因して必要になる処理済のポリゴンのトランスマスクとの陰面消去処理は、排他処理用の論理回路を利用することで容易に実現できる。更に、フラクタル処理を利用することにより、ポリゴンの存在領域の判定とＺ値の演算を短時間で行うことも可能になる。
【０１０６】
［半透明ポリゴンの処理］
図１７は、半透明ポリゴンの処理を説明する為の例を示す図である。図１７（Ａ）には、表示画面２０１の例が示される。この表示画面２０１内には、半透明ポリゴンＥ、半透明ポリゴンＦ、半透明ポリゴンＧ及び不透明ポリゴンＤが、図示される通り一部重なりあっている。図１７（Ｂ）は、表示画面２０１の中央水平線に沿ったポリゴンの奥行きの関係を示す。即ち、ポリゴンＥは最も奥（Ｚ値最大）に位置し、ポリゴンＦ、ＧはポリゴンＥよりも手前側に位置するが、互いに交差している。そして、不透明ポリゴンＤが最も手前（Ｚ値最小）に位置する。
【０１０７】
かかる半透明ポリゴンの画像処理では、第１に不透明ポリゴンにより隠れている部分は、レンダリング処理の対象から除かれる。第２に、半透明ポリゴンの重なり合った領域は、それぞれの色データを手前側の半透明ポリゴンの透明度α値にしたがってブレンディング処理する必要がある。しかも、重なり合った領域の色データの演算は、常に、奥側のポリゴンの色データＸに手前側のポリゴンの色データＹを透明度α値にしたがって求められることが必要である。即ち、重なり合った領域の色データＹＹの演算は、ＹＹ＝α・Ｘ＋（１−α）・Ｙである。従って、重なり合う領域では、奥側のポリゴンの色データを含む画像データが先に生成され、手前側のポリゴンの色データを含む画像データが後で生成されて、ブレンディング処理されることが必要である。
【０１０８】
そこで、本実施の形態例では、図１７の表示画面２０１に示された不透明ポリゴンＤと半透明ポリゴンＥ，Ｆ，Ｇの画像処理を行う場合は、最初に不透明ポリゴンの処理を行い、その後、半透明ポリゴンの処理を行う。しかも、半透明ポリゴンについて、表示画面内のＺ方向で最も奥にある１枚目のポリゴンの領域を最初にレンダリング処理し、その後、逐次２枚目のポリゴンの領域、３枚目のポリゴンの領域についてレンダリング処理を行う。そして、全てのポリゴンの領域が処理されるまで続ける。
【０１０９】
半透明ポリゴンの不透明ポリゴンにより隠れている領域を削除する処理は、上記してきた不透明ポリゴンのＺ値レジスタ５６１のＺ値と比較する陰面消去処理により実現可能である。一方、重なりあう半透明ポリゴンの奥側の領域は、半透明ポリゴンのＺ値が格納されるトランスＺ値レジスタ５６２のトランス（透明）Ｚ値と比較しＺ値が大きい場合に有効とする逆陰面消去処理により、検出することができる。それと同時に、不透明ポリゴンの画像処理でも行った通り、一旦生成されたトランスマスクを利用して、既に生成された他の半透明ポリゴンのトランスマスクと排他処理を行うことで、処理の順番にかかわらず、有効な最も奥側の領域を検出することができる。
【０１１０】
上記の処理を行う為に、マスクコントロール部５３は、トランスマスクレジスタ５３３と、エリアマスクレジスタ５３４と排他処理部５３１とを使用する。トランスマスクレジスタとエリアマスクレジスタは、不透明ポリゴンの場合と同様に、６４ピクセルのフラグメント領域の場合は、６４＋１の６５組の６４ビットのレジスタで構成される。また、比較器５６は、不透明ポリゴンのＺ値を格納するＺ値レジスタ５６１と、半透明ポリゴンのトランスＺ値を格納するトランスＺ値レジスタ５６２と、Ｚ比較器５６４とトランスＺ比較器５６５とを利用する。エリアマスクとは、半透明ポリゴンの描画処理すべき領域を示すマスク（第１のマスク）である。従って、最初の処理では不透明ポリゴンにより隠れている領域を除いた全ての領域にビットデータ「１」が記録される。また、トランスマスクとは、レンダリング処理部に供給される半透明（トランスルーセント）ポリゴンのレンダリング対象領域を示すマスク（第２のマスク）である。そして、トランスマスクによりレンダリング処理される毎に、エリアマスクからレンダリング済のトランスマスクの領域が削除される。最後にエリアマスクが全て無効になると、半透明ポリゴンの画像処理が終了する。エリアマスクからトランスマスクの領域を削除する演算は、排他処理部５３１により行われる。そして、処理の必要上、同時に２つのマスクレジスタ５３３，５３４が使用される。
【０１１１】
図１８は、半透明ポリゴンの画像処理のフローチャート（１）を示す図である。図１９は、同フローチャート（２）を示す図である。更に、図２０〜２２は、表示画面の奥から１枚目の領域を有効領域とするトランスマスクの生成処理を行う時のエリアマスクとトランスマスクの変化を示す図である。図２３，２４は、表示画面の奥から２枚目の領域を有効領域とするトランスマスクの生成処理を行う時のエリアマスクとトランスマスクの変化を示す図である。そして、図２５，２６は、表示画面の奥から３枚目の領域のトランスマスク生成の処理を行う時のエリアマスクとトランスマスクの変化を示す図である。そして、図２７は、図２０〜２６の全てを表示する図である。図２７を適宜参照することで、画像処理の理解を容易にする。更に、図３８〜４２は、図１８，１９の半透明ポリゴンの処理フローチャートに対応した図２のマスク生成部５０内のデータの流れを示す図である。
【０１１２】
これらの図を参照しながら、半透明ポリゴンの画像処理を説明する。前提として、不透明ポリゴンの画像処理を終了している。また、半透明ポリゴンの処理の順番は特に問わない。仮に、図１７の例のポリゴンＥ，Ｆ，Ｇの順番に処理されるとする。先ず、ポリゴンＥについて、プリミティブバッファ５２は、ジオメトリ処理部４８から半透明ポリゴンデータであるプリミティブデータまたはそのＩＤを受け取り、保存する（Ｓ５０）。そして、プリミディブバッファ５２は、ポリゴンデータのうちフラクタル処理に必要なデータをフラクタルセットアップ部５４に供給する。このフラクタル処理に必要なデータとは、例えば、頂点パラメータの内の表示座標及びＺ値である（Ｓ５１）。マスクコントロール部５３は、空いているマスクレジスタ５３４にマスクパターンをセットして、フラクタル処理部５５に初期マスクデータとして供給する（Ｓ５２）。
【０１１３】
この初期マスクデータは、図２０のマスク２０２を示すデータである。最初の処理では、初期マスクデータは全てのビットが有効「１」にセットされる。
【０１１４】
次に、フラクタルセットアップ部５４は、領域判定の為の初期値を求め、フラクタル処理部５５に供給する（Ｓ５３）。この初期値は、図９のステップＳ３で示された通り、ｄ１，ｄ２，ｄ３，（∂ｚ／∂ｘ）、（∂ｚ／∂ｙ）、ｃｚなどである。そして、フラクタル処理部５５は、初期値をもとに領域判定のフラクタル処理を行いマスクデータを求め、初期マスクデータと論理積演算する。フラクタル処理部５５は、更にピクセルのＺ値演算をフラクタル処理で求める（Ｓ５４）。かかるマスクデータ及びＺ値は、比較器５６のＺ比較器５６４に与えられる。
【０１１５】
Ｚ比較器５６４は、上記フラクタル処理で求めたピクセルのＺ値と不透明ポリゴンのＺ値レジスタ５６１のＺ値と比較し、陰面消去処理によりマスクデータから不透明ポリゴンＤの陰になっている領域を削り、エリアマスクとしてマスクコントロール部５３に与える。具体的には、ピクセルのＺ値が不透明ポリゴンのＺ値レジスタ５６１のＺ値よりも小さい場合に有効、大きい場合に無効とされる。これが条件１である（Ｓ６０）。この場合、エリアマスクは図２０中のマスク２０４の通りになる。かかるエリアマスク２０４は、ポリゴンＥの領域から手前側の不透明ポリゴンＤの領域の部分が削除されていて、半透明ポリゴンのレンダリング対象領域を示す。このエリアマスク２０４はマスクコントロール部５３に与えられる。
【０１１６】
次に、トランスＺ比較器５６５は、フラクタル処理で求めたピクセルのＺ値と半透明ポリゴンのトランスＺ値レジスタ５６２のトランスＺ値と比較し、逆陰面消去処理によりエリアマスクから他の半透明ポリゴンの手前の領域を削り、トランスマスク２０３−Ｐとしてマスクコントロール部５３に与える。具体的には、ピクセルのＺ値がトランスＺ値レジスタ５６２のＺ値よりも大きい場合に有効、小さい場合に無効とされる。これが条件２である。また、有効な領域に対応するトランスＺ値をトランスＺ値レジスタ５６２に保存、更新する（Ｓ６１）。この場合は、最初の半透明ポリゴンＥであるので、エリアマスク２０４の全ての領域がトランスマスク２０３−Ｐの領域となる。以上のステップＳ５０〜Ｓ６１でのデータの流れが、図３８に示される。
【０１１７】
マスクコントロール部５３は、供給されたエリアマスクデータ２０４をエリアマスクレジスタ５３４に、トランスマスクデータ２０３−Ｐをトランスマスクレジスタ５３３に保存する（Ｓ６２、図３９）。また、マスクコントロール部５３は、トランスマスク２０３−Ｐについて、他のトランスマスクレジスタのトランスマスクデータと排他処理を行い、他のトランスマスクを削除する。この排他処理は、排他処理部５３１により行われる（Ｓ６２、図４０）。但し、半透明ポリゴンＥは最初のポリゴンであるので、他の生成済のトランスマスクは存在しないので、この時点では排他処理は行われない。
【０１１８】
次に、半透明ポリゴンＦの画像処理が、図２１に示される様に行われる。半透明ポリゴンＦについても、図１８のステップＳ５０〜Ｓ５４及びＳ６０〜６２の処理が行われる。その結果、不透明ポリゴンと陰面消去処理されて条件１を満たすエリアマスク２０７が生成される（Ｓ６０）。更に、処理済の半透明ポリゴンとの逆陰面消去処理により、上記条件２を満たすトランスマスク２０６−Ｐが生成される（Ｓ６１）。トランスマスク２０６−Ｐから理解される通り、より奥側に位置する半透明ポリゴンＥの領域が削除されている。そして、マスクコントロール部５３は、そのポリゴンＦのトランスマスク２０６−Ｐと、既に生成されている他のポリゴンＥのトランスマスク２０３−Ｐとで排他処理を行う（Ｓ６２、図４０）。その結果、両トランスマスク２０３−Ｐと２０６−Ｐとの間で重なり合う領域は存在しないので、ポリゴンＥのトランスマスク２０３−Ｐは変更ない。
【０１１９】
最後に、半透明ポリゴンＧの画像処理が、図２２に示される様に行われる。半透明ポリゴンＧについても、図１８のステップＳ５０〜Ｓ５４及びＳ６０〜６２の処理が行われる。その結果、不透明ポリゴンと陰面消去処理されて条件１を満たすエリアマスク２１０が生成される（Ｓ６０）。更に、処理済の半透明ポリゴンとの逆陰面消去処理により、上記条件２を満たすトランスマスク２０９−Ｐが生成される（Ｓ６１）。トランスマスク２０９−Ｐから理解される通り、より奥側に位置する半透明ポリゴンＥの領域が削除されている。
【０１２０】
そして、マスクコントロール部５３は、そのポリゴンＧのトランスマスク２０９−Ｐと、既に生成されている他のポリゴンＥのトランスマスク２０３−Ｐとで排他処理を行う（Ｓ６２、図４０）。その結果、両トランスマスク２０３−Ｐと２０９−Ｐとの間で重なり合う領域は存在しないので、最終的なポリゴンＥのトランスマスク２０３（図２０）は変更ない。同様に、マスクコントロール部５３は、そのポリゴンＧのトランスマスク２０９−Ｐと、既に生成されている他のポリゴンＦのトランスマスク２０６−Ｐとで排他処理を行う（Ｓ６２、図４０）。その結果、両トランスマスク２０６−Ｐと２０９−Ｐとの間で重なり合う領域が、先に処理されていたポリゴンＦのトランスマスク２０６−Ｐから削除される（図２１の領域２０６Ｄ）。最終的なポリゴンＦのトランスマスク２０６が、図２１に示される通り生成される。また、ポリゴンＧのトランスマスク２０９−Ｐは、最後の半透明ポリゴンであるので、そのまま最終のトランスマスク２０９となる。
【０１２１】
上記の条件１（不透明ポリゴンよりもＺ値が小さい）と条件２（他の半透明ポリゴンよりもＺ値が大きい）とを満たすポリゴンＥ，Ｆ，Ｇの領域が、それぞれトランスマスク２０３，２０６，２０９に示される。かかる領域は、図１７から明らかな通り、表示画面の最も奥に位置する１枚目の領域を示す。
【０１２２】
そして、図１９のフローチャートに示される通り、マスクコントロール部５３は、トランスマスクレジスタ５３３にそれぞれ保存されている有効なトランスマスク２０３，２０６，２０９のデータを、そのポリゴンデータと共にレンダリング処理部６２に出力する（Ｓ６３、図４１）。そして、レンダリング処理部６２では、トランスマスクの有効領域について、色データを含む画像データを演算して求め、フレームバッファ６６に保存する。かかる画像データの色データは、後で、より手前に位置する半透明ポリゴンの色データとブレンディング処理される。以上で、１枚目の領域の画像処理が終了した。
【０１２３】
次に、２枚目以上の領域の画像処理が、図１９のフローチャートのステップＳ６４〜Ｓ７５により行われる。
【０１２４】
半透明ポリゴンの２枚目の領域を検出するにあたり、描画すべき領域を示すエリアマスク２０４，２０７，２１０から、すでに１枚目の領域として描画済の領域であるトランスマスク２０３，２０６，２０９の領域が削除される。即ち、マスクコントロール部５３は、排他処理部５３１により、エリアマスクレジスタ５３４のそれぞれのポリゴンのエリアマスクデータとトランスマスクレジスタ５３３の対応するポリゴンのトランスマスクデータとの排他論理（ＡＭ・！ＴＭ、但しＡＭはエリアマスクデータで、！ＴＭはトランスマスクデータの反転データ）演算を行い、その結果をエリアマスクレジスタ５３４に保存する（Ｓ６４、図４１））。
【０１２５】
そして、更に、Ｚ比較器５６４は、トランスＺ値レジスタ５６２をクリアする。即ち、レジスタ５６２のビットデータを全て「０」にする（Ｓ６５）。以上で、半透明ポリゴンの２枚目の領域の判定の準備が整った。
【０１２６】
図２３は、半透明ポリゴンＦの２枚目の処理におけるエリアマスクとトランスマスクを示し、図２４は、半透明ポリゴンＧの２枚目の処理におけるエリアマスクとトランスマスクを示す。上記したステップＳ６４の排他処理により、表示画面の最も奥に位置する半透明ポリゴンＥのエリアマスク２０４は、トランスマスク２０３と一致し、全て削除されて、２枚目以降の処理は不要である。ポリゴンＦはそのエリアマスク２１１の領域が、ポリゴンＧはそのエリアマスク２１４の領域がそれぞれ未描画の領域である。
【０１２７】
図１９のフローチャートに沿って及び図４２を参照して説明すると、プリミティブバッファ５２は、ポリゴンデータのうちフラクタル処理に必要なデータをフラクタルセットアップ部５４に供給する（Ｓ６６）。この処理は、ステップＳ５１と同様である。また、マスクコントロール部５３は、フラクタル処理部５５にエリアマスクレジスタ５３４内のエリアマスクのデータ（初期マスクデータ）を供給する（Ｓ６７）。即ち、ポリゴンＦの場合はエリアマスク２１１、ポリゴンＧの場合はエリアマスク２１４である。そして、フラクタルセットアップ部５４は、領域判定の為の初期値を求め、フラクタル処理部５５に供給する（Ｓ６８）。この処理は、ステップＳ５３と同様である。
【０１２８】
そして、フラクタル処理部５５は、初期値をもとに領域判定のフラクタル処理を行いマスクデータを求め、エリアマスクデータ２１１または２１４と論理積演算し、更にピクセルのＺ値演算をフラクタル処理で求める（Ｓ６９）。Ｚ比較器５６４は、不透明ポリゴンのＺ値レジスタ５６１のＺ値と比較し、陰面消去処理によりマスクデータから陰の領域を削り、エリアマスク２１３または２１６をマスクコントロール部に与える（Ｓ７０）。ここの処理は、上記した条件１を満たす領域の判定である。
【０１２９】
次に、Ｚ比較器５６４は、トランスＺ値レジスタ５６２のトランスＺ値と比較し、エリアマスク２１３または２１６からＺ値が小さいより手前の領域を削りトランスマスク２１２または２１５を生成し、マスクコントロール部に与える。また、Ｚ値が大きい奥側のＺ値をトランスＺ値レジスタ５６２に保存、更新する（Ｓ７１）。即ち、上記の条件２を満足する領域を検出する。ポリゴンＦから先に処理されたとすると、そのトランスマスク２１２ーＰは、エリアマスク２１３と同じである。また、その後に処理されるポリゴンＧのトランスマスク２１５ーＰは、より奥に位置するポリゴンＦの領域（図２４中の領域２１５Ｄ）が逆陰面消去処理により削除される。
【０１３０】
そして、マスクコントロール部５３は、供給されたエリアマスクデータ２１３または２１６をエリアマスクレジスタ５３４に、トランスマスクデータ２１２−Ｐまたは２１５−Ｐをトランスマスクレジスタ５３３にそれぞれ保存する（Ｓ７２、図３９）。そして、他のトランスマスクレジスタのトランスマスクデータと排他処理を行い、重なった領域を他のトランスマスクから削除する（Ｓ７２、図４０）。その結果、先に処理されたポリゴンＦのトランスマスク２１２−ＰからポリゴンＧのトランスマスク２１５−Ｐと重なった領域（図２３中の領域２１２Ｄ）が削除され、トランスマスク２１２となる。
【０１３１】
有効なエリアマスクを有するポリゴンＦとポリゴンＧとの処理が終わると、２枚目の最終トランスマスク２１２，２１５が確定したことになる。そこで、マスクコントロール部５３は、トランスマスクレジスタ５３３内の有効なトランスマスク２１２，２１５とポリゴンデータをレンダリング処理部６２に出力する（Ｓ７３、図４１）。
【０１３２】
レンダリング処理部では、トランスマスクとポリゴンデータとから２枚目の色データを演算し、既に保存しているフレームバッファ６６の画像データの色データに対して、２枚目のポリゴンの透明度α値に従って、上記した通りブレンディング処理を行う。その結果得られた色データは再度フレームバッファ６６に保存される。
【０１３３】
ステップＳ６４と同様に、マスクコントロール部５３は、エリアマスク２１３，２１６から既に描画されたトランスマスク２１２，２１５の領域を削除する為に、排他処理部５３１により排他処理を行う（Ｓ７４、図４１）。その結果、図２５，２６に示される通り、未描画領域を示すエリアマスク２１７，２２０がそれぞれ生成される。その後、３枚目の領域についての処理が行われる。３枚目の領域の処理も、２枚目の領域の処理と同様に、トランスＺ値レジスタ５６２をクリアし（Ｓ６５）、ステップＳ６６からＳ７２が実行される。その結果、図２５，２６に示される通り、エリアマスク２１９，２２２とトランスマスク２１８，２２１とがそれぞれ生成され、それぞれのレジスタに保存される。
【０１３４】
そして、マスクコントロール部５３は、有効なトランスマスク２１８，２２１とそのポリゴンデータをレンダリング処理部６２に出力する（Ｓ７３、図４１）。レンダリング処理部６２は、トランスマスク２１８，２２１の領域について、ブレンディング処理を行って、色データを含む画像データを再度フレームバッファ６６に保存する。
【０１３５】
最後に、マスクコントロール部５３は、エリアマスク２１９，２２２から描画済の領域を示すトランスマスク２１８，２２１を削除すると（Ｓ７４、図４１）、有効なエリアマスクは消滅する。即ち、全ての描画すべき領域の処理が終了したことになる（Ｓ７５）。
【０１３６】
上記の半透明ポリゴンに対する処理において、不透明ポリゴンに対する陰面消去処理を行うために、条件１を満たすエリアマスクを生成した。しかし、不透明ポリゴンが存在せず、半透明ポリゴンのみの場合は、条件１の処理は省略される。
【０１３７】
以上の通り、半透明ポリゴンに対する処理は、エリアマスクレジスタ５３４とトランスマスクレジスタ５３３とを同時に利用して、描画すべきポリゴンの領域を奥側から順にトランスマスクレジスタ５３３に生成し、レンダリング処理部に供給する。そして、描画すべきポリゴンの領域をエリアマスクレジスタ５３４に保存し、レンダリング処理した領域を逐次削除していく。そして、エリアマスクレジスタ５３４の有効領域がなくなるまで、処理を繰り返す。２種類のマスクレジスタと排他処理部とを利用するだけで、半透明ポリゴンの処理を効率的に行うことができる。
【０１３８】
［影処理］
次に、影処理について説明する。影処理では、光源からの光がポリゴンによって遮断された領域を検出し、その領域については光源による処理を行わない。従って、その領域は輝度が低いままとなり、表示された時に影の領域として表示される。
【０１３９】
画像処理におけるＺ値を利用した陰面消去処理を説明したが、同様のハードウエアを利用して物体の影を描くことができるシャドーポリゴン法が提案されている。例えば、特開平2-73479 である。かかるシャドーポリゴン法は、シャドーボリュームと呼ばれる影付けの為の仮想の物体を利用する。シャドーボリュームとは、光源と物体によって生じる影空間であり、そのシャドーボリュームの内側がその物体の影になる領域であり、その外側は光源の光が照射される領域である。
【０１４０】
シャドーボリュームは、半無限の多面体であり、それを構成する複数の側面はシャドーポリゴンと呼ばれる半無限の多角形である。但し、コンピュータを利用した実際の画像処理においては、シャドーボリュームは、有限な多面体として、シャドーポリゴンは有限の多角形として処理される。従って、シャードーボリュームは複数のシャードーポリゴンで構成され、シャドーポリゴンを通常のポリゴンと同様に取り扱い、影処理を行うことができる。
【０１４１】
本実施の形態例では、影処理に上記のエリアマスク５３４、排他的論理和処理部５３２及び論理和処理部５３８とを利用する。本実施の形態例の説明をする前に、上記の特開平2-73479 のアルゴリズムについて簡単に説明する。
【０１４２】
図２８は、シャドーボリュームとそれを構成するシャドーポリゴンを利用した陰影処理を示す図である。この例では、光源ＬＳ１，ＬＳ２，ＬＳ３により形成されるシャドーボリュームＳＶ１，ＳＶ２，ＳＶ３が、不透明ポリゴンＰ１，Ｐ２，Ｐ３により生成される。図中、左側の無限遠に光源が存在するので、不透明ポリゴンＰ１，Ｐ２，Ｐ３の右側にそれぞれシャドーボリュームＳＶ１，ＳＶ２，ＳＶ３が生成される。また、図中、シャドーボリュームの断面が示され、従って、シャドーボリュームＳＶ１はシャドーポリゴンＳＰ１１，ＳＰ１２により形成され、シャドーボリュームＳＶ２はシャドーポリゴンＳＰ２１，ＳＰ２２により形成され、シャドーボリュームＳＶ３はシャドーポリゴンＳＰ３１，ＳＰ３２により形成される。
【０１４３】
今仮に、視点の位置がシャドーボリュームの外の位置の視点１にあるとする。シャドーボリュームの中に位置する陰の領域か、外に位置する光が照射されている領域かを検出するためには、視点１からＺ軸の方向（矢印方向）にシャドーポリゴンを通過したか否かをカウントし、そのカウント値が偶数か奇数かを検出する。図２８に示される通り、視点１が、シャドーボリュームの外側に位置する場合は、偶数がシャドーボリュームの外の領域、奇数がシャドーボリュームの中の領域であることが理解される。
【０１４４】
従って、あるポリゴンの表面が影の領域か否かの判断をするためには、そのポリゴンの位置よりも手前、即ちポリゴンの位置と視点の位置の間に存在するシャドーポリゴンの数をカウントし、そのカウント値が偶数であれば影の領域内、奇数であれば影の領域外であるとすれば良い。但し、視点２の如くシャドーボリュームＳＶ１，ＳＶ２が重なる領域が存在する場合は、上記偶数、奇数の判断はできなくなる。その場合は、いずれか１つのシャドーボリュームについてのみ判断し、後に残りのシャドーボリュームについて判断する必要がある。
【０１４５】
例えば、図２８中に示されるシャドーボリュームＳＶ３を横切るポリゴンＰ４が存在するとすると、ポリゴンＰ４の領域ａ−ｂは、視点１との間にシャドーポリゴンＳＰ３１，ＳＰ３２が２枚存在するので、シャドーボリュームＳＶ３の外の領域と判断される。また、ポリゴンＰ４に領域ｂ−ｃは、視点１との間にシャドーポリゴンＳＰ３２が１枚存在するので、シャドーボリュームＳＶ３の中の領域と判断される。そして、領域ｃ−ｄは、視点１との間にシャドーポリゴンが存在しないので、シャドーボリュームＳＶ３の外と判断される。
【０１４６】
上記の通り、シャドーボリュームとシャドーポリゴンを利用した影処理は、上記説明したＺ値を利用した陰面消去法と同様の方法を利用し、例えば視点との間に何枚のシャドーポリゴンが存在するかをカウントすることで行うことができる。
【０１４７】
尚、視点がシャドーボリューム内に位置する場合は、上記の奇数と偶数に対して、それぞれ影の領域外と影の領域内との関係が視点がシャドーボリューム外に位置する場合と逆になる。
【０１４８】
同様の考え方によれば、Ｚ値がより大きいシャドーポリゴンを検出する逆陰面消去法と同様の方法が利用できる。即ち、ポリゴンＰ４と無限遠との間にあるシャドーポリゴンの数をカウントすることで、同様にポリゴンＰ４の領域がシャドーボリューム内に位置するか否かを検出できる。従って、その場合は、ポリゴンＰ４のＺ値よりも大きいＺ値を有するシャドーポリゴンの領域が、奇偶転換の対象領域となる。
【０１４９】
［影処理］
影処理の方法は、図２に示したマスク生成部を利用して、フラクタル処理によるシャドーポリゴンの有効領域をエリアマスクに生成し、視点との間のシャドーポリゴンの枚数の奇数か偶数かを格納する影処理マスクデータを生成してエリアマスクレジスタに保存することを基本とする。或いは、無限遠との間のシャドーポリゴンの枚数の奇数か偶数かを格納する影処理マスクデータを生成してエリアマスクレジスタに保存することを基本とする。更に、上記の影処理マスクデータをシャドーボリューム毎に生成し、最後の全てのシャドーボリュームに対応する影処理マスクデータの論理和をとり、合成された影処理マスクデータを生成してレンダリング処理部に供給する。シャドーボリュームが重なり合う領域はいずれにしても影になるので、それぞれのシャドーボリュームにより影になる領域を影処理マスクデータとして別々に求めて、最後の論理和をとる。また、影処理の前に不透明ポリゴンのレンダリングが終了し、そのＺ値が不透明ポリゴンＺ値レジスタ５６１に格納されていることを前提とする。
【０１５０】
従って、影処理では、図２中のマスク生成部５０において、マスクコントロール部５３の排他的論理和処理部５３２、論理和処理部５３８、シャドーボリューム毎に設けられたエリアマスクレジスタ５３４が利用される。また、比較部５６の、不透明ポリゴンＺ値レジスタ５６１とＺ値比較器５６４とが利用されるだけである。
【０１５１】
図２９は、影処理を説明する為の例を示す図である。図２９（Ａ）は、表示画面内のシャドーボリュームＳＶ１，ＳＶ２と、通常ポリゴンＰ１，Ｐ２とからなる例であり、図２９（Ｂ）は、Ｚ値方向のシャドーボリュームＳＶ１，ＳＶ２を構成するシャドーポリゴンの位置関係を示す。シャドーボリュームＳＶ１，ＳＶ２は、いずれも三角錐であり、それぞれ画面前方のシャドーポリゴン１Ｆ、２Ｆと、画面後方の左右のシャドーポリゴン１Ｌ、１Ｒ及び２Ｌ、２Ｒで構成される。
【０１５２】
図３０は、影処理のフローチャート図である。また、図３１、図３２は、図２９の例を影処理により処理した場合の影処理マスクデータのエリアマスクを示す図である。そして、図３３は、最後に合成された合成影処理マスクデータを示す図である。更に、図４３〜４５は、図３０のフローチャートの各データの流れを示す図である。
【０１５３】
図３０のフローチャートの概略は、シャドーボリューム毎に不透明ポリゴンと視点あるいは無限遠との間に位置するシャドーポリゴンを検出し、その個数が奇数か偶数かを格納する影処理マスクデータ（エリアマスクデータ）に対して、その検出された領域について奇数と偶数との反転処理を、排他的論理和処理により行う。この処理を全てのシャドーボリュームに対して繰り返し行い、最後に、それぞれのシャドーボリューム毎に生成したエリアマスクレジスタ内の影処理マスクデータを、論理和処理部５３８で処理して、合成された影処理マスクデータを生成し、レンダリング処理部に供給する。以下、図３０のフローチャートに従って、及び図３１〜３３及び図４３〜４５を参照して影処理を詳細に説明する。
【０１５４】
先ず、不透明ポリゴンＰ１，Ｐ２の処理が終了していることが前提である。ステップＳ１００〜Ｓ１０４は、半透明ポリゴンの画像処理の場合とほぼ同じであるが、影処理の場合は対象がシャドーポリゴンとなる点で異なる。先ず、シャドーポリゴン１Ｆについて、プリミティブバッファ５２は、ジオメトリ処理部４８からシャドーポリゴンデータであるプリミティブデータまたはそのＩＤを受け取り、保存する（Ｓ１００）。そして、プリミティブバッファ５２は、ポリゴンデータを記憶し、ポリゴンデータのうちフラクタル処理に必要なデータをフラクタルセットアップ部５４に供給する。このフラクタル処理に必要なデータとは、例えば、頂点パラメータの内の表示座標及びＺ値である（Ｓ１０１）。プリミティブバッファ５２は、空いているエリアマスクレジスタにマスクパターンをセットして、フラクタル処理部５５に初期マスクデータとして供給する（Ｓ１０２）。この初期マスクデータは、全てのビットが有効「１」にセットされる。
【０１５５】
次に、フラクタルセットアップ部５４は、領域判定の為の初期値を求め、フラクタル処理部５５に供給する（Ｓ１０３）。この初期値は、図９のステップＳ３で示された通り、ｄ１，ｄ２，ｄ３，（∂ｚ／∂ｘ）、（∂ｚ／∂ｙ）、ｃｚなどである。そして、フラクタル処理部５５は、初期値をもとに領域判定のフラクタル処理を行いマスクデータを求め、初期マスクデータと論理積演算する。フラクタル処理部５５は、更にピクセルのＺ値演算をフラクタル処理で求める（Ｓ１０４）。かかるマスクデータ及びＺ値は、比較器５６のＺ比較器５６４に与えられる。
【０１５６】
Ｚ比較器５６４は、上記フラクタル処理で求めたピクセルのＺ値と不透明ポリゴンのＺ値レジスタ５６１のＺ値と比較し、陰面消去処理によりマスクデータから不透明ポリゴンＰ１，Ｐ２の陰になっている領域を削り、図３１のエリアマスク４０２としてマスクコントロール部５３に与える（Ｓ１０５、図４３）。ここでの陰面消去処理は、具体的にはシャドーポリゴンのピクセルのＺ値がＺ値レジスタのＺ値よりも小さい領域を有効にする処理である。或いは、前述の通り逆陰面消去処理により、ピクセルのＺ値がＺ値レジスタのＺ値よりも大きい領域を有効にする処理でも良い。前者の場合は、不透明ポリゴンと視点との間に存在するシャドーポリゴンの領域を有効領域とするアルゴリズムである。後者は、不透明ポリゴンと無限遠との間を有効領域とする逆のアルゴリズムである。
【０１５７】
視点と不透明ポリゴンとの間のシャドーポリゴンをカウントする前者の処理では、ピクセルのＺ値がＺ値レジスタのＺ値よりも小さい場合に有効、大きい場合に無効とされ、エリアマスクは図３１中のマスク４０２の通りになる。かかるエリアマスク４０２は、シャドーポリゴン１Ｆの領域から手前側の不透明ポリゴンＰ１，Ｐ２の領域の部分が削除され、シャドーポリゴンの影処理対象領域を示す。
【０１５８】
そして、マスクコントロール部５３は、排他的論理和処理部５３２により、比較器５６から供給されたエリアマスクデータ４０２と既に保存されているエリアマスクレジスタ５３４内のマスクデータとの排他的論理和処理を行い、エリアマスクレジスタ５３４に保存する（Ｓ１０６、図４４）。エリアマスクレジスタ５３４の初期値は全て、例えば偶数を示す「０」である。従って、上記の排他的論理和処理により、比較器から供給されたエリアマスク４０２の有効領域は、奇数を示す「１」に転換される。即ち、ここでの排他的論理和処理は、不透明ポリゴンと視点（或いは無限遠）との間に位置するシャドーポリゴンの数の奇数か偶数かのデータを反転する処理である。本明細書では、かかる排他的論理和処理を奇偶転換処理と称する。その結果、図３１に示されるエリアマスク４０２が生成される。最初のシャドーポリゴン１Ｆであるので、エリアマスク４０２は、シャドーポリゴン１Ｆの形状と同じである。
【０１５９】
次に、同じシャドーボリュームＳＶ１のシャドーポリゴン１Ｌが、上記と同様にステップＳ１００〜Ｓ１０６に従って処理される。ステップＳ１０５によりマスクコントロール部５３に供給されるマスクデータは、図３１の３０７の如くなる。このマスクデータ３０７に示される領域が、シャドーポリゴン１Ｌのうち不透明ポリゴンＰ１，Ｐ２と視点との間に位置する領域である。そして、マスクデータ４０２と３０７との排他的論理和処理（ＥＯＲ）による奇偶転換処理の結果、図３１に示されるエリアマスク４０３が生成される（Ｓ１０６、図４４）。
【０１６０】
同様に、シャドーボリュームＳＶ１のシャドーポリゴン１ＲがステップＳ１００〜Ｓ１０６に従って処理される。シャドーポリゴン１Ｒのマスクデータ３１１がマスクコントロール部５３に供給され、マスクデータ４０３との排他的論理和処理による奇偶転換処理の結果、図３１に示されるエリアマスク４０４が生成される。以上でシャドーボリュームＳＶ１のＩＤを有するシャドーポリゴンの処理が完了し、エリアマスク４０４がシャドーボリュームＳＶ１により形成される影の領域を示す。従って、このエリアマスク４０４が影処理マスクとしてエリアマスクレジスタ５３４に保存される（Ｓ１０６、図４４）。
【０１６１】
次に、シャドーボリュームＳＶ２のＩＤを有するシャドーポリゴン２Ｆ、２Ｌ、２Ｒが同様にステップＳ１００〜Ｓ１０６に従って処理される。この影処理では、シャドーボリュームの重なり合う領域を考慮することなく、陰面消去処理と奇偶転換処理が行われて、図３２に示す通り、エリアマスク４０５，４０６，４０７が順次生成される。エリアマスク４０７がシャドーボリュームＳＶ２により形成される影の領域を示す。従って、このエリアマスク４０７が影処理マスクとしてシャドーポリゴンＳＶ２に対応するエリアマスクレジスタ５３４に保存される。
【０１６２】
以上の通り、エリアマスク（影処理マスク）はシャドーボリュームに対応してそれぞれ生成される。そして、全てのシャドーボリュームのポリゴンが終了すると（Ｓ１０７）、マスクコントロール部５３は、論理和処理部５３８によりシャドーボリュームＩＤ毎のエリアマスクレジスタ５３４のマスクデータの論理和をとり、合成された影処理マスクを生成し、レンダリング処理部６２に供給する（Ｓ１０８、図４５）。図３１のエリアマスク４０４と図３２のエリアマスク４０７との論理和処理の結果、図３３のライトマスク４０８が生成される。異なるシャドーボリュームにより生成される影の領域（影処理マスクの有効領域）は、重なりあう領域もやはり影の領域となる。
【０１６３】
図３３の合成影処理マスク４０８が、レンダリング処理部に供給され、不透明ポリゴンのトランスマスクと共にレンダリング処理に利用される。その結果、光源に対する影を有効に表現することができる。
【０１６４】
上記の通り、影処理では、シャドーボリューム毎に影処理マスクに相当するエリアマスクを生成し、最後の全てのエリアマスクの論理和処理を行うだけでよいので、効率的な処理を可能にする。
【０１６５】
［汎用コンピュータによる画像処理］
図４６は、本実施の形態例の画像処理を汎用コンピュータを利用してソフトウエアにより行う場合の構成例を示す図である。汎用コンピュータを利用して画像処理を行う場合は、画像処理の演算は記録媒体内に格納されたプログラムに従って行われる。従って、画像処理プログラムをコンピュータが読み取り可能な記録媒体に格納することで、汎用コンピュータは画像処理専用コンピュータとして動作する。画像処理プログラムは、上記したフローチャート等で説明した各手順をコンピュータに実行させる。また、各マスクデータ間の論理積処理、排他処理、排他的論理和処理、論理和処理は、コンピュータの演算機能を利用することができる。
【０１６６】
図１２の例では、ＣＰＵ７０、演算用のＲＡＭ７１、ゲームプログラムや画像処理プログラムが格納されたＲＯＭ７２が、バス７６に接続される。また、バス７６に接続された入出力部７３は、操作者が操作する操作部７４に接続され、操作信号を入力する。また、画像処理の為に、ＲＡＭ７１内にポリゴンデータを記憶するプリミティブバッファ５２，不透明ポリゴンＺ値レジスタ５６１、トランスＺ値レジスタ５６２、各マスクレジスタ５３３，５３４、テクスチャーマップメモリ６４が設けらる。また、フレームバッファメモリ６６は、バス７６に接続され、外部の表示装置６８にも接続される。
【０１６７】
この例では、画像処理プログラムがＲＯＭ７２内に格納されているが、それ以外に、外部のＣＤＲＯＭや磁気テープなどの記録媒体７５からＲＡＭ７１内に画像処理プログラムをインストールすることもできる。
【０１６８】
【発明の効果】
以上説明した通り、本発明によれば、所定の領域内のピクセル毎に有効または無効を示すマスク、奇数または偶数を示すマスクを利用して、排他処理、排他的論理和処理、論理和処理を行うことで、比較的単純な論理演算により画像処理を行うことができる。
【０１６９】
また、本発明によれば、フラクタル処理を利用することで、所定の領域内のポリゴンの領域を示すエリアマスクを効率的に生成することができ、その後エリアマスクを利用して、上記の論理演算を行って画像処理を行うことができる。
【０１７０】
本発明によれば、不透明ポリゴンの画像処理において、Ｚ値を利用した陰面消去法を利用して各ポリゴン毎に有効領域を示すトランスマスクを生成し、更にトランスマスク間の排他処理を行うことで、表示されるべき有効領域を有するポリゴン毎のトランスマスクを効率的に形成することができる。そして、そのトランスマスクを利用してレンダリング処理を行うことができる。
【０１７１】
本発明によれば、半透明の画像処理において、Ｚ値を利用した陰面消去法を利用して不透明ポリゴンにより隠される領域を除去したエリアマスクを生成し、Ｚ値の大きい順に抽出する逆陰面消去法により、表示画面の奥側の半透明ポリゴンの領域を抽出してトランスマスクを生成し、更にトランスマスク間で排他処理を行うことで、互いに重なりある領域を適宜処理することができる。そして、表示画面の奥側から順番にトランスマスクを生成してレンダリング処理するので、半透明ポリゴンに必要なブレンディング処理を効率的に行うことができる。
【０１７２】
本発明によれば、影処理において、シャドーボリューム毎に描画ポリゴンと視点（或いは無限遠）との間のシャドーポリゴンの位置を陰面処理によりマスクデータとして求め、排他的論理和処理によりシャドーポリゴンの枚数を奇数か偶数かを示す影処理マスクデータを求めてエリアマスクレジスタに保存する。そして、最後にシャドーボリューム毎に求めた影処理マスクデータの論理和処理により影となる合成された影処理マスクデータを生成することができる。従って、簡単な論理演算により効率的に陰影処理を行うことができる。
【図面の簡単な説明】
【図１】本実施の形態例の画像処理装置の全体構成図である。
【図２】マスク生成部の構成例を示す図である。
【図３】ジオメトリ処理部により生成されるポリゴンデータの例を示す図である。
【図４】フラクタル法について説明する図である。
【図５】任意の点Ｐ（ｘ，ｙ）が、三角形のポリゴン１０内に位置するか否かの判断のアルゴリズムについて説明する図である。
【図６】表示画面３０内に３つのポリゴンＰＧ１，ＰＧ２，ＰＧ３が表示される例を示す図である。
【図７】フラクタル処理部の具体的構成例を示す図である。
【図８】マスクレジスタの詳細な構成例を示す図である。
【図９】フラクタル処理のフローチャート図である。
【図１０】描画処理の全体の流れを示すフローチャート図である。
【図１１】不透明ポリゴンの処理を説明する為の例を示す図である。
【図１２】本実施の形態例の不透明ポリゴンの処理のフローチャート図である。
【図１３】図１１の例を処理する場合のトランスマスクの変化を示す図である。
【図１４】図１１の例を処理する場合のトランスマスクの変化を示す図である。
【図１５】図１１の例を処理する場合のトランスマスクの変化を示す図である。
【図１６】図１１の例を処理する場合のトランスマスクの変化を示す図である。
【図１７】半透明ポリゴンの処理を説明する為の例を示す図である。
【図１８】本実施の形態例の半透明ポリゴンの処理のフローチャート図（１）である。
【図１９】本実施の形態例の半透明ポリゴンの処理のフローチャート図（２）である。
【図２０】図１７の例を処理する場合のエリアマスクとトランスマスクの変化を示す図である。
【図２１】図１７の例を処理する場合のエリアマスクとトランスマスクの変化を示す図である。
【図２２】図１７の例を処理する場合のエリアマスクとトランスマスクの変化を示す図である。
【図２３】図１７の例を処理する場合のエリアマスクとトランスマスクの変化を示す図である。
【図２４】図１７の例を処理する場合のエリアマスクとトランスマスクの変化を示す図である。
【図２５】図１７の例を処理する場合のエリアマスクとトランスマスクの変化を示す図である。
【図２６】図１７の例を処理する場合のエリアマスクとトランスマスクの変化を示す図である。
【図２７】図１７の例を処理する場合のエリアマスクとトランスマスクの全体の変化を示す図である。
【図２８】シャドーボリュームとそれを構成するシャドーポリゴンを利用した陰影処理を示す図である。
【図２９】陰影処理を説明する為の例を示す図である。
【図３０】第２の陰影処理のフローチャート図である。
【図３１】第２の陰影処理により処理した場合のエリアマスクを示す図である。
【図３２】第２の陰影処理により処理した場合のエリアマスクを示す図である。
【図３３】第２の陰影処理により処理により生成された合成影処理マスクを示す図である。
【図３４】不透明ポリゴンを処理する場合のマスク生成部５０内のデータの流れを示す図である。
【図３５】不透明ポリゴンを処理する場合のマスク生成部５０内のデータの流れを示す図である。
【図３６】不透明ポリゴンを処理する場合のマスク生成部５０内のデータの流れを示す図である。
【図３７】不透明ポリゴンを処理する場合のマスク生成部５０内のデータの流れを示す図である。
【図３８】半透明ポリゴンを処理する場合のマスク生成部５０内のデータの流れを示す図である。
【図３９】半透明ポリゴンを処理する場合のマスク生成部５０内のデータの流れを示す図である。
【図４０】半透明ポリゴンを処理する場合のマスク生成部５０内のデータの流れを示す図である。
【図４１】半透明ポリゴンを処理する場合のマスク生成部５０内のデータの流れを示す図である。
【図４２】半透明ポリゴンを処理する場合のマスク生成部５０内のデータの流れを示す図である。
【図４３】影処理する場合のマスク生成部５０内のデータの流れを示す図である。
【図４４】影処理する場合のマスク生成部５０内のデータの流れを示す図である。
【図４５】影処理する場合のマスク生成部５０内のデータの流れを示す図である。
【図４６】本実施の形態例の画像処理を汎用コンピュータを利用してソフトウエアにより行う場合の構成例を示す図である。
【符号の説明】
５０      マスク生成部
５２      プリミティブバッファ
５３      マスクコントロール部
５４      フラクタルセットアップ部
５５      フラクタル処理部
５６      比較器
６２      レンダリング処理部
６６      フレームバッファ
５３１    排他処理部
５３２    排他的論理和処理部
５３８    論理和処理部
５３３    トランスマスクレジスタ
５３４    エリアマスクレジスタ
５６４    不透明ポリゴンＺ比較器
５６５    半透明ポリゴンＺ比較器
【図１】
0004035649.tif 000002
【図２】
0004035649.tif 000003
【図３】
0004035649.tif 000004
【図４】
0004035649.tif 000005
【図５】
0004035649.tif 000006
【図６】
0004035649.tif 000007
【図７】
0004035649.tif 000008
【図８】
0004035649.tif 000009
【図９】
0004035649.tif 000010
【図１０】
0004035649.tif 000011
【図１１】
0004035649.tif 000012
【図１２】
0004035649.tif 000013
【図１３】
0004035649.tif 000014
【図１４】
0004035649.tif 000015
【図１５】
0004035649.tif 000016
【図１６】
0004035649.tif 000017
【図１７】
0004035649.tif 000018
【図１８】
0004035649.tif 000019
【図１９】
0004035649.tif 000020
【図２０】
0004035649.tif 000021
【図２１】
0004035649.tif 000022
【図２２】
0004035649.tif 000023
【図２３】
0004035649.tif 000024
【図２４】
0004035649.tif 000025
【図２５】
0004035649.tif 000026
【図２６】
0004035649.tif 000027
【図２７】
0004035649.tif 000028
【図２８】
0004035649.tif 000029
【図２９】
0004035649.tif 000030
【図３０】
0004035649.tif 000031
【図３１】
0004035649.tif 000032
【図３２】
0004035649.tif 000033
【図３３】
0004035649.tif 000034
【図３４】
0004035649.tif 000035
【図３５】
0004035649.tif 000036
【図３６】
0004035649.tif 000037
【図３７】
0004035649.tif 000038
【図３８】
0004035649.tif 000039
【図３９】
0004035649.tif 000040
【図４０】
0004035649.tif 000041
【図４１】
0004035649.tif 000042
【図４２】
0004035649.tif 000043
【図４３】
0004035649.tif 000044
【図４４】
0004035649.tif 000045
【図４５】
0004035649.tif 000046
【図４６】
0004035649.tif 000047