【レポート】

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

5 "リアル系"3Dグラフィックスに必要な要素

    西川善司  [2007/01/01]

    「Sourceエンジンの陰影処理は、極力、イメージベースドライティングやラジオシティに近いソフトなライティングでリアリティを出すために工夫をした。」(Jason Mitchell氏)

    先ほどのラジオシティ法線マップは、拡散反射系のライティングの実装だった。これと対極をなす(?)ライティングは、鏡面反射(Specular Lighting:スペキュラ・ライティング)だ。これも考慮しなくてはリアルにならない。なお、鏡面反射とは、明解な光沢(ハイライト)を出すもので、例えば100%に近い鏡面反射は鏡やツルツルに磨き上げられた金属面など。

    Sourceエンジンではこの鏡面反射について、前述のラジオシティ法線マップと親和性を高くするために、キューブ環境マップ(Cube Map)を用いたライティングを実装している。キューブ環境マップとは、6面からなる立方体構造のテクスチャマップのことで、ある点から見た全方位の情景をテクスチャにレンダリングしたもの――と思えばいい。

    そのシーンに登場する各3Dオブジェクトには、貼り付けられる画像テクスチャの他に、その材質をそれらしく見せるための、光沢が発生しうる分布を表したテクスチャ――すなわち「スペキュラマップ」も用意される。実際のレンダリング時には、動的な光源とのライティングの他に、そのピクセルがスペキュラマップ内にあれば反射ベクトルを求めてキューブ環境マップを参照するような簡易系イメージベースドライティングを行う。

    そのシーンが広い場合は、キューブ環境マップが1つでは不自然なテカリや映り込みが出てしまうので、複数のキューブ環境マップを生成しなければならない。パフォーマンスを稼ぐ意味合いと、大局的なキューブ環境マップは事前計算しておいても違和感が出ないという判断から、ゲーム起動時などにオフライン事前計算して直前に生成している。

    Sourceエンジンにおけるワールドのスペキュラライティングはスペキュラマップとキューブ環境マップを用いたものが主体のようだ

    シーンエディタでどこにいくつキューブ環境マップを生成するかを指定できる

    「シーンはどんな地形か」「どこに鏡面反射のオブジェクトが配置されるか」「観察者となるプレイヤーは、どう動く可能性があるか」――などに応じて、このキューブ環境マップの生成個数や、生成する基準点が変わってくる。そこで、これについては、開発時にシーンエディタでアーティストが指定できるようになっているという。

    これによって真っ平らな壁に貼られた煉瓦も位置によってハイライトの色や出方が微妙に異なり、しかも視線の向きを変えたり、視点位置を移動したりするとこのテカリ具合も変わってくる。地味で意識しなければ確実に見過ごしてしまいそうなところだが、これはこれでかなりリアリティ向上に貢献している部分だ。

    実際のエンジンでは、このスペキュラライティングと前出のラジオシティ法線マップとは融合した形に実装されており、このフロー図は以下のようになっている。

    ラジオシティ法線マップによる拡散反射のみ

    キューブ環境マップ+スペキュラマップの鏡面反射のみ

    両方を同時に適用した場合。光沢の出方が位置によって違う

    フロー図

    といったところで、「前編」はここまでである。続く「進化するHalf-Life 2エンジン(後編)」では、Half-Life 2の3Dグラフィックスの話題の中でも特に重要な「HDRレンダリング」技術に関する最新解説をはじめ、Half-Life 2エンジンを取り巻く状況を"更に深く"レポートする。もう少しだけお付き合いいただければ幸いだ。

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

    関連記事

    関連サイト

    新着記事

    特設サイトの情報

      人気記事

      一覧

      新着記事

      特別企画

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