(57)【特許請求の範囲】
【請求項１】
レイトレーシング方式により３次元座標空間上の複数のオブジェクトのスクリーン上の画像データを生成する画像処理装置において、
前記３次元座標空間上のオブジェクトの表面の画像をスクリーンに投影することにより生成されたスクリーン座標系の画像データを出力する出力手段と、
前記スクリーン座標系の画像データから、前記表面の内部の画素データを補間する補間手段と、
前記補間手段により補間された画素データを、それに対応するレイによるレイトレーシングの成分を演算して補正する補正手段と、
前記補正手段により補正された画素データを描画する描画手段と
を備えることを特徴とする画像処理装置。
【請求項２】
レイトレーシング方式により３次元座標空間上の複数のオブジェクトのスクリーン上の画像データを生成する画像処理装置の画像処理方法において、
前記３次元座標空間上のオブジェクトの表面の画像をスクリーンに投影することにより生成されたスクリーン座標系の画像データを出力する出力ステップと、
前記スクリーン座標系の画像データから、前記表面の内部の画素データを補間する補間ステップと、
前記補間ステップで補間された画素データを、それに対応するレイによるレイトレーシングの成分を演算して補正する補正ステップと、
前記補正ステップで補正された画素データを描画する描画ステップと
を含むことを特徴とする画像処理方法。
【請求項３】
レイトレーシング方式により３次元座標空間上の複数のオブジェクトのスクリーン上の画像データを生成する画像処理装置に、
前記３次元座標空間上のオブジェクトの表面の画像をスクリーンに投影することにより生成されたスクリーン座標系の画像データを出力する出力ステップと、
前記スクリーン座標系の画像データから、前記表面の内部の画素データを補間する補間ステップと、
前記補間ステップで補間された画素データを、それに対応するレイによるレイトレーシングの成分を演算して補正する補正ステップと、
前記補正ステップで補正された画素データを描画する描画ステップと
を含むことを特徴とするプログラムを提供する提供媒体。
【請求項４】
レイトレーシング方式により３次元座標空間上の複数のオブジェクトのスクリーン上の画像データを生成する画像処理装置において、
第１のレイによるレイトレーシングに代えて、前記３次元座標空間上のオブジェクトの表面の画像をスクリーンに投影することにより生成されたスクリーン座標系の画像データを出力する出力手段と、
前記スクリーン座標系の画像データから、前記表面の内部の画素データを補間する補間手段と、
前記補間手段により補間された画素データを、それに対応する第２のレイによるレイトレーシングの成分を演算して補正する補正手段と、
前記補正手段により補正された画素データを描画する描画手段と
を備えることを特徴とする画像処理装置。
【請求項５】
前記補間手段により補間された画素データの奥行き方向の座標を基に、最も手前にある画素データを検索し、記憶する記憶手段を
さらに備えることを特徴とする請求項４に記載の画像処理装置。
【請求項６】
前記オブジェクトの表面の代表的な奥行き座標を基に、前記オブジェクトの表面をソートするソート手段をさらに備え、
前記補正手段は、前記ソート手段によりソートされた順序で、奥から順番に、前記第２のレイによるレイトレーシングの成分を演算して補正処理を行う
ことを特徴とする請求項４に記載の画像処理装置。
【請求項７】
前記補間手段は、補間演算ごとに、その奥行き座標を記憶し、
前記補正手段は、前記補間手段に記憶されている奥行き座標を基に、前記第２のレイによるレイトレーシングの成分を演算して補正処理を行う
ことを特徴とする請求項４に記載の画像処理装置。
【請求項８】
前記３次元座標空間上のオブジェクトの表面の画像は、トライアングルである
ことを特徴とする請求項４に記載の画像処理装置。
【請求項９】
前記オブジェクトの表面の代表的な奥行き座標を基に、前記オブジェクトの表面をソートするソート手段をさらに備え、
前記補間手段は、前記ソート手段によりソートされた順序で、手前から順番に補間演算を行い、各画素の補間演算ごとに、その奥行き座標を記憶し、
前記補正手段は、前記補間手段に記憶されている奥行き座標を基に、前記第２のレイによるレイトレーシングの成分を演算して補正処理を行う
ことを特徴とする請求項４に記載の画像処理装置。
【請求項１０】
前記補間手段と補正手段は、手前に位置する他の前記オブジェクトの表面が既に描画されている場合、その処理をスキップする
ことを特徴とする請求項４に記載の画像処理装置。
【請求項１１】
前記補間手段は、透明度が所定の基準値以下の前記オブジェクトについては、第２のレイまでの処理を行い、透明度が前記基準値より大きい前記オブジェクトについては、前記透明度が前記基準値以下の前記オブジェクトに衝突するまで、より高次のレイの処理を行う
ことを特徴とする請求項４に記載の画像処理装置。
【請求項１２】
前記補正手段は、前記補間手段による補間演算された画素の反射ベクトルまたは屈折ベクトルの値が、所定の基準値以下のとき、その画素の補正を行わない
ことを特徴とする請求項４に記載の画像処理装置。
【請求項１３】
前記補正手段は、影を生成する処理を行う場合、または反射もしくは屈折レイの処理を行う場合において、複数の前記オブジェクトとの衝突判定を順次行うとき、所定のスパンにおいて、直前の画素が衝突した前記オブジェクトとの衝突判定を最初に行う
ことを特徴とする請求項４に記載の画像処理装置。
【請求項１４】
前記補正手段は、影を生成する処理を行う場合、反射もしくは屈折レイの処理は第２のレイまで行い、シャドウレイの処理は、第３のレイまで行う
ことを特徴とする請求項４に記載の画像処理装置。
【請求項１５】
前記描画手段は、前記オブジェクトの透明度が所定の基準値より大きいとき、奥から順番に描画するとともに、既に描画されている画素とブレンドする
ことを特徴とする請求項４に記載の画像処理装置。
【請求項１６】
前記描画手段は、１つの画素に複数の前記オブジェクトが対応する場合、前記画素を覆う面積に基づいて重み付けを行う
ことを特徴とする請求項４に記載の画像処理装置。
【請求項１７】
レイトレーシング方式により３次元座標空間上の複数のオブジェクトのスクリーン上の画像データを生成する画像処理装置の画像処理方法において、
第１のレイによるレイトレーシングに代えて、前記３次元座標空間上のオブジェクトの表面の画像をスクリーンに投影することにより生成されたスクリーン座標系の画像データを出力する出力ステップと、
前記スクリーン座標系の画像データから、前記表面の内部の画素データを補間する補間ステップと、
前記補間ステップで補間された画素データを、それに対応する第２のレイによるレイトレーシングの成分を演算して補正する補正ステップと、
前記補正ステップで補正された画素データを描画する描画ステップと
を含むことを特徴とする画像処理方法。
【請求項１８】
レイトレーシング方式により３次元座標空間上の複数のオブジェクトのスクリーン上の画像データを生成する画像処理装置に、
第１のレイによるレイトレーシングに代えて、前記３次元座標空間上のオブジェクトの表面の画像をスクリーンに投影することにより生成されたスクリーン座標系の画像データを出力する出力ステップと、
前記スクリーン座標系の画像データから、前記表面の内部の画素データを補間する補間ステップと、
前記補間ステップで補間された画素データを、それに対応する第２のレイによるレイトレーシングの成分を演算して補正する補正ステップと、
前記補正ステップで補正された画素データを描画する描画ステップと
を含むことを特徴とするプログラムを提供する提供媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、画像処理装置および方法、並びに提供媒体に関し、特に、レイトレーシング方式で、より迅速に、画像データを生成することができるようにした画像処理装置および方法、並びに提供媒体に関する。
【０００２】
【従来の技術】
図１６は、従来のレイトレーシング方式の原理を表している。同図に示すように、スクリーン５２上の所定の位置の画素のデータを生成するとき、予め設定された所定の位置に配置されているアイポイント５１から、スクリーン５２上の、その位置の画素に向かう光線（レイ）を想定し、そのレイ（第１のレイ）が３次元座標空間上に配置されている所定のオブジェクト（図１６の例の場合、オブジェクト５３）に衝突させる。このとき、スクリーン５２上の、その画素には、オブジェクト５３の第１のレイが衝突した位置の画像が描かれるべきものとなる。
【０００３】
さらに、このオブジェクト５３の第１のレイが衝突する点の画像は、ライトソース５５からの光が、オブジェクト５４で反射され、オブジェクト５３の、その点に照射されている場合、その影響も受けることになる。そこで、オブジェクト５３の、その点から、ライトソース５５に向けて、光線を逆にたどり、オブジェクト５３からオブジェクト５４に向かって、第２のレイを想定し、オブジェクト５４からライトソース５５に向かって、第３のレイを想定する。そして、オブジェクト５３上の第１のレイの衝突する点の画像を、第２のレイおよび第３のレイに基づく影響を計算することで補正する。そして、その補正した結果が、スクリーン５２上の対応する画素に反映される。
【０００４】
このようにして、例えばCADにおいて、所定の３次元座標空間上に複数のオブジェクトを作成配置し、その３次元上のオブジェクトを所定のアイポイントから見た場合の画像を、スクリーン５２上の画像として演算し、表示することができる。
【０００５】
【発明が解決しようとする課題】
しかしながら、このようなレイトレーシングによる方法は、各段階のレイがどのオブジェクトに衝突するのかを判定しなければならず、そのための計算量が膨大なものとなり、ポリゴンレンダリング手法などに較べて、高速化が困難となる課題があった。
【０００６】
本発明はこのような状況に鑑みてなされたものであり、より迅速に画像データを生成することができるようにするものである。
【０００７】
【課題を解決するための手段】
請求項１に記載の画像処理装置は、３次元座標空間上のオブジェクトの表面の画像をスクリーンに投影することにより生成されたスクリーン座標系の画像データを出力する出力手段と、スクリーン座標系の画像データから、表面の内部の画素データを補間する補間手段と、補間手段により補間された画素データを、それに対応するレイによるレイトレーシングの成分を演算して補正する補正手段と、補正手段により補正された画素データを描画する描画手段とを備えることを特徴とする。
請求項２に記載の画像処理方法は、３次元座標空間上のオブジェクトの表面の画像をスクリーンに投影することにより生成されたスクリーン座標系の画像データを出力する出力ステップと、スクリーン座標系の画像データから、表面の内部の画素データを補間する補間ステップと、補間ステップで補間された画素データを、それに対応するレイによるレイトレーシングの成分を演算して補正する補正ステップと、補正ステップで補正された画素データを描画する描画ステップとを含むことを特徴とする。
請求項３に記載の提供媒体のプログラムは、３次元座標空間上のオブジェクトの表面の画像をスクリーンに投影することにより生成されたスクリーン座標系の画像データを出力する出力ステップと、スクリーン座標系の画像データから、表面の内部の画素データを補間する補間ステップと、補間ステップで補間された画素データを、それに対応するレイによるレイトレーシングの成分を演算して補正する補正ステップと、補正ステップで補正された画素データを描画する描画ステップとを含むことを特徴とする。
請求項４に記載の画像処理装置は、第１のレイによるレイトレーシングに代えて、３次元座標空間上のオブジェクトの表面の画像をスクリーンに投影することにより生成されたスクリーン座標系の画像データを出力する出力手段と、スクリーン座標系の画像データから、表面の内部の画素データを補間する補間手段と、補間手段により補間された画素データを、それに対応する第２のレイによるレイトレーシングの成分を演算して補正する補正手段と、補正手段により補正された画素データを描画する描画手段とを備えることを特徴とする。
【０００８】
請求項１７に記載の画像処理方法は、第１のレイによるレイトレーシングに代えて、３次元座標空間上のオブジェクトの表面の画像をスクリーンに投影することにより生成されたスクリーン座標系の画像データを出力する出力ステップと、スクリーン座標系の画像データから、表面の内部の画素データを補間する補間ステップと、補間ステップで補間された画素データを、それに対応する第２のレイによるレイトレーシングの成分を演算して補正する補正ステップと、補正ステップで補正された画素データを描画する描画ステップとを含むことを特徴とする。
【０００９】
請求項１８に記載の提供媒体のプログラムは、レイトレーシング方式により３次元座標空間上の複数のオブジェクトのスクリーン上の画像データを生成する画像処理装置に、第１のレイによるレイトレーシングに代えて、３次元座標空間上のオブジェクトの表面の画像をスクリーンに投影することにより生成されたスクリーン座標系の画像データを出力する出力ステップと、スクリーン座標系の画像データから、表面の内部の画素データを補間する補間ステップと、補間ステップで補間された画素データを、それに対応する第２のレイによるレイトレーシングの成分を演算して補正する補正ステップと、補正ステップで補正された画素データを描画する描画ステップとを含むことを特徴とする。
【００１０】
請求項１に記載の画像処理装置、請求項２に記載の画像処理方法、および請求項３に記載の提供媒体のプログラムにおいては、オブジェクトの表面の画像をスクリーンに投影することにより生成されたスクリーン座標系の画像データを補間することで、表面の内部の画素データが生成される。そして、補間された画素データが、レイによるレイトレーシング成分で補正される。
請求項４に記載の画像処理装置、請求項１７に記載の画像処理方法、および請求項１８に記載の提供媒体のプログラムにおいては、第１のレイによるレイトレーシングに代えて、オブジェクトの表面の画像をスクリーンに投影することにより生成されたスクリーン座標系の画像データを補間することで、表面の内部の画素データが生成される。そして、補間された画素データが、第２のレイによるレイトレーシング成分で補正される。
【００１１】
【発明の実施の形態】
以下に本発明の実施例を説明するが、特許請求の範囲に記載の発明の各手段と以下の実施例との対応関係を明らかにするために、各手段の後の括弧内に、対応する実施例（但し一例）を付加して本発明の特徴を記述すると、次のようになる。但し勿論この記載は、各手段を記載したものに限定することを意味するものではない。
【００１２】
請求項１に記載の画像処理装置は、３次元座標空間上のオブジェクトの表面の画像をスクリーンに投影することにより生成されたスクリーン座標系の画像データを出力する出力手段（例えば、図１のパーソナルコンピュータ１、ホストインタフェース２）と、スクリーン座標系の画像データから、表面の内部の画素データを補間する補間手段（例えば、図１のDDA３）と、補間手段により補間された画素データを、それに対応するレイによるレイトレーシングの成分を演算して補正する補正手段（例えば、図１のレイトレーサ６）と、補正手段により補正された画素データを描画する描画手段（例えば、図１のフレームバッファ７）とを備えることを特徴とする。
請求項４に記載の画像処理装置は、第１のレイによるレイトレーシングに代えて、３次元座標空間上のオブジェクトの表面の画像をスクリーンに投影することにより生成されたスクリーン座標系の画像データを出力する出力手段（例えば、図１のパーソナルコンピュータ１、ホストインタフェース２）と、スクリーン座標系の画像データから、表面の内部の画素データを補間する補間手段（例えば、図１のDDA３）と、補間手段により補間された画素データを、それに対応する第２のレイによるレイトレーシングの成分を演算して補正する補正手段（例えば、図１のレイトレーサ６）と、補正手段により補正された画素データを描画する描画手段（例えば、図１のフレームバッファ７）とを備えることを特徴とする。
【００１３】
請求項５に記載の画像処理装置は、補間手段により補間された画素データの奥行き方向の座標を基に、最も手前にある画素データを検索し、記憶する記憶手段（例えば、図１のプリトレースバッファ５）をさらに備えることを特徴とする。
【００１４】
請求項６に記載の画像処理装置は、オブジェクトの表面の代表的な奥行き座標を基に、オブジェクトの表面をソートするソート手段（例えば、図１１のトライアングルソート部２１）をさらに備え、補正手段は、ソート手段によりソートされた順序で、奥から順番に、第２のレイによるレイトレーシングの成分を演算して補正処理を行うことを特徴とする。
【００１５】
請求項９に記載の画像処理装置は、オブジェクトの表面の代表的な奥行き座標を基に、前記オブジェクトの表面をソートするソート手段（例えば、図４のトライアングルソート部２１）をさらに備え、補間手段は、ソート手段によりソートされた順序で、手前から順番に補間演算を行い、各画素の補間演算ごとに、その奥行き座標を記憶し、補正手段は、補間手段に記憶されている奥行き座標を基に、第２のレイによるレイトレーシングの成分を演算して補正処理を行うことを特徴とする。
【００１６】
図１は、本発明を適用した画像処理システムの構成例を表している。ホストコンピュータとしてのパーソナルコンピュータ１は、３次元座標空間上のオブジェクトの各表面を複数のトライアングルに分割し、各トライアングルを所定のスクリーン座標系に投影して得られた画像データを生成する。そして、そのスクリーン座標系の画像データと、光源に関する画像データを、ホストインタフェース２を介して、DDA（Digital Differential Analyzer）に供給する。具体的には、例えば、トライアングルの３つの頂点における座標（ｘ，ｙ，ｚ）面の法線ベクトル、表面の拡散係数、表面の反射係数、屈折係数、透明度、表面の色（Ｒ，Ｇ，Ｂ）といったデータと、光源の座標（ｘ，ｙ，ｚ）、明るさと色（Ｒ，Ｇ，Ｂ）、光源の種類（点、平行、スポット径）といった情報が、DDA３に入力される。
【００１７】
DDA３は、ホストインタフェース２を介して、パーソナルコンピュータ１より入力された各トライアングルの頂点座標を元に、そのトライアングルの内部の画素データを線形補間により生成する。生成された画素データは、Ｚバッファ４に入力され、奥行き方向（ｚ軸方向）の座標を元に、ソート処理が行われる。すなわち、より手前（アイポイントに近い方）の画素データが選択され、最も手前に位置する画素データだけがプリトレースバッファ５に供給され、記憶されるようになされている。
【００１８】
レイトレーサ６は、プリトレースバッファ５に記憶された画素データに対して、第２のレイ以降のレイトレーシング処理を行い、プリトレースバッファ５に記憶された画素データを補正し、補正した画素データをフレームバッファ７に出力し、描画するようになされている。フレームバッファ７に描画された画素データは、CRTコントローラ（CRTC）８により適宜読み出され、ディスプレイ９に出力され、表示されるようになされている。
【００１９】
次に、図２のフローチャートを参照して、その動作について説明する。最初に、ステップＳ１において、パーソナルコンピュータ１は、３次元座標空間上におけるオブジェクトを複数のトライアングルに分割し、そのトライアングルを所定のスクリーンに投影した画像データを生成する。すなわち、図３に示すように、オブジェクト５３を複数のトライアングル５３−ｉ（ｉ＝１，２，３，・・・）に分割する。そして、各トライアングル５３−ｉをスクリーン５２に投影した画像データを生成する。図３においては、オブジェクト５３のトライアングル５３−１が、スクリーン５２上に、トライアングル５３−１’として投影されている様子が表されている。
【００２０】
すなわち、この例においては、レイトレーシング方式における第１のレイ（Ray）によるトレーシングが省略され、それに代わって、このような投影処理が実行される。これにより、第１のレイが、どのオブジェクトに衝突するのかを判定する演算が、従来の場合の１／１００程度に軽減することができる。
【００２１】
DDA３は、ステップＳ２において、パーソナルコンピュータ１より供給されたトライアングルの３つの頂点座標を元に、そのトライアングルの内部の画素データを線形補間する処理を実行する。ステップＳ３において、DDA３は、補間演算の結果得られた画素データのｚ座標をＺバッファ４に記憶させ、これを利用して、最も手前の画素データだけをプリトレースバッファ５に記憶させる。以上のようにして、第１のレイによるトレーシングは行われないが、行った場合と同様の画像が得られる。
【００２２】
以上のようにして、スクリーン５２の１画面分の画像データがプリトレースバッファ５に記憶されたとき、次に、ステップＳ４に進み、レイトレーサ６は、第１のレイの条件に基づいて、第２のレイを各オブジェクトに飛ばし、周辺光による色を決定し、その色で、ステップＳ５において、対応する画素データを補正する。この第２のレイによる処理は、例えば、そのオブジェクトが光を反射しないオブジェクトであるような場合には省略される。
【００２３】
レイトレーサ６は、ステップＳ５において、第２のレイによる周辺光による色を決定したとき、その色、テクスチャ、および、そのオブジェクトの色をブレンドし、そのオブジェクトの第１のレイが衝突した位置の色とする。ステップＳ６において、レイトレーサ６は、最終的に決定された色を、フレームバッファ７の対応する画素の位置に描画する。
【００２４】
CRTC８は、ステップＳ７において、フレームバッファ７に描画された画素データを読み出し、これを表示信号に変換して、ディスプレイ９に出力し、表示させる。
【００２５】
図３には、以上の処理が模式的に表されている。すなわち、スクリーン５２に投影されたトライアングルの頂点の座標で規定されるトライアングルの内部の画素の光ベクトル、反射ベクトル、屈折ベクトル、法線ベクトル、（ｘ，ｙ，ｚ）座標、ｕ，ｖベクトルなどが生成される。
【００２６】
以上のようにして、第１のレイによるトレーシング処理に代えて、画像データが生成されたとき、次に、第２のレイ以降のトレーシング処理が実行される。
【００２７】
図１の実施の形態においては、最も手前に位置する画像データだけをプリトレースバッファ５に記憶させるようにしたが、以下においては、このようなプリトレースバッファ５が設けられていない場合の構成例について説明する。
【００２８】
図４の構成例においては、ホストインタフェース２とDDA３の間に、トライアングルソート部２１とソートバッファ２２が配置されている。DDA３は、Ｚバッファ４を利用して、補間処理を実行するが、プリトレースバッファ５は省略されている。レイトレーサ６は、DDA３に接続され、DDA３との間でデータを授受するようになされている。DDA３はまた、画像データをフレームバッファ７に出力し、記憶させるようになされている。また、この例においては、ピクセルカバレージバッファ２３が設けられており、フレームバッファ７には、このピクセルカバレージバッファ２３の記憶値に対応して、所定の重み付け処理が実行され、画素データが描画されるようになされている。その他の構成は、図１における場合と同様である。
【００２９】
次に、図５のフローチャートを参照して、その動作について説明する。最初に、ステップＳ２１において、パーソナルコンピュータ１により、トライアングルをスクリーンに投影した画像データが生成される。この処理は、図２のステップＳ１における場合と同様の処理である。トライアングルソート部２１は、パーソナルコンピュータ１から、ホストインタフェース２を介して、スクリーン座標系の画素データの入力を受けたとき、各トライアングルのｚ座標の代表値を決定し、その代表値を元に、トライアングルをソートする。ソートした結果は、ソートバッファ２２に記憶される。
【００３０】
各トライアングルのｚ座標の代表値としては、例えば３つの頂点のｚ座標の平均値、あるいは３つの頂点のうちのいずれか任意の１つの頂点のｚ座標を用いることができる。
【００３１】
次に、ステップＳ２３において、DDA３は、ソートバッファ２２から入力された各トライアングルの内部の画素データを線形補間により生成する。この処理は、図２のステップＳ２における場合と同様の処理である。
【００３２】
DDA３は、手前と判断されたトライアングルから順番に補間演算処理を行い、各画素の補間演算毎に、Ｚバッファ４を用いて、さらに第２のレイの計算のオン／オフを行う。
【００３３】
すなわち、ステップＳ２４において、DDA３は、処理対象とする画素が最も手前の画素であるか否かを判定し、手前の画素である場合には、ステップＳ２５において、その画素データをレイトレーサ６に出力し、第２のレイによるデータを計算させる。レイトレーサ６は、DDA３より入力された第１のレイの条件から、第２のレイをオブジェクトに飛ばし、周辺光による色を決定し、その色のデータをDDA３に出力する。
【００３４】
DDA３は、ステップＳ２４において、対象画素が最も手前の画素ではないと判定された場合、ステップＳ２５の処理（第２のレイの処理）を省略させる。また、DDA３は、補間演算により求められた画素の反射ベクトルの強さあるいは屈折ベクトルの強さが、予め設定してある所定の基準値以下の場合、第２のレイの計算を行わない（ステップＳ２５の処理をスキップする）ようにすることができる。例えば、光を反射しないオブジェクトの第２の処理は省略されることになる。
【００３５】
DDA３は、トライアングル（面状オブジェクト）の頂点での第２のレイのための情報を補間演算することにより、トライアングルの内部の第２のレイのための情報を計算することになるのであるが、補間演算の途中で第２のレイを考慮する必要がないと判断できる場合には、その処理を省略するようにすることで、第２のレイの演算を減少させることができる。
【００３６】
このように、トライアングルを奥行順にソートしておき、手前のトライアングルから順番に、その画素を補間演算し、補間演算毎に、Ｚバッファ４を用いて、第２のレイの計算を制御するようにすると、トライアングルは、３つの頂点のｚ座標の代表値でソートが行われているため、例えば図６（Ａ）に示すように、図中白で示されているトライアングルと、黒で示されているトライアングルとが交差しているような場合、最初に図６（Ｂ）に示すように、代表値で手前と判断された白の三角形が描画された後、次に図６（Ｃ）に示すように、代表値で後方と判断された黒で示す三角形が描画されることになる。そして、白の三角形の内部に描画されている黒のトライアングルの領域では、白の三角形の画素が一旦描画された後、その部分が白のトライアングルより前方に位置しているため、黒のトライアングルの画素として再描画（上書き）される。描画が二重に行われるので、その分、処理速度が遅くなるが、実際には、このようなトライアングルの関係（ｚ座標の代表値と個々のｚ座標との関係が逆転するような関係）が発生する可能性は少ないので、それほど問題にはならない。
【００３７】
DDA３は、オブジェクトの透明度が予め設定してある所定の基準値より大きい場合（透明である場合）、透明度が基準値より小さい（透明でない）オブジェクトに第２のレイが衝突するまで、第２のレイの演算処理を実行する。このようにすることで、描画速度は低下するが、反射レイを第１のレイと同様に考慮することとなり、透明なオブジェクトを完全な形で描画することができる。オブジェクトのうち、透明なオブジェクトの占める割合が比較的少ない場合には、透明なオブジェクトについてのみ、完全な計算を行うようにしたとしても、全体としては、処理速度が大きく低下するようなことにはならない。
【００３８】
手前にあるトライアングルが既に描画されていて、実際の描画に関与しない画素に対しては、DDA３は、その補間演算と第２のレイ以降のレイトレーシング処理をスキップさせるようにすることができる。このようなスキップを行った場合、補間演算に使用する変分（単位当たりの変化量）にスキップする画素数を乗算した値を補間変数の新たな値として設定することができる。また、スキップした場合のスキップ後の座標値は、スキップ前のｘ座標にスキップする画素の数を加算した値から求めることができる。
【００３９】
このように、必要のない第２のレイ以降の計算を省略することで、全体の演算量を減らすことができる。
【００４０】
また、各トライアングルのスパン（トライアングルの一方の端部から水平方向の他方の端部までの範囲）の最後の画素まで検査した結果、手前にあるトライアングルが既に描画されている場合には、検査でそのような検査結果が得られた時点において、その後の処理を省略することができる。
【００４１】
スパンの端部までスキップできる場合には、変分にスキップする画素の数を乗算せずに、そのままスパンの処理を終了させることができる。スパンの途中が一旦他の物体で覆われたような場合、そのスパンの端までずっと覆われている場合も多く、実際に、変分にスキップする画素の数を乗算する必要がないことになり、そのような場合、補間演算処理を大幅に減少させることができる。
【００４２】
また、レイトレーサ６が影の生成処理を行う場合、あるいは、反射レイ、もしくは屈折レイに関して、第２のレイの計算を行う場合、スパンの先頭の画素においては、例えばバウンディングボックス（Bounding box）、オクトリー（Octree）法などにより、ある程度衝突が予想される物体との交差判定を行う。しかしながら、第２番目以降の画素においては、直前の画素が衝突したオブジェクトとの衝突判定を最初に行い、もしその判定において、衝突していると判定された場合には、他のオブジェクトとの衝突判定は行わないようにする。
【００４３】
すなわち、図７に示すように、所定のスパン内において、隣接する画素からのレイが所定のオブジェクトに衝突した場合、その隣に位置する画素からのレイも同一のオブジェクトに衝突する可能性が高い。
【００４４】
図７の例では、図中最も下側に位置している黒い画素は最初の画素であるので、関連しそうな全てのオブジェクトに対する衝突判定処理が行われるが、続く上２つの白い画素は、直前に隣接する画素と同一のオブジェクト（オブジェクトＡとオブジェクトＢ）に衝突している。そこで、これらの画素からのレイに対しては、他のオブジェクトに対する衝突は判定されない。
【００４５】
それに対して、図中上側の黒い画素（下から４番目の画素）からのレイは、直前の画素と同一のオブジェクトに衝突していないので（直前のオブジェクトは、オブジェクトＡとオブジェクトＢに衝突しているが、この画素のレイは、オブジェクトＡには衝突しているが、オブジェクトＢには衝突していないので）、関連のありそうな全てのオブジェクトとの衝突判定処理が行われる。
【００４６】
影の処理に際しては、衝突していることが分かればよく、衝突したと分かった時点で、その後の処理を打ち切ることが可能である。その結果、非常に多くの画素の計算において、特定のオブジェクトとの衝突が検出されたとき、その時点において処理を終了させることができる。その結果、比較的演算量が多い、不特定多数のオブジェクトとの衝突判定における演算量を減らすことが可能となる。
【００４７】
反射レイおよび屈折レイの場合も同様である。
【００４８】
また、DDA３は、影の生成処理を行う場合、影の計算以外の反射レイおよび屈折レイに関しては、第２のレイまでの計算を行い、第３のレイ以降の計算は行わないようにし、影の計算のため、シャドーレイに関しては、第３のレイまで計算するようにすることができる。
【００４９】
２つの同じオブジェクトの間で繰り返し反射または屈折が発生する場合がある。このような反射および屈折に関しては、第３のレイ以降の計算を行っても、それほど良質な画像が得られるようになるわけではない。従って、このような計算は省略するのが好ましい。第３のレイ以降の計算が画質に影響する場合は、例えば鏡張りの部屋の画像を描画するような場合であるが、このような場合以外には、その計算を行う実用的な意味が殆どない。
【００５０】
しかしながら、シャドーレイに関しては、計算した第２のレイが影のオブジェクトに当たっているのか、影ではなく、光が当たっているオブジェクトに当たっているのかは、第２のレイの値に大きく影響する。従って、第２のレイの計算結果をできるだけ正しく使うために、シャドーレイに関しては、第３のレイまで計算するのが好ましい。また、シャドーレイの計算は、反射レイおよび屈折レイに較べて、その計算量は軽いものである。
【００５１】
図５に戻って、ステップＳ２５の第２のレイのデータ計算処理が終了した後、ステップＳ２６において、DDA３は、第２のレイで決定された周辺光による色、テクスチャ、およびオブジェクトの色をブレンドし、第１のレイが最初に衝突したオブジェクトの表面の、その衝突した位置の最終の色として合成する処理を行う。
【００５２】
なお、透明なオブジェクトを描画する場合、図８（Ａ）に示すように、手前のオブジェクトから順番に、不透明なオブジェクトに達するまで順番に描画して、第２のレイを計算して行けば、奥にあるオブジェクトの色も透けて見えることになる。しかしながら、図８（Ａ）に示す場合、重い演算処理である反射ベクトル演算と屈折ベクトル演算処理が５回必要となる。
【００５３】
反射レイと屈折レイの計算には、参照点におけるオブジェクト表面のノーマルベクトルと視線ベクトルとの演算とを行い、反射方向と屈折方向を計算し、参照している点から、それぞれの方向にレイを飛ばして、関連のありそうな全部のオブジェクトとの衝突判定を行い、その参照点に最も近いオブジェクトを決定する必要がある。このため、非常に重い処理となる。
【００５４】
これに対して、シャドーは、ライトソースとの間にオブジェクトがあるかないかの判定を行うだけでよいので、参照点とライトソースとの間の線分上にオブジェクトがあるかないかの判定を行うことになり、最初に衝突した段階で処理を打ち切ることができるので、反射レイと屈折レイの処理に較べて軽い処理である。
【００５５】
そこで、図８（Ｂ）に示すように、透明なオブジェクトだけを手前から描画するようにすることができる。このようにすれば、重い演算は、反射ベクトルと屈折ベクトルのそれぞれ１回ずつの演算だけで済み、演算量を少なくすることができる。しかしながら、このような処理を行うと、不完全な画像しか得ることができない。
【００５６】
そこで、図８（Ｃ）に示すように、透明度が予め設定してある所定の基準値より大きい（より透明に近い）オブジェクトに関しては、遠くから順番に描画するが、既に描画された画素の色とブレンドしながら描画を行うようにすることで、正確ではないが、比較的高速に透明感のある描画を行うことができる。
【００５７】
この透明なオブジェクトの描画処理においては、屈折レイの計算は省略され、シャドーレイと反射レイの計算だけが行われる。屈折レイの計算時には、そのレイと他のオブジェクトとの衝突判定が必要になるため、αブレンディングの計算に較べて非常に重い処理となる。従って、この屈折レイの計算とαブレンディングの計算のその分だけ処理を迅速に行うことが可能となる。
【００５８】
このように、この例では、第２のレイの計算を中止しておいて、奥にあるオブジェクトから順番に描画しながら、単純にその上に透明なオブジェクトを重ねて、色のαブレンディングを行っていく。このような方法で正しく描画ができるのは、透明なオブジェクトが視線に対して垂直なため、屈折光が曲がらない場合であり、入射角が大きいか、屈折角が大きいときほど、誤差が大きくなるが、それらの点が小さい場合には、その誤差は無視することができる。
【００５９】
このようなαブレンディングによる方法を用いると、透明なオブジェクトの重なりが多くなるにつれて、図８（Ａ）に示した完全な方法に較べて、重い演算の数が１／２に近付いてくるので、それだけより迅速な処理が可能となる。
【００６０】
図５に戻って、ステップＳ２６で、色の合成処理を行った後、ステップＳ２７に進み、DDA３は、ステップＳ２６で合成した色をフレームバッファ７に書き込ませる。このとき、DDA３は、アンチエリアシング処理を行う。この処理の詳細は、図９のフローチャートに示されている。
【００６１】
すなわち、DDA３は、最初に、ステップＳ５１において、フレームバッファ７とカバレージバッファ２３の記憶値（Coverage Buffer）をクリアし、ステップＳ５２において、対象画素のカバレージ（Coverage）を計算する。例えば、図１０（Ａ）に示すように、手前のトライアングルＡが対象画素の面積のうち、８０％をカバーしているとすると、Coverageは８０とされる。
【００６２】
次に、ステップＳ５３において、DDA３は、次式を演算する。
Limit＝１００％−Coverage Buffer
【００６３】
いまの場合、ステップＳ５１において、カバレージバッファの値は０にクリアされているので、Limitは１００となる。
【００６４】
次に、ステップＳ５４において、ステップＳ５３で計算されたLimitの値が、ステップＳ５２で計算されたCoverageの値より小さいか否かが判定される。いまの場合、Limit＝１００であり、Coverage＝８０であるため、ＮＯの判定が行われる。そこで、次に、ステップＳ５６において、DDA３は、ステップＳ５２で計算されたCoverageの値に、対象としているトライアングルの画素の色Ｃａを乗算し、その乗算結果Ｃａ×８０％をフレームバッファ７に出力し、値ＦＢとして記憶させる。
【００６５】
次に、ステップＳ５７において、カバレージバッファ２３に、ステップＳ５２で計算されたCoverageの値を加算させる。いまの場合、Coverage Bufferの値は、ステップＳ５１で最初にクリアされているので、ステップＳ５２で計算された値８０がCoverage Bufferに設定される。
【００６６】
次に、ステップＳ５８に進み、その画素に含まれるトライアングルについての演算が全て終了したか否かが判定される。図１０の例の場合、図１０（Ｂ）に示すように、対象画素には、後方のトライアングルＢも存在しているため、ここでＮＯの判定が行われ、ステップＳ５２に戻る。
【００６７】
ステップＳ５２においては、対象画素でのトライアングルＢのCoverageが計算される。いまの場合、トライアングルＢの対象画素に占める面積は４０％であるので、Coverageとして４０が設定される。
【００６８】
次に、ステップＳ５３において、
Limit＝１００％−Coverage Buffer
が演算される。いまの場合、ステップＳ５７において、Coverage Bufferに８０が設定されているため、Limit＝２０となる。
【００６９】
次に、ステップＳ５４に進み、LimitとCoverageの値が比較される。いまの場合、Limit＝２０、Coverage＝４０であるため、ＹＥＳの判定が行われ、ステップＳ５５に進む。ステップＳ５５において、DDA３は、CoverageにLimitの値を設定する。すなわち、いまの場合、Coverageに２０が設定される。
【００７０】
次に、ステップＳ５６に進み、DDA３は、Coverageに画素の色を乗算する。いまの場合、Coverage＝２０％であり、対象画素の色はＣｂであるから、２０％×Ｃｂが演算される。そして、演算された値が、フレームバッファ７の対応する画素の位置に加算される。上述した処理により、フレームバッファ７には、既に８０％×Ｃａが記録されているため、結局、この対象画素の色Ｃｐは、次式で設定されることになる。
Ｃｐ＝８０％×Ｃａ＋２０％×Ｃｂ
【００７１】
すなわち、図１０（Ｃ）に示すように、トライアングルＡとトライアングルＢの対象画素において占める面積の割合に応じて、対象画素の色が重み付けされることになる。
【００７２】
次に、ステップＳ５７において、Coverage Bufferに、ステップＳ５２で演算されたCoverageの値が加算される。Coverage Bufferには、既に８０の値が記憶されているため、そこにさらに２０の値が加算され、Coverage Bufferには、１００が設定される。
【００７３】
次に、ステップＳ５８に進み、全てのピクセルの重み付け処理を行ったか否かが判定される。いまの場合、全てのトライアングルの重み付け処理が終了したので、処理が終了される。
【００７４】
このような重み付け処理が行われた後、図５に戻って、ステップＳ２８において、CRTC８は、フレームバッファ７に記憶されている画像データを読み出し、これを表示信号に変換して、ディスプレイ９に出力し、表示させる。
【００７５】
図１１は、さらに他の構成例を表している。この構成例においては、図４におけるＺバッファ４が省略されている。その他の構成は、図４における場合と同様である。
【００７６】
すなわち、この例においては、図４におけるＺバッファ４を用いずに補間処理が実行されるようになされている。その他の構成は、図４における場合と同様である。
【００７７】
図１２は、図１１の構成例の処理例を表している。そのステップＳ７１乃至ステップＳ７７の処理は、基本的に、図５のステップＳ２１乃至ステップＳ２８の処理と同様の処理であるが、図５のステップＳ２４のＺバッファ４における判定処理が省略されている。また、図４の構成例においては、DDA３が、ステップＳ２３において、手前のトライアングルから順番に補間処理を行うようにしているが、図１１の構成例においては、DDA３が、ステップＳ７３において、奥のトライアングルから順番に補間処理を行うようにしている。その他の処理は、図５における場合と同様である。
【００７８】
このように処理しても、トライアングルの重なりが少ない場合には、第１の例による演算処理は減少しているので、全体的に高速に画像データを得ることが可能である。
【００７９】
図１３は、さらに他の構成例を表している。この構成例においては、図４におけるトライアングルソート部２とソートバッファ３が省略された構成とされている。その他の構成は、図４における場合と同様である。
【００８０】
図１４は、図１３の構成例の処理例を表している。そのステップＳ９１乃至ステップＳ９７の処理は、基本的に、図５のステップＳ２１乃至ステップＳ２８の処理と同様の処理である。但し、図５のステップＳ２２のトライアングルのｚ座標の代表値を元にトライアングルをソートする処理が省略されている。
【００８１】
すなわち、この例の場合には、ステップＳ９３において、Ｚバッファ４の記憶値を用いて、各トライアングルの画素のｚ方向の判定処理が行われる。図１５（Ａ）に示すように、最初に、より手前の白の三角形Ａがフレームバッファ７に既に描画された後、次に、図１５（Ｂ）に示すように、白の三角形より奥の黒の三角形Ｂが描画されるとき、図中白い丸印で示す手前側の三角形の画素については、第２のレイの計算処理は行われない。その他の処理は、図５における場合と同様である。
【００８２】
なお、図１５（Ｃ）は、フレームバッファ７上の、最初に手前のトライアングルＡを描画した後、次に奥側のトライアングルＢを描画している途中の状態を表している。
【００８３】
なお、本明細書において、システムとは、複数の装置により構成される装置全体を表すものとする。
【００８４】
なお、上記したような処理を行うコンピュータプログラムをユーザに提供する提供媒体としては、磁気ディスク、CD-ROM、固体メモリなどの記録媒体の他、ネットワーク、衛星などの通信媒体を利用することができる。
【００８５】
【発明の効果】
以上の如く、本発明によれば、３次元座標空間上のオブジェクトの表面の画像をスクリーンに投影することにより生成されたスクリーン座標系の画像データの表面の内部の画素データを補間するようにしたので、より迅速に画像データを生成することが可能となる。
【図面の簡単な説明】
【図１】本発明の画像処理装置の構成例を示すブロック図である。
【図２】図１の装置の動作を説明するフローチャートである。
【図３】図１の装置の動作を説明する図である。
【図４】本発明の画像処理装置の他の構成例を示すブロック図である。
【図５】図４の装置の動作を説明するフローチャートである。
【図６】互いに交差するオブジェクトを描画する動作を説明する図である。
【図７】衝突判定を説明する図である。
【図８】透明物体を描画する処理を説明する図である。
【図９】アンチエリアシング処理を説明するフローチャートである。
【図１０】アンチエリアシング処理を説明する図である。
【図１１】本発明の画像処理装置の他の構成例を示すブロック図である。
【図１２】図１１の装置の動作を説明するフローチャートである。
【図１３】本発明の画像処理装置のさらに他の構成例を示すブロック図である。
【図１４】図１３の装置の動作を説明するフローチャートである。
【図１５】Ｚバッファの動作を説明する図である。
【図１６】従来のレイトレーシング方式を説明する図である。
【符号の説明】
１  パーソナルコンピュータ，  ３  DDA，  ４  Ｚバッファ，  ５  プリトレースバッファ，  ６  レイトレーサ，  ７  フレームバッファ，  ８  CRTコントローラ，  ９  ディスプレイ，  ２１  トライアングルソート部，  ２２  ソートバッファ，  ２３  カバレージバッファ
【図１】
0004078716.tif 000002
【図２】
0004078716.tif 000003
【図３】
0004078716.tif 000004
【図４】
0004078716.tif 000005
【図５】
0004078716.tif 000006
【図６】
0004078716.tif 000007
【図７】
0004078716.tif 000008
【図８】
0004078716.tif 000009
【図９】
0004078716.tif 000010
【図１０】
0004078716.tif 000011
【図１１】
0004078716.tif 000012
【図１２】
0004078716.tif 000013
【図１３】
0004078716.tif 000014
【図１４】
0004078716.tif 000015
【図１５】
0004078716.tif 000016
【図１６】
0004078716.tif 000017