JP2004054612A - 画像処理装置およびその方法 - Google Patents
画像処理装置およびその方法 Download PDFInfo
- Publication number
- JP2004054612A JP2004054612A JP2002211417A JP2002211417A JP2004054612A JP 2004054612 A JP2004054612 A JP 2004054612A JP 2002211417 A JP2002211417 A JP 2002211417A JP 2002211417 A JP2002211417 A JP 2002211417A JP 2004054612 A JP2004054612 A JP 2004054612A
- Authority
- JP
- Japan
- Prior art keywords
- map
- shell
- shells
- unit
- image processing
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Abstract
【課題】シェルの描画において、マップ数を削減することができ、また、LODの制御も容易にできる画像処理装置およびその方法を提供する。
【解決手段】シェルの描画時に必要なパラメータおよび高さ情報を含む複数のマップデータを保持し、マップアドレスに応じたマップデータを出力するマップ保持部12と、異なるマップを表すためのマップ番号をもとに、マップアドレスのオフセットを求め、当該オフセットに基づいてマップアドレスを変更し、変更後のマップアドレスをマップ保持部に供給するマップアドレス変更部13と、異なる層を表すための層番号をもとに、有効な高さ値の領域を判定して描画対象が有効/無効を判定する判定部14と、判定部の判定結果が有効の場合にのみマップ保持部から出力されるマップデータに基づいてシェルの描画処理を行う描画部16とを設ける。
【選択図】 図1
【解決手段】シェルの描画時に必要なパラメータおよび高さ情報を含む複数のマップデータを保持し、マップアドレスに応じたマップデータを出力するマップ保持部12と、異なるマップを表すためのマップ番号をもとに、マップアドレスのオフセットを求め、当該オフセットに基づいてマップアドレスを変更し、変更後のマップアドレスをマップ保持部に供給するマップアドレス変更部13と、異なる層を表すための層番号をもとに、有効な高さ値の領域を判定して描画対象が有効/無効を判定する判定部14と、判定部の判定結果が有効の場合にのみマップ保持部から出力されるマップデータに基づいてシェルの描画処理を行う描画部16とを設ける。
【選択図】 図1
Description
【0001】
【発明の属する技術分野】
本発明は、半透明層である複数のシェル(shell)を用いて擬似的にボリュームレンダリングを行う画像処理装置およびその方法に関するものである。
【0002】
【従来の技術】
昨今のコンピュータシステムにおける演算速度の向上や描画機能の強化とも相俟って、コンピュータ資源を用いて図形や画像の作成や処理を行う「コンピュータ・グラフィックス(CG)」技術が盛んに研究・開発され、さらに実用化されている。
【0003】
たとえば、3次元グラフィックスは、3次元オブジェクトが所定の光源によって照らされたときの光学現象を数学モデルで表現して、このモデルに基づいてオブジェクト表面に陰影や濃淡を付けたり、さらには模様を貼り付けたりして、よりリアルで3次元的な2次元高精細画像を生成するものである。
このようなコンピュータ・グラフィックスは、科学、工学、製造などの開発分野でのCAD/CAM、その他の各種応用分野においてますます盛んに利用されるようになってきている。
【0004】
3次元グラフィックスは、一般には、フロントエンドとして位置づけられる「ジオメトリ・サブシステム」と、バックエンドとして位置づけられる「ラスタ・サブシステム」とにより構成される。
【0005】
ジオメトリ・サブシステムとは、ディスプレイ・スクリーン上に表示する3次元オブジェクトの位置や姿勢などの幾何学的な演算処理を行う過程のことである。
ジオメトリ・サブシステムでは、一般にオブジェクトは多数のポリゴンの集合体として扱われ、ポリゴン単位で、「座標変換」、「クリッピング」、「光源計算」などの幾何学的な演算処理が行われる。
【0006】
一方、ラスタ・サブシステムは、オブジェクトを構成する各ピクセル(pixel)を塗りつぶす過程のことである。
ラスタライズ処理は、たとえばポリゴンの頂点毎に求められた画像パラメータを基にして、ポリゴン内部に含まれるすべてのピクセルの画像パラメータを補間することによって実現される。
ここで言う画像パラメータには、いわゆるRGB形式などで表される色(描画色)データ、奥行き方向の距離を表すz値などがある。
また、最近の高精細な3次元グラフィックス処理では、遠近感を醸し出すためのf(fog:霧)や、物体表面の素材感や模様を表現してリアリティを与えるテクスチャt(texture)なども、画像パラメータの1つとして含まれている。
【0007】
ここで、ポリゴンの頂点情報からポリゴン内部のピクセルを発生する処理では、よくDDA(Digital Differential Analyzer)と呼ばれる線形補間手法を用いて実行される。
DDAプロセスでは、頂点情報からポリゴンの辺方向へのデータの傾きを求め、この傾きを用いて辺上のデータを算出した後、続いてラスタ走査方向(X方向)の傾きを算出し、この傾きから求めたパラメータの変化分を走査の開始点のパラメータ値に加えていくことで、内部のピクセルを発生していく。
【0008】
【発明が解決しようとする課題】
ところで、各ピクセルの描画色の計算、すなわち色計算には表面の材質が大きく影響を及ぼす。平坦で均質な素材の表面の色計算は比較的容易であるが、たとえば動物の毛皮などの色計算は容易ではない。何故ならば、表面形状が複雑で、毛の密度によっては皮膚の色の影響を受けたり、毛の流れによって色も変化するからである。
【0009】
動物の毛皮を描画する最も基本的な方法として、毛を1本1本描画する方法がある。
しかしながら、この方法は、毛を1本1本描画するために必要な計算量が膨大となってしまうという根本的な問題がある。
さらに、毛は半透明物質として描画するため、プリミティブ単位あるいはピクセル単位で奥行き方向にソート(zソート)する必要がある。これにも膨大な計算量を要する。
【0010】
Kajiyaは、3次元マップを用い視線方向にテクセルを走査することによって、毛皮の質感を表現できることを示した(Kajiya,J.T and Timothy L. Kay.Rendering Fur with Three Dimentional Textures,SIGGRAPH 89,pp.271−280、参照)。
しかしながら、この方法は、視線方向のテクセルの走査に描画時間が多く必要である。また、3次元マップを保持するための大容量のメモリ領域が必要となる。
【0011】
Go1dmanは、ダルメシアンのような非常に短い毛の生え方がポアソン(Poisson)分布に従うと仮定することによって、確率的な見え方を計算し、高速に毛皮の質感を描画する方法を開発した(Goldman,D.B., Fake Fur Rendering,SIGGRAPH 97,pp.127−134 、参照) 。
この方法は、視線方向のテクセルの走査が必要なく、大容量のメモリも必要がない。
しかしながら、この方法は、短い毛が1ピクセル中に十分に多く存在する場合にのみ有効であり、たとえばダルメシアンより長い毛であったり、1ピクセル中にそれほど多く毛が存在しないような場合には用いることができない。
【0012】
Lengyelは、毛皮を同心の複数の半透明層(以下、シェル(shell)という)として描画する方法を提案した(Lengyel,E.J., Real−Time Fur, Eurographics Rendering Workshop 2000, pp.243−256 、および、Lengyel,E.J., Real−Time Fur over Arbitrary Surfaces ,ACM 2001 Symposium on Interactive 3D Graphics(http://research.microsoft.com/ 〜jdl/) 参照)。
これは、シェルを内側から複数回描画し、重ね合わせて行くことで、毛皮を高速に描画できる。各シェルの色計算には、事前に毛のモデルから作成した3次元マップを用いる。
【0013】
彼らはまた、nVidiaのGeForceにおける頂点シェーダ、ピクセルシェーダへの実装を行い、この方法が実際に、有効であることを示した。
【0014】
この方法では、Praunのラップドテクスチャ(lapped texture)の手法(Praun,E., Lapped Textrures, SIGGRAPH 2000,pp.465−470、参照)を用い、同しマップを縁り返し表面に貼り付けることで、必要なマップの総量を減らしている。
しかし、この方法では、依然として擬似的な3次元マップであり、シェルの数だけのマップはやはり必要となってしまうという問題がある。
【0015】
また、シェルを用いた描画の本質的な問題として、エッジ近傍での画質の劣化がある。エッジ近傍では、毛の描画色か徐々に薄く見えるようになる。また、シェルの描画順がエッジ近傍では正しくないため、正しい色が得られない。
このエッジ近傍での画質上の問題点を、Lengyelは皮膚上のメッシュの境界線上に、皮膚面に垂直にひれ状のプリミティブ(フィン:fin)を用いることで解決している。
フィン(fin)は、メッシュの境界上のどこにでも存在し、メッシュの境界がエッジに近い場合のみフィンを描画するようにしている。フィンの描画には、前述の3次元マップとは別のマップ(フィンテクスチャ(fin texture))を用いる。
【0016】
Lengyelは、メッシュの全ての境界線上に異なるフィンテクスチャを用意するのではなく、1種類のフィンテクスチャを使いまわすことで、必要なメモリ量を節約している。
しかしながら、Lengyelが試みているのは、毛が全体的には皮膚面に対して垂直に立っている場合のみである。
この場合であれば、フィンテクスチャは1種類で済むが、たとえば毛が皮膚面に沿っているような場合には、視線と毛の方向との関係から様々なフィンテクスチャを選択する必要が生じる。
したがって、フィンテクスチャに必要なメモリ量は増大する。
【0017】
また、フィンは半透明のプリミティブとして描画するため、正確な色計算のためには本来はzソートを行わなければならないが、これについてLengyelは特に述べていない。
【0018】
上記のような問題点があるものの、シェルを用いた毛皮の描画は高速であり、単純形状の物体であれば、フィンの描画を除けば、半透明物体の重ねあわせに合うソーティングも必要ないという長所かある。
ところが、シェルの描画による手法をとると、マップの数が多くなってしまうという不利益がある。
また、マップを事前に作成することにより、いわゆるLOD(Level of Detail)による制御が困難になってしまうという不利益がある。
【0019】
本発明は、かかる事情に鑑みてなされたものであり、その目的は、シェルの描画において、マップ数を削減することができ、また、LODの制御も容易にできる画像処理装置およびその方法を提供することにある。
【0020】
【課題を解決するための手段】
上記目的を達成するため、本発明の第1の観点は、描画対象物を複数の半透明層であるシェルとして重ね合わせて描画する画像処理装置であって、少なくともシェルの描画時に必要なパラメータを含む複数のマップデータを保持し、マップアドレスに応じたマップデータを出力するマップ保持部と、異なるマップを表すためのマップ番号をもとに、マップアドレスのオフセットを求め、当該オフセットに基づいてマップアドレスを変更し、変更後のマップアドレスを上記マップ保持部に供給するマップアドレス変更部と、上記マップ保持部から出力されるマップデータに基づいて上記シェルの描画処理を行う描画手段とを有する。
【0021】
第1の観点では、異なる層を表すための層番号をもとに、有効な高さ値の領域を判定して描画対象が有効/無効を判定する判定部を有し、上記描画手段は、上記判定部の判定結果が有効の場合にのみ描画処理を行う。
【0022】
第1の観点では、上記マップデータには、上記パラメータに加えて高さ情報を含み、上記複数のシェルを発生するシェル発生手段を有し、上記シェル発生手段は、シェルの描画に必要なパラメータおよび高さ情報を含むマップデータに基づいて各シェルを発生し、発生したシェルに高さの上下限値を設定し、上記判定部は、シェル描画時に上記高さの値が上記上限値以下で下限値以上の場合にのみ有効と判定する。
【0023】
第1の観点では、複数のシェルをマップの種類および層の数分発生するシェル発生手段を有し、上記描画手段は、上記シェル発生手段で発生されたマップの種類および層の数分の複数のシェルを組み合わせることによって描画処理を行う。
【0024】
第1の観点では、上記描画手段は、描画対象物の向かっている方向にピクセルの情報を膨らませて、各シェル間で連続性を持たせるフィルタ処理を行い、かつ同一層であっても、異なるマップの種類であれば、シェルの法線方向の膨らませ方を変更する。
【0025】
第1の観点では、上記描画手段は、上記複数のシェルを重ね合わせた描画対象物の方向を示すベクトルを求め、求めたベクトルに基づいてフィルタカーネルを変更し、描画対象物の向かっている方向にピクセルの情報を膨らませて、各シェル間で連続性を持たせるフィルタ処理を行う。
【0026】
本発明の第2の観点は、描画対象物を複数の半透明層であるシェルとして重ね合わせて描画する画像処理方法であって、少なくともシェルの描画時に必要なパラメータを含む複数のマップデータを保持する第1のステップと、異なるマップを表すためのマップ番号をもとに、マップアドレスのオフセットを求め、当該オフセットに基づいてマップアドレスを変更する第2のステップと、上記変更後のマップアドレスに応じたマップデータを保持データから選択する第3のステップと、上記選択されたマップデータに基づいて上記シェルの描画処理を行う第4のステップとを有する。
【0027】
本発明によれば、マップ保持部に、たとえばシェルの描画時に必要なパラメータおよび高さ情報を含む複数のマップデータが保持される。
そして、マップアドレス変更部において、異なるマップを表すためのマップ番号をもとに、マップアドレスのオフセットが求められ、求めたオフセットに基づいてマップアドレスが変更される。
この変更後のマップアドレスがマップ保持部に供給される。
これにより、マップ保持部から供給されたマップアドレスに応じたマップデータが描画手段に供給され、このマップデータに基づいてシェルの描画処理が行われる。
【0028】
また、本発明によれば、判定部において、異なる層を表すための層番号をもとに、有効な高さ値の領域が判定されて描画対象が有効であるか無効であるかが判定される。
そして、描画手段においては、判定部の判定結果が有効の場合にのみ描画処理を行う。
【0029】
【発明の実施の形態】
以下、本発明の実施形態を、毛皮のような線状物質の描画を例として図面に関連付けて説明する。
【0030】
図1は、本発明に係る画像処理装置の一実施形態を示すブロック構成図である。
【0031】
本実施形態に係る画像処理装置10は、2次元マップを用いた毛皮のような線状物質の描画が可能である。
具体的には、画像処理装置10は、たとえば毛皮を半透明層(シェル:shell)として重ね合わせて描画する。このとき、本画像処理装置10は、3次元マップを用いず、単一の2次元マップを用いて描画する。
また、本画像処理装置10におけるマップのサンプリング方法は、Lengyelの方法のように、毛皮を高さ方向にスライスして、それぞれを別々のシェルに対応するマップとみなすのではなく、毛の全体を皮膚面に相当する2次元マップ上に投影する。
そして、本画像処理装置10では、1枚のマップに投影により見える毛全体の情報が格納される。
本画像処理装置10では、このように、表現したい毛をなるべく分断しないようにサンプリングすることで、少ないメモリ容量で高画質な表現を可能としている。
【0032】
また、本実施形態に係る画像処理装置10は、Lengyelの方法のように、高品質な毛皮の表現を行うために、描画パイプラインを通してシェルの複数描画を行うのではなく、描画パイプラインのみではなく、メモリに局所的な処理を補助的に利用することによって、描画パイプラインからの情報を削減することが可能に構成される。
また、画像処理装置10では、エッジ近傍の画質の改善のために、フィルタ処理を用いている。
描画ハードウェアは、メモリの局所的な処理をより多く用意できる可能性がある。本実施形態に係る画像処理装置10は、このような処理を通常の描画処理と並行して行うことにより、高品質な画像を高速に描画しようというものである。
【0033】
本実施形態に係る画像処理は、描画前処理および描画時処理から構成される。描画前処理は毛のモデル作成やマップ作成処理を含み、描画前に一度だけ行う。描画時処理は描画前に作成されたマップを用いて、リアルタイムで行う処理である。
以下に、本実施形態に係る画像処理装置10の具体的な構成および処理内容について詳述する。
【0034】
本画像処理装置10は、図1に示すように、マップ作成部11、マップ保持部12、マップアドレス変更部13、有効/無効判定部14、オブジェクト発生部15、描画部16、メモリ17、およびフィルタ処理部18を有している。
描画前処理はマップ作成部11およびマップ保持部12で行われ、描画後処理は、オブジェクト発生部15、描画部16、メモリ17、およびフィルタ処理部18により行われる。
また、オブジェクト発生部15によりシェル発生手段が構成され、描画部16およびフィルタ処理部18により描画手段が構成される。
【0035】
本実施形態において利用するバッファは以下のとおりである。これらは図1のメモリ17に保持される。
すなわち、利用するバッファは、一時計算用フレームバッファfbuf1, fbuf2、一時計算用デプスバッファzbuf、一時計算用インデックスバッファibuf、一時計算用カウンタバッファcbuf、最終出力用フレームバッファFBUF、および最終出力用デプス(z)バッファZBUFである。
メモリ17は、シェルの各層の描画前に、各バッファを以下のように初期化する。
【0036】
【数1】
cbuf <− 0
fbuf1, fbuf2 <− (0, 0, 0, 0)
zbuf <− ZBUF
【0037】
具体的には、メモリ17は、一時計算用カウンタバッファcbuf、一時計算用フレームバッファfbuf1, fbuf2を0に初期化し、一時計算用デプスバッファzbufを最終出力用フレームバッファFBUFの内容に初期化する。
【0038】
また、描画時処理は、たとえば皮膚の描画、シェルの描画、フィルタ処理、合成処理から構成される。
最初に皮膚を不透明物体としてフレームバッファfbuf1 、zバッファZBUF1 に描画する。続いて、シェルを複数回重ね描きすることにより毛皮を表現する。
各シェルの描画はフレームバッファfbuf1 、zバッファZBUF1 とは異なる一時的なフレームバッファfbuf2 、zバッファZBUF2 に描画する。ここでフィルタ処理を行った後、フレームバッファfbuf1 、zバッファZBUF1 と合成を行う。
【0039】
マップ作成部11は、描画前処理としての毛のモデル作成および2次元マップ作成を行い、作成した2次元マップをマップ保持部12に格納する。
マップ作成部11は、毛のモデル作成にあたっては、所定の毛データを受けて、図2に示すように、毛は折れ線として、2軸を2次のテクスチャ空間のs,t軸とし、s,t軸と直交するh軸を更に持つ3次元空間上に作成する。
マップ作成部11は、2次元マップ作成にあたっては、作成したモデルに基づいて、図3に示すように、h軸の上方から(s、t)平面に投影することで作成する。
マップ作成部11は、生成した2次元マップには、シェルの描画時に必要なパラメータ(Kd、Ks、Ka、Tt、cov、shininess)および、0〜1に正規化された高さ(h)情報を含ませる。
ここでKd、Ks、Kaはそれぞれ拡散(diffuse)、鏡面(specular)、周囲(ambient)の反射係数、shininessは鏡面(specular)の指数値であり、Ttは毛の方向ベクトル(s、t、h)である。また、covはテクセルに毛が占める面積を表している。
【0040】
上述したように、マップ作成部11は、作成したモデルに基づいて、図3に示すように、h軸の上方から(s、t)平面に投影することで2次元マップを作成する。この場合、同一テクセルに複数の毛がかかる場合、一番上に存在する毛のみをテクセルに反映することとして処理することが可能である。
しかし、これでは、細い毛を描画するときに不都合が生じることから、本実施形態に係るマップ作成部11は、同一テクセルに複数の毛のパラメータを書き込む。
各テクセルにN個の毛の情報を書き込む場合、たとえば下記の数2のように計算を行う。
なお、ここでは、より下の毛の情報は添え字を小さく、上の毛の情報は添え字を大きくなるように、ソーティングが成されているとする。また、上の毛の見え方が最も影響すると思われることから、hは最も上の毛の高さを利用することとしている。
【0041】
【数2】
【0042】
ただし、/は文字上に付されるバーの代わりに用いた記号であり、ベクトルを示す。
【0043】
マップ保持部12は、たとえばSRAM等のメモリにより構成され、マップ作成部11で作成され、各種パラメータや高さ情報が付加された2次元マップを保持する。
マップ保持部12は、描画時に保持する各種パラメータや高さ情報が付加された2次元マップデータがオブジェクト発生部15および描画部16により読み出される。
マップ保持部12は、マップアドレス変更部13によりマップアドレスMA13を受けて、マップアドレスMA13に応じたアドレスのマップデータMPD12を描画部16に供給する。
また、マップ保持部12は、マップアドレスMA13に応じたアドレスのマップデータMPD12に関する高さ値hを有効/無効判定部14に供給する。
【0044】
マップアドレス変更部13は、異なるマップを表すためのマップ番号に応じたマップアドレスオフセットを保持し、描画部16により供給されるマップ番号データMN16に基づいて、下記の数3に示すようにマップアドレスのオフセットを求め、求めたオフセットによって描画部16により供給されるマップアドレスMA16を変更し、変更後のマップアドレスMA13をマップ保持部12に供給する。
【0045】
【数3】
(s,t)+=
(sofs〔map_num〕,tofs〔map_num〕)
【0046】
ただし、map_numはマップ番号を表し、sofs,tofsはそれぞれこれらに対応するオフセットである。これは乱数を用いて作成することができる。
【0047】
なお、マップアドレス変更は、より上位装置(ジオメトリ処理装置)によって行っても良い。したがって、マップアドレス変更部は、必ずしも必要な構成要素ではない。
【0048】
有効/無効判定部14は、マップ保持部12から供給されるオブジェクトの発生に用いられたマップに含まれる高さ情報h、オブジェクト発生部15による高さの上下限値(hmax/Hmin)データD15a、および描画部16から供給されるマップが含まれる層番号データLN16に基づいて、描画しようとするシェルが有効なシェルであるか無効なシェルであるかを判定し、判定結果を示す判定信号S14を描画部16に出力する。
【0049】
有効/無効判定部14は、マップから取得した高さ値hが、下記の数4に示すように、最大値(上限値hmax)、最小値(下限値hmin)の間に入っているかを調べ、これにより有効/無効を判断する。
【0050】
【数4】
valid = (hmin[shell _num] < h && h <= hmax[shell _num]) ? 1:0
【0051】
なお、hmin〔〕,hmax〔〕はそれぞれ、各層にて描画すべき高さ値の範囲を示す。
本手法は、毛皮をはじめとする、比較的ランダム性を持つ質感を表現する場合に有効である。
【0052】
なお、数4において求めたvalidは、後述するように、描画部16の色計算部に渡され、たとえば透過度の値であるα値と乗ずることによって、最終的な出力に反映するかどうかを決定することができる。
また、validを0/1だけではなく、その中間的な値を取ることも可能とすることにより、同じ層の中で段階的に変化するような制御も可能である。
【0053】
オブジェクト発生部15は、描画処理時に、マップ保持部12に保持された2次元マップを読み出し、2次元マップデータMPD12に基づいて毛皮に関する同心の複数のシェルを発生して、データD15として描画部16に供給する。
また、オブジェクト発生部15が出力するデータD15には、発生した各シェルが含まれる層番号LN、各シェルの構成するマップ番号MN、や各シェルの高さの上下限値(hmax/hmin)等が含まれるが、各シェルの高さの上下限値(hmax/hmin)データは、データD15aとして有効/無効判定部14に供給される。
また、オブジェクト発生部15は、シェルを後記する理由により、視線の裏側の面は外側から内側に向かってシェルを発生し、視線の表側の面は内側に向かって表側にシェルを発生する。
オブジェクト発生部15の処理の概要は、下記の数5に示すように、皮膚面の描画、裏側の描画、表側の描画である。
【0054】
数5に表したofs [ ] にはシェルが皮膚面からどれだけ膨らんでいるかを示す値であり、ofs [ 0 ]が最もふくらみが小さく、添え字が増すにつれてofs の値は増加する。ofs [ 0 ]は最も奥にあることを意味する。
また数5中、draw_obj (ofs, face) はオブジェクトを、頂点ofs だけ法線方向に膨らませて発生する処理を示している。
faceは裏面あるいは表面を指定し、それぞれ視線に対して裏側の面、表側の面のみを発生する。
【0055】
【数5】
【0056】
さらに具体的には、オブジェクト発生部15は、皮膚は毛皮とは異なり、不透明物体としてフレームバッファfbuf1 、zバッファzbuf1 に対して描画する。
このとき、zテストおよびz値更新を可として描画する。
シェルの描画処理は、ジオメトリ処理/頂点単位処理/ピクセル単位処理に分けて考えることができるが、オブジェクト発生部15においては、ジオメトリ処理および頂点単位処理を行う。
【0057】
ジオメトリ処理では、膨らませ度合いの異なるシェルを順番に発生する。また、発生したシェル毎に、各種パラメータを指定する。また、テクスチャの拡張係数も指定する。
【0058】
ここで、本実施形態に係るオブジェクト発生部15において採用する基本的なシェルの発生方法について説明する。
【0059】
本方法では2次元のマップを用いて描画を行う。そのため単純に描画すると厚みのない毛皮となってしまう。
そこで、シェルを用いて、同一マップを繰り返し描画することで厚みを持たせるようにシェルを発生する。
【0060】
図4は、3つのシェルに同一のマップを用いた場合を表現した図である。
図4に示すように、シェルSHLの重なりが厚みを表現できる。ここでは3つのシェルSHL1〜SHL3が存在しているが、マップとしては一種類のみを利用する。
また、視線に対して表側の面を描画する場合は、下側から上側へと順番にシェルを発生し、重ね描きすることで、厚みを表現することができる。
なお、エッジ近傍では視線に対して裏側の面も描画する必要がでてくる。この場合のシェルの発生方法については後述する。
【0061】
実際に発生している毛の場合、外側のシェルには毛の先端側のみが、内側のシェルには毛の末端側のみが現れるはずである。これを表現するために、各シェルに高さの上下限値(hmax/hmin)を設定する。
この場合、外側のシェルほど、より高い上下限値(hmax/hmin)を持つように設定する。
その理由は、シェル描画時に、テクセルに含まれる高さ値hと上下限値(hmax/hmin)を比較し、上限値が加減値以上(hmax>=h>hmim)の場合にのみ描画し、これ以外の場合には描画しないようにするためである。
このようにすると、図5に示すように、離散的ではあるが、高さ方向に傾きのある毛を描画することができる。
なお、離散的であるということは、後段のフィルタ処理により解決される。
【0062】
さらに、オブジェクト発生部15は、エッジ近傍への対応として以下の処理を行う。
オブジェクト発生部15は、図6に示すように、シェルを視線EYに対して表側と裏側に分離して描画するようにシェルを発生する。
最初に視線EYの裏側のシェルを外側から内側の向かって順番に描画する。この段階で、図6ではA、Bという順番で描画される。
続いて、表側のシェルを内側から外側に向かって順番に描画する。これにより、図6において、A、Bに続いてC、Dという順番で描画され、正しい順番で色を重ねることができる。
【0063】
次に、シェルへのマップの割り当て方法について説明する。
本実施形態では、2次元マップを用いるため、情報の欠如が生じる場合がある。
図7に示すように、毛同士が重なっている場合、下側の毛の高さ情報は失われてしまう。
このように、下側の毛の高さ情報が失われると、毛皮を視線を変化させて見た場合の可視性の変化(下側の毛が見えたり見えなかったりする)が上手く表現できなくなる。
この問題への解決するために、本実施形態では、図8(A),(B)に示すように、複数のマップを用いる。
1枚のマップに共存できない情報であっても、異なるマップには存在できるため、上記の問題を解決できる。
検討した範囲では、3〜5種類程度のマップを用意し、図9に示すように、各層LYR1.LYR2,・・毎に微妙に高さを変えて描画すると、毛皮として十分な画質を得ている。
図9の例では、第1層LYR1にマップA〜Eの5種類のマップが含まれ、第2層LYR2にマップA〜Eの5種類のマップが含まれている。
そして、描画対象のシェルを構成するマップが含まれる層番号(層番号LYR1、あるいはLYR2等)がデータD15として描画部16に供給される。
複数種類のマップを持つのではなく、1枚のマップでも同様の効果を出すことが可能である。これはマップを引くときのテクスチャアドレスに一定の(種類に応じた)オフセットを加えることで実現できる。この方法であれば、1種類のマップだけで描画できるため、メモリ容量の上で有利である。
【0064】
次に、セルフシャドウの効果の指定について説明する。
毛皮の色は根元の方ほど暗い色となる。これは入出力光が、より上の毛皮により減衰するためである。この減衰の効果はBanksによって、数6のように毛の密度pと光の通過する距離dの関数として与えられている(Banks,D.,C.,Illumisation In diverse Codimentions,SIGGRAPH 94,pp.327−334 参照)。
【0065】
【数6】
Iatten =Isource(1−p)d
【0066】
光の通過する距離dは光の入射角により変化するため、数4は光の入射角によって減衰の割合が変化することを示している。
ここではより簡略化して、各シェルで一定の減衰率(att)を持つと考える。上側のシェルは1に近いatt値を持ち、下側のシェルは0に近いatt値を持つものとする。これは光の入射角による減衰の割合の変化を無視しているが、画質的に大きな影響はない。
【0067】
次に、テクスチャ拡張係数の指定について説明する。
ベクトル計算に用いるテクスチャ拡張係数szoom、tzoom(テクスチャのs方向、t方向の視野座標系における拡大縮小の割合)を求める。
この場合、均質にテクスチャが貼られてる場合であれば、三角形毎にこの値を求める必要はなく、シェル描画時に一度だけ指定すれば良い。
【0068】
また、オブジェクト発生部15は、頂点単位の処理としては頂点の移動、テクスチャ座標の移動を行う。
三角形単位での頂点位置の移動を行うことで、シェルを作成する。頂点における法線Nおよびオフセットnofsを用いて、頂点位置を以下の数7のように変更する。
【0069】
【数7】
Pnew =Pold +nofs・/N
【0070】
テクスチャ座標の移動に関しては、テクスチャアドレスのオフセットを下記の数8のように変更することで、異なるマップを用いた場合と同等の効果を与えるようにしている。
【0071】
【数8】
Snew =Sold +nofs
tnew =told +tofs
【0072】
描画部16は、オブジェクト発生部15によりオブジェクトデータであるシェルデータ(プリミティブデータ)D15に基づいて、描画対象のシェルを構成するマップのマップアドレスMA16、およびマップ番号MN16をマップアドレス変更部13に出力し、また、描画対象のシェルを構成するマップが含まれる層番号データLN16(層番号LYR1、あるいはLYR2等)を有効/無効判定部14に供給する。
描画部16は、たとえば有効/無効判定部14による判定信号S14を有効(論理1)で受けると、以下の処理を行い、無効(論理0)で受けると以下の処理は行わない。
すなわち、描画部16は、たとえば有効/無効判定部14による判定信号S14を有効(論理1)で受けると、マップ保持部12からマップアドレスMA13に応じて読み出された2次元マップデータ、およびオブジェクト発生部15によりオブジェクトデータであるシェルデータ(プリミティブデータ)D15に基づいて、ベクトル <t> のウィンドウ座標系でのベクトル<tw>を求め、これからフィルタカーネル用のインデックス(index )を求める。
描画部16は、オブジェクト発生部15が発生したプリミティブをラスタライズした後、以下の数7に示すように色、フィルタカーネル用のインデックス(index )を計算し信号S14としてフィルタ処理部18に出力する。
なお、描画部16は、数9に示すように、色計算にあたって、エッジ部での透過度を調整する。
【0073】
【数9】
【0074】
atblはカーネルにおける有効な要素kとした場合、1/kが格納されている。これはカーネルによってピクセルを膨らませる場合、それに応じて透過度を小さくする必要があるためである。
また、a を|cos(<n>, <e>) |により除算する。
また、x, yの最大/最小値を保持するのは、必ずしも必要ではないが、後述のフィルタ処理部18において、フィルタを行う範囲を限定するために有効である。
【0075】
ここで、描画部16におけるウィンドウ座標系での2次元ベクトル<tw>の求める処理について説明する。
【0076】
基本的に、<tw>の方向にピクセルを拡大する。
以下では、図10に示すように、元となるピクセルから<tw>の方向に伸びる直線から、距離W以内の範囲のピクセルを有効である場合のフィルタを考える。
この領域を判定する方法を、以下で考える。もととなるピクセルから対象となるピクセルへのベクトルを<g> とする。
図11に示す通り、元のピクセルから<tw>の方向に伸びる直線と、対象となるピクセルとの距離は|g |sin(<g>, <tw>)となる。
なお、図11では、もとのピクセルを白丸PXL1、対象となるピクセルPXL2として示している。
これらから、以下の数10のような方策で、対象となるピクセルを選択すれば良いことになる。
【0077】
【数10】
|g |sin(<g>, <tw>) < W?1:0
【0078】
この式で定義される領域は、無限の長さを持つが、実装上はカーネルサイズが有限であるために、定義領域も有限となる。
図12に示すように、<t> をウィンドウ座標系での2次元ベクトル<tw>に変換する。
変換には、射影行列Pとしたとき(P−1)t を用いて、以下のように行うことができる。
【0079】
【数11】
<tw> = <t> * (P−1)t
【0080】
描画部16は、基本的にはピクセル単位の処理を行うが、ピクセル単位の処理としては、マップの取得、色の計算、透過度の計算を行う。また、フィルタ処理に用いるためのベクトルの計算を行う。
以下に、マップの取得、色の計算、透過度の計算、ベクトルの計算の各処理についてさらに詳細に説明する。
【0081】
まず、マップの取得について説明する。
ピクセル単位での色計算時には、テクスチャ座標から2次元マップの情報を参照する。本実施形態に係る画像は、たとえばいずれも4近傍補間を行い、MIPMAPは行わない。
基本的には、全ての情報について4近傍のテクセルの線形補間を用いている。しかし、4近傍のテクセルの中にcovが00(すなわち毛が存在しない)ものが含まれた場合には、以下のような処理を行う。
4近傍全てのテクセルのcovが0であった場合は、最終的に描画結果に反映されないため、どのような値でもかまわない。すなわち特別な処理は必要ない。一方、4近傍中のテクセルのcovが0であった場合は、cov以外のパラメータについては、0でない側のテクセル値をそのまま利用し、covはそのまま0を用いる。
近傍のテクセル間の変化が大きくない場合であれば、マップを事前に処理し、covが0のテクセルのパラメータを適切な値に設定しておくことが可能である。この場合はマップ取得時には4近傍を単純に線形浦間するだけで良くなる。
【0082】
次に、色の計算について説明する。
色計算には、たとえばLengyel(Lengyel,E.J., Real−Time Fur, Eurographics Rendering Workshop 2000, pp.243−256 )に提案された簡易化された、数12に示すような、ライティング式を用いる。
【0083】
【数12】
C =att * (Cd + Cs + Ca)
Cd= Kd * Cdl * sin(/T,/L)
Cs= Ks * Csl * sin(/T,/L) shininess
Ca= Ka * Cal
【0084】
ここで、/Tはマップから取得した毛の方向ベクトル/Tt(各要素がs,t,hで表される)を、接空間の基底ベクトル(/N,/PU,/PV)を用いて、下記の数13に基づいて視野座標系に変換したものである。
Cdl,Csl,Calは、それぞれ拡散(diffuse),鏡面(specular),周辺(ambient)の光源色を示す。またattはセルフシャドウの効果を導入するための減衰率である。また、/Tt・s、/Tt・t、/Tt・hは、それぞれ/Ttのs,t,h,成分を表す。
【0085】
【数13】
/T=/Tt ・h*/N+/Tt ・s*/PU+/Tt ・t*/PV
【0086】
次に、透過度の計算について説明する。
透過度aは、マップから取得したcovを以下の数14のように変調して用いる。ここでcovは毛がテクセルに占める割合を表している。
【0087】
【数14】
a= af * cov/cos(/n,/e)
af= (hmax>=h && h >hmin) ? 1 : 0
【0088】
ここで、/nは法線ベクトル、/eは視線ベクトルである。afは、上述したように、シェルに指定された上下限値(hmax/hmin)とh値との関係によって、描画するかどうかを制御するためのフラグである。
このフラグは、有効/無効判定部14による判定信号S14に含まれる。
また、cos(/n,/e)による除算は、以下のような理由による。
2次元のマップ上には、たとえば図13に示すように、毛が描画される。
図14(A)に示すように、このマップを正面から見た場合の毛の太さが正しいものとすると、図14(B)に示すように、これを横方向に傾いて見た場合はより細く見える。その結果、エッジ近傍での毛の色は薄くなってしまう。上記のcosによる除算は、エッジ部分で正しい画質を得るために必要となる。
【0089】
また、描画部16は、zバッファzbuf2 を用いてzテストを行いながら、色と透過度をフレームバッファfbuf2 に、z値をzバッファzbuf2 に出力する。zテストは、描画ピクセルのZ値がzバッファzbuf2 の内容よりも手前にあるときに成功する。
【0090】
次に、フィルタ処理に用いるベクトルの計算について説明する。
フィルタ処理に必要なベクトル/tを、下記の数15のように計算し、ベクトル用バッファに出力する。なお、この場合もzテストを通過した場合にのみ出力する。
【0091】
【数15】
/t= p*(nofs*/N + Δ1 * (szoom * / Tt ・s * /PU + tzoom */T t ・t * PV)
【0092】
フィルタ処理部18は、描画部16により信号S16として供給されたN×Nのフィルタカーネル用インデックスvld[index][N][N]を用いて、下記の数16に示すように、フィルタ処理を行い、各シェルの描画およびフィルタ処理が完了した後、zバッファzbuf2 とzバッファzbuf1 によりzテストを行い、zバッファzbuf2 の方が手前にある場合に、zバッファzbuf2 とzバッファzbuf1 の内容をアルファブレンド処理する。
フィルタ処理部18は、方向ベクトルに基づいてフィルタカーネルを変更し、描画対象物の向かっている方向にピクセルの情報を膨らませて、各シェル間で連続性を持たせるフィルタ処理を行う。
なお、画面の必要領域は、フィルタ処理部18により与えられる数9における描画時にxmax, xmin, ymax, yminを保持することにより判断できる。
また、フィルタ処理部18は、フィルタ処理を行う領域の範囲を記憶しておき、当該記憶した領域に対してのみフィルタ処理を行うように構成することも可能である。
また、フィルタ処理部18は、フィルタ処理を行う回数を、層描の都度ではなく、途中の数回のみ行うように構成することも可能である。
また、フィルタ処理部18は、同一層であっても、異なるマップの種類であれば、シェルの法線方向の膨らませ方を変更する。
【0093】
【数16】
【0094】
なお、数16で用いるフィルタカーネルの内容vld []、および数9で用いるatbl[]については、たとえば下記のように事前に計算すると、線状物体がより滑らかに結合するようになる。
【0095】
【数17】
【0096】
これは図10に示すように、カーネルの中心を通り<tw>の方向に伸びる直線から、距離W の範囲にある部分を選択するものである。
最初に<tw>=(tx,ty)で各index に対応する<tw>を求めている。index は0〜 INDEX_NUM−1 の値をとり、x軸の正の方向から反時計周りに一回りするようにしている。
<g>=(i−KERNEL _SIZE/2…) で、カーネル中心から要素(i,j) に向かうベクトル<g> を求めている。同時に<g> の大きさをgnorm としている。<g> はその後、正規化される。
if(gnorm* …) 以下で、直線からの距離がW よりも小さい範囲のピクセルの有効フラグを1としている。W 以上の範囲のピクセルの有効フラグは0とする。これは図11に示すように、要素(i,j) の直線からの距離はgnorm*sin(<tw>,<g>)で表されるので、この値とW との大小比較で求めることができる。
数9で用いるatblの値をここで求めることができる。すなわち、このカーネルを用いてフィルタ処理を行うと、1ピクセルがどれだけの面積に広げられるかがわかっている(カーネル内の有効ピクセル数で表される)ため、この逆数を事前に計算し、テーブルとして所持しておく。数9において、フィルタ後に透過度にatblの値を乗ずる。
【0097】
本実施形態では、毛をシェル毎に分断するため、図5に示すように、特にエッジ付近で不連続性が目立つ。
本来は図15に示すように、連続して表現されるべきものである。
そこで、図16に示すように、画面上でフィルタ処理を施すことにより、擬似的に連続性を保つことができる。
このフィルタは、毛が向かっている方向に細長い形状にピクセルの情報を膨らませるものである。これを行うために、毛がどちらに向かっているかを示すベクトル(t)を、上述した数16のように、ウィンドウ座標系で与える必要がある。
【0098】
次に、図1の構成の画像処理装置の動作を説明する。
【0099】
まず、描画前処理として、マップ作成部11において、毛のモデル作成および2次元マップ作成が行われ、作成した2次元マップがマップ保持部12に格納される。
なお、生成した2次元マップには、シェルの描画時に必要なパラメータ(Kd、Ks、Ka、Tt、cov、shinines)および、0〜1に正規化された高さ(h)情報が含まれている。
【0100】
そして、オブジェクト発生部15において、描画処理時に、マップ保持部12に保持された2次元マップが読み出され、2次元マップデータに基づいて毛皮に関する同心の複数のシェルが発生されて、データD15として描画部16に供給される。
オブジェクト発生部15が出力するデータD15には、発生した各シェルが含まれる層番号LN、各シェルの構成するマップ番号MN、や各シェルの高さの上下限値(hmax/hmin)等が含まれるが、各シェルの高さの上下限値(hmax/hmin)データは、データD15aとして有効/無効判定部14に供給される。
オブジェクト発生部15においては、視線の裏側の面は外側から内側に向かってシェルが発生され、視線の表側の面は内側に向かって表側にシェルが発生される。
【0101】
描画部16においては、オブジェクト発生部15によりオブジェクトデータであるシェルデータ(プリミティブデータ)D15に基づいて、描画対象のシェルを構成するマップのマップアドレスMA16、およびマップ番号MN16がマップアドレス変更部13に出力される。
また、描画部16においては、描画対象のシェルを構成するマップが含まれる層番号データLN16(層番号LYR1、あるいはLYR2等)が有効/無効判定部14に供給される。
【0102】
マップアドレス変更部13においては、描画部16により供給されるマップ番号データMN16に基づいて、数3に示すようにマップアドレスのオフセットが求められ、求めたオフセットによって描画部16により供給されるマップアドレスMA16が変更される。そして、マップアドレス変更部13から変更後のマップアドレスMA13がマップ保持部12に供給される。
【0103】
また、有効/無効判定部14においては、マップ保持部12から供給されるオブジェクトの発生に用いられたマップに含まれる高さ情報h、オブジェクト発生部15による高さの上下限値(hmax/Hmin)データD15a、および描画部16から供給されるマップが含まれる層番号データLN16に基づいて、描画しようとするシェルが有効なシェルであるか無効なシェルであるかが判定される。そして、有効/無効判定部14から、判定結果を示す判定信号S14が描画部16に出力される。
【0104】
描画部16においては、有効/無効判定部14による判定信号S14を有効(論理1)で受けると以下の処理が行われ、無効(論理0)で受けると以下の処理は行われない。
【0105】
判定信号S14を有効(論理1)で受けた描画部16においては、マップ保持部12から読み出した2次元マップデータ、およびオブジェクト発生部15によりオブジェクトデータであるシェルデータに基づいて、ベクトル <t> のウィンドウ座標系でのベクトル<tw>が求められる。
そして、求めたウィンドウ座標系でのベクトル<tw>に基づいてフィルタカーネル用のインデックス(index )が求められる。
描画部16では、オブジェクト発生部15が発生したプリミティブがラスタライズされ後、数9に示すように色、フィルタカーネル用のインデックス(index)が計算され信号S14としてフィルタ処理部18に出力される。
なお、描画部16では、色計算にあたって、エッジ部での透過度が調整される。
フィルタ処理部18において、求めたベクトルに基づいてフィルタカーネルが変更されて、描画対象物の向かっている方向にピクセルの情報を膨らませて、各シェル間で連続性を持たせるフィルタ処理が行われる。
【0106】
以上説明したように、本実施形態によれば、シェルの描画時に必要なパラメータおよび高さ(h)情報を含む2次元マップを生成するマップ作成部11と、マップ作成部11で作成され、各種パラメータや高さ情報が付加された2次元マップを保持し、マップアドレスMA13に応じたアドレスのマップデータMPD12を出力するマップ保持部12と、異なるマップを表すためのマップ番号に応じたマップアドレスオフセットを保持し、供給されるマップ番号データMN16に基づいてマップアドレスのオフセットを求め、求めたオフセットによってマップアドレスMA16を変更し、変更後のマップアドレスMA13をマップ保持部12に供給するマップアドレス変更部13と、マップ保持部12から供給されるオブジェクトの発生に用いられたマップに含まれる高さ情報h、オブジェクト発生部15による高さの上下限値データD15a、および描画部16から供給されるマップが含まれる層番号データLN16に基づいて、描画しようとするシェルが有効なシェルであるか無効なシェルであるかを判定し、判定結果を示す判定信号S14を出力する有効/無効判定部14と、描画処理時に、マップ保持部12に保持された2次元マップを読み出し、2次元マップデータMPD12に基づいて毛皮に関する同心の複数のシェルを発生し各シェルの高さの上下限値データは、データD15aを有効/無効判定部14に出力するオブジェクト発生部15と、オブジェクト発生部15によりオブジェクトデータであるシェルデータD15に基づいて、描画対象のシェルを構成するマップのマップアドレスMA16、およびマップ番号MN16をマップアドレス変更部13に出力し、また、描画対象のシェルを構成するマップが含まれる層番号データLN16を有効/無効判定部14に供給し、有効/無効判定部14による判定信号S14を有効(論理1)で受けると、発生されたシェルの描画処理を行う描画部16とを設けたので、マップ数を削減することができ、また、LODの制御も容易にできる利点がある。
【0107】
すなわち、本実施形態によれば、マップがシェル数に依存しないため、LODに応じてシェル数を簡単に変更することができる。
また、2次元マップのみで毛皮等の線状物体の表現が可能なため、オーサリングが行いやすい。
【0108】
また、本実施形態において、描画対象物を複数のシェルとして重ね合わせて描画する画像処理装置において、2次元マップデータ、およびオブジェクト発生部15によりオブジェクトデータであるシェルデータに基づいて、ベクトル <t>のウィンドウ座標系でのベクトル<tw>を求め、これからフィルタカーネル用のインデックス(index )を求め、フィルタ処理部18に出力する描画部16と、描画部16により供給されたN×Nのフィルタカーネル用インデックスvld[index][N][N]を用いて、フィルタ処理を行い、各シェルの描画およびフィルタ処理が完了した後、zバッファzbuf2 とzバッファzbuf1 によりzテストを行い、zバッファzbuf2 の方が手前にある場合に、zバッファzbuf2 とzバッファzbuf1 の内容をアルファブレンド処理するフィルタ処理部18とを設けたので、シェルの描画によっても連続性を維持することが可能で、画質の劣化を防止でき、平坦で均質な素材のオブジェクトはもとより、複雑な形状のオブジェクトも高品位に描画することができる。
本実施形態によれば、たとえば鹿のように、比較的短毛であり毛が皮膚面に沿っているような場合の、毛皮の質感を、2次元のマップを用いて高速に描画することが可能である。
【0109】
また、本実施形態によれば、色計算にあって、エッジ部での透過度を調整することから、エッジ部分で高い画質を得ることが可能となる。
【0110】
【発明の効果】
以上説明したように、本発明によれば、シェルの描画において、マップ数を削減することができ、また、LODの制御も容易にできる利点がある。
【図面の簡単な説明】
【図1】本発明に係る画像処理装置の一実施形態を示すブロック構成図である。
【図2】本実施形態に係る毛のモデル作成について説明するための図である。
【図3】本実施形態に係る2次元マップの作成について説明するための図である。
【図4】3つのシェルに同一のマップを用いた場合を表現した図である。
【図5】離散的に高さ方向に傾きのある毛を描画した場合を示す図である。
【図6】本実施形態に係るシェルの視線に対して表側と裏側に分離して描画する方法を説明するための図である。
【図7】毛同士が重なった状態で、毛の高さ情報を失われることを説明するための図である。
【図8】毛の高さ情報を失わせない方法を説明するための図である。
【図9】複数種のマップを用意し、各層毎に微妙に高さを変えて描画する方法を説明するための図である。
【図10】ウィンドウ座標の方向ベクトルを求める方法を説明するための図である。
【図11】ウィンドウ座標の方向ベクトルを求める方法を説明するための図である。
【図12】ウィンドウ座標の方向ベクトルを求める方法を説明するための図である。
【図13】毛の描画状態を示す図である。
【図14】エッジ部分の透過度を調整する理由を説明するための図である。
【図15】毛が連続的に描画される理想状態を示す図である。
【図16】本実施形態に係るフィルタ処理を説明するための図である。
【符号の説明】
10…画像処理装置、11…マップ作成部、12…マップ保持部、13…マップアドレス変更部、14…有効/無効判定部、15…オブジェクト発生部、16…描画部、17…メモリ、18…フィルタ処理部。
【発明の属する技術分野】
本発明は、半透明層である複数のシェル(shell)を用いて擬似的にボリュームレンダリングを行う画像処理装置およびその方法に関するものである。
【0002】
【従来の技術】
昨今のコンピュータシステムにおける演算速度の向上や描画機能の強化とも相俟って、コンピュータ資源を用いて図形や画像の作成や処理を行う「コンピュータ・グラフィックス(CG)」技術が盛んに研究・開発され、さらに実用化されている。
【0003】
たとえば、3次元グラフィックスは、3次元オブジェクトが所定の光源によって照らされたときの光学現象を数学モデルで表現して、このモデルに基づいてオブジェクト表面に陰影や濃淡を付けたり、さらには模様を貼り付けたりして、よりリアルで3次元的な2次元高精細画像を生成するものである。
このようなコンピュータ・グラフィックスは、科学、工学、製造などの開発分野でのCAD/CAM、その他の各種応用分野においてますます盛んに利用されるようになってきている。
【0004】
3次元グラフィックスは、一般には、フロントエンドとして位置づけられる「ジオメトリ・サブシステム」と、バックエンドとして位置づけられる「ラスタ・サブシステム」とにより構成される。
【0005】
ジオメトリ・サブシステムとは、ディスプレイ・スクリーン上に表示する3次元オブジェクトの位置や姿勢などの幾何学的な演算処理を行う過程のことである。
ジオメトリ・サブシステムでは、一般にオブジェクトは多数のポリゴンの集合体として扱われ、ポリゴン単位で、「座標変換」、「クリッピング」、「光源計算」などの幾何学的な演算処理が行われる。
【0006】
一方、ラスタ・サブシステムは、オブジェクトを構成する各ピクセル(pixel)を塗りつぶす過程のことである。
ラスタライズ処理は、たとえばポリゴンの頂点毎に求められた画像パラメータを基にして、ポリゴン内部に含まれるすべてのピクセルの画像パラメータを補間することによって実現される。
ここで言う画像パラメータには、いわゆるRGB形式などで表される色(描画色)データ、奥行き方向の距離を表すz値などがある。
また、最近の高精細な3次元グラフィックス処理では、遠近感を醸し出すためのf(fog:霧)や、物体表面の素材感や模様を表現してリアリティを与えるテクスチャt(texture)なども、画像パラメータの1つとして含まれている。
【0007】
ここで、ポリゴンの頂点情報からポリゴン内部のピクセルを発生する処理では、よくDDA(Digital Differential Analyzer)と呼ばれる線形補間手法を用いて実行される。
DDAプロセスでは、頂点情報からポリゴンの辺方向へのデータの傾きを求め、この傾きを用いて辺上のデータを算出した後、続いてラスタ走査方向(X方向)の傾きを算出し、この傾きから求めたパラメータの変化分を走査の開始点のパラメータ値に加えていくことで、内部のピクセルを発生していく。
【0008】
【発明が解決しようとする課題】
ところで、各ピクセルの描画色の計算、すなわち色計算には表面の材質が大きく影響を及ぼす。平坦で均質な素材の表面の色計算は比較的容易であるが、たとえば動物の毛皮などの色計算は容易ではない。何故ならば、表面形状が複雑で、毛の密度によっては皮膚の色の影響を受けたり、毛の流れによって色も変化するからである。
【0009】
動物の毛皮を描画する最も基本的な方法として、毛を1本1本描画する方法がある。
しかしながら、この方法は、毛を1本1本描画するために必要な計算量が膨大となってしまうという根本的な問題がある。
さらに、毛は半透明物質として描画するため、プリミティブ単位あるいはピクセル単位で奥行き方向にソート(zソート)する必要がある。これにも膨大な計算量を要する。
【0010】
Kajiyaは、3次元マップを用い視線方向にテクセルを走査することによって、毛皮の質感を表現できることを示した(Kajiya,J.T and Timothy L. Kay.Rendering Fur with Three Dimentional Textures,SIGGRAPH 89,pp.271−280、参照)。
しかしながら、この方法は、視線方向のテクセルの走査に描画時間が多く必要である。また、3次元マップを保持するための大容量のメモリ領域が必要となる。
【0011】
Go1dmanは、ダルメシアンのような非常に短い毛の生え方がポアソン(Poisson)分布に従うと仮定することによって、確率的な見え方を計算し、高速に毛皮の質感を描画する方法を開発した(Goldman,D.B., Fake Fur Rendering,SIGGRAPH 97,pp.127−134 、参照) 。
この方法は、視線方向のテクセルの走査が必要なく、大容量のメモリも必要がない。
しかしながら、この方法は、短い毛が1ピクセル中に十分に多く存在する場合にのみ有効であり、たとえばダルメシアンより長い毛であったり、1ピクセル中にそれほど多く毛が存在しないような場合には用いることができない。
【0012】
Lengyelは、毛皮を同心の複数の半透明層(以下、シェル(shell)という)として描画する方法を提案した(Lengyel,E.J., Real−Time Fur, Eurographics Rendering Workshop 2000, pp.243−256 、および、Lengyel,E.J., Real−Time Fur over Arbitrary Surfaces ,ACM 2001 Symposium on Interactive 3D Graphics(http://research.microsoft.com/ 〜jdl/) 参照)。
これは、シェルを内側から複数回描画し、重ね合わせて行くことで、毛皮を高速に描画できる。各シェルの色計算には、事前に毛のモデルから作成した3次元マップを用いる。
【0013】
彼らはまた、nVidiaのGeForceにおける頂点シェーダ、ピクセルシェーダへの実装を行い、この方法が実際に、有効であることを示した。
【0014】
この方法では、Praunのラップドテクスチャ(lapped texture)の手法(Praun,E., Lapped Textrures, SIGGRAPH 2000,pp.465−470、参照)を用い、同しマップを縁り返し表面に貼り付けることで、必要なマップの総量を減らしている。
しかし、この方法では、依然として擬似的な3次元マップであり、シェルの数だけのマップはやはり必要となってしまうという問題がある。
【0015】
また、シェルを用いた描画の本質的な問題として、エッジ近傍での画質の劣化がある。エッジ近傍では、毛の描画色か徐々に薄く見えるようになる。また、シェルの描画順がエッジ近傍では正しくないため、正しい色が得られない。
このエッジ近傍での画質上の問題点を、Lengyelは皮膚上のメッシュの境界線上に、皮膚面に垂直にひれ状のプリミティブ(フィン:fin)を用いることで解決している。
フィン(fin)は、メッシュの境界上のどこにでも存在し、メッシュの境界がエッジに近い場合のみフィンを描画するようにしている。フィンの描画には、前述の3次元マップとは別のマップ(フィンテクスチャ(fin texture))を用いる。
【0016】
Lengyelは、メッシュの全ての境界線上に異なるフィンテクスチャを用意するのではなく、1種類のフィンテクスチャを使いまわすことで、必要なメモリ量を節約している。
しかしながら、Lengyelが試みているのは、毛が全体的には皮膚面に対して垂直に立っている場合のみである。
この場合であれば、フィンテクスチャは1種類で済むが、たとえば毛が皮膚面に沿っているような場合には、視線と毛の方向との関係から様々なフィンテクスチャを選択する必要が生じる。
したがって、フィンテクスチャに必要なメモリ量は増大する。
【0017】
また、フィンは半透明のプリミティブとして描画するため、正確な色計算のためには本来はzソートを行わなければならないが、これについてLengyelは特に述べていない。
【0018】
上記のような問題点があるものの、シェルを用いた毛皮の描画は高速であり、単純形状の物体であれば、フィンの描画を除けば、半透明物体の重ねあわせに合うソーティングも必要ないという長所かある。
ところが、シェルの描画による手法をとると、マップの数が多くなってしまうという不利益がある。
また、マップを事前に作成することにより、いわゆるLOD(Level of Detail)による制御が困難になってしまうという不利益がある。
【0019】
本発明は、かかる事情に鑑みてなされたものであり、その目的は、シェルの描画において、マップ数を削減することができ、また、LODの制御も容易にできる画像処理装置およびその方法を提供することにある。
【0020】
【課題を解決するための手段】
上記目的を達成するため、本発明の第1の観点は、描画対象物を複数の半透明層であるシェルとして重ね合わせて描画する画像処理装置であって、少なくともシェルの描画時に必要なパラメータを含む複数のマップデータを保持し、マップアドレスに応じたマップデータを出力するマップ保持部と、異なるマップを表すためのマップ番号をもとに、マップアドレスのオフセットを求め、当該オフセットに基づいてマップアドレスを変更し、変更後のマップアドレスを上記マップ保持部に供給するマップアドレス変更部と、上記マップ保持部から出力されるマップデータに基づいて上記シェルの描画処理を行う描画手段とを有する。
【0021】
第1の観点では、異なる層を表すための層番号をもとに、有効な高さ値の領域を判定して描画対象が有効/無効を判定する判定部を有し、上記描画手段は、上記判定部の判定結果が有効の場合にのみ描画処理を行う。
【0022】
第1の観点では、上記マップデータには、上記パラメータに加えて高さ情報を含み、上記複数のシェルを発生するシェル発生手段を有し、上記シェル発生手段は、シェルの描画に必要なパラメータおよび高さ情報を含むマップデータに基づいて各シェルを発生し、発生したシェルに高さの上下限値を設定し、上記判定部は、シェル描画時に上記高さの値が上記上限値以下で下限値以上の場合にのみ有効と判定する。
【0023】
第1の観点では、複数のシェルをマップの種類および層の数分発生するシェル発生手段を有し、上記描画手段は、上記シェル発生手段で発生されたマップの種類および層の数分の複数のシェルを組み合わせることによって描画処理を行う。
【0024】
第1の観点では、上記描画手段は、描画対象物の向かっている方向にピクセルの情報を膨らませて、各シェル間で連続性を持たせるフィルタ処理を行い、かつ同一層であっても、異なるマップの種類であれば、シェルの法線方向の膨らませ方を変更する。
【0025】
第1の観点では、上記描画手段は、上記複数のシェルを重ね合わせた描画対象物の方向を示すベクトルを求め、求めたベクトルに基づいてフィルタカーネルを変更し、描画対象物の向かっている方向にピクセルの情報を膨らませて、各シェル間で連続性を持たせるフィルタ処理を行う。
【0026】
本発明の第2の観点は、描画対象物を複数の半透明層であるシェルとして重ね合わせて描画する画像処理方法であって、少なくともシェルの描画時に必要なパラメータを含む複数のマップデータを保持する第1のステップと、異なるマップを表すためのマップ番号をもとに、マップアドレスのオフセットを求め、当該オフセットに基づいてマップアドレスを変更する第2のステップと、上記変更後のマップアドレスに応じたマップデータを保持データから選択する第3のステップと、上記選択されたマップデータに基づいて上記シェルの描画処理を行う第4のステップとを有する。
【0027】
本発明によれば、マップ保持部に、たとえばシェルの描画時に必要なパラメータおよび高さ情報を含む複数のマップデータが保持される。
そして、マップアドレス変更部において、異なるマップを表すためのマップ番号をもとに、マップアドレスのオフセットが求められ、求めたオフセットに基づいてマップアドレスが変更される。
この変更後のマップアドレスがマップ保持部に供給される。
これにより、マップ保持部から供給されたマップアドレスに応じたマップデータが描画手段に供給され、このマップデータに基づいてシェルの描画処理が行われる。
【0028】
また、本発明によれば、判定部において、異なる層を表すための層番号をもとに、有効な高さ値の領域が判定されて描画対象が有効であるか無効であるかが判定される。
そして、描画手段においては、判定部の判定結果が有効の場合にのみ描画処理を行う。
【0029】
【発明の実施の形態】
以下、本発明の実施形態を、毛皮のような線状物質の描画を例として図面に関連付けて説明する。
【0030】
図1は、本発明に係る画像処理装置の一実施形態を示すブロック構成図である。
【0031】
本実施形態に係る画像処理装置10は、2次元マップを用いた毛皮のような線状物質の描画が可能である。
具体的には、画像処理装置10は、たとえば毛皮を半透明層(シェル:shell)として重ね合わせて描画する。このとき、本画像処理装置10は、3次元マップを用いず、単一の2次元マップを用いて描画する。
また、本画像処理装置10におけるマップのサンプリング方法は、Lengyelの方法のように、毛皮を高さ方向にスライスして、それぞれを別々のシェルに対応するマップとみなすのではなく、毛の全体を皮膚面に相当する2次元マップ上に投影する。
そして、本画像処理装置10では、1枚のマップに投影により見える毛全体の情報が格納される。
本画像処理装置10では、このように、表現したい毛をなるべく分断しないようにサンプリングすることで、少ないメモリ容量で高画質な表現を可能としている。
【0032】
また、本実施形態に係る画像処理装置10は、Lengyelの方法のように、高品質な毛皮の表現を行うために、描画パイプラインを通してシェルの複数描画を行うのではなく、描画パイプラインのみではなく、メモリに局所的な処理を補助的に利用することによって、描画パイプラインからの情報を削減することが可能に構成される。
また、画像処理装置10では、エッジ近傍の画質の改善のために、フィルタ処理を用いている。
描画ハードウェアは、メモリの局所的な処理をより多く用意できる可能性がある。本実施形態に係る画像処理装置10は、このような処理を通常の描画処理と並行して行うことにより、高品質な画像を高速に描画しようというものである。
【0033】
本実施形態に係る画像処理は、描画前処理および描画時処理から構成される。描画前処理は毛のモデル作成やマップ作成処理を含み、描画前に一度だけ行う。描画時処理は描画前に作成されたマップを用いて、リアルタイムで行う処理である。
以下に、本実施形態に係る画像処理装置10の具体的な構成および処理内容について詳述する。
【0034】
本画像処理装置10は、図1に示すように、マップ作成部11、マップ保持部12、マップアドレス変更部13、有効/無効判定部14、オブジェクト発生部15、描画部16、メモリ17、およびフィルタ処理部18を有している。
描画前処理はマップ作成部11およびマップ保持部12で行われ、描画後処理は、オブジェクト発生部15、描画部16、メモリ17、およびフィルタ処理部18により行われる。
また、オブジェクト発生部15によりシェル発生手段が構成され、描画部16およびフィルタ処理部18により描画手段が構成される。
【0035】
本実施形態において利用するバッファは以下のとおりである。これらは図1のメモリ17に保持される。
すなわち、利用するバッファは、一時計算用フレームバッファfbuf1, fbuf2、一時計算用デプスバッファzbuf、一時計算用インデックスバッファibuf、一時計算用カウンタバッファcbuf、最終出力用フレームバッファFBUF、および最終出力用デプス(z)バッファZBUFである。
メモリ17は、シェルの各層の描画前に、各バッファを以下のように初期化する。
【0036】
【数1】
cbuf <− 0
fbuf1, fbuf2 <− (0, 0, 0, 0)
zbuf <− ZBUF
【0037】
具体的には、メモリ17は、一時計算用カウンタバッファcbuf、一時計算用フレームバッファfbuf1, fbuf2を0に初期化し、一時計算用デプスバッファzbufを最終出力用フレームバッファFBUFの内容に初期化する。
【0038】
また、描画時処理は、たとえば皮膚の描画、シェルの描画、フィルタ処理、合成処理から構成される。
最初に皮膚を不透明物体としてフレームバッファfbuf1 、zバッファZBUF1 に描画する。続いて、シェルを複数回重ね描きすることにより毛皮を表現する。
各シェルの描画はフレームバッファfbuf1 、zバッファZBUF1 とは異なる一時的なフレームバッファfbuf2 、zバッファZBUF2 に描画する。ここでフィルタ処理を行った後、フレームバッファfbuf1 、zバッファZBUF1 と合成を行う。
【0039】
マップ作成部11は、描画前処理としての毛のモデル作成および2次元マップ作成を行い、作成した2次元マップをマップ保持部12に格納する。
マップ作成部11は、毛のモデル作成にあたっては、所定の毛データを受けて、図2に示すように、毛は折れ線として、2軸を2次のテクスチャ空間のs,t軸とし、s,t軸と直交するh軸を更に持つ3次元空間上に作成する。
マップ作成部11は、2次元マップ作成にあたっては、作成したモデルに基づいて、図3に示すように、h軸の上方から(s、t)平面に投影することで作成する。
マップ作成部11は、生成した2次元マップには、シェルの描画時に必要なパラメータ(Kd、Ks、Ka、Tt、cov、shininess)および、0〜1に正規化された高さ(h)情報を含ませる。
ここでKd、Ks、Kaはそれぞれ拡散(diffuse)、鏡面(specular)、周囲(ambient)の反射係数、shininessは鏡面(specular)の指数値であり、Ttは毛の方向ベクトル(s、t、h)である。また、covはテクセルに毛が占める面積を表している。
【0040】
上述したように、マップ作成部11は、作成したモデルに基づいて、図3に示すように、h軸の上方から(s、t)平面に投影することで2次元マップを作成する。この場合、同一テクセルに複数の毛がかかる場合、一番上に存在する毛のみをテクセルに反映することとして処理することが可能である。
しかし、これでは、細い毛を描画するときに不都合が生じることから、本実施形態に係るマップ作成部11は、同一テクセルに複数の毛のパラメータを書き込む。
各テクセルにN個の毛の情報を書き込む場合、たとえば下記の数2のように計算を行う。
なお、ここでは、より下の毛の情報は添え字を小さく、上の毛の情報は添え字を大きくなるように、ソーティングが成されているとする。また、上の毛の見え方が最も影響すると思われることから、hは最も上の毛の高さを利用することとしている。
【0041】
【数2】
【0042】
ただし、/は文字上に付されるバーの代わりに用いた記号であり、ベクトルを示す。
【0043】
マップ保持部12は、たとえばSRAM等のメモリにより構成され、マップ作成部11で作成され、各種パラメータや高さ情報が付加された2次元マップを保持する。
マップ保持部12は、描画時に保持する各種パラメータや高さ情報が付加された2次元マップデータがオブジェクト発生部15および描画部16により読み出される。
マップ保持部12は、マップアドレス変更部13によりマップアドレスMA13を受けて、マップアドレスMA13に応じたアドレスのマップデータMPD12を描画部16に供給する。
また、マップ保持部12は、マップアドレスMA13に応じたアドレスのマップデータMPD12に関する高さ値hを有効/無効判定部14に供給する。
【0044】
マップアドレス変更部13は、異なるマップを表すためのマップ番号に応じたマップアドレスオフセットを保持し、描画部16により供給されるマップ番号データMN16に基づいて、下記の数3に示すようにマップアドレスのオフセットを求め、求めたオフセットによって描画部16により供給されるマップアドレスMA16を変更し、変更後のマップアドレスMA13をマップ保持部12に供給する。
【0045】
【数3】
(s,t)+=
(sofs〔map_num〕,tofs〔map_num〕)
【0046】
ただし、map_numはマップ番号を表し、sofs,tofsはそれぞれこれらに対応するオフセットである。これは乱数を用いて作成することができる。
【0047】
なお、マップアドレス変更は、より上位装置(ジオメトリ処理装置)によって行っても良い。したがって、マップアドレス変更部は、必ずしも必要な構成要素ではない。
【0048】
有効/無効判定部14は、マップ保持部12から供給されるオブジェクトの発生に用いられたマップに含まれる高さ情報h、オブジェクト発生部15による高さの上下限値(hmax/Hmin)データD15a、および描画部16から供給されるマップが含まれる層番号データLN16に基づいて、描画しようとするシェルが有効なシェルであるか無効なシェルであるかを判定し、判定結果を示す判定信号S14を描画部16に出力する。
【0049】
有効/無効判定部14は、マップから取得した高さ値hが、下記の数4に示すように、最大値(上限値hmax)、最小値(下限値hmin)の間に入っているかを調べ、これにより有効/無効を判断する。
【0050】
【数4】
valid = (hmin[shell _num] < h && h <= hmax[shell _num]) ? 1:0
【0051】
なお、hmin〔〕,hmax〔〕はそれぞれ、各層にて描画すべき高さ値の範囲を示す。
本手法は、毛皮をはじめとする、比較的ランダム性を持つ質感を表現する場合に有効である。
【0052】
なお、数4において求めたvalidは、後述するように、描画部16の色計算部に渡され、たとえば透過度の値であるα値と乗ずることによって、最終的な出力に反映するかどうかを決定することができる。
また、validを0/1だけではなく、その中間的な値を取ることも可能とすることにより、同じ層の中で段階的に変化するような制御も可能である。
【0053】
オブジェクト発生部15は、描画処理時に、マップ保持部12に保持された2次元マップを読み出し、2次元マップデータMPD12に基づいて毛皮に関する同心の複数のシェルを発生して、データD15として描画部16に供給する。
また、オブジェクト発生部15が出力するデータD15には、発生した各シェルが含まれる層番号LN、各シェルの構成するマップ番号MN、や各シェルの高さの上下限値(hmax/hmin)等が含まれるが、各シェルの高さの上下限値(hmax/hmin)データは、データD15aとして有効/無効判定部14に供給される。
また、オブジェクト発生部15は、シェルを後記する理由により、視線の裏側の面は外側から内側に向かってシェルを発生し、視線の表側の面は内側に向かって表側にシェルを発生する。
オブジェクト発生部15の処理の概要は、下記の数5に示すように、皮膚面の描画、裏側の描画、表側の描画である。
【0054】
数5に表したofs [ ] にはシェルが皮膚面からどれだけ膨らんでいるかを示す値であり、ofs [ 0 ]が最もふくらみが小さく、添え字が増すにつれてofs の値は増加する。ofs [ 0 ]は最も奥にあることを意味する。
また数5中、draw_obj (ofs, face) はオブジェクトを、頂点ofs だけ法線方向に膨らませて発生する処理を示している。
faceは裏面あるいは表面を指定し、それぞれ視線に対して裏側の面、表側の面のみを発生する。
【0055】
【数5】
【0056】
さらに具体的には、オブジェクト発生部15は、皮膚は毛皮とは異なり、不透明物体としてフレームバッファfbuf1 、zバッファzbuf1 に対して描画する。
このとき、zテストおよびz値更新を可として描画する。
シェルの描画処理は、ジオメトリ処理/頂点単位処理/ピクセル単位処理に分けて考えることができるが、オブジェクト発生部15においては、ジオメトリ処理および頂点単位処理を行う。
【0057】
ジオメトリ処理では、膨らませ度合いの異なるシェルを順番に発生する。また、発生したシェル毎に、各種パラメータを指定する。また、テクスチャの拡張係数も指定する。
【0058】
ここで、本実施形態に係るオブジェクト発生部15において採用する基本的なシェルの発生方法について説明する。
【0059】
本方法では2次元のマップを用いて描画を行う。そのため単純に描画すると厚みのない毛皮となってしまう。
そこで、シェルを用いて、同一マップを繰り返し描画することで厚みを持たせるようにシェルを発生する。
【0060】
図4は、3つのシェルに同一のマップを用いた場合を表現した図である。
図4に示すように、シェルSHLの重なりが厚みを表現できる。ここでは3つのシェルSHL1〜SHL3が存在しているが、マップとしては一種類のみを利用する。
また、視線に対して表側の面を描画する場合は、下側から上側へと順番にシェルを発生し、重ね描きすることで、厚みを表現することができる。
なお、エッジ近傍では視線に対して裏側の面も描画する必要がでてくる。この場合のシェルの発生方法については後述する。
【0061】
実際に発生している毛の場合、外側のシェルには毛の先端側のみが、内側のシェルには毛の末端側のみが現れるはずである。これを表現するために、各シェルに高さの上下限値(hmax/hmin)を設定する。
この場合、外側のシェルほど、より高い上下限値(hmax/hmin)を持つように設定する。
その理由は、シェル描画時に、テクセルに含まれる高さ値hと上下限値(hmax/hmin)を比較し、上限値が加減値以上(hmax>=h>hmim)の場合にのみ描画し、これ以外の場合には描画しないようにするためである。
このようにすると、図5に示すように、離散的ではあるが、高さ方向に傾きのある毛を描画することができる。
なお、離散的であるということは、後段のフィルタ処理により解決される。
【0062】
さらに、オブジェクト発生部15は、エッジ近傍への対応として以下の処理を行う。
オブジェクト発生部15は、図6に示すように、シェルを視線EYに対して表側と裏側に分離して描画するようにシェルを発生する。
最初に視線EYの裏側のシェルを外側から内側の向かって順番に描画する。この段階で、図6ではA、Bという順番で描画される。
続いて、表側のシェルを内側から外側に向かって順番に描画する。これにより、図6において、A、Bに続いてC、Dという順番で描画され、正しい順番で色を重ねることができる。
【0063】
次に、シェルへのマップの割り当て方法について説明する。
本実施形態では、2次元マップを用いるため、情報の欠如が生じる場合がある。
図7に示すように、毛同士が重なっている場合、下側の毛の高さ情報は失われてしまう。
このように、下側の毛の高さ情報が失われると、毛皮を視線を変化させて見た場合の可視性の変化(下側の毛が見えたり見えなかったりする)が上手く表現できなくなる。
この問題への解決するために、本実施形態では、図8(A),(B)に示すように、複数のマップを用いる。
1枚のマップに共存できない情報であっても、異なるマップには存在できるため、上記の問題を解決できる。
検討した範囲では、3〜5種類程度のマップを用意し、図9に示すように、各層LYR1.LYR2,・・毎に微妙に高さを変えて描画すると、毛皮として十分な画質を得ている。
図9の例では、第1層LYR1にマップA〜Eの5種類のマップが含まれ、第2層LYR2にマップA〜Eの5種類のマップが含まれている。
そして、描画対象のシェルを構成するマップが含まれる層番号(層番号LYR1、あるいはLYR2等)がデータD15として描画部16に供給される。
複数種類のマップを持つのではなく、1枚のマップでも同様の効果を出すことが可能である。これはマップを引くときのテクスチャアドレスに一定の(種類に応じた)オフセットを加えることで実現できる。この方法であれば、1種類のマップだけで描画できるため、メモリ容量の上で有利である。
【0064】
次に、セルフシャドウの効果の指定について説明する。
毛皮の色は根元の方ほど暗い色となる。これは入出力光が、より上の毛皮により減衰するためである。この減衰の効果はBanksによって、数6のように毛の密度pと光の通過する距離dの関数として与えられている(Banks,D.,C.,Illumisation In diverse Codimentions,SIGGRAPH 94,pp.327−334 参照)。
【0065】
【数6】
Iatten =Isource(1−p)d
【0066】
光の通過する距離dは光の入射角により変化するため、数4は光の入射角によって減衰の割合が変化することを示している。
ここではより簡略化して、各シェルで一定の減衰率(att)を持つと考える。上側のシェルは1に近いatt値を持ち、下側のシェルは0に近いatt値を持つものとする。これは光の入射角による減衰の割合の変化を無視しているが、画質的に大きな影響はない。
【0067】
次に、テクスチャ拡張係数の指定について説明する。
ベクトル計算に用いるテクスチャ拡張係数szoom、tzoom(テクスチャのs方向、t方向の視野座標系における拡大縮小の割合)を求める。
この場合、均質にテクスチャが貼られてる場合であれば、三角形毎にこの値を求める必要はなく、シェル描画時に一度だけ指定すれば良い。
【0068】
また、オブジェクト発生部15は、頂点単位の処理としては頂点の移動、テクスチャ座標の移動を行う。
三角形単位での頂点位置の移動を行うことで、シェルを作成する。頂点における法線Nおよびオフセットnofsを用いて、頂点位置を以下の数7のように変更する。
【0069】
【数7】
Pnew =Pold +nofs・/N
【0070】
テクスチャ座標の移動に関しては、テクスチャアドレスのオフセットを下記の数8のように変更することで、異なるマップを用いた場合と同等の効果を与えるようにしている。
【0071】
【数8】
Snew =Sold +nofs
tnew =told +tofs
【0072】
描画部16は、オブジェクト発生部15によりオブジェクトデータであるシェルデータ(プリミティブデータ)D15に基づいて、描画対象のシェルを構成するマップのマップアドレスMA16、およびマップ番号MN16をマップアドレス変更部13に出力し、また、描画対象のシェルを構成するマップが含まれる層番号データLN16(層番号LYR1、あるいはLYR2等)を有効/無効判定部14に供給する。
描画部16は、たとえば有効/無効判定部14による判定信号S14を有効(論理1)で受けると、以下の処理を行い、無効(論理0)で受けると以下の処理は行わない。
すなわち、描画部16は、たとえば有効/無効判定部14による判定信号S14を有効(論理1)で受けると、マップ保持部12からマップアドレスMA13に応じて読み出された2次元マップデータ、およびオブジェクト発生部15によりオブジェクトデータであるシェルデータ(プリミティブデータ)D15に基づいて、ベクトル <t> のウィンドウ座標系でのベクトル<tw>を求め、これからフィルタカーネル用のインデックス(index )を求める。
描画部16は、オブジェクト発生部15が発生したプリミティブをラスタライズした後、以下の数7に示すように色、フィルタカーネル用のインデックス(index )を計算し信号S14としてフィルタ処理部18に出力する。
なお、描画部16は、数9に示すように、色計算にあたって、エッジ部での透過度を調整する。
【0073】
【数9】
【0074】
atblはカーネルにおける有効な要素kとした場合、1/kが格納されている。これはカーネルによってピクセルを膨らませる場合、それに応じて透過度を小さくする必要があるためである。
また、a を|cos(<n>, <e>) |により除算する。
また、x, yの最大/最小値を保持するのは、必ずしも必要ではないが、後述のフィルタ処理部18において、フィルタを行う範囲を限定するために有効である。
【0075】
ここで、描画部16におけるウィンドウ座標系での2次元ベクトル<tw>の求める処理について説明する。
【0076】
基本的に、<tw>の方向にピクセルを拡大する。
以下では、図10に示すように、元となるピクセルから<tw>の方向に伸びる直線から、距離W以内の範囲のピクセルを有効である場合のフィルタを考える。
この領域を判定する方法を、以下で考える。もととなるピクセルから対象となるピクセルへのベクトルを<g> とする。
図11に示す通り、元のピクセルから<tw>の方向に伸びる直線と、対象となるピクセルとの距離は|g |sin(<g>, <tw>)となる。
なお、図11では、もとのピクセルを白丸PXL1、対象となるピクセルPXL2として示している。
これらから、以下の数10のような方策で、対象となるピクセルを選択すれば良いことになる。
【0077】
【数10】
|g |sin(<g>, <tw>) < W?1:0
【0078】
この式で定義される領域は、無限の長さを持つが、実装上はカーネルサイズが有限であるために、定義領域も有限となる。
図12に示すように、<t> をウィンドウ座標系での2次元ベクトル<tw>に変換する。
変換には、射影行列Pとしたとき(P−1)t を用いて、以下のように行うことができる。
【0079】
【数11】
<tw> = <t> * (P−1)t
【0080】
描画部16は、基本的にはピクセル単位の処理を行うが、ピクセル単位の処理としては、マップの取得、色の計算、透過度の計算を行う。また、フィルタ処理に用いるためのベクトルの計算を行う。
以下に、マップの取得、色の計算、透過度の計算、ベクトルの計算の各処理についてさらに詳細に説明する。
【0081】
まず、マップの取得について説明する。
ピクセル単位での色計算時には、テクスチャ座標から2次元マップの情報を参照する。本実施形態に係る画像は、たとえばいずれも4近傍補間を行い、MIPMAPは行わない。
基本的には、全ての情報について4近傍のテクセルの線形補間を用いている。しかし、4近傍のテクセルの中にcovが00(すなわち毛が存在しない)ものが含まれた場合には、以下のような処理を行う。
4近傍全てのテクセルのcovが0であった場合は、最終的に描画結果に反映されないため、どのような値でもかまわない。すなわち特別な処理は必要ない。一方、4近傍中のテクセルのcovが0であった場合は、cov以外のパラメータについては、0でない側のテクセル値をそのまま利用し、covはそのまま0を用いる。
近傍のテクセル間の変化が大きくない場合であれば、マップを事前に処理し、covが0のテクセルのパラメータを適切な値に設定しておくことが可能である。この場合はマップ取得時には4近傍を単純に線形浦間するだけで良くなる。
【0082】
次に、色の計算について説明する。
色計算には、たとえばLengyel(Lengyel,E.J., Real−Time Fur, Eurographics Rendering Workshop 2000, pp.243−256 )に提案された簡易化された、数12に示すような、ライティング式を用いる。
【0083】
【数12】
C =att * (Cd + Cs + Ca)
Cd= Kd * Cdl * sin(/T,/L)
Cs= Ks * Csl * sin(/T,/L) shininess
Ca= Ka * Cal
【0084】
ここで、/Tはマップから取得した毛の方向ベクトル/Tt(各要素がs,t,hで表される)を、接空間の基底ベクトル(/N,/PU,/PV)を用いて、下記の数13に基づいて視野座標系に変換したものである。
Cdl,Csl,Calは、それぞれ拡散(diffuse),鏡面(specular),周辺(ambient)の光源色を示す。またattはセルフシャドウの効果を導入するための減衰率である。また、/Tt・s、/Tt・t、/Tt・hは、それぞれ/Ttのs,t,h,成分を表す。
【0085】
【数13】
/T=/Tt ・h*/N+/Tt ・s*/PU+/Tt ・t*/PV
【0086】
次に、透過度の計算について説明する。
透過度aは、マップから取得したcovを以下の数14のように変調して用いる。ここでcovは毛がテクセルに占める割合を表している。
【0087】
【数14】
a= af * cov/cos(/n,/e)
af= (hmax>=h && h >hmin) ? 1 : 0
【0088】
ここで、/nは法線ベクトル、/eは視線ベクトルである。afは、上述したように、シェルに指定された上下限値(hmax/hmin)とh値との関係によって、描画するかどうかを制御するためのフラグである。
このフラグは、有効/無効判定部14による判定信号S14に含まれる。
また、cos(/n,/e)による除算は、以下のような理由による。
2次元のマップ上には、たとえば図13に示すように、毛が描画される。
図14(A)に示すように、このマップを正面から見た場合の毛の太さが正しいものとすると、図14(B)に示すように、これを横方向に傾いて見た場合はより細く見える。その結果、エッジ近傍での毛の色は薄くなってしまう。上記のcosによる除算は、エッジ部分で正しい画質を得るために必要となる。
【0089】
また、描画部16は、zバッファzbuf2 を用いてzテストを行いながら、色と透過度をフレームバッファfbuf2 に、z値をzバッファzbuf2 に出力する。zテストは、描画ピクセルのZ値がzバッファzbuf2 の内容よりも手前にあるときに成功する。
【0090】
次に、フィルタ処理に用いるベクトルの計算について説明する。
フィルタ処理に必要なベクトル/tを、下記の数15のように計算し、ベクトル用バッファに出力する。なお、この場合もzテストを通過した場合にのみ出力する。
【0091】
【数15】
/t= p*(nofs*/N + Δ1 * (szoom * / Tt ・s * /PU + tzoom */T t ・t * PV)
【0092】
フィルタ処理部18は、描画部16により信号S16として供給されたN×Nのフィルタカーネル用インデックスvld[index][N][N]を用いて、下記の数16に示すように、フィルタ処理を行い、各シェルの描画およびフィルタ処理が完了した後、zバッファzbuf2 とzバッファzbuf1 によりzテストを行い、zバッファzbuf2 の方が手前にある場合に、zバッファzbuf2 とzバッファzbuf1 の内容をアルファブレンド処理する。
フィルタ処理部18は、方向ベクトルに基づいてフィルタカーネルを変更し、描画対象物の向かっている方向にピクセルの情報を膨らませて、各シェル間で連続性を持たせるフィルタ処理を行う。
なお、画面の必要領域は、フィルタ処理部18により与えられる数9における描画時にxmax, xmin, ymax, yminを保持することにより判断できる。
また、フィルタ処理部18は、フィルタ処理を行う領域の範囲を記憶しておき、当該記憶した領域に対してのみフィルタ処理を行うように構成することも可能である。
また、フィルタ処理部18は、フィルタ処理を行う回数を、層描の都度ではなく、途中の数回のみ行うように構成することも可能である。
また、フィルタ処理部18は、同一層であっても、異なるマップの種類であれば、シェルの法線方向の膨らませ方を変更する。
【0093】
【数16】
【0094】
なお、数16で用いるフィルタカーネルの内容vld []、および数9で用いるatbl[]については、たとえば下記のように事前に計算すると、線状物体がより滑らかに結合するようになる。
【0095】
【数17】
【0096】
これは図10に示すように、カーネルの中心を通り<tw>の方向に伸びる直線から、距離W の範囲にある部分を選択するものである。
最初に<tw>=(tx,ty)で各index に対応する<tw>を求めている。index は0〜 INDEX_NUM−1 の値をとり、x軸の正の方向から反時計周りに一回りするようにしている。
<g>=(i−KERNEL _SIZE/2…) で、カーネル中心から要素(i,j) に向かうベクトル<g> を求めている。同時に<g> の大きさをgnorm としている。<g> はその後、正規化される。
if(gnorm* …) 以下で、直線からの距離がW よりも小さい範囲のピクセルの有効フラグを1としている。W 以上の範囲のピクセルの有効フラグは0とする。これは図11に示すように、要素(i,j) の直線からの距離はgnorm*sin(<tw>,<g>)で表されるので、この値とW との大小比較で求めることができる。
数9で用いるatblの値をここで求めることができる。すなわち、このカーネルを用いてフィルタ処理を行うと、1ピクセルがどれだけの面積に広げられるかがわかっている(カーネル内の有効ピクセル数で表される)ため、この逆数を事前に計算し、テーブルとして所持しておく。数9において、フィルタ後に透過度にatblの値を乗ずる。
【0097】
本実施形態では、毛をシェル毎に分断するため、図5に示すように、特にエッジ付近で不連続性が目立つ。
本来は図15に示すように、連続して表現されるべきものである。
そこで、図16に示すように、画面上でフィルタ処理を施すことにより、擬似的に連続性を保つことができる。
このフィルタは、毛が向かっている方向に細長い形状にピクセルの情報を膨らませるものである。これを行うために、毛がどちらに向かっているかを示すベクトル(t)を、上述した数16のように、ウィンドウ座標系で与える必要がある。
【0098】
次に、図1の構成の画像処理装置の動作を説明する。
【0099】
まず、描画前処理として、マップ作成部11において、毛のモデル作成および2次元マップ作成が行われ、作成した2次元マップがマップ保持部12に格納される。
なお、生成した2次元マップには、シェルの描画時に必要なパラメータ(Kd、Ks、Ka、Tt、cov、shinines)および、0〜1に正規化された高さ(h)情報が含まれている。
【0100】
そして、オブジェクト発生部15において、描画処理時に、マップ保持部12に保持された2次元マップが読み出され、2次元マップデータに基づいて毛皮に関する同心の複数のシェルが発生されて、データD15として描画部16に供給される。
オブジェクト発生部15が出力するデータD15には、発生した各シェルが含まれる層番号LN、各シェルの構成するマップ番号MN、や各シェルの高さの上下限値(hmax/hmin)等が含まれるが、各シェルの高さの上下限値(hmax/hmin)データは、データD15aとして有効/無効判定部14に供給される。
オブジェクト発生部15においては、視線の裏側の面は外側から内側に向かってシェルが発生され、視線の表側の面は内側に向かって表側にシェルが発生される。
【0101】
描画部16においては、オブジェクト発生部15によりオブジェクトデータであるシェルデータ(プリミティブデータ)D15に基づいて、描画対象のシェルを構成するマップのマップアドレスMA16、およびマップ番号MN16がマップアドレス変更部13に出力される。
また、描画部16においては、描画対象のシェルを構成するマップが含まれる層番号データLN16(層番号LYR1、あるいはLYR2等)が有効/無効判定部14に供給される。
【0102】
マップアドレス変更部13においては、描画部16により供給されるマップ番号データMN16に基づいて、数3に示すようにマップアドレスのオフセットが求められ、求めたオフセットによって描画部16により供給されるマップアドレスMA16が変更される。そして、マップアドレス変更部13から変更後のマップアドレスMA13がマップ保持部12に供給される。
【0103】
また、有効/無効判定部14においては、マップ保持部12から供給されるオブジェクトの発生に用いられたマップに含まれる高さ情報h、オブジェクト発生部15による高さの上下限値(hmax/Hmin)データD15a、および描画部16から供給されるマップが含まれる層番号データLN16に基づいて、描画しようとするシェルが有効なシェルであるか無効なシェルであるかが判定される。そして、有効/無効判定部14から、判定結果を示す判定信号S14が描画部16に出力される。
【0104】
描画部16においては、有効/無効判定部14による判定信号S14を有効(論理1)で受けると以下の処理が行われ、無効(論理0)で受けると以下の処理は行われない。
【0105】
判定信号S14を有効(論理1)で受けた描画部16においては、マップ保持部12から読み出した2次元マップデータ、およびオブジェクト発生部15によりオブジェクトデータであるシェルデータに基づいて、ベクトル <t> のウィンドウ座標系でのベクトル<tw>が求められる。
そして、求めたウィンドウ座標系でのベクトル<tw>に基づいてフィルタカーネル用のインデックス(index )が求められる。
描画部16では、オブジェクト発生部15が発生したプリミティブがラスタライズされ後、数9に示すように色、フィルタカーネル用のインデックス(index)が計算され信号S14としてフィルタ処理部18に出力される。
なお、描画部16では、色計算にあたって、エッジ部での透過度が調整される。
フィルタ処理部18において、求めたベクトルに基づいてフィルタカーネルが変更されて、描画対象物の向かっている方向にピクセルの情報を膨らませて、各シェル間で連続性を持たせるフィルタ処理が行われる。
【0106】
以上説明したように、本実施形態によれば、シェルの描画時に必要なパラメータおよび高さ(h)情報を含む2次元マップを生成するマップ作成部11と、マップ作成部11で作成され、各種パラメータや高さ情報が付加された2次元マップを保持し、マップアドレスMA13に応じたアドレスのマップデータMPD12を出力するマップ保持部12と、異なるマップを表すためのマップ番号に応じたマップアドレスオフセットを保持し、供給されるマップ番号データMN16に基づいてマップアドレスのオフセットを求め、求めたオフセットによってマップアドレスMA16を変更し、変更後のマップアドレスMA13をマップ保持部12に供給するマップアドレス変更部13と、マップ保持部12から供給されるオブジェクトの発生に用いられたマップに含まれる高さ情報h、オブジェクト発生部15による高さの上下限値データD15a、および描画部16から供給されるマップが含まれる層番号データLN16に基づいて、描画しようとするシェルが有効なシェルであるか無効なシェルであるかを判定し、判定結果を示す判定信号S14を出力する有効/無効判定部14と、描画処理時に、マップ保持部12に保持された2次元マップを読み出し、2次元マップデータMPD12に基づいて毛皮に関する同心の複数のシェルを発生し各シェルの高さの上下限値データは、データD15aを有効/無効判定部14に出力するオブジェクト発生部15と、オブジェクト発生部15によりオブジェクトデータであるシェルデータD15に基づいて、描画対象のシェルを構成するマップのマップアドレスMA16、およびマップ番号MN16をマップアドレス変更部13に出力し、また、描画対象のシェルを構成するマップが含まれる層番号データLN16を有効/無効判定部14に供給し、有効/無効判定部14による判定信号S14を有効(論理1)で受けると、発生されたシェルの描画処理を行う描画部16とを設けたので、マップ数を削減することができ、また、LODの制御も容易にできる利点がある。
【0107】
すなわち、本実施形態によれば、マップがシェル数に依存しないため、LODに応じてシェル数を簡単に変更することができる。
また、2次元マップのみで毛皮等の線状物体の表現が可能なため、オーサリングが行いやすい。
【0108】
また、本実施形態において、描画対象物を複数のシェルとして重ね合わせて描画する画像処理装置において、2次元マップデータ、およびオブジェクト発生部15によりオブジェクトデータであるシェルデータに基づいて、ベクトル <t>のウィンドウ座標系でのベクトル<tw>を求め、これからフィルタカーネル用のインデックス(index )を求め、フィルタ処理部18に出力する描画部16と、描画部16により供給されたN×Nのフィルタカーネル用インデックスvld[index][N][N]を用いて、フィルタ処理を行い、各シェルの描画およびフィルタ処理が完了した後、zバッファzbuf2 とzバッファzbuf1 によりzテストを行い、zバッファzbuf2 の方が手前にある場合に、zバッファzbuf2 とzバッファzbuf1 の内容をアルファブレンド処理するフィルタ処理部18とを設けたので、シェルの描画によっても連続性を維持することが可能で、画質の劣化を防止でき、平坦で均質な素材のオブジェクトはもとより、複雑な形状のオブジェクトも高品位に描画することができる。
本実施形態によれば、たとえば鹿のように、比較的短毛であり毛が皮膚面に沿っているような場合の、毛皮の質感を、2次元のマップを用いて高速に描画することが可能である。
【0109】
また、本実施形態によれば、色計算にあって、エッジ部での透過度を調整することから、エッジ部分で高い画質を得ることが可能となる。
【0110】
【発明の効果】
以上説明したように、本発明によれば、シェルの描画において、マップ数を削減することができ、また、LODの制御も容易にできる利点がある。
【図面の簡単な説明】
【図1】本発明に係る画像処理装置の一実施形態を示すブロック構成図である。
【図2】本実施形態に係る毛のモデル作成について説明するための図である。
【図3】本実施形態に係る2次元マップの作成について説明するための図である。
【図4】3つのシェルに同一のマップを用いた場合を表現した図である。
【図5】離散的に高さ方向に傾きのある毛を描画した場合を示す図である。
【図6】本実施形態に係るシェルの視線に対して表側と裏側に分離して描画する方法を説明するための図である。
【図7】毛同士が重なった状態で、毛の高さ情報を失われることを説明するための図である。
【図8】毛の高さ情報を失わせない方法を説明するための図である。
【図9】複数種のマップを用意し、各層毎に微妙に高さを変えて描画する方法を説明するための図である。
【図10】ウィンドウ座標の方向ベクトルを求める方法を説明するための図である。
【図11】ウィンドウ座標の方向ベクトルを求める方法を説明するための図である。
【図12】ウィンドウ座標の方向ベクトルを求める方法を説明するための図である。
【図13】毛の描画状態を示す図である。
【図14】エッジ部分の透過度を調整する理由を説明するための図である。
【図15】毛が連続的に描画される理想状態を示す図である。
【図16】本実施形態に係るフィルタ処理を説明するための図である。
【符号の説明】
10…画像処理装置、11…マップ作成部、12…マップ保持部、13…マップアドレス変更部、14…有効/無効判定部、15…オブジェクト発生部、16…描画部、17…メモリ、18…フィルタ処理部。
Claims (12)
- 描画対象物を複数の半透明層であるシェルとして重ね合わせて描画する画像処理装置であって、
少なくともシェルの描画時に必要なパラメータを含む複数のマップデータを保持し、マップアドレスに応じたマップデータを出力するマップ保持部と、
異なるマップを表すためのマップ番号をもとに、マップアドレスのオフセットを求め、当該オフセットに基づいてマップアドレスを変更し、変更後のマップアドレスを上記マップ保持部に供給するマップアドレス変更部と、
上記マップ保持部から出力されるマップデータに基づいて上記シェルの描画処理を行う描画手段と
を有する画像処理装置。 - 異なる層を表すための層番号をもとに、有効な高さ値の領域を判定して描画対象が有効/無効を判定する判定部を有し、
上記描画手段は、上記判定部の判定結果が有効の場合にのみ描画処理を行う
請求項1記載の画像処理装置。 - 上記マップデータには、上記パラメータに加えて高さ情報を含み、
上記複数のシェルを発生するシェル発生手段を有し、
上記シェル発生手段は、シェルの描画に必要なパラメータおよび高さ情報を含むマップデータに基づいて各シェルを発生し、発生したシェルに高さの上下限値を設定し、
上記判定部は、シェル描画時に上記高さの値が上記上限値以下で下限値以上の場合にのみ有効と判定する
請求項2記載の画像処理装置。 - 複数のシェルをマップの種類および層の数分発生するシェル発生手段を有し、
上記描画手段は、上記シェル発生手段で発生されたマップの種類および層の数分の複数のシェルを組み合わせることによって描画処理を行う
請求項2記載の画像処理装置。 - 上記描画手段は、描画対象物の向かっている方向にピクセルの情報を膨らませて、各シェル間で連続性を持たせるフィルタ処理を行い、かつ同一層であっても、異なるマップの種類であれば、シェルの法線方向の膨らませ方を変更する
請求項4記載の画像処理装置。 - 上記描画手段は、上記複数のシェルを重ね合わせた描画対象物の方向を示すベクトルを求め、求めたベクトルに基づいてフィルタカーネルを変更し、描画対象物の向かっている方向にピクセルの情報を膨らませて、各シェル間で連続性を持たせるフィルタ処理を行う
請求項1記載の画像処理装置。 - 描画対象物を複数の半透明層であるシェルとして重ね合わせて描画する画像処理方法であって、
少なくともシェルの描画時に必要なパラメータを含む複数のマップデータを保持する第1のステップと、
異なるマップを表すためのマップ番号をもとに、マップアドレスのオフセットを求め、当該オフセットに基づいてマップアドレスを変更する第2のステップと、
上記変更後のマップアドレスに応じたマップデータを保持データから選択する第3のステップと、
上記選択されたマップデータに基づいて上記シェルの描画処理を行う第4のステップと
を有する画像処理方法。 - 異なる層を表すための層番号をもとに、有効な高さ値の領域を判定して描画対象が有効/無効を判定する第5のステップを有し、
上記第4のステップでは、判定結果が有効の場合にのみ描画処理を行う
請求項7記載の画像処理方法。 - 上記マップデータには、上記パラメータに加えて高さ情報を含み、
シェルの描画に必要なパラメータおよび高さ情報を含むマップデータに基づいて各シェルを発生する第6のステップと、
発生したシェルに高さの上下限値を設定する第7のステップとを有し、
上記第5のステップでは、シェル描画時に上記高さの値が上記上限値以下で下限値以上の場合にのみ有効と判定する
請求項8記載の画像処理方法。 - 複数のシェルをマップの種類および層の数分発生する第6のステップを有し、
上記第4のステップでは、上記発生されたマップの種類および層の数分の複数のシェルを組み合わせることによって描画処理を行う
請求項8記載の画像処理方法。 - 上記第4のステップでは、描画対象物の向かっている方向にピクセルの情報を膨らませて、各シェル間で連続性を持たせるフィルタ処理を行い、かつ同一層であっても、異なるマップの種類であれば、シェルの法線方向の膨らませ方を変更する
請求項10記載の画像処理方法。 - 上記第4のステップでは、上記複数のシェルを重ね合わせた描画対象物の方向を示すベクトルを求め、求めたベクトルに基づいてフィルタカーネルを変更し、描画対象物の向かっている方向にピクセルの情報を膨らませて、各シェル間で連続性を持たせるフィルタ処理を行う
請求項7記載の画像処理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2002211417A JP2004054612A (ja) | 2002-07-19 | 2002-07-19 | 画像処理装置およびその方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2002211417A JP2004054612A (ja) | 2002-07-19 | 2002-07-19 | 画像処理装置およびその方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2004054612A true JP2004054612A (ja) | 2004-02-19 |
Family
ID=31934660
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2002211417A Pending JP2004054612A (ja) | 2002-07-19 | 2002-07-19 | 画像処理装置およびその方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2004054612A (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7460118B2 (en) | 2004-08-31 | 2008-12-02 | Sega Corporation | Image processor, image processing method and image processing program |
-
2002
- 2002-07-19 JP JP2002211417A patent/JP2004054612A/ja active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7460118B2 (en) | 2004-08-31 | 2008-12-02 | Sega Corporation | Image processor, image processing method and image processing program |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7583264B2 (en) | Apparatus and program for image generation | |
US6674430B1 (en) | Apparatus and method for real-time volume processing and universal 3D rendering | |
US5949424A (en) | Method, system, and computer program product for bump mapping in tangent space | |
US5704024A (en) | Method and an apparatus for generating reflection vectors which can be unnormalized and for using these reflection vectors to index locations on an environment map | |
KR100504421B1 (ko) | 3차원 그래픽에서 속성을 보간하기 위한 방법 및 장치 | |
US7081895B2 (en) | Systems and methods of multi-pass data processing | |
US5880736A (en) | Method system and computer program product for shading | |
US8035641B1 (en) | Fast depth of field simulation | |
Raskar | Hardware support for non-photorealistic rendering | |
JPH10105734A (ja) | 鏡面レンダリング方法及び装置 | |
WO2000004505A1 (en) | Apparatus and method for real-time volume processing and universal 3d rendering | |
Kilgard | Improving shadows and reflections via the stencil buffer | |
GB2476140A (en) | Shadow rendering using stencil and depth buffers | |
Zhang et al. | Deferred blending: Image composition for single-pass point rendering | |
Koster et al. | Real-time rendering of human hair using programmable graphics hardware | |
JP4584956B2 (ja) | グラフィックスプロセッサおよび描画処理方法 | |
Policarpo et al. | Deferred shading tutorial | |
KR101118597B1 (ko) | 모바일용 컴퓨터 그래픽 랜더링 방법 및 시스템 | |
JP2004054634A (ja) | 画像処理装置およびその方法 | |
JP4060375B2 (ja) | スポットライト特性形成方法及びこれを用いた画像処理装置 | |
US7385604B1 (en) | Fragment scattering | |
EP1890267A2 (en) | Apparatus and method for real-time volume processing and universal 3D rendering | |
JP2004054612A (ja) | 画像処理装置およびその方法 | |
JP2004054621A (ja) | 画像処理装置およびその方法 | |
JP2004054601A (ja) | 画像処理装置およびその方法 |