【レポート】

進化するHalf-Life 2エンジン(後編)

1 動的キャラクターのライティング

    西川善司  [2007/01/01]

    進化するHalf-Life 2エンジン(前編)」に引き続き、Valveが開発した「Half-Life 2エンジン」こと、Sourceエンジンのグラフィックス技術の最新状況についてレポートしたい。なお、一応、前編・後編どちらから読んでも問題ない構成とはなっているが、トピックの概要などは前編で述べているため、できれば「前編」からお読みいただくことをおすすめする。さて、本稿では、Sourceエンジンが実装する"特別なライティング"から解説して行こうと思う。

    ハーフ・ランバート照明とは?

    2004年のHalf-Life 2の時から、Sourceエンジンでは、敵キャラクタなどの動く動的なキャラクタについては、特別なライティングが行われていた。それがハーフ・ランバート照明(Half Lambert Lighting)だ。

    ランバート照明は拡散反射の陰影処理のよく知られた一般系で、視線方向に依存しない光源の入射方向と面の向き(法線)だけで算出される陰影処理技法だ。この技法では「その地点の明るさは、面の向きと光の入射方向が織りなす角度θのCOSθに比例する」という「ランバートの余弦則」が定義されているが、実際にこれでライティングすると明暗がかなり強烈に違って出てしまう傾向にある。

    ランバートの余弦則

    Sourceエンジンでは、ラジオシティライクな拡散反射表現を実践するために、このドラスティックに変化するコサインカーブにバイアスをかけて暗部階調を持ち上げる工夫をした。ランバートの余弦則のコサインカーブが半分になるように"1/2"を掛けて"1/2"を足して、さらにこれを二乗して緩やかなカーブに変換して陰影処理を行うから「"ハーフ"・ランバート照明」というわけだ。

    これは「物理的には全く正しくない」とJason Mitchell氏も認めるが、「陰影が失われて平面にしか見えない通常のランバート照明よりも、こちらの方が視覚上、現実的で自然に見える」とも述べ、この簡易的な疑似ラジオシティ技法は採用されることになったのだ。

    ハーフランバート照明

    さらに、Sourceエンジンでは、動的キャラクタモデルに対するラジオシティライクなライティングとして放射輝度ボリューム(Irradiance Volume)技法と呼ばれる、一部のゲームでは既に採用されている簡易間接光表現技法を実装している。

    放射輝度ボリュームとは、名前こそたいそうな感じがするが、そのシーンの環境光の立体的な分布を数値テーブル化したものを、適宜取ってきて、その環境光を動的キャラクタのライティングに配慮するというものだ。Half-Life 2では大体のキャラクタの平均体積でもあるW120cm×D120cm×H240cmの間隔ごとに区切り、その領域(ボリューム:Volume)1つ1つに対し、どんな光が入ってくるのか(出ていくのか)をオフラインで事前計算してデータテーブル化している。

    リアルタイムレンダリング時には、そのキャラクタがいる場所に対応するボリュームを参照して、そのボリュームに入ってくる6方向の光を取得して、これらを方向を持った環境光として処理してやる。こうすることで、定数的な単一の環境光で階調を持ち上げるのとは異なり、シーンに溶け込んだ環境光ライティングが実現されるのだ。このボリュームをVALVEでは「環境キューブ」(Ambient Cube)と呼んでいてたとしている。

    環境キューブ(アンビエントキューブ)の概念

    リアルタイムレンダリング時に環境キューブから取得された6つの環境光はシェーダプログラムでは6つの定数値としてロードされるようにしている。

    この方法では、6個分の定数光を取り扱う疑似間接光照明技法になるが、計算量的にもデータ量的にも2項までの球面調和関数(Spherical Harmonics)を使った事前計算放射輝度伝搬(Precomputed Radiance Transfer)よりも簡素で軽い(球面調和関数では2項だけでも9個の係数が必要)。

    「結果の精度は軽さを考えれば、まずまずといったところ」(Jason Mitchell氏)とのことで、なるほど、球面調和関数を用いた技法と比べるとかなり大ざっぱになってしまっているが、まぁ、少なくとも不自然さはないという印象を受ける。間接照明技術としては、とんでもなく簡易的ではあるが、何もしていない多くの平均的な3Dゲームグラフィックスの表現と比べると、陰影が柔らかく、そのキャラクターが光に満ちたところに存在しているということは伝わってくる。

    左端が光源の分布。中央がこれを球面調和関数でライティングした結果。右端がVALVEの環境キューブ法でライティングした結果

    上段が一般的なランバート照明+定数環境光源による結果。下段がValve式のハーフランバート照明+環境キューブによる結果。Valve式の方が明暗が平均化されて柔らかい印象になっている

    テクスチャを有効にしたときの比較

    別シーンでの比較

    新着記事

    特設サイトの情報

      人気記事

      一覧

        新着記事

        特別企画

        マイナビニュースマガジン