大局的な皮下散乱はどう取り扱うか

局所的な皮下散乱はなんとかそれなりに再現できた。それでは、大局的な皮下散乱はどう取り扱えばよいのか。

局所的な皮下散乱とは、皮膚上のピクセルに入ってきた光に対する光散乱のこと。

一方、大局的な皮下散乱とは、視点と光源が相対する関係にあって、その間に3D顔モデルがあるような……すなわち逆光のような関係になったときに、皮膚の層の薄い部分から光が滲み出てくるように見えるような現象を指す。言い換えれば、大局的な皮下散乱とは、光源からの光が直接的に3Dモデル全体に対して及ぼす表面下散乱のことだ。

例えば耳のような厚みのない部位は、光が逆光のアングルで耳が光を遮蔽しているような場合でも、光が耳を浸透してこちらに突き抜けてきて、陰影上は"陰"となっている部分にもほんのりと明るくなる。これは皮膚が透明度は低いが半透明材質だからこそ起きる現象であり、これも皮下散乱現象の1つである。

2D空間ベースのボカしによる皮下散乱テクニックでは、人体そのもの(顔そのもの)で遮蔽している向こう側の光についての散乱には対処できない。この大局的な皮下散乱については、人体(顔)の厚み情報をレンダリングしてその厚みに応じた「光の滲み出し」を付加してやることで対処できるとしている。

NVIDIAは、このレンダリングの仕組みを半透明シャドウマップ(TSM:Translucent Shadow Maps)と呼んでいるが、この考え方はNVIDIA GeForce 7800用のデモ「Luna」で活用されたテクニックと同じだ。

この方法では、まず初めに、キャラクタモデルの厚みを算出する。算出法は光源からの深度情報と、視点からの深度情報の差分を取ることで得られる。

レンダリング時にはそのピクセルに対応する、光源方向までの距離、光源方向への厚み情報を参照して、その"厚み値"に応じた光量が漏れてくるようにピクセル色を決定する。具体的には厚み値が小さければ、薄いということなので、背後の光がこちらへ透過して出てくるとして明るめにする。逆に、厚み値が大きければ大きいほど、厚いということで光の透過量は小さくなるし、ある厚さ以上はこちらには全く透過してこない……というようなことにする。(続く)

視点から見て、光源からの光を遮っている遮蔽物の厚みを求める際には、光源からの3Dオブジェクト背面までの深度と、視点から3Dオブジェクト前面までの深度の差分で求まる

そうやって求めた厚み情報を可視化したもの(映像はNVIDIAのデモ「Luna」のメイキング映像の中から)

その情報を元に、背後からこちらへ透過してくる光の量を擬似的に求める

(トライゼット西川善司)