ハーフライフ2の続編である「ハーフライフ2 エピソード1」(2006年)では、このハーフ・ランバート・ライティングに加えてそのシーンの光源に対してリアルタイムでフォン鏡面反射(Phong Specular Lighting)を付け加えている。
フォン鏡面反射とは光沢が強く出る鏡面反射の一般形で、法線ベクトル方向と光源ベクトル方向以外に観測者の視線方向にも配慮される陰影処理になる。フォン鏡面反射では視線方向Eと法線ベクトル方向Nの2つから算出した反射方向Rと光源方向Lの織りなす角度θの余弦(COSθ)を求めて、視線から見える光強度と定義している。直観的には図中のRとLの角度が小さくなればなるほど強い反射になるというイメージだ。
人肌に一様にフォン鏡面反射を適用してしまうと金属っぽくなってしまうので、ちょっとした工夫を入れている。
それは、その3Dキャラクタ上の"表現したい物質"がどのくらい強さのハイライト(光沢)を出すのかを表した分布図(テクスチャ)と、どの箇所にどのくらいの強度の鏡面反射を行うのかといった分布図(テクスチャ)を用意し、レンダリング時にはこの2つの情報に配慮してフォン鏡面反射の陰影処理を行うのだ。開発チームではこの2つの追加テクスチャ情報の前者を鏡面反射指数(Specular Exponent)、後者を「鏡面反射マスク」(Specular Mask)と呼んでいたという。
これは例えば唇、鼻、額などは強めのハイライトが出るが、頬や口の周りでは拡散反射が支配的になる……といった分布図になる。この分布図は物理的な測定結果に基づいたものを用いたり、あるいはアーティストがそうした物理測定データを模してリアルに見えるように人工的に作り出したりして用意することになる。
下図はTim Weyrich氏らがSIGGRAPH 2006で発表した「Analysis of Human Faces using a Measurement-Based Skin Reflectance Model」の中に含まれるものだ。縦軸ρsは鏡面反射強度を表し、横軸mは面の粗さを表しており、顔面を10個のエリアに分けてρsとmについての分布をまとめたものになっている。実際の実装ではこうした実測データを参考に分布図を作成をしていくことになる。
顔面10箇所における鏡面反射強度ρs(縦軸)と、面の粗さm(横軸)の分布。「Analysis of Human Faces using a Measurement-Based Skin Reflectance Model」(Tim Weyrich,SIGGRAPH 2006)より |
さらに、フレネル反射にも考慮し、ハイライトの出方を視線と面の向きにも配慮して決定させる。フレネル反射については第54回を参照して欲しいが、簡単に言うと掠めるようにして見ることになる面にはハイライトが出やすく、面に対して視線が垂直に近づけば近づいているところほど拡散反射の結果が支配的になる……というような処理を行うことになる。
こうしてできたハーフライフ2 エピソード1の人物キャラクタの映像は、テクスチャと鏡面反射と拡散反射の組み合わせだけで作ったにしてはかなリアルに見える。(続く)
(トライゼット西川善司)