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