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