― 特集 ―

Half-Life2のグラフィックスを細かく見てみる

 

ちょっと冷静になってみよう

 

 その卓越した物理エンジンと,リアリティ溢れるグラフィックス表現のデモンストレーションが初めて公開されたのは,2003年5月のE3のこと。同年9月にはATIテクノロジーズ(以下,ATI)との強力なタイアップが発表され,Valve代表が「ハーフライフ2(以下,HL2)の魅力を余すことなく体験できるのは,RADEON9800シリーズだけ」と公言して話題となった。その直後に起こったのは,疑惑の開発ソース流出騒ぎ。結果,当初2003年9月末だった発売日は1年延期される事態に発展した。2003年のPCゲーム業界は発売されもしなかったこのタイトルに,ずっと振り回された印象がある。そんなじゃじゃ馬タイトルも,ついに2004年11月発売となった。

 

 発売前から「最高のグラフィックス」と言われてきたHL2だが,本当にそうなのか。実際に発売となり,やっとHL2パニックも沈静化してきた今,やたら「すごい」と連呼するのではなく,ちょっと冷静になってHL2のグラフィックスを見てみたいと思う。

 

 

HL2の影生成はやや時代遅れ

 

 近年の3Dゲームグラフィックスにおいて,最も盛んに研究が行われているテーマの一つが影生成だ。
 現行のリアルタイム3Dグラフィックスの基本パイプライン(処理系)では,光源からの光がその面にどの程度当たっているか,あるいは当たっていないかの明暗の陰影処理しか行われない。これはPCのGPU(Graphics Processing Unit)でも,家庭用ゲーム機のGPUでも同じ。第三者の遮蔽による影生成はサポートされないのだ。

 

 具体的な例で説明しよう。例えば顔の横から光を当てられた場合を考える。光の方向を向いている頬が明るくなり,反対側の頬は暗くなって影となる……。ここまでの影ならば,現行のパイプラインでサポートされる。しかし,この光を手のひらで遮った場合,現実世界では手のひらの影が,光が当たっている頬の上に落ちるはずなのだが,現行パイプラインでは明るい頬のままとなる。手のひらの影は落ちないのだ。これは,この頬表面の陰影処理において,手が光源を遮蔽しているという情報を知り得ないため。ちゃんとした影生成には,別処理を行わなければならないのだ。

 

 この影生成技法にはさまざまなものが考案されており,現在の3Dゲームグラフィックスでは「DOOM3」で採用された「ステンシルシャドウボリューム技法」,「スプリンターセル」で採用された「シャドウマッピング(デプスシャドウ)技法」が,二大技法として採用されるケースが目立ってきている。

 ステンシルシャドウボリューム技法については,前回の記事に詳しいので,そちらを参考にして欲しい。

 

 シャドウマッピング技法は,光源から見たシーンの深度情報(奥行き情報)をテクスチャなどにレンダリングして,シャドウマップと呼ばれるその光源の遮蔽構造分布を生成し,これを参照しながらそのピクセルが遮蔽されているか否かを判別して最終的なレンダリングを行う仕組みだ。現行3Dゲームでの採用例はステンシルシャドウボリューム技法に比べると少ないが,最近その改良型の研究が各所で行われており,将来的にはこちらの技法のほうがメジャーとなるかもしれない。ちなみに,DOOM3の開発元,id softwareの技術責任者ジョン・カーマック氏は,ついに開発が始まった次世代ゲームエンジンでは,DOOM3とは打って変わって,こちらの技法を採用することを明らかにしている(「こちら」)。

 

 やや前置きが長くなったが,それではHL2の影生成はどうなっているのか。意外にも,高度なステンシルシャドウボリューム技法やシャドウマッピング技法ではない,ごく基本的な影生成技法である「投射テクスチャマッピング」を使ったものであった。

 

 これは3Dオブジェクトのシルエットをテクスチャに生成し,これを光源方向からシーンへ投射するような形でテクスチャマッピングを行う方法だ。最近の影生成技法としては比較的軽めの手法であり,現在でも多くの3Dゲームで採用されている。
 この技法の最大の弱点は,影の投射単位がオブジェクト単位となり,自身の影が自身に投射されるセルフシャドウ表現が行われないことだ。また,影の投射を複数オブジェクトに対して行う場合,例えば地面のほかに第三者の3Dオブジェクトに対しても行いたい場合など,それ専用の処理系を別に実装する必要がある。

 

 HL2では,この技法を使っているためセルフシャドウはなく,しかも影の投射は一律に地面に落ちるのみの簡易系になっている。シーン内の動かない3Dオブジェクト(例えば建物など)の影については,あらかじめテクスチャに焼き込んであり,リアルタイムな影生成は動く余地のあるアクティブキャラクターのみ。最先端のグラフィックスを謳うHL2ならばこそ,ここはもうちょっと頑張ってほしかった。

 

 RTSやRPGのような,比較的カメラが引いた感じの3Dゲームならば,この技法のアラも目立たないのだが,一人称視点のHL2では,プレイ中,各キャラクターが大写しになる機会が多く,その都度,影表現に不自然さを感じてしまう。いくつか例を紹介してみよう。

 

 椅子やテーブルに一切影が出ていないのに,椅子に腰掛けている男性の姿の影のみが床に投射されてしまっている。序盤のシーンでいきなりこれを目の当たりにするので,ちょっとがっくりさせられる。


 このシーンは投射テクスチャマッピングならではの,面白い現象が起きている。ここではテーブルや椅子もアクティブキャラクターなので,影が床に落ちている。これは問題ない。しかし,テーブルの上の鞄も同様にアクティブキャラクターなので,この影も床に落ちている。そしてテーブルの影と鞄の影が重ね描きされた部分は色が濃くなり,テーブルの影に鞄の影が色濃く投射されている。
 正しくは鞄の影はテーブルの上に乗り,床にはテーブルの影のみが投射されなければならない。これは「一様にアクティブキャラクターの影は床に投射」という処理系の表れが,まずい格好で露呈してしまっている例だ。


 階段の踊り場の上でしゃがんでいる敵兵士の影が,あろうことかその下の影にすり抜けて投射されている。HL2の影投射には遮断という概念がないのだ。


 屋外シーンでの,巨大建造物など静的なオブジェクトの影は,テクスチャへの焼き込みの影だ。こうした大局的に投射される影には,ステンシルシャドウボリューム技法やシャドウマッピング技法を使ったゲームでも,この技法が利用されることが多い。


 フライトシミュレータのような,もっとカメラが引いたシーンが主体のゲームでは,テクスチャメモリ節約のために,静的な影を地面を構成しているポリゴンの各頂点カラーに焼き込む場合もある。
 NOVA LOGICの「ジョイント・オペレーション」などはこのタイプだ。写真では,奥のヤシの木の影がこのパターンを顕著に確認できる。


 ボスエイリアンを近接撮影。その大きな頭部の影がボディに投射されるセルフシャドウを期待したいところだが,当然のごとく出ない。地面にシルエットが落ちるのみだ。

 初代「スプリンターセル」(UbiSoft)では,シャドウマッピング技法が使えないGPUでゲームを動作させた場合には,HL2と同じ投射テクスチャマッピング技法の影を使っていたのだが,どの影をどこに投射するかの処理系が非常にうまくできており,シャドウマッピング技法にかなり近い映像を作り出していた。それと比べるとHL2の影生成の処理系は,かなりシンプルなものだといえる。

 

 以前,Valveの取材で「グラフィックスをウリにするゲームとしては,いささか影生成を簡略化しすぎていないか」という質問を投げたことがあったが,これに対しては「エンジン設計におけるトレードオフ上の判断だった。また,さまざまなゲーム制作に用いられる汎用エンジンとして,現時点ではこの技法のほうが扱いやすい」という回答を得ている。

 

 つまり,今後も多くのゲームで透過的に活用できる影生成手法として「投射テクスチャマッピング」を選んだということだ。なるほど,ステンシルシャドウボリューム技法やシャドウマッピング技法は,その表現力は素晴らしいが,調整が難しい。その点この方法は,屋外シーンだろうが屋内シーンだろうが一人称だろうが三人称だろうが,ある一定レベルの「影の存在感」は与えてくれる。
 汎用エンジンとしての宿命ゆえの苦渋の選択……。納得はできるが,最先端のビジュアルを期待していた我々にとっては,やはり残念という気持ちは拭い切れない。


HL2キャラクター達の魅力的な演技の舞台裏

 

 いささか,負のイメージで始めてしまった本稿だが,HL2のグラフィックスには素晴らしい点も多い。その代表格といえるのが,人物キャラクターの演技だろう。
 カットシーン(イベントシーン)において,リアルタイムかつインタラクティヴに演技をするHL2のキャラクター達は,生き生きとしている。また,プレイヤーの自由を奪わずに進行するものの,プレイヤーがどの位置にいてもキャラクター達は自発的に動いて,相対的に適した立ち位置で演技をしようとする。これはなかなか感動的な処理だ。

 

 ドラマチックなイベントシーンを盛り上げる,NPC同士の白熱の演技。キャラとキャラが真剣に演技しているという感じが伝わってくる。

 

 

 この演技システムは,演技進行こそはスクリプトに沿いながらも,絶えず周囲の状況にインタラクティヴに反応して動けるようなAIを,常時バックグラウンドで可動させることで実現できているのだという。
 また,歩きながらの身振り手振りというのも,そうした一連のアクションを一つのアニメーションとして作っているのではなく,「歩く」「身振り手振り」という個別のアクションが指定されたうえで,それを同時に処理することで生成されているのだ。

 

 この画面はHL2エンジンのイベントシーン制作ツールの画面だが,「誰を見るか」「どこに向かって歩くか」「顔を誰に向けるか」「どういう姿勢を取るのか」「どんな身振り手振りか」といった要素を,個別に細かく指定できるようになっている。「誰を見るか」「顔を誰に向けるか」が個別に指定できるということは,顔を向けている方向とは違う人を見る動作もできるわけだ。
 すべてのアクションのオーバーラップや移り変わりには,「キーフレームアニメーション」(ある動作から別の動作に移るとき,その間を自動補間したモーションで繋ぐテクニック)の技術が使われる。
 基本的な身振り手振り(ジェスチャー)はライブラリ化されており,このツール上で,どんなタイミングでどういう身振り手振りを行うかを指定することになる。


 画面下の曲線は,頭部の動きや向きの流れを可視化したもの。ライブラリ化したジェスチャーを選択すれば,そのジェスチャーに含まれる頭部の動きが自動的に指定されるわけだが,この曲線をいじることでライブラリには含まれない別の動きを付加することも可能だ。


 音声ファイルはリップシンク(唇の動きと台詞音声を同期させること)コンパイラを通すことで,その音素にあった唇の動きが自動生成される。これにより,別言語に吹き替えを行ったときにも口の動きが音声としっかり合うことになる。

 

 このあたりは,さすが汎用エンジンとしてのビジネスを考えているだけのことはあり,完成度が群を抜いて高い。
 ところで,このHL2の演技システムが,実際にどのように動いているかを可視化できるコマンドがあるので,所有しているHL2でぜひとも試してみてほしい。

 やり方は,コマンドプロンプトを出して,

 

scene_showfaceto 1
scene_showmoveto 1
scene_showlook 1

 

上記の三つのコマンドを入力するだけ。あるいは「C:\Program Files\Valve\Steam\SteamApps\ユーザ名\half-life 2\hl2\cfg\config.cfg」の最終行に,上のコマンドを書き加えてからゲームを起動する方法でもOKだ。
(※すべてサポート外です。自己責任で行ってください)
 すると,各キャラクターがどこを向いているか,どこに移動するかのスクリプト上の指定が"矢印"や"四角形"によって表されるようになる。

 

 これをオンにしたままゲームプレイするのも,なかなか楽しいかも?

 

 

HL2の顔,人物キャラの顔

 実際に出来上がった演技はゲーム中で見ての通り。とてもしっかりしており,誰が誰にどういう感情を持っているのかが良く伝わってくる。この感情表現の巧さに大きく貢献しているのが,顔の表情のリアリティだ。

 

 HL2ではキャラクターの表情制御に,カリフォルニア医大の精神医学教授であり,心理学の分野でも著名なPaul Ekman博士の理論を実装している。
 これは簡単に言うと,多彩に見える人間の表情も,顔の筋肉のいくつかの代表点をどう動かすかの組み合わせで大抵は表現できるというもので,ロボットの表情付けなどにも応用されている理論だ。

 

 HL2の演技システムでは,モーションキャプチャによるモーションデータではなく,この理論に基づいた算術的な顔モデルの変形を行うことで表情を作り出している。「悦び」「悲しみ」といった基本的な感情表現の度合いはパラメータ指定で与えられ,さらにアゴや口,眉などの動きに変化を付けられる。

 モデルが高精細化し,その細部までが見えるようになっていくなかで,この表情表現というテーマは今後,重要度を増していくはずだ。

 

 生きているかのような微妙な表情変化を算術的に付けられるのは,HL2エンジンの旨味の一つ。

 

 さてもう一つ,顔の表現といえば「スキンシェーダ」というキーワードを思い出す人も多いだろう。これは文字通り,人間の皮膚(Skin)をリアルに陰影処理するためのシェーダの総称だ。

 

 人間の皮膚は,表面の反射による陰影だけでなく,皮膚下に浸透した光が散乱して独特の輝きを放つ。光がたとえ皮膚の向こう側にあった場合でも,その光が皮膚下に散乱することから,本来ならば"陰"となるはずのところも鈍く光って見えたりもする。手のひらを光にかざしたときなどが,その最たる例だ。
 これが皮膚の一種独特な透明感となるわけだが,これを3Dグラフィックスでやるためには「面下散乱」(Subsurface Scattering)という処理系を実装しなければならない。これは非常に重い処理系なので,実際のリアルタイムの3Dゲームグラフィックスで実装された例はほとんどない。ATIのRADEON X800シリーズ用「RUBYデモ」の簡易スキンシェーダは,これをまともにやったものではなく,大胆に簡略化したフェイクであった(効果が大きかったのは事実)。

 

RUBYの簡易スキンシェーダ「オフ」の映像
RUBYの簡易スキンシェーダ「オン」の映像

 

 では,HL2ではどうなのか。

 

 これもValveについて聞いてみたところ「HL2では特別なスキンシェーダは用いていない」とのことだった。とはいえ,HL2の人物キャラクターの皮膚の質感には,なかなかのリアリティがある。通常ではプラスチック的な質感になりがちなのだが,それも適度に抑えられている。これはどうしてなのか。

 

面下散乱の処理はやっていないとはいえ,柔らかい陰影が見る者の脳内に透明感を感じさせる。鼻筋や頬の柔らかいハイライト感は,かなり「肌のそれっぽさ」が表現できているといえよう。

 

 Valveはこれについて「キャラクターの肌の陰影処理はHalf-Lambertシェーダを独自チューニングしたものを用いている」と説明する。
 Half-Lambert反射自体は,拡散反射モデル(光がある係数で一様に拡散吸収される反射モデル。例→つや消しプラスチック)の一種だが,視線角度に依存した反射特性を持つ。
 具体的には視線方向と光源方向の位置関係によって,鏡面反射(光源の入射角度と視線角度がその面の法線に対して等しいとき,強い光沢が現れる反射モデル。例→ビリヤードの球)よりも柔らかなハイライト効果が現れるのが特徴で,木材や象牙,粘土などの質感の表現によく用いられる。さらに,シワやそのほかの顔面上の微細な凹凸は,法線マッピングで表現されている。
 HL2の人物キャラクターの皮膚がややリアルに見えるのは,そうしたトータルなテクニックによるものなのだろう。

 

 また,Valveによれば「人肌のテクスチャの彩色についても,なるべく血の気の感じられるように気を使い,陰影処理で影となったときにも,あまり青っぽくならないように配慮してある」とのこと。どうやらシェーダだけではなく,デザイナーの"技"もリアリティ向上に一役買っているようだ。

 

シワや髭の表現は,法線マッピング(バンプマッピング)によるもの。同種のテクノロジは「FarCry」などでも使われていたが,HL2のほうが表情が豊かなぶんリアリティがある。

 

 後編となる次回は水面の処理,ハイダイナミックレンジレンダリング,法線マッピングなどについて見ていくことにしたい。(トライゼット 西川善司)

 

「Half-Life 2」
 →日本語公式サイトは「こちら」

 →紹介ページは「こちら」

 

  次へ

 

(C) 2004 Valve Corporation. All rights reserved. Valve, the Valve logo, Half-Life, the Half-Life logo, the Lambda logo, Counter-Strike, the Counter-Strike logo, and Source are registered trademarks and/or trademarks of Valve Corporation in the U.S. and/or other countries. Sierra and the Sierra logo are registered trademarks or trademarks of Sierra Entertainment, Inc. in the U.S. and/or other countries. Vivendi Universal Games and the Vivendi Universal Games logo are trademarks of Vivendi Universal Games, Inc. in the U.S. and/or other countries. All other trademarks are property of their respective owners.