(57)【特許請求の範囲】
【請求項１】
オブジェクトを含む仮想空間を視点から観察したときの画像データを生成する画像処理装置であって、
前記オブジェクトの表面における相対的な高低差を表す高さ情報を取得する第一の取得手段と、
前記オブジェクトの光の内部散乱の特性を表す少なくとも一つの散乱関数を取得する第二の取得手段と、
前記高さ情報と前記散乱関数とに基づいて、前記画像データにおける前記オブジェクトを表す各画素の画素値を算出する算出手段とを備え、
前記散乱関数は、注目画素からの距離に応じた内部散乱の特性を表す関数であり、
前記算出手段は、前記注目画素と前記注目画素とは異なるサンプリング点との距離を前記高さ情報に基づいて算出することを特徴とする画像処理装置。
【請求項２】
前記算出手段は、前記距離に応じて、前記サンプリング点から入射して前記注目画素から射出する内部散乱光の輝度に基づいて算出することを特徴とする請求項１に記載の画像処理装置。
【請求項３】
前記算出手段は、前記距離に応じて前記散乱関数を用いたぼかし処理をすることを特徴とする請求項１または請求項２に記載の画像処理装置。
【請求項４】
前記算出手段は、複数の散乱関数を有し、前記複数の散乱関数のなかから、前記高さ情報に応じて１つ散乱関数を選択することを特徴とする請求項１に記載の画像処理装置。
【請求項５】
前記サンプリング点は、前記注目画素の近傍であり、複数点抽出することを特徴とする請求項１から４のいずれか１項に記載の画像処理装置。
【請求項６】
前記サンプリング点は、前記注目画素の周囲にあることを特徴とする請求項１から４のいずれか１項に記載の画像処理装置。
【請求項７】
前記サンプリング点は、高さ情報に基づいて算出した所定の領域内で抽出することを特徴とする請求項１から４のいずれか１項に記載の画像処理装置。
【請求項８】
前記所定の領域とは、前記注目画素からの角度毎に算出された前記注目画素からの距離に基づいて決定された領域であることを特徴とする請求項７に記載の画像処理装置。
【請求項９】
前記高さ情報は、法線が格納されたマップであることを特徴とする請求項１から８のいずれか１項に記載の画像処理装置。
【請求項１０】
前記マップは、相対的な高低差を表す情報から生成されることを特徴とする請求項９に記載の画像処理装置。
【請求項１１】
コンピュータを、請求項１から１０のいずれか１項に記載された画像処理装置の各手段として機能させるためのプログラム。
【請求項１２】
オブジェクトを含む仮想空間を視点から観察したときの画像データを生成する画像処理方法であって、
前記オブジェクトの表面における相対的な高低差を表す高さ情報を取得し、
前記オブジェクトの光の内部散乱の特性を表す少なくとも一つの散乱関数を取得し、
前記高さ情報と前記散乱関数とに基づいて、前記画像データにおける前記オブジェクトを表す各画素の画素値を算出し、
前記散乱関数は、注目画素からの距離に応じた内部散乱の特性を表す関数であり、
前記画素値の算出において、前記注目画素と前記注目画素とは異なるサンプリング点との距離を前記高さ情報に基づいて算出することを特徴とする画像処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は光の内部散乱が伴う物質をＣＧで表現する技術に関する。
【背景技術】
【０００２】
近年、コンピューターグラフィックス（以降、ＣＧ）では、金属、ガラスなどは実写と比較しても遜色のないレベルで表現できるようになった。一方で、肌や大理石、牛乳など、光の内部散乱を伴う物質については実写同等の表現は難しい。特に、肌には表面に微小な凹凸があり、ＣＧにおいて実写相当で表現するのは困難である。肌を実写相当で表現するためには、肌から入射した光の内部散乱を再現することと、しわ・毛穴などの微小凹凸を再現することが重要である。内部散乱の再現手法として、特許文献１に開示された方法が知られている。特許文献１では、複数点におけるサンプリングを行い、画素値をＢＳＳＲＤＦ関数を用いて積分することによりぼかし処理を行う。また、微小凹凸の再現手法は一般に、表面形状を表すバンプマップを用いた処理がある。通常、肌のＣＧ再現を行う場合は、微小凹凸を再現した後にぼかし処理を実行する。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特表２００６−５０６７４２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、微小凹凸を再現した後にぼかし処理を実行すると、ぼかし処理によって微小凹凸が消失するという場合がある。これは、ぼかし処理を実行する際に、微小凹凸のある表面形状において、高低差があることを考慮していないためである。そこで本発明の目的は、微小凹凸のある表面形状における高低差を考慮した適切なぼかし処理により光の内部散乱を再現することにより、より実写に忠実な表面形状の再現することにある。
【課題を解決するための手段】
【０００５】
上記課題を解決するために本発明の画像処理装置は、オブジェクトを表すコンピュータグラフィクスを生成する画像処理装置であって、前記オブジェクトの表面における相対的な高低差を表す高さ情報を取得する第一の取得手段と、前記オブジェクトの光の内部散乱の特性を表す少なくとも一つの散乱関数を取得する第二の取得手段と、前記高さ情報と前記散乱関数とに基づいて、前記オブジェクトの輝度値を算出する算出手段とを備え、前記散乱関数は、注目画素からの距離に応じた内部散乱の特性を表す関数であり、前記算出手段は、前記注目画素と前記注目画素とは異なるサンプリング点との距離を前記高さ情報に基づいて算出することを特徴とする。
【発明の効果】
【０００６】
本発明によれば、微小凹凸のある表面形状における高低差を考慮した適切なぼかし処理を行うことで、より実写に忠実な表面形状の再現することができる。
【図面の簡単な説明】
【０００７】
【図１】システム構成図
【図２】レイトレーシングの概要を説明した図
【図３】レイの追跡方法を説明した図
【図４】光の内部散乱について説明した図
【図５】光の内部散乱について説明した図
【図６】バンプマップ法について説明した図
【図７】バンプマップ法について説明した図
【図８】レンダリング処理を示すフローチャート図
【図９】法線マップデータ読み出し処理のフローチャート図
【図１０】ぼかし処理を用いた内部散乱の再現方法を示すフローチャート図
【図１１】内部散乱における各点の距離算出方法を説明した図
【図１２】高さ情報による散乱関数の変化を説明した図
【図１３】内部散乱再現処理を示すフローチャート図
【図１４】周辺画素のみで内部散乱を再現する手法を示すフローチャート図
【図１５】高さ情報を考慮したサンプリング点の設定方法を説明する図
【発明を実施するための形態】
【０００８】
以下、添付図面を参照して、本発明を好適な実施形態に従って詳細に説明する。なお、以下の実施形態において示す構成は一例にすぎず、本発明は図示された構成に限定されるものではない。
【０００９】
＜実施形態１＞
図１は、実施形態に適用可能なシステムの構成を示すブロック図である。ＣＧ生成装置は、ＣＰＵ１０１、メインメモリ１０２、記憶装置１０３、入力装置１０４、表示装置１０５、バス１０６を有する。ＣＰＵ１０１は、演算処理や各種プログラムの実行を行う。メインメモリ１０２は、処理に必要なプログラム、データ、作業領域などをＣＰＵ１０１に提供する。記憶装置１０３は、画像生成プログラムや光源やオブジェクトの特性データを蓄積する装置で、例えばハードディスクが用いられる。尚、光源やオブジェクトの特性データの詳細は後述する。
【００１０】
入力装置１０４は、キーボードやマウスでなどのユーザ操作を入力するための装置である。表示装置１０５は、ＣＰＵ１０１が生成した画像を表示するためのものであり、ＣＲＴや液晶画面などにより構成する。バス１０６は上述の各部をつなぐ通信線である。なお、システム構成については、上記以外にも、様々な構成要素が存在するが、本発明の主眼ではないので、その説明は省略する。
【００１１】
図２は、レイトレーシングの概要を示している。図２−ａに示すように、レンダリング時は、視点２０１と視野角２０４、前方クリップ面２０２、後方クリップ面２０３を決定する。視野角２０４、前方クリップ面２０２、後方クリップ面２０３で囲まれた台形領域２０５をレンダリング領域とする。このレンダリング領域に、レンダリング対象となる各種オブジェクトが設置される。レンダリング領域が決定すると、図２−ｂのように、視点２０１から、前方クリップ面２０２に対し、レイ（光線）を画素ごとに放出する。レンダリング結果を８００×６００画素で表示したい場合は、前方クリップ面を８００×６００画素に分割する。
【００１２】
放出されたレイの挙動を図３を用いて説明する。視点２０１から放出されたレイは、前方クリップ面２０２を通過した後、物体３０５に衝突する。その後、レイは壁３０４に衝突し、最終的に光源３０２に衝突する。このとき、物体３０５と壁３０４それぞれの波長λの光に対する反射率をｋλ３０５、ｋλ３０４とし、光源３０２の波長λの分光放射輝度をＬλとする。このとき、視点に入る波長λの分光放射輝度、つまり表面反射光の輝度Ｄは、
Ｄ＝ｋλ３０５×ｋλ３０４×Ｌλ
である。ここで、各物体の波長λの光に対する反射率をｋλＭとすると、
【００１３】
【数１】
0006049327.tif 000002
【００１４】
と表すことができる。式１を用いることにより各画素の波長（成分値）における輝度が算出できる。全て波長に対して式１により分光放射輝度（表面反射光の輝度）を算出し、合計する。対象の物体が内部散乱を伴わないとした場合、得られた全波長における表面反射光の輝度の合計値を、等色関数等を用いてＲＧＢ値に変換すると、各画素を表す画素値が算出される。その結果を図３−ｂに示す。なお、波長λをＲＧＢの各波長に合わせることで、直接ＲＧＢの画素値を求めることも可能である。
【００１５】
レイトレーシングでは、前方クリップ面における全画素の画素値を算出し、ＣＧを生成する。前述の通り、できるだけ実写に忠実なＣＧを生成するためには、視点から放出したレイ（光線）が衝突した物体表面の微小凹凸および内部散乱を再現する必要がある。そこで本実施形態では、式１を用いて画素値を算出するのみではなく、微小凹凸の再現と内部散乱の再現を両立した処理を行う。
【００１６】
まず、光の内部散乱を再現するための処理について説明する。図４は物体の反射特性について説明した図である。内部散乱する物体４０４に入射光４０１が入射した場合を考える。このとき、物体４０４の表面で反射する反射光４０２と、物体内に入射し、内部で散乱を起こした後に外部で出ていく内部散乱光４０３に分離される。物体表面のある点から射出される放射輝度は、ある点において反射した光と、ある点以外の点から入射して光が内部散乱した後にある点を通過して放出される内部散乱光から得られる。つまり、物体表面のある点から射出される全分光放射輝度Ｉ（放射輝度）は、表面反射光の輝度Ｄと、内部散乱光の輝度
【００１７】
【数２】
0006049327.tif 000003
【００１８】
を用いて、
【００１９】
【数３】
0006049327.tif 000004
【００２０】
と表すことができる。式２は一般に、ＢＳＳＲＤＦ関数として知られている。
【００２１】
図５を用いて式２について詳細に説明する。図５−ａにおいて、点Ｐ０における放射輝度Ｉ０を求める場合を考える。このとき、点Ｐ０から射出される光は、点Ｐ０における表面反射光の輝度と、他の各点Ｐｉから入射した光が内部散乱した後に点Ｐ０を通って射出される内部散乱光の輝度を足し合わせたものとなる。点Ｐｉからの内部散乱光の輝度ＳＣｉは、図５−ｃが示すように、散乱関数Ｓ（ｒｉ）と点Ｐｉにおける表面反射光の輝度Ｄｉとの積を用いて表せる。ここで、ｒｉは点Ｐ０と点Ｐｉとの距離を示す。つまり、点Ｐｉにおいて透過した光が内部散乱を経てＰ０から射出される内部散乱光は、点Ｐｉと点Ｐ０との距離によって決まる。本来ｒｉは３次元上の距離であり、図５−ｂの式によって表される。
【００２２】
また、ｒｉ＝０の場合、散乱関数Ｓ（０）の値は１．０となり、内部散乱光の輝度ＳＣｉは、点Ｐｉにおける表面反射光の輝度であるＤｉと等しくなる。このように、式２を用いて各画素の画素値を算出することにより、内部散乱を伴う物体のレンダリングを行うことができる。なお、式２の内部散乱光に関する項は分光の波長ごとに異なる散乱関数を持つ。従って、波長ごとに表面反射光の輝度Ｄおよび内部散乱光の輝度Ｓを算出し、全波長における表面反射光の輝度Ｄと内部散乱光の輝度Ｓを足し合わせることで、点Ｐ０における放射輝度が求められる。
【００２３】
次に、微小凹凸を再現するための処理について説明する。図６は微小凹凸を再現するためのバンプマップ法を説明した図である。しわや毛穴などの微小凹凸をポリゴンを用いて再現しようとすると、数億ポリゴンものデータ量が必要になる。そのため、より少ないポリゴン数で微小凹凸を再現する手法が必要となる。そこでバンプマップ法は、ポリゴンの代わりに法線方向を格納したデータ（以降、法線マップ）を用いることで疑似的に微小凹凸を再現する手法である。
【００２４】
図６−ａに示す通り、平面上では、各点における法線方向はいずれも上方向を向いている。一方図６−ｂのような斜面を含む場合、斜面上における法線方向は傾いている。図６−ｃのように、平面上に、斜面が存在する場合の法線を割り当てると、斜面同様に陰影が発生する。このようにして平面ではあるが、法線マップを用いて斜面のように見せかけることができる。
【００２５】
さらに図７を用いて詳細に説明する。平面７０２に対し、光源７０１が平面７０２の上方に設置されている。ある点における光源から受ける光の強さ、方向を表すベクトルを光源ベクトルとする。平面７０２では光源７０１によって均一に照らされているため、平面７０２では全ての位置において一様な光源ベクトルを持つ。そこに、法線マップ７０３を組み入れると、法線方向の傾きによって、レンダリング結果７０４に陰影が発生する。
【００２６】
具体的には、法線マップ７０３の各法線と光源ベクトルとの内積に基づいて、各点における陰影を求める。このとき、法線マップ７０３の各画素には、法線ベクトルと高さ情報が記録されている。これにより平面７０２に凹凸があるように見せかけたレンダリング結果７０４を得ることができる。以上の平面上にバンプマップ法を用いた陰影を算出するための処理を、陰影処理を呼ぶ。なお、レンダリング領域に複数の光源がある場合、ある地点に与えるそれぞれの光源ベクトルを足し合わせればよい。
【００２７】
図８は、本実施形態に適用可能なＣＧ生成処理を説明したフローチャート図である。
【００２８】
ステップＳ８０１において、レンダリングサイズ（画素数）と前方クリップ面、後方クリップ面を設定する。ここで、レンダリングサイズをＮ画素とする。
【００２９】
ステップＳ８０２において、視点データ、光源データ、オブジェクトデータなどのシーンデータを読み込む。具体的には視点データは、視点の位置、視線方向、画角を表すデータである。光源データは、光源の分光的な明るさ情報である分光放射輝度、そして仮想空間上の光源の位置などを表すデータである。
【００３０】
光源の分光放射輝度は波長毎の輝度分布であり、光源によって特性が異なる。光源の種類が異なると、分光放射輝度分布も変化する。その結果、物体の色の見えが変化するので、シーンを忠実に再現するために重要である。オブジェクトデータは仮想空間上に配置する物体の数、各物体の位置、形状のほか、波長ごとの反射率、内部散乱関数、法線マップを表すデータである。法線マップの読み込み処理については、別フローチャートを用いて詳細に説明する。
【００３１】
ステップＳ８０３において、変数ｉを０に初期化し、画素ごとのレイトレーシング処理を開始する。なお、特に言及しない限り、以降の処理は全ての波長について実行することとする。
【００３２】
ステップＳ８０４において、式１を用いてｉ番目の画素Ｐｉの表面反射光の輝度Ｄｉを算出する。その際、物体表面にステップＳ８０２において読み出した光源ベクトルと法線マップに基づいて陰影処理を加えた上で算出する。
【００３３】
ステップＳ８０５において、Ｐｉの周辺にＭ個のサンプリング点Ｐｉ（ｊ）を設定し、各サンプリング点における表面反射光の輝度Ｄｉ（ｊ）を算出する。その際、物体表面にステップＳ８０２において読み出した光源ベクトルと法線マップに基づいて陰影処理を加えた上で算出する。
【００３４】
ステップＳ８０６において、Ｐｉにおける内部散乱光の輝度ＳＣｉを算出する。Ｐｉにおける内部散乱光の計算については、別フローチャートを用いて詳細に説明する。
【００３５】
ステップＳ８０７において、画素Ｐｉにおける表面反射光の輝度とＭ個のサンプリング点から入射して画素Ｐｉから射出される内部散乱光の輝度を足し合わせて、ｉ番目の画素Ｐｉにおける輝度値を算出する。各波長の輝度値から、等色関数等を用いてＲＧＢ値に変換すると、画素Ｐｉにおける画素値が算出される。
【００３６】
ステップＳ８０８において、ｉを１だけ増加させる。ステップＳ８０９において、画素数Ｎとｉを比較し、全画素数分のレイトレーシング処理が終了したかを判断する。Ｙｅｓの場合、全ての処理を終了し、Ｎｏの場合、ステップＳ８０４に戻り処理を続行する。
【００３７】
図９は、ステップＳ８０２における法線マップの読み出し処理を説明したフローチャート図である。法線マップは通常、基準となる平面からの高さ方向の距離を格納した高さマップから生成される。本実施形態においても、高さマップから法線マップを生成することで法線マップを読み出す。
【００３８】
ステップＳ９０１において、高さ情報を格納した高さマップを読みだす。高さ情報とは、ある基準とする平面からの相対的な高さを表した情報である。
【００３９】
ステップＳ９０２において、高さマップから高さの変化量を算出し、そこから法線マップを生成する。この手法については、書籍などで紹介されており既知であるため、説明を省略する。
【００４０】
ステップＳ９０３において、生成した法線マップに対し、高さ情報を格納する。これにより、後工程において高さ情報も利用することができる。なお、入力データが高さマップではなく、法線マップであった場合、法線の傾きから高さ情報を算出することができるため、その情報を格納しておく。またここでは、法線マップと高さマップを例として挙げたが、高さ情報が取得可能な情報であれば、何であっても構わない。
【００４１】
図１０は、ステップＳ８０６における内部散乱を再現するための処理を説明したフローチャート図である。
【００４２】
ステップＳ１００１において、変数ｊを０に初期化する。また、画素Ｐｉにおける内部散乱光の輝度ＳＣｉも０に初期化する。
【００４３】
ステップＳ１００２において、Ｐｉとｊ番目のサンプリング点Ｐｉ（ｊ）との距離ｒｉ（ｊ）を算出する。図１５は、高さ情報を考慮したサンプリング点の設定方法を説明する図である。まず、サンプリング点Ｐｉ（ｊ）の座標値の設定方法について図１５−ａを用いて説明する。座標値（ｘｊ，  ｚｊ）は乱数を用いて決定するが、座標値に対し拘束条件を用いる。それは、散乱関数Ｓ（ｒ）は、ｒ≧ｒＭＡＸの範囲でＳ（ｒＭＡＸ）＝０となるため、その領域で点Ｐｉ（ｊ）を生成しても無駄になるからである。
【００４４】
そのため、図１５−ｂのように点Ｐｉを中心とする極座標系を採り、０＜ｒｉ（ｊ）＜ｒＭＡＸ、０≦θ＜２πを満たすように乱数ｒｉ（ｊ）、θを発生させる。その後、極座標系から（ｘｊ，  ｚj）に座標変換することで、点Ｐｉ（ｊ）の座標値が設定できる。次に高さ情報を考慮した距離の算出方法について、図１１を用いて説明する。図７のレンダリング結果７０４のように、バンプマップ法を用い陰影処理された平面を考える。このとき、ポリゴンのみを考慮すると、点Ｐｉと点Ｐｉ（ｊ）は共に同一平面上に存在することになる。そのため、距離ｒｉ（ｊ）はｘ−ｚ軸方向のみで計算され、図１１−ｂが示す式
【００４５】
【数４】
0006049327.tif 000005
【００４６】
により距離が算出できる。つまり、点Ｐｉと点Ｐｉ（ｊ）との高低差は考慮せずに、点Ｐｉと点Ｐｉ（ｊ）間の距離を求めることになり、乱数ｒｉ（ｊ）がそのまま距離となる。しかしながら、ポリゴンのみではなくさらに高さ情報も考慮して距離を算出すると、図１１−ｃに示すように、点Ｐｉと点Ｐｉ（ｊ）との高低差が生じる。このため、高さ情報を考慮した距離ｒｈｉ（ｊ）は図１１−ｂの距離ｒｉ（ｊ）よりも大きくなる。このとき、距離ｒｈｉ（ｊ）の計算に必要な高さ情報ｙｊは、図９で生成した法線マップから取得する。法線マップには高さ情報が格納されているため、その値をｙｊとして利用することができる。
【００４７】
図５−ｃの散乱関数Ｓ（ｒ）では、距離ｒｉ（ｊ）が小さいほど、散乱光の輝度ＳＣｉ（ｊ）は大きな値を示す。つまり、距離が小さいほど内部散乱光の影響が大きくなり、レンダリング結果がぼやけてしまう。従って、点Ｐｉと点Ｐｉ（ｊ）との高低差を考慮せずにポリゴンのみで距離を算出すると、本来の距離よりも小さく算出されることになり、必要以上にぼかし処理をすることになる。これにより、微小凹凸の再現性が低下してしまう。そのため本実施形態では、点Ｐｉと点Ｐｉ（ｊ）間の距離の算出には、図１１−ｃで示した法線マップも考慮した距離ｒｈｉ（ｊ）を用いる。なお、各点のｙ方向の高さ情報が法線マップに含まれない場合、法線ベクトルから高さ情報を算出する。その手法については、一般的な手法として文献等に記載されているため本発明では言及しない。
【００４８】
また、高さ情報を考慮した場合、点Ｐｉ（ｊ）の座標値（ｘｊ，  ｚｊ）に対する拘束条件も変化する。その概要を図１５−ｃを用いて説明する。高さ情報を考慮する場合、距離は
【００４９】
【数５】
0006049327.tif 000006
【００５０】
である。このとき、ｒｈｉ（ｊ）とｒｉ（ｊ）の関係は、
【００５１】
【数６】
0006049327.tif 000007
【００５２】
で表せ、ｒｈｉ（ｊ）の最大値はｒＭＡＸであるため、ｒｉの範囲は、
【００５３】
【数７】
0006049327.tif 000008
【００５４】
となる。ｙｉは、極座標での方向θによって異なるため、ｒｉ（ｊ）の範囲は、０＜ｒｉ（ｊ）＜ｒＭＡＸ（θ）と置き換えられ、図１５−ｃのようなグレー領域で表すことができる。このような場合、方向θごとにｒｉ（ｊ）の最大値を算出・保持しておくことで、サンプリングを効率的に実施することも可能である。具体的には、処理開始時にはｒＭＡＸ（θ）＝ｒＭＡＸとしサンプリングを開始する。サンプリング処理で、乱数ｒｉ（ｊ）（ｒｉ（ｊ）＜  ｒＭＡＸ（θ））がｒＭＡＸ（θ）近辺に発生した場合はｒｈｉ（ｊ）を算出する。そして、散乱関数Ｓ（ｒｈｉ（ｊ））＝０であるならばｒＭＡＸ（θ）＝ｒｉ（ｊ）と置き換えて、除々にサンプリング範囲を絞り込んでいく。
【００５５】
ステップＳ１００３において、高さ情報を考慮した距離ｒｈｉ（ｊ）と、サンプリング点Ｐｉ（ｊ）における表面反射光の輝度Ｄｉ（ｊ）とから、内部散乱光の輝度ＳＣｉ（ｊ）を算出する。
【００５６】
ステップＳ１００４において、算出した内部散乱光の輝度ＳＣｉ（ｊ）を、ＳＣｉに足し合わせる。ステップＳ１００５では、ｊを１だけ増加させる。ステップＳ１００６では、サンプリング数Ｍとｊを比較し、全サンプリング点での処理が終了したかを判断する。Ｙｅｓの場合、全ての処理を終了し、Ｎｏの場合、ステップＳ１００２に戻り処理を続行する。これにより、各サンプリング点から入射し、点Ｐｉから射出される内部散乱光の輝度を算出することができる。
【００５７】
以上の処理により、バンプマップ法を用いて内部散乱を再現するための処理を実行し、肌の高精度な再現が可能となる。なお、本実施形態では分光を用いた計算手法について記述しているが、ＲＧＢやＸＹＺ、Ｌａｂなどの色空間で実行しても同様の結果を得ることができる。
【００５８】
＜実施形態２＞
前述の実施形態では、法線マップにおける高さ情報に基づいて、内部散乱光の輝度を算出する方法について説明した。実施形態２では、法線マップの高さ情報に応じて複数の散乱関数を切り替えて使用する手法について説明する。
【００５９】
図１２は法線マップの高さ情報をもとに、散乱関数が変化する様子を示した概要図である。図１２（ａ）が示す散乱関数は、高さ情報であるｙが０の場合に用いられる。図１２（ｂ）が示す散乱関数は、高さ情報ｙが１０の場合に用いられる。このように高さ情報ｙが大きくなるにつれ、散乱関数はより小さな値を示すようになる。
【００６０】
本実施形態では、高さ情報ごとに散乱関数Ｓｙ（ｒ）が複数用意され、点Ｐｉにおける高さ情報ｙに応じて、適時必要な散乱関数を用いることにより、各点から射出される内部散乱光の輝度を算出する。例えば、０≦ｙ≦１０の整数のｙ値に相当する散乱関数を用意する場合、１１個の散乱関数が存在することになる。さらに、ｙ＝１．５などの実数値を処理する場合は、各整数の散乱関数を補間して利用する。
【００６１】
散乱関数を切り替える処理について説明する。図１３は実施形態２に適用可能なフローチャートを示す。
【００６２】
ステップＳ１３０１において、変数ｊを０に初期化する。また、画素Ｐｉにおける内部散乱光の輝度ＳＣｉも０に初期化する。
【００６３】
ステップＳ１３０２では、Ｐｉとｊ番目のサンプリング点Ｐｉ（ｊ）の距離ｒｉ（ｊ）を算出する。図１１−ｂのように、
【００６４】
【数８】
0006049327.tif 000009
【００６５】
の式により距離を算出する。
【００６６】
ステップＳ１３０３において、法線マップの高さ情報から、参照すべき散乱関数Ｓｙ（ｒ）を決定し、距離ｒｉ（ｊ）と、各サンプリング点における表面反射光の輝度Ｄｉ（ｊ）から、ＳＣｉ（ｊ）を算出する。ステップ１３０４において、算出した内部散乱光の輝度ＳＣｉ（ｊ）を、ＳＣｉに足し合わせる。
【００６７】
ステップＳ１３０５において、ｊを１だけ増加させる。ステップＳ１３０６では、サンプリング数Ｍとｊを比較し、全サンプリング点での処理が終了したかを判断する。Ｙｅｓの場合、全ての処理を終了し、Ｎｏの場合、ステップＳ１３０２に戻り処理を続行する。これにより、各サンプリング点から入射し、点Ｐｉから射出される内部散乱光の輝度を算出することができる。なお、本手法の他にも、距離ｒｉ（ｊ）と法線マップの高さ情報に応じて、内部散乱光の輝度を取得可能なデータベース（参照テーブル）を用いる手法であっても、同じ効果を得ることができる。
【００６８】
以上の処理により、バンプマップ法によるし微小凹凸の再現をつぶすことなく、内部散乱を再現する処理を実行し、より実写に近いＣＧ生成が可能となる。
【００６９】
＜実施形態３＞
本実施形態では、サンプリング点を用いずに高速に処理する方法について説明する。
【００７０】
図１４はサンプリング点を用いずに肌再現を行う手法を説明したフローチャート図である。ステップＳ１４０１において、注目画素の表面反射光の輝度Ｄを算出する。ステップＳ１４０２において、注目画素の（全分光）放射輝度Ｉを、式２を用いて算出する。その際、サンプリングは行わず、注目画素の周囲画素を用いて計算を実行する。具体的には、注目画素の各周囲画素の表面反射光の輝度Ｄ、微小表面形状を考慮した周囲画素との距離から、内部散乱光の輝度を算出する。周囲画素からの各内部散乱光の輝度を合計して、注目画素の内部散乱光の輝度とする。これを全画素に対し実行する。
【００７１】
以上の処理により、計算量が大幅に削減でき、高速に実写に忠実なＣＧを生成できる。
【００７２】
なお、上述した各実施形態は、以下の処理を実行することによっても実現される。即ち、上記実施形態の各工程や機能を実現するソフトウェア（コンピュータプログラム）を、ネットワークや記憶媒体を介してシステムに供給し、そのシステムのコンピュータ（またはＣＰＵ等）が上記プログラムを読み込んで実行する処理である。上記コンピュータプログラムや、それを記憶したコンピュータ可読記憶媒体も本発明の範疇に含まれる。
【図１】
0006049327.tif 000010
【図２】
0006049327.tif 000011
【図３】
0006049327.tif 000012
【図４】
0006049327.tif 000013
【図５】
0006049327.tif 000014
【図６】
0006049327.tif 000015
【図７】
0006049327.tif 000016
【図８】
0006049327.tif 000017
【図９】
0006049327.tif 000018
【図１０】
0006049327.tif 000019
【図１１】
0006049327.tif 000020
【図１２】
0006049327.tif 000021
【図１３】
0006049327.tif 000022
【図１４】
0006049327.tif 000023
【図１５】
0006049327.tif 000024