(57)【要約】【課題】ハードウェアの増大を防止しつつ、簡単な処理で色計算の結果、最適な色の中間値をとることが可能な画像処理装置およびその方法を提供する。【解決手段】第１のベクトルデータを含む色計算用マップデータを保持し、マップアドレスＭＡ１５を取得し、保持したマップデータに含まれる第１のベクトルとは別に第２のベクトルデータＶＣＴを取得し、マップアドレスの近傍データについて、第２のベクトルデータＶＣＴと第１のベクトルデータとの内積の絶対値を計算し、必要なテクセルのマップデータを算出した内積の絶対値とともに出力するマップ保持部１２と、マップ保持部１２からのマップデータに対してフィルタ処理を行い、マップデータＭＤ１３を出力するマップデータ処理部１３と、マップデータ処理部１３により出力されたマップデータに基づいて色計算を行い所定のフィルタ処理を含む描画処理を行う描画部１５とを設ける。【選択図】　　　図１
2004054621.tif 000002
【特許請求の範囲】
【請求項１】
第１のベクトルデータを含む色計算用のマップデータを保持し、別途与えられる第２のベクトルデータと上記第１のベクトルデータとの内積の絶対値を計算し、計算した内積の絶対値とともに対応するマップデータを出力するマップ保持部と、
上記マップ保持部により出力されたマップデータに対して所定のフィルタ処理を行うマップデータ処理部と、
上記マップデータ処理部により出力されたマップデータに基づいて色計算を行い所定の描画処理を行う描画手段と
を有する画像処理装置。
【請求項２】
上記マップ保持部は、マップアドレスを取得し、マップアドレスの近傍データについて、上記第２のベクトルデータと上記第１のベクトルデータとの内積の絶対値を計算する
請求項１記載の画像処理装置。
【請求項３】
上記マップデータ処理部は、マップデータに対して線形補間を行う
請求項１記載の画像処理装置。
【請求項４】
上記描画手段は、複数の半透明層であるシェルを重ね合わせた描画対象物の方向を示すベクトルを求め、求めたベクトルに基づいてフィルタカーネルを変更し、描画対象物の向かっている方向にピクセルの情報を膨らませて、各シェル間で連続性を持たせるフィルタ処理を行う
請求項１記載の画像処理装置。
【請求項５】
第１のベクトルデータを含む色計算用のマップデータを保持する第１のステップと、
別途与えられる第２のベクトルデータと上記第１のベクトルデータとの内積の絶対値を計算する第２のステップと、
上記第２のステップで計算した内積の絶対値を含むマップデータに対して所定のフィルタ処理を行う第３のステップと、
上記第３のステップで出力されたマップデータに基づいて色計算を行い所定の描画処理を行う第４のステップと
を有する画像処理方法。
【請求項６】
上記第２のステップにおいては、マップアドレスを取得し、マップアドレスの近傍データについて、上記第２のベクトルデータと上記第１のベクトルデータとの内積の絶対値を計算する
請求項５記載の画像処理方法。
【請求項７】
上記第３のステップにおいては、マップデータに対して線形補間を行う
請求項５記載の画像処理方法。
【請求項８】
上記第４のステップでは、複数の半透明層であるシェルを重ね合わせた描画対象物の方向を示すベクトルを求め、求めたベクトルに基づいてフィルタカーネルを変更し、描画対象物の向かっている方向にピクセルの情報を膨らませて、各シェル間で連続性を持たせるフィルタ処理を行う
請求項５記載の画像処理方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、色計算用のパラメータをマップに保持し、描画的にマップ内パラメータを取得して色計算を行う画像処理装置およびその方法に関するものである。
【０００２】
【従来の技術】
昨今のコンピュータシステムにおける演算速度の向上や描画機能の強化とも相俟って、コンピュータ資源を用いて図形や画像の作成や処理を行う「コンピュータ・グラフィックス（ＣＧ）」技術が盛んに研究・開発され、さらに実用化されている。
【０００３】
たとえば、３次元グラフィックスは、３次元オブジェクトが所定の光源によって照らされたときの光学現象を数学モデルで表現して、このモデルに基づいてオブジェクト表面に陰影や濃淡を付けたり、さらには模様を貼り付けたりして、よりリアルで３次元的な２次元高精細画像を生成するものである。
このようなコンピュータ・グラフィックスは、科学、工学、製造などの開発分野でのＣＡＤ／ＣＡＭ、その他の各種応用分野においてますます盛んに利用されるようになってきている。
【０００４】
３次元グラフィックスは、一般には、フロントエンドとして位置づけられる「ジオメトリ・サブシステム」と、バックエンドとして位置づけられる「ラスタ・サブシステム」とにより構成される。
【０００５】
ジオメトリ・サブシステムとは、ディスプレイ・スクリーン上に表示する３次元オブジェクトの位置や姿勢などの幾何学的な演算処理を行う過程のことである。
ジオメトリ・サブシステムでは、一般にオブジェクトは多数のポリゴンの集合体として扱われ、ポリゴン単位で、「座標変換」、「クリッピング」、「光源計算」などの幾何学的な演算処理が行われる。
【０００６】
一方、ラスタ・サブシステムは、オブジェクトを構成する各ピクセル（ｐｉｘｅｌ）を塗りつぶす過程のことである。
ラスタライズ処理は、たとえばポリゴンの頂点毎に求められた画像パラメータを基にして、ポリゴン内部に含まれるすべてのピクセルの画像パラメータを補間することによって実現される。
ここで言う画像パラメータには、いわゆるＲＧＢ形式などで表される色（描画色）データ、奥行き方向の距離を表すｚ値などがある。
また、最近の高精細な３次元グラフィックス処理では、遠近感を醸し出すためのｆ（ｆｏｇ：霧）や、物体表面の素材感や模様を表現してリアリティを与えるテクスチャｔ（ｔｅｘｔｕｒｅ）なども、画像パラメータの１つとして含まれている。
【０００７】
ここで、ポリゴンの頂点情報からポリゴン内部のピクセルを発生する処理では、よくＤＤＡ（Ｄｉｇｉｔａｌ　Ｄｉｆｆｅｒｅｎｔｉａｌ　Ａｎａｌｙｚｅｒ）と呼ばれる線形補間手法を用いて実行される。
ＤＤＡプロセスでは、頂点情報からポリゴンの辺方向へのデータの傾きを求め、この傾きを用いて辺上のデータを算出した後、続いてラスタ走査方向（Ｘ方向）の傾きを算出し、この傾きから求めたパラメータの変化分を走査の開始点のパラメータ値に加えていくことで、内部のピクセルを発生していく。
【０００８】
【発明が解決しようとする課題】
ところで、各ピクセルの描画色の計算、すなわち色計算には表面の材質が大きく影響を及ぼす。平坦で均質な素材の表面の色計算は比較的容易であるが、たとえば動物の毛皮などの色計算は容易ではない。何故ならば、表面形状が複雑で、毛の密度によっては皮膚の色の影響を受けたり、毛の流れによって色も変化するからである。
【０００９】
動物の毛皮を描画する最も基本的な方法として、毛を１本１本描画する方法がある。
しかしながら、この方法は、毛を１本１本描画するために必要な計算量が膨大となってしまうという根本的な問題がある。
さらに、毛は半透明物質として描画するため、プリミティブ単位あるいはピクセル単位で奥行き方向にソート（ｚソート）する必要がある。これにも膨大な計算量を要する。
【００１０】
Ｋａｊｉｙａは、３次元マップを用い視線方向にテクセルを走査することによって、毛皮の質感を表現できることを示した（Ｋａｊｉｙａ，Ｊ．Ｔ　ａｎｄ　Ｔｉｍｏｔｈｙ　Ｌ．　Ｋａｙ．Ｒｅｎｄｅｒｉｎｇ　Ｆｕｒ　ｗｉｔｈ　Ｔｈｒｅｅ　Ｄｉｍｅｎｔｉｏｎａｌ　Ｔｅｘｔｕｒｅｓ，ＳＩＧＧＲＡＰＨ　８９，ｐｐ．２７１−２８０、参照）。
しかしながら、この方法は、視線方向のテクセルの走査に描画時間が多く必要である。また、３次元マップを保持するための大容量のメモリ領域が必要となる。
【００１１】
Ｇｏ１ｄｍａｎは、ダルメシアンのような非常に短い毛の生え方がポアソン（Ｐｏｉｓｓｏｎ）分布に従うと仮定することによって、確率的な見え方を計算し、高速に毛皮の質感を描画する方法を開発した（Ｇｏｌｄｍａｎ，Ｄ．Ｂ．，　Ｆａｋｅ　Ｆｕｒ　Ｒｅｎｄｅｒｉｎｇ，ＳＩＧＧＲＡＰＨ　９７，ｐｐ．１２７−１３４　、参照）　　。
この方法は、視線方向のテクセルの走査が必要なく、大容量のメモリも必要がない。
しかしながら、この方法は、短い毛が１ピクセル中に十分に多く存在する場合にのみ有効であり、たとえばダルメシアンより長い毛であったり、１ピクセル中にそれほど多く毛が存在しないような場合には用いることができない。
【００１２】
Ｌｅｎｇｙｅｌは、毛皮を同心の複数の半透明層（以下、シェル（ｓｈｅｌｌ）という）として描画する方法を提案した（Ｌｅｎｇｙｅｌ，Ｅ．Ｊ．，　Ｒｅａｌ−Ｔｉｍｅ　Ｆｕｒ，　Ｅｕｒｏｇｒａｐｈｉｃｓ　Ｒｅｎｄｅｒｉｎｇ　Ｗｏｒｋｓｈｏｐ　２０００，　ｐｐ．２４３−２５６　、および、Ｌｅｎｇｙｅｌ，Ｅ．Ｊ．，　Ｒｅａｌ−Ｔｉｍｅ　Ｆｕｒ　ｏｖｅｒ　Ａｒｂｉｔｒａｒｙ　Ｓｕｒｆａｃｅｓ　，ＡＣＭ　２００１　Ｓｙｍｐｏｓｉｕｍ　ｏｎ　Ｉｎｔｅｒａｃｔｉｖｅ　３Ｄ　Ｇｒａｐｈｉｃｓ（ｈｔｔｐ：／／ｒｅｓｅａｒｃｈ．ｍｉｃｒｏｓｏｆｔ．ｃｏｍ／　〜ｊｄｌ／）　参照）。
これは、シェルを内側から複数回描画し、重ね合わせて行くことで、毛皮を高速に描画できる。各シェルの色計算には、事前に毛のモデルから作成した３次元マップを用いる。
【００１３】
彼らはまた、ｎＶｉｄｉａのＧｅＦｏｒｃｅにおける頂点シェーダ、ピクセルシェーダへの実装を行い、この方法が実際に、有効であることを示した。
【００１４】
この方法では、Ｐｒａｕｎのラップドテクスチャ（ｌａｐｐｅｄ　ｔｅｘｔｕｒｅ）の手法（Ｐｒａｕｎ，Ｅ．，　Ｌａｐｐｅｄ　Ｔｅｘｔｒｕｒｅｓ，　ＳＩＧＧＲＡＰＨ　２０００，ｐｐ．４６５−４７０、参照）を用い、同じマップを繰り返し表面に貼り付けることで、必要なマップの総量を減らしている。
しかし、この方法では、依然として擬似的な３次元マップであり、シェルの数だけのマップはやはり必要となってしまうという問題がある。
【００１５】
また、シェルを用いた描画の本質的な問題として、エッジ近傍での画質の劣化がある。エッジ近傍では、毛の描画色か徐々に薄く見えるようになる。また、シェルの描画順がエッジ近傍では正しくないため、正しい色が得られない。
このエッジ近傍での画質上の問題点を、Ｌｅｎｇｙｅｌは皮膚上のメッシュの境界線上に、皮膚面に垂直にひれ状のプリミティブ（フィン：ｆｉｎ）を用いることで解決している。
フィン（ｆｉｎ）は、メッシュの境界上のどこにでも存在し、メッシュの境界がエッジに近い場合のみフィンを描画するようにしている。フィンの描画には、前述の３次元マップとは別のマップ（フィンテクスチャ（ｆｉｎ　　ｔｅｘｔｕｒｅ））を用いる。
【００１６】
Ｌｅｎｇｙｅｌは、メッシュの全ての境界線上に異なるフィンテクスチャを用意するのではなく、１種類のフィンテクスチャを使いまわすことで、必要なメモリ量を節約している。
しかしながら、Ｌｅｎｇｙｅｌが試みているのは、毛が全体的には皮膚面に対して垂直に立っている場合のみである。
この場合であれば、フィンテクスチャは１種類で済むが、たとえば毛が皮膚面に沿っているような場合には、視線と毛の方向との関係から様々なフィンテクスチャを選択する必要が生じる。
したがって、フィンテクスチャに必要なメモリ量は増大する。
【００１７】
また、フィンは半透明のプリミティブとして描画するため、正確な色計算のためには本来はｚソートを行わなければならないが、これについてＬｅｎｇｙｅｌは特に述べていない。
【００１８】
上記のような課題があるものの、シェルを用いた毛皮の描画は高速であり、単純形状の物体であれば、フィンの描画を除けば、半透明物体の重ねあわせに合うソーティングも必要ないという長所がある。
【００１９】
ところで、従来、マップを用いた多くの手法においては、マップのテクセル自体が無効であるということはなかった。
しかしながら、毛のような線状物をマップを用いて表現する場合、図１９に示すようにテクセルには、毛に関わるテクセル（有効なテクセル）Ｔ１１，Ｔ２１と毛に関わらないテクセル（無効なテクセル）Ｔ１２，Ｔ２２が存在する。
【００２０】
一方、通常テクスチャマップでマップデータを取得する際、下記の数１のように近傍テクセルのマップデータをフィルタ処理して算出する場合がある。
数１は、４近傍のフィルタ処理を行う場合を示すが、一般にはこれより多次元のフィルタ処理を行う場合がある。
【００２１】
【数１】
2004054621.tif 000003
【００２２】
ここで、ｄ１１〜ｄ２２は近傍テクセルのマップデータであり、ｄが最終出力のマップデータである。ａ１１〜ａ２２はマップアドレスの小数部の値により算出される定数である。
【００２３】
従来のテクスチャマッピングでは、テクセル内のマップデータは色情報を格納することが普通である。
一方、バンプマッピングのように法線ベクトルや線状物体の方向ベクトルを格納する場合もある。
図１９の例においては、各テクセルに透過度αおよび線状物体の方向ベクトル＜ｔ＞を格納している。α＝０のとき該当テクセルは完全に透明であることを示しており、α＝１は不透明であることを示す。
たとえば、線状物体の方向ベクトル＜ｔ＞が与えられたとき、その色の拡散成分ｃはｋａｊｉｙａにより提案されたライティング式を用いて以下の数２のように計算される。なお、数２において、＜１＞は光源ベクトル、ｃｄは光源色と物体の拡散色成分の積を示す。
【００２４】
【数２】
2004054621.tif 000004
【００２５】
数３は、図１９に示すように、マップデータとして透過度α、方向ベクトル＜ｔ＞が格納されている場合、数１と同様にフィルタリングを行ったものである。
【００２６】
【数３】
2004054621.tif 000005
【００２７】
ここで、ｃ１１〜ｃ２２はそれぞれ＜ｔ１１＞〜＜ｔ１２＞を数２に適用して、求めた拡散色ｃに相当する。
なお、上記は色計算後にフィルタを行う場合であるが、たとえば方向ベクトルの段階でフィルタを行うと、以下の数４のようになる。
【００２８】
【数４】
2004054621.tif 000006
【００２９】
ところで、数３の処理は、色を計算した後にフィルタ処理を行うため、４つの色計算部が必要となる。一般に色計算は複雑な演算を伴うため、これはハードウエアコストが増大するという欠点がある。
一方、数４の処理は、マップに保持されているベクトルをそのままフィルタ、すなわち補間するため、従来のハードウエアとほぼ同じ構成で実現できる。
しかしながら、ベクトルの段階で補間する場合、画質の劣化を伴う場合がある。これについて以下に説明する。
【００３０】
図２０は、２つの方向ベクトル＜ｔ１１＞および＜ｔ１２＞が、光源ベクトル＜１＞の反対側に存在する場合を示す図である。またここでは、これらのベクトルが隣り合うテクセルＴ１１、Ｔ１２に保持されているとする。
マップアドレスによっては、テクセルＴ１１とＴ１２の中間の値を取りたい場合が考えられる。この場合の色をどのように計算するかが問題となる。
ベクトルの補間を行う場合、図２０に示すように、＜ｔ１１＞と＜ｔ１２＞の間のベクトル＜ｔ’＞が算出される。これを用いて色を計算することになる。
【００３１】
図２１は、ｋａｊｉｙａのライティング式（数２）の場合の色計算の様子を模式的に示す図である。
図２１に示すように、＜ｔ１１＞、＜ｔ１２＞はいずれも＜１＞から同じ程度の角度を成しているため、ほぼ同じ拡散色を得る。
しかしながら、これらを補間した＜ｔ’＞は、＜１＞との成す角度が非常に小さくなるため、これらの色よりも暗い色を得ることになる。
本来は、テクセルＴ１１およびＴ１２で計算した色の中間くらいの色が得られれば良いが、これはベクトルの線形補間では得ることができない。
【００３２】
本発明は、かかる事情に鑑みてなされたものであり、その目的は、ハードウェアの増大を防止しつつ、簡単な処理で色計算の結果、最適な色の中間値をとることが可能な画像処理装置およびその方法を提供することにある。
【００３３】
【課題を解決するための手段】
上記目的を達成するため、本発明の第１の観点に係る画像処理装置は、第１のベクトルデータを含む色計算用のマップデータを保持し、別途与えられる第２のベクトルデータと上記第１のベクトルデータとの内積の絶対値を計算し、計算した内積の絶対値とともに対応するマップデータを出力するマップ保持部と、上記マップ保持部により出力されたマップデータに対して所定のフィルタ処理を行うマップデータ処理部と、上記マップデータ処理部により出力されたマップデータに基づいて色計算を行い所定の描画処理を行う描画手段とを有する。
【００３４】
好適には、上記マップ保持部は、マップアドレスを取得し、マップアドレスの近傍データについて、上記第２のベクトルデータと上記第１のベクトルデータとの内積の絶対値を計算する。
【００３５】
好適には、上記マップデータ処理部は、マップデータに対して線形補間を行う。
【００３６】
好適には、上記描画手段は、複数の半透明層であるシェルを重ね合わせた描画対象物の方向を示すベクトルを求め、求めたベクトルに基づいてフィルタカーネルを変更し、描画対象物の向かっている方向にピクセルの情報を膨らませて、各シェル間で連続性を持たせるフィルタ処理を行う。
【００３７】
本発明の第２の観点に係る画像処理方法は、第１のベクトルデータを含む色計算用のマップデータを保持する第１のステップと、別途与えられる第２のベクトルデータと上記第１のベクトルデータとの内積の絶対値を計算する第２のステップと、上記第２のステップで計算した内積の絶対値を含むマップデータの対して所定のフィルタ処理を行う第３のステップと、上記第３のステップで出力されたマップデータに基づいて色計算を行い所定の描画処理を行う第４のステップとを有する。
【００３８】
本発明によれば、第１のベクトルデータを含む色計算用のマップデータがマップ保持部に保持される。
マップ保持部においては、別途与えられる第２のベクトルデータと記第１のベクトルデータとの内積の絶対値が計算される。そして、マップ保持部から計算した内積の絶対値とともに対応するマップデータがマップデータ処理部に出力される。
マップデータ処理部においては、マップ保持部により出力されたマップデータに対して所定のフィルタ処理、たとえば線形補間処理が施され描画手段に出力される。
そして、描画手段において、マップデータ処理部により出力されたマップデータに基づいて色計算が行われ所定の描画処理が行われる。
【００３９】
【発明の実施の形態】
以下、本発明の実施形態を、毛皮のような線状物質の描画を例として図面に関連付けて説明する。
【００４０】
図１は、本発明に係る画像処理装置の一実施形態を示すブロック構成図である。
【００４１】
本実施形態に係る画像処理装置１０は、２次元マップを用いた毛皮のような線状物質の描画が可能である。
具体的には、画像処理装置１０は、たとえば毛皮を半透明層（シェル：ｓｈｅｌｌ）として重ね合わせて描画する。このとき、本画像処理装置１０は、３次元マップを用いず、単一の２次元マップを用いて描画する。
また、本画像処理装置１０におけるマップのサンプリング方法は、Ｌｅｎｇｙｅｌの方法のように、毛皮を高さ方向にスライスして、それぞれを別々のシェルに対応するマップとみなすのではなく、毛の全体を皮膚面に相当する２次元マップ上に投影する。
そして、本画像処理装置１０では、１枚のマップに投影により見える毛全体の情報が格納される。
本画像処理装置１０では、このように、表現したい毛をなるべく分断しないようにサンプリングすることで、少ないメモリ容量で高画質な表現を可能としている。
【００４２】
また、本実施形態に係る画像処理装置１０は、Ｌｅｎｇｙｅｌの方法のように、高品質な毛皮の表現を行うために、描画パイプラインを通してシェルの複数描画を行うのではなく、描画パイプラインのみではなく、メモリに局所的な処理を補助的に利用することによって、描画パイプラインからの情報を削減することが可能に構成される。
また、画像処理装置１０では、エッジ近傍の画質の改善のために、フィルタ処理を用いている。
描画ハードウェアは、メモリの局所的な処理をより多く用意できる可能性がある。本実施形態に係る画像処理装置１０は、このような処理を通常の描画処理と並行して行うことにより、高品質な画像を高速に描画しようというものである。
【００４３】
本実施形態に係る画像処理は、描画前処理および描画時処理から構成される。描画前処理は毛のモデル作成やマップ作成処理を含み、描画前に一度だけ行う。描画時処理は描画前に作成されたマップを用いて、リアルタイムで行う処理である。
以下に、本実施形態に係る画像処理装置１０の具体的な構成および処理内容について詳述する。
【００４４】
本画像処理装置１０は、図１に示すように、マップ作成部１１、マップ保持部１２、マップデータ処理部１３、オブジェクト発生部１４、描画部１５、メモリ１６、およびフィルタ処理部１７を有している。
描画前処理はマップ作成部１１およびマップ保持部１２で行われ、描画後処理は、オブジェクト発生部１３、描画部１５、メモリ１６、およびフィルタ処理部１７により行われる。
また、オブジェクト発生部１４によりシェル発生手段が構成され、描画部１５およびフィルタ処理部１７により描画手段が構成される。
【００４５】
本実施形態において利用するバッファは以下のとおりである。これらは図１のメモリ１６に保持される。
すなわち、利用するバッファは、一時計算用フレームバッファｆｂｕｆ１，　ｆｂｕｆ２、一時計算用デプスバッファｚｂｕｆ、一時計算用インデックスバッファｉｂｕｆ、一時計算用カウンタバッファｃｂｕｆ、最終出力用フレームバッファＦＢＵＦ、および最終出力用デプス（ｚ）バッファＺＢＵＦである。
メモリ１６は、シェルの各層の描画前に、各バッファを以下のように初期化する。
【００４６】
【数５】
2004054621.tif 000007
【００４７】
具体的には、メモリ１６は、一時計算用カウンタバッファｃｂｕｆ、一時計算用フレームバッファｆｂｕｆ１，　ｆｂｕｆ２を０に初期化し、一時計算用デプスバッファｚｂｕｆを最終出力用フレームバッファＦＢＵＦの内容に初期化する。
【００４８】
また、描画時処理は、たとえば皮膚の描画、シェルの描画、フィルタ処理、合成処理から構成される。
最初に皮膚を不透明物体としてフレームバッファｆｂｕｆ１　、ｚバッファＺＢＵＦ１　に描画する。続いて、シェルを複数回重ね描きすることにより毛皮を表現する。
各シェルの描画はフレームバッファｆｂｕｆ１　、ｚバッファＺＢＵＦ１　とは異なる一時的なフレームバッファｆｂｕｆ２　、ｚバッファＺＢＵＦ２　に描画する。ここでフィルタ処理を行った後、フレームバッファｆｂｕｆ１　、ｚバッファＺＢＵＦ１　と合成を行う。
【００４９】
マップ作成部１１は、描画前処理としての毛のモデル作成および２次元マップ作成を行い、作成した２次元マップをマップ保持部１２に格納する。
マップ作成部１１は、毛のモデル作成にあたっては、所定の毛データを受けて、図２に示すように、毛は折れ線として、２軸を２次のテクスチャ空間のｓ，ｔ軸とし、ｓ，ｔ軸と直交するｈ軸を更に持つ３次元空間上に作成する。
マップ作成部１１は、２次元マップ作成にあたっては、作成したモデルに基づいて、図３に示すように、ｈ軸の上方から（ｓ、ｔ）平面に投影することで作成する。
マップ作成部１１は、生成した２次元マップには、シェルの描画時に必要なパラメータ（Ｋｄ、Ｋｓ、Ｋａ、Ｔｔ、ｃｏｖ、ｓｈｉｎｉｎｅｓｓ）、および０〜１に正規化された高さ（ｈ）情報を含ませる。
ここでＫｄ、Ｋｓ、Ｋａはそれぞれ拡散（ｄｉｆｆｕｓｅ）、鏡面（ｓｐｅｃｕｌａｒ）、周囲（ａｍｂｉｅｎｔ）の反射係数、ｓｈｉｎｉｎｅｓｓは鏡面（ｓｐｅｃｕｌａｒ）の指数値であり、Ｔｔは毛の方向ベクトル（ｓ、ｔ、ｈ）であり、たとえば第１のベクトルに相当する。また、ｃｏｖはテクセルに毛が占める面積を表している。
【００５０】
上述したように、マップ作成部１１は、作成したモデルに基づいて、図３に示すように、ｈ軸の上方から（ｓ、ｔ）平面に投影することで２次元マップを作成する。この場合、同一テクセルに複数の毛がかかる場合、一番上に存在する毛のみをテクセルに反映することとして処理することが可能である。
しかし、これでは、細い毛を描画するときに不都合が生じることから、本実施形態に係るマップ作成部１１は、同一テクセルに複数の毛のパラメータを書き込む。
各テクセルにＮ個の毛の情報を書き込む場合、たとえば下記の数６のように計算を行う。
なお、ここでは、より下の毛の情報は添え字を小さく、上の毛の情報は添え字を大きくなるように、ソーティングが成されているとする。また、上の毛の見え方が最も影響すると思われることから、ｈは最も上の毛の高さを利用することとしている。
【００５１】
【数６】
2004054621.tif 000008
【００５２】
ただし、／は文字上に付されるバーの代わりに用いた記号であり、ベクトルを示す。
【００５３】
マップ保持部１２は、たとえばＳＲＡＭ等のメモリにより構成され、マップ作成部１１で作成され、各種パラメータや高さ情報が付加された２次元マップを保持する。
マップ保持部１２は、描画時に保持する各種パラメータや高さ情報が付加された２次元マップデータがオブジェクト発生部１４により読み出される。
また、マップ保持部１２は、図４に示すように、描画部１５からマップアドレスＭＡ１５を取得し（ＳＴ１）、保持したマップデータに含まれるベクトルとは別に第２のベクトルデータＶＣＴを取得し（ＳＴ２）、マップアドレスの近傍データ（フィルタ処理に必要なテクセルのマップデータ）について、取得したベクトルデータＶＣＴとマップ内マップデータに含まれるベクトルデータとの内積の絶対値を計算し（ＳＴ３）、フィルタ処理に必要なテクセルのマップデータを、算出した内積の絶対値とともに、たとえば４つのマップデータＭＤ１２Ａ〜ＭＤ１２Ｄとしてマップデータ処理部１３に出力する。
【００５４】
なお、本実施形態では、図１およびステップＳＴ２に示すように、ベクトルはマップデータの要求時に常に入力されるように構成されているが、その限りではなく、たとえばマップ保持部１２の内部レジスタ１２１に情報を設定するように構成することも可能である。
また、マップ保持部１２はベクトルをそのまま出力したとしてもフィルタ処理以前にベクトルの内積の絶対値を取り、これを基にフィルタ処理を行うことにより、同様の効果を得ることが可能である。
【００５５】
一般に、色計算式は内積の絶対値の単調関数となる場合が多い。Ｐｈｏｎｇのライティング式では、数７に示すように、拡散成分ｃｄは、法線ベクトル＜ｎ＞と光源ベクトル＜ｌ＞の内積の絶対値に比例する。また、反射成分ｃｓは、法線ベクトルとハーフベクトル＜ｈ＞の内積の絶対値のべき乗で表せる。
なお、記号＾はべき乗を表している。
【００５６】
【数７】
2004054621.tif 000009
【００５７】
また、Ｋａｊｉｙａのライティング式をよりハードウエア化に適するように簡易化されたライティング式がＬｅｎｇｙｌから提案されている。これは以下のように表せる。
【００５８】
【数８】
2004054621.tif 000010
【００５９】
これらいずれも、内積の絶対値に対して単調であり、かつこの値を用いて色計算を行うことが可能である。
したがって、これらのいずれの場合にも、本実施形態に係る画像処理装置１０の手法は有効である。
以後は、フィルタ処理部は、メモリ保持部から与えられたマップデータをフィルタ処理を行う。
【００６０】
マップデータ処理部１３は、描画部１５により供給されるマップアドレスの小数部ＤＣＭ１５、およびマップ保持部１２により供給されたマップデータＭＤ１２Ａ〜ＭＤ１２Ｄよりマップデータに対してフィルタ処理、具体的には線形補間して、フィルタ処理後のマップデータＭＤ１３を描画部１５に出力する。
【００６１】
オブジェクト発生部１４は、描画処理時に、マップ保持部１２に保持された２次元マップを読み出し、２次元マップデータＭＰＤ１２に基づいて毛皮に関する同心の複数のシェルを発生して、データＤ１４として描画部１５に供給する。
また、オブジェクト発生部１４は、シェルを後記する理由により、視線の裏側の面は外側から内側に向かってシェルを発生し、視線の表側の面は内側に向かって表側にシェルを発生する。
オブジェクト発生部１４の処理の概要は、下記の数９に示すように、皮膚面の描画、裏側の描画、表側の描画である。
【００６２】
数９に表したｏｆｓ　［　］　にはシェルが皮膚面からどれだけ膨らんでいるかを示す値であり、ｏｆｓ　［　０　］が最もふくらみが小さく、添え字が増すにつれてｏｆｓ　の値は増加する。ｏｆｓ　［　０　］は最も奥にあることを意味する。
また数９中、ｄｒａｗ＿ｏｂｊ　（ｏｆｓ，　ｆａｃｅ）　はオブジェクトを、頂点ｏｆｓ　だけ法線方向に膨らませて発生する処理を示している。
ｆａｃｅは裏面あるいは表面を指定し、それぞれ視線に対して裏側の面、表側の面のみを発生する。
【００６３】
【数９】
2004054621.tif 000011
【００６４】
さらに具体的には、オブジェクト発生部１４は、皮膚は毛皮とは異なり、不透明物体としてフレームバッファｆｂｕｆ１　、ｚバッファｚｂｕｆ１　に対して描画する。
このとき、ｚテストおよびｚ値更新を可として描画する。
シェルの描画処理は、ジオメトリ処理／頂点単位処理／ピクセル単位処理に分けて考えることができるが、オブジェクト発生部１４においては、ジオメトリ処理および頂点単位処理を行う。
【００６５】
ジオメトリ処理では、膨らませ度合いの異なるシェルを順番に発生する。また、発生したシェル毎に、各種パラメータを指定する。また、テクスチャの拡張係数も指定する。
【００６６】
ここで、本実施形態に係るオブジェクト発生部１４において採用する基本的なシェルの発生方法について説明する。
【００６７】
本方法では２次元のマップを用いて描画を行う。そのため単純に描画すると厚みのない毛皮となってしまう。
そこで、シェルを用いて、同一マップを繰り返し描画することで厚みを持たせるようにシェルを発生する。
【００６８】
図５は、３つのシェルに同一のマップを用いた場合を表現した図である。
図５に示すように、シェルＳＨＬの重なりが厚みを表現できる。ここでは３つのシェルＳＨＬ１〜ＳＨＬ３が存在しているが、マップとしては一種類のみを利用する。
また、視線に対して表側の面を描画する場合は、下側から上側へと順番にシェルを発生し、重ね描きすることで、厚みを表現することができる。
なお、エッジ近傍では視線に対して裏側の面も描画する必要がでてくる。この場合のシェルの発生方法については後述する。
【００６９】
実際に発生している毛の場合、外側のシェルには毛の先端側のみが、内側のシェルには毛の末端側のみが現れるはずである。これを表現するために、各シェルに高さの上下限値（ｈｍａｘ／ｈｍｉｎ）を設定する。
この場合、外側のシェルほど、より高い上下限値（ｈｍａｘ／ｈｍｉｎ）を持つように設定する。
その理由は、シェル描画時に、テクセルに含まれる高さ値ｈと上下限値（ｈｍａｘ／ｈｍｉｎ）を比較し、上限値が下限値以上（ｈｍａｘ＞＝ｈ＞ｈｍｉｍ）の場合にのみ描画し、これ以外の場合には描画しないようにするためである。
このようにすると、図６に示すように、離散的ではあるが、高さ方向に傾きのある毛を描画することができる。
なお、離散的であるということは、後段のフィルタ処理により解決される。
【００７０】
さらに、オブジェクト発生部１４は、エッジ近傍への対応として以下の処理を行う。
オブジェクト発生部１４は、図７に示すように、シェルを視線ＥＹに対して表側と裏側に分離して描画するようにシェルを発生する。
最初に視線ＥＹの裏側のシェルを外側から内側の向かって順番に描画する。この段階で、図７ではＡ、Ｂという順番で描画される。
続いて、表側のシェルを内側から外側に向かって順番に描画する。これにより、図７において、Ａ、Ｂに続いてＣ、Ｄという順番で描画され、正しい順番で色を重ねることができる。
【００７１】
次に、シェルへのマップの割り当て方法について説明する。
本実施形態では、２次元マップを用いるため、情報の欠如が生じる場合がある。
図８に示すように、毛同士が重なっている場合、下側の毛の高さ情報は失われてしまう。
このように、下側の毛の高さ情報が失われると、毛皮を視線を変化させて見た場合の可視性の変化（下側の毛が見えたり見えなかったりする）が上手く表現できなくなる。
この問題への解決するために、本実施形態では、図９（Ａ），（Ｂ）に示すように、複数のマップを用いる。
１枚のマップに共存できない情報であっても、異なるマップには存在できるため、上記の問題を解決できる。
検討した範囲では、３〜５種類程度のマップを用意し、図１０に示すように、各層ＬＹＲ１．ＬＹＲ２，・・毎に微妙に高さを変えて描画すると、毛皮として十分な画質を得ている。
図１０の例では、第１層ＬＹＲ１にマップＡ〜Ｅの５種類のマップが含まれ、第２層ＬＹＲ２にマップＡ〜Ｅの５種類のマップが含まれている。
そして、描画対象のシェルを構成するマップが含まれる層番号（層番号ＬＹＲ１、あるいはＬＹＲ２等）がデータＤ１５として描画部１５に供給される。
複数種類のマップを持つのではなく、１枚のマップでも同様の効果を出すことが可能である。これはマップを引くときのテクスチャアドレスに一定の（種類に応じた）オフセットを加えることで実現できる。この方法であれば、１種類のマップだけで描画できるため、メモリ容量の上で有利である。
【００７２】
次に、セルフシャドウの効果の指定について説明する。
毛皮の色は根元の方ほど暗い色となる。これは入出力光が、より上の毛皮により減衰するためである。この減衰の効果はＢａｎｋｓによって、数１０のように毛の密度ｐと光の通過する距離ｄの関数として与えられている（Ｂａｎｋｓ，Ｄ．，Ｃ．，Ｉｌｌｕｍｉｎａｔｉｏｎ　Ｉｎ　Ｄｉｖｅｒｓｅ　Ｃｏｄｉｍｅｎｔｉｏｎｓ，ＳＩＧＧＲＡＰＨ　９４，ｐｐ．３２７−３３４　参照）。
【００７３】
【数１０】
2004054621.tif 000012
【００７４】
光の通過する距離ｄは光の入射角により変化するため、数１０は光の入射角によって減衰の割合が変化することを示している。
ここではより簡略化して、各シェルで−定の減衰率（ａｔｔ）を持つと考える。上側のシェルは１に近いａｔｔ値を持ち、下側のシェルは０に近いａｔｔ値を持つものとする。これは光の入射角による減衰の割合の変化を無視しているが、画質的に大きな影響はない。
【００７５】
次に、テクスチャ拡張係数の指定について説明する。
ベクトル計算に用いるテクスチャ拡張係数ｓｚｏｏｍ、ｔｚｏｏｍ（テクスチャのｓ方向、ｔ方向の視野座標系における拡大縮小の割合）を求める。
この場合、均質にテクスチャが貼られてる場合であれば、三角形毎にこの値を求める必要はなく、シェル描画時に一度だけ指定すれば良い。
【００７６】
また、オブジェクト発生部１４は、頂点単位の処理としては頂点の移動、テクスチャ座標の移動を行う。
三角形単位での頂点位置の移動を行うことで、シェルを作成する。頂点における法線Ｎおよびオフセットｎｏｆｓを用いて、頂点位置を以下の数１１のように変更する。
【００７７】
【数１１】
2004054621.tif 000013
【００７８】
テクスチャ座標の移動に関しては、テクスチャアドレスのオフセットを下記の数１２のように変更することで、異なるマップを用いた場合と同等の効果を与えるようにしている。
【００７９】
【数１２】
2004054621.tif 000014
【００８０】
描画部１５は、オブジェクト発生部１４によりオブジェクトデータであるシェルデータ（プリミティブデータ）Ｄ１４に基づいて、描画対象のシェルを構成するマップのマップアドレスＭＡ１５（および／またはベクトルデータＶＣＴ）をマップ保持部１２に出力し、また、マップアドレスの小数部ＤＣＭ１３をマップデータ処理部１３に供給する。
描画部１５は、マップデータ処理部１３から供給されたマップデータＭＤ１３、およびオブジェクト発生部１４によりオブジェクトデータであるシェルデータ（プリミティブデータ）Ｄ１４に基づいて、方向ベクトル　＜ｔ＞　のウィンドウ座標系でのベクトル＜ｔｗ＞を求め、これからフィルタカーネル用のインデックス（ｉｎｄｅｘ　）を求める。
描画部１５は、オブジェクト発生部１４が発生したプリミティブをラスタライズした後、以下の数１３に示すように色、フィルタカーネル用のインデックス（ｉｎｄｅｘ　）を計算し信号Ｓ１５としてフィルタ処理部１７に出力する。
なお、描画部１５は、数１３に示すように、色計算にあたって、エッジ部での透過度を調整する。
【００８１】
【数１３】
2004054621.tif 000015
【００８２】
ａｔｂｌはカーネルにおける有効な要素ｋとした場合、１／ｋが格納されている。これはカーネルによってピクセルを膨らませる場合、それに応じて透過度を小さくする必要があるためである。
また、ａ　を｜ｃｏｓ（＜ｎ＞，　＜ｅ＞）　｜により除算する。
また、ｘ，　ｙの最大／最小値を保持するのは、必ずしも必要ではないが、後述のフィルタ処理部１７において、フィルタを行う範囲を限定するために有効である。
【００８３】
ここで、描画部１５におけるウィンドウ座標系での２次元ベクトル＜ｔｗ＞の求める処理について説明する。
【００８４】
基本的に、＜ｔｗ＞の方向にピクセルを拡大する。
以下では、図１１に示すように、元となるピクセルから＜ｔｗ＞の方向に伸びる直線から、距離Ｗ以内の範囲のピクセルを有効である場合のフィルタを考える。
この領域を判定する方法を、以下で考える。もととなるピクセルから対象となるピクセルへのベクトルを＜ｇ＞　とする。
図１２に示す通り、元のピクセルから＜ｔｗ＞の方向に伸びる直線と、対象となるピクセルとの距離は｜ｇ　｜ｓｉｎ（＜ｇ＞，　＜ｔｗ＞）となる。
なお、図１３では、もとのピクセルを白丸ＰＸＬ１、対象となるピクセルＰＸＬ２として示している。
これらから、以下の数１４のような方策で、対象となるピクセルを選択すれば良いことになる。
【００８５】
【数１４】
2004054621.tif 000016
【００８６】
この式で定義される領域は、無限の長さを持つが、実装上はカーネルサイズが有限であるために、定義領域も有限となる。
図１３に示すように、＜ｔ＞　をウィンドウ座標系での２次元ベクトル＜ｔｗ＞に変換する。
変換には、射影行列Ｐとしたとき（Ｐ−１）ｔ　を用いて、以下のように行うことができる。
【００８７】
【数１５】
2004054621.tif 000017
【００８８】
描画部１５は、基本的にはピクセル単位の処理を行うが、ピクセル単位の処理としては、色の計算、透過度の計算を行う。また、フィルタ処理に用いるためのベクトルの計算を行う。
以下に、色の計算、透過度の計算、ベクトルの計算の各処理についてさらに詳細に説明する。
【００８９】
まず、色の計算について説明する。
色計算には、たとえばＬｅｎｇｙｅｌ（Ｌｅｎｇｙｅｌ，Ｅ．Ｊ．，　Ｒｅａｌ−Ｔｉｍｅ　Ｆｕｒ，　Ｅｕｒｏｇｒａｐｈｉｃｓ　Ｒｅｎｄｅｒｉｎｇ　Ｗｏｒｋｓｈｏｐ　２０００，　ｐｐ．２４３−２５６　）に提案された簡易化された、数１６に示すような、ライティング式を用いる。
【００９０】
【数１６】
2004054621.tif 000018
【００９１】
ここで、／Ｔはマップから取得した毛の方向ベクトル／Ｔｔ（各要素がｓ，ｔ，ｈで表される）を、接空間の基底ベクトル（／Ｎ，／ＰＵ，／ＰＶ）を用いて、下記の数１７に基づいて視野座標系に変換したものである。
Ｃｄｌ，Ｃｓｌ，Ｃａｌは、それぞれ拡散（ｄｉｆｆｕｓｅ），鏡面（ｓｐｅｃｕｌａｒ），周辺（ａｍｂｉｅｎｔ）の光源色を示す。またａｔｔはセルフシャドウの効果を導入するための減衰率である。また、／Ｔｔ・ｓ、／Ｔｔ・ｔ、／Ｔｔ・ｈは、それぞれ／Ｔｔのｓ，ｔ，ｈ，成分を表す。
【００９２】
【数１７】
2004054621.tif 000019
【００９３】
次に、透過度の計算について説明する。
透過度αは、マップから取得したｃｏｖを以下の数１８のように変調して用いる。ここでｃｏｖは毛がテクセルに占める割合を表している。
【００９４】
【数１８】
2004054621.tif 000020
【００９５】
ここで、／ｎは法線ベクトル、／ｅは視線ベクトルである。ａｆは、上述したように、シェルに指定された上下限値（ｈｍａｘ／ｈｍｉｎ）とｈ値との関係によって、描画するかどうかを制御するためのフラグである。
また、ｃｏｓ（／ｎ，／ｅ）による除算は、以下のような理由による。
２次元のマップ上には、たとえば図１４に示すように、毛が描画される。
図１５（Ａ）に示すように、このマップを正面から見た場合の毛の太さが正しいものとすると、図１５（Ｂ）に示すように、これを横方向に傾いて見た場合はより細く見える。その結果、エッジ近傍での毛の色は薄くなってしまう。上記のｃｏｓによる除算は、エッジ部分で正しい画質を得るために必要となる。
【００９６】
また、描画部１５は、ｚバッファｚｂｕｆ２　を用いてｚテストを行いながら、色と透過度をフレームバッファｆｂｕｆ２　に、ｚ値をｚバッファｚｂｕｆ２　に出力する。ｚテストは、描画ピクセルのＺ値がｚバッファｚｂｕｆ２　の内容よりも手前にあるときに成功する。
【００９７】
フィルタ処理部１７は、描画部１５により信号Ｓ１５として供給されたＮ×Ｎのフィルタカーネル用インデックスｖｌｄ［ｉｎｄｅｘ］［Ｎ］［Ｎ］を用いて、下記の数１９に示すように、フィルタ処理を行い、各シェルの描画およびフィルタ処理が完了した後、ｚバッファｚｂｕｆ２　とｚバッファｚｂｕｆ１　によりｚテストを行い、ｚバッファｚｂｕｆ２　の方が手前にある場合に、ｚバッファｚｂｕｆ２　とｚバッファｚｂｕｆ１　の内容をアルファブレンド処理する。
フィルタ処理部１７は、方向ベクトルに基づいてフィルタカーネルを変更し、描画対象物の向かっている方向にピクセルの情報を膨らませて、各シェル間で連続性を持たせるフィルタ処理を行う。
なお、画面の必要領域は、フィルタ処理部１７により与えられる数１１における描画時にｘｍａｘ，　ｘｍｉｎ，　ｙｍａｘ，　ｙｍｉｎを保持することにより判断できる。
また、フィルタ処理部１７は、フィルタ処理を行う領域の範囲を記憶しておき、当該記憶した領域に対してのみフィルタ処理を行うように構成することも可能である。
また、フィルタ処理部１７は、フィルタ処理を行う回数を、層描の都度ではなく、途中の数回のみ行うように構成することも可能である。
【００９８】
【数１９】
2004054621.tif 000021
【００９９】
なお、数１９で用いるフィルタカーネルの内容ｖｌｄ　［］、および数１３で用いるａｔｂｌ［］については、たとえば下記のように事前に計算すると、線状物体がより滑らかに結合するようになる。
【０１００】
【数２０】
2004054621.tif 000022
【０１０１】
これは図１１に示すように、カーネルの中心を通り＜ｔｗ＞の方向に伸びる直線から、距離Ｗ　の範囲にある部分を選択するものである。
最初に＜ｔｗ＞＝（ｔｘ，ｔｙ）で各ｉｎｄｅｘ　に対応する＜ｔｗ＞を求めている。ｉｎｄｅｘ　は０〜　ＩＮＤＥＸ＿ＮＵＭ−１　の値をとり、ｘ軸の正の方向から反時計周りに一回りするようにしている。
＜ｇ＞＝（ｉ−ＫＥＲＮＥＬ　＿ＳＩＺＥ／２…）　で、カーネル中心から要素（ｉ，ｊ）　に向かうベクトル＜ｇ＞　を求めている。同時に＜ｇ＞　の大きさをｇｎｏｒｍ　としている。＜ｇ＞　はその後、正規化される。
ｉｆ（ｇｎｏｒｍ＊　…）　以下で、直線からの距離がＷ　よりも小さい範囲のピクセルの有効フラグを１としている。Ｗ　以上の範囲のピクセルの有効フラグは０とする。これは図１２に示すように、要素（ｉ，ｊ）　の直線からの距離はｇｎｏｒｍ＊ｓｉｎ（＜ｔｗ＞，＜ｇ＞）で表されるので、この値とＷ　との大小比較で求めることができる。
数１３で用いるａｔｂｌの値をここで求めることができる。すなわち、このカーネルを用いてフィルタ処理を行うと、１ピクセルがどれだけの面積に広げられるかがわかっている（カーネル内の有効ピクセル数で表される）ため、この逆数を事前に計算し、テーブルとして所持しておく。数９において、フィルタ後に透過度にａｔｂｌの値を乗ずる。
【０１０２】
本実施形態では、毛をシェル毎に分断するため、図６に示すように、特にエッジ付近で不連続性が目立つ。
本来は図１６に示すように、連続して表現されるべきものである。
そこで、図１７に示すように、画面上でフィルタ処理を施すことにより、擬似的に連続性を保つことができる。
このフィルタは、毛が向かっている方向に細長い形状にピクセルの情報を膨らませるものである。これを行うために、毛がどちらに向かっているかを示すベクトル＜ｔ＞を、上述した数１９のように、ウィンドウ座標系で与える必要がある。
【０１０３】
次に、図１の構成の画像処理装置の動作を説明する。
【０１０４】
まず、描画前処理として、マップ作成部１１において、毛のモデル作成および２次元マップ作成が行われ、作成した２次元マップがマップ保持部１２に格納される。
なお、生成した２次元マップには、シェルの描画時に必要なパラメータ（Ｋｄ、Ｋｓ、Ｋａ、Ｔｔ、ｃｏｖ、ｓｈｉｎｉｎｅｓｓ）、および０〜１に正規化された高さ（ｈ）情報が含まれている。
【０１０５】
そして、オブジェクト発生部１４において、描画処理時に、マップ保持部１２に保持された２次元マップが読み出され、２次元マップデータに基づいて毛皮に関する同心の複数のシェルが発生されて、データＤ１４として描画部１５に供給される。
オブジェクト発生部１４においては、視線の裏側の面は外側から内側に向かってシェルが発生され、視線の表側の面は内側に向かって表側にシェルが発生される。
【０１０６】
描画部１５においては、オブジェクト発生部１４によりオブジェクトデータであるシェルデータ（プリミティブデータ）Ｄ１４に基づいて、描画対象のシェルを構成するマップのマップアドレスＭＡ１５がマップ保持部１２に供給され、マップアドレスの小数部ＤＣＭ１５がマップデータ処理部１３に出力される。
【０１０７】
マップアドレスＭＡ１５を受けたマップ保持部１２においては、保持したマップデータに含まれる第１のベクトルとは別に第２のベクトルデータＶＣＴが指定され、マップアドレスの近傍データ（フィルタ処理に必要なテクセルのマップデータ）について、指定されたベクトルデータＶＣＴとマップ内マップデータに含まれるベクトルデータとの内積の絶対値が計算される。
そして、マップ保持部からは、フィルタ処理に必要なテクセルのマップデータが、算出した内積の絶対値とともに、マップデータＭＤ１２Ａ〜ＭＤ１２Ｄとしてマップデータ処理部１３に出力される。
【０１０８】
マップデータ処理部１３においては、描画部１５により供給されるマップアドレスの小数部ＤＣＭ１５、およびマップ保持部１２により供給された複数のマップデータＭＤ１２Ａ〜１２Ｄを受けて、マップデータに対してフィルタ処理、具体的には線形補間が施される。マップデータ処理部１３からはフィルタ処理後のマップデータＭＤ１３が描画部１５に出力される。
【０１０９】
描画部１５においては、マップデータ処理部１３により供給された２次元マップデータ、およびオブジェクト発生部１４によりオブジェクトデータであるシェルデータに基づいて、ベクトル　＜ｔ＞　のウィンドウ座標系でのベクトル＜ｔｗ＞が求められる。
そして、求めたウィンドウ座標系でのベクトル＜ｔｗ＞に基づいてフィルタカーネル用のインデックス（ｉｎｄｅｘ　）が求められる。
描画部１５においては、オブジェクト発生部１４が発生したプリミティブがラスタライズされた後、数１３に示すように色、フィルタカーネル用のインデックス（ｉｎｄｅｘ　）が計算され信号Ｓ１３としてフィルタ処理部１７に出力される。
なお、描画部１５においては、色計算にあたって、エッジ部での透過度が調整される。
フィルタ処理部１７において、求めたベクトルに基づいてフィルタカーネルが変更されて、描画対象物の向かっている方向にピクセルの情報を膨らませて、各シェル間で連続性を持たせるフィルタ処理が行われる。
【０１１０】
以上説明したように、本実施形態によれば、第１のベクトルデータを含む色計算用パラメータ保持する複数のマップデータを生成するマップ作成部１１と、生成された複数のマップデータを保持し、マップアドレスＭＡ１５を取得し、保持したマップデータに含まれる第１のベクトルとは別に第２のベクトルデータＶＣＴを取得し、マップアドレスの近傍データ（フィルタ処理に必要なテクセルのマップデータ）について、取得した第２のベクトルデータＶＣＴとマップ内マップデータに含まれる第１のベクトルデータとの内積の絶対値を計算し、フィルタ処理に必要なテクセルのマップデータを、算出した内積の絶対値とともに、マップデータＭＤ１２Ａ〜ＭＤ１２Ｄとして出力するマップ保持部１２と、マップ保持部１２から出力されたマップデータに対してフィルタ処理（線形補間処理）を行い、マップデータＭＤ１３を出力するマップデータ処理部１３と、マップデータ処理部１３により出力されたマップデータに基づいて色計算を行い所定のフィルタ処理を含む描画処理を行う描画部１５とを設けたので、ハードウェアの増大を防止しつつ、簡単な処理で色計算の結果、最適な色の中間値をとることができる。その結果、画質の劣化を防止できる利点がある。
【０１１１】
図１８は、本実施形態における色計算の様子を示す図である。数２に示す拡散成分は、光源ベクトル＜ｌ＞と方向ベクトル＜ｔ＞の内積の絶対値に単調であるため、本実施形態のように、テクセルＴ１１およびＴ１２における内積の絶対値の補間を行った結果を用いて、色計算を行うと、図１８に示すように、Ｔ１１およびＴ１２における色の中間の値を良好にとることができる。
さらに、図１を見ると明らかなように、色計算部を複数保持する必要もないため、ハードウェアコストも増大することもない。
【０１１２】
また、本実施形態において、描画対象物を複数のシェルとして重ね合わせて描画する画像処理装置において、２次元マップデータ、およびオブジェクト発生部１４によりオブジェクトデータであるシェルデータに基づいて、ベクトル　＜ｔ＞のウィンドウ座標系でのベクトル＜ｔｗ＞を求め、これからフィルタカーネル用のインデックス（ｉｎｄｅｘ　）を求め、フィルタ処理部１７に出力する描画部１５と、描画部１５により供給されたＮ×Ｎのフィルタカーネル用インデックスｖｌｄ［ｉｎｄｅｘ］［Ｎ］［Ｎ］を用いて、フィルタ処理を行い、各シェルの描画およびフィルタ処理が完了した後、ｚバッファｚｂｕｆ２　とｚバッファｚｂｕｆ１　によりｚテストを行い、ｚバッファｚｂｕｆ２　の方が手前にある場合に、ｚバッファｚｂｕｆ２　とｚバッファｚｂｕｆ１　の内容をアルファブレンド処理するフィルタ処理部１７とを設けたので、シェルの描画によっても連続性を維持することが可能で、画質の劣化を防止でき、平坦で均質な素材のオブジェクトはもとより、複雑な形状のオブジェクトも高品位に描画することができる。
本実施形態によれば、たとえば鹿のように、比較的短毛であり毛が皮膚面に沿っているような場合の、毛皮の質感を、２次元のマップを用いて高速に描画することが可能である。
【０１１３】
また、本実施形態によれば、色計算にあって、エッジ部での透過度を調整することから、エッジ部分で高い画質を得ることが可能となる。
【０１１４】
【発明の効果】
以上説明したように、本発明によれば、ハードウェアの増大を防止しつつ、簡単な処理で色計算の結果、最適な色の中間値をとることができる。その結果、画質の劣化を防止できる利点がある。
【図面の簡単な説明】
【図１】本発明に係る画像処理装置の一実施形態を示すブロック構成図である。
【図２】本実施形態に係る毛のモデル作成について説明するための図である。
【図３】本実施形態に係る２次元マップの作成について説明するための図である。
【図４】本実施形態に係るマップ保持部の具体的な処理を説明するためのフローチャートである。
【図５】３つのシェルに同一のマップを用いた場合を表現した図である。
【図６】離散的に高さ方向に傾きのある毛を描画した場合を示す図である。
【図７】本実施形態に係るシェルの視線に対して表側と裏側に分離して描画する方法を説明するための図である。
【図８】毛同士が重なった状態で、毛の高さ情報が失われることを説明するための図である。
【図９】毛の高さ情報を失わせない方法を説明するための図である。
【図１０】複数種のマップを用意し、各層毎に微妙に高さを変えて描画する方法を説明するための図である。
【図１１】ウィンドウ座標の方向ベクトルを求める方法を説明するための図である。
【図１２】ウィンドウ座標の方向ベクトルを求める方法を説明するための図である。
【図１３】ウィンドウ座標の方向ベクトルを求める方法を説明するための図である。
【図１４】毛の描画状態を示す図である。
【図１５】エッジ部分の透過度を調整する理由を説明するための図である。
【図１６】毛が連続的に描画される理想状態を示す図である。
【図１７】
本実施形態に係るフィルタ処理を説明するための図である。
【図１８】本実施形態における色計算の様子を示す図である。
【図１９】各テクセルに線状物体の方向ベクトルを格納していることを説明するための図である。
【図２０】２つの方向ベクトルが光源ベクトルの反対側に位置する場合を示す図である。
【図２１】Ｋａｊｉｙａのライティング式の場合の色計算の様子を示す図であって、従来の課題を説明するための図である。
【符号の説明】
１０…画像処理装置、１１…マップ作成部、１２…マップ保持部、１３…マップデータ処理部、１４…オブジェクト発生部、１５…描画部、１６…メモリ、１７…フィルタ処理部。
【図１】
2004054621.tif 000023
【図２】
2004054621.tif 000024
【図３】
2004054621.tif 000025
【図４】
2004054621.tif 000026
【図５】
2004054621.tif 000027
【図６】
2004054621.tif 000028
【図７】
2004054621.tif 000029
【図８】
2004054621.tif 000030
【図９】
2004054621.tif 000031
【図１０】
2004054621.tif 000032
【図１１】
2004054621.tif 000033
【図１２】
2004054621.tif 000034
【図１３】
2004054621.tif 000035
【図１４】
2004054621.tif 000036
【図１５】
2004054621.tif 000037
【図１６】
2004054621.tif 000038
【図１７】
2004054621.tif 000039
【図１８】
2004054621.tif 000040
【図１９】
2004054621.tif 000041
【図２０】
2004054621.tif 000042
【図２１】
2004054621.tif 000043