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