― 特集 ―

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

 

いまやPCゲームでは当たり前のように活用されるバンプマッピング

 

 「ハーフライフ2」(以下,HL2)は,影生成技法こそ前時代的だったが,ディテールの表現には積極的に「バンプマッピング」が使用されており,ディテール表現については文句なく近代レベルに到達している。
 具体的には,前回ちょっと触れたが,人物キャラクターのシワや髭の表現,背景の壁などの微細な凹凸表現,異生物キャラのグロテスクな皮膚のイボイボ感など。プログラマブルシェーダベースのGPUならば,この表現をゲーム中の至る所で見られる。

 

 これはどんな原理で動作しているのかを簡単に解説しておこう。
 「バンプマッピング」は,最近ではとくに「法線マッピング」を使った技法がよく使われる。これは凹凸を構成する微細な面の向き「法線ベクトル」をテクスチャとして格納し(これをとくに法線マップという),最終的なレンダリング時のピクセル単位の陰影処理を行うときに,この法線マップから取り出した法線ベクトルを,視線と光源の位置関係に配慮した陰影処理に使うことで,「見た目に凹凸があるかのような」映像を作り出すものだ。

図A

 簡単にいえば,実際には真っ平らな平面のままなのに,そこに凹凸があるようにピクセル単位に陰影処理を行うので,見た感じ凹凸があるかのように見せる「フェイク技」ということになる。その概念図を図Aに示す。

 

 その凹凸がいかに大きくデコボコに見えても,実際には平面なので,そこに当たり判定を持たせるのは難しい。まさに見た目だけの表現であり,ゲーム性に関与しない目的で使われるのが一般的だ。
 また,バンプマッピングは実際には平面のままなので,この表現をしている面に近寄るとそれがフェイクであることがばれてしまう。しかし,このあたりについては,改善案も研究されており,バンプマッピングの発展形である「パララックス(視差)マッピング」と呼ばれるテクニックを用いることで,ある程度ごまかすことができる。
 これは,凹凸の高いものが手前のほうに見えてくるといった,バンプマッピングに奥行き感を強調する処理を加味するもので,具体的には,バンプマッピングでは切り捨ててしまっていたハイトマップ(上図参照)を用いて,凹凸の高低情報を陰影処理に持ち込むものだ。視線をずらすと凹凸がある程度の奥行きを持った形で見え方が変わるので,近づいても本当に凹凸があるかのように見える。とはいえ,いくら「そのように見える」とはいっても,その面に対して水平に近い真横から見れば,実際に凹凸がないので真っ平らである(凹凸はない)ことは露呈するわけだが。
 ちなみにパララックスマッピングを「バーチャル・ディスプレースメントマッピング」という"カッコつけ"なネーミングで呼ぶこともあり,実際,EPIC GAMESの「Unreal Engine 3.0」では,この名前でインプリメントしている。なお,HL2ではパララックスマッピングまでは実装されていない。

 

奥の煉瓦の凹凸がバララックスマッピング(バーチャル・ディスプレースメントマッピング)によるもの。影が投射されているのは本当に出っ張っているもの

 

HL2において最も目立つバンプマッピング活用例といえるのが,こうしたキャラクターのディテール表現への適用だ。ここで示した画面のような,異生物のボツボツした気味の悪いレリーフ状の模様表現には,必ずといっていいほどバンプマッピングが使われている

 

前編のフェイシャル表現の項でも少し触れたが,HL2の人物キャラクターのシワや髭の表現もバンプマッピングによるものだ

 

 

 ゲームオプションの「設定」-「ビデオ」の「詳細」の設定項目「テクスチャの詳細」では,その名の通りテクスチャの解像度を決定づけるだけでなく,バンプマッピングの品質にも影響を及ぼす。これはHL2ファンは知っておいて損はない情報だと思う。「低/普通/高」の3段階の調整が行えるが,その設定がバンプマッピングの見た目にどのように関わってくるのかを以下に示す。

 

 

「低」にしてしまうとバンプマッピングは完全にキャンセルされてしまう。古めのGPUでフレームレートを稼ぎたいときには仕方ないが,できれば避けたい

 

バンプマッピングが適用され,テキスチャの解像度も若干上がる。プログラマブルシェーダ1.x世代のGPUでは,これ以上は設定しても効かないか無視される

 

テクスチャおよびバンプマッピング用の法線マップも高解像度化する。このビジュアルの味を知ってしまうと,もう「普通」以下には戻れないだろう

 

 HL2におけるバンプマッピングの使用の傾向として,キャラクターには惜しげもなく使っているのに対し,あまり背景の壁などには使っていない,というのが感じられる。キャラクターが画面にいるときは見栄えのある画になるが,背景だけを見たときには「DOOM3」や「FarCry」などと比較しても結構地味な画に見えるのは,そうした特性によるものだろう。そのぶんHL2は,その2タイトルと比較して総じてグラフィックス的に軽い処理系となっているわけで,結果,メインストリームクラスのGPUでもかなり快適にプレイできる。「どちらが良い」という判断を下すのは難しいところだ。

 

 

HL2の水面表現(1)〜基本概念は環境バンプマッピング

 

 HL2をプログラマブルシェーダベースのGPUでプレイしていると,序盤からその水面の表現の美しさに目を奪われることだろう。

 

美しいHL2の水面表現

 

 HL2の水面表現は確かに,3Dゲームのリアルタイムグラフィックスのものとしてはトップレベルのビジュアルだ。少なくとも,あの影表現のシンプルさと比較すれば,雲泥の差で手の込んだものだということは間違いなくいえる。
 細かく見ていくと,この水面の表現自体は,いくつかのシェーダーの"合わせ技"によって実現されていることが分かる。何をどう"合わせ技"しているのかを,ちょっと見ていきたい。
 水面上のさざ波は,突き詰めていってしまえば細かい凹凸だ。これをポリゴンベースで表現するのは,いくらなんでもしんどいので,これは「動的な環境バンプマッピング」というテクニックを使うことになる。
 バンプマッピング自体は前段で解説済み。この頭に「環境」という言葉が付くとどうなるか。
 通常のバンプマッピングでは法線マップから取り出した法線ベクトルと視線ベクトルをもとに,ピクセル単位の陰影処理を行うだけであった。環境バンプマッピングではこれに加え,取り出した法線ベクトルと視線ベクトルから反射ベクトルを算出し,これをもとに環境マップを適用する処理が追加される。環境マップを適用する……これはすなわち,映り込み表現を行う「環境マッピング」のことにほかならない。

 

車のボディに周囲の情景が映り込んでいる。これが環境マッピングの代表例ともいえる表現。このように光沢の強い材質表現やクロムメッキの雰囲気を出すときに用いられる

 

 

 環境バンプマッピングは,言ってしまえばバンプマッピングと環境マッピングを同時に行ってしまうものと考えればいい。つまり,細かい凹凸にも周囲の情景が映り込むので,周囲の情景がさざ波で歪められた表現が得られるわけだ。

 

環境バンプマッピングの例。一つ一つの凹凸に配慮した映り込み表現がなされる

 

 

HL2の水面表現(2)〜さざ波の動きは波動シミュレーションで。
ただしインタラクティブ性はなし

 

 当たり前だが,さざ波の凹凸が常に固定だと,リアルに見えない。HL2では,このさざ波を,波動シミュレーションで動的に動かすことで,非常にリアルな水面表現を実現させている。

 

「3DMark2001」の「NATURE」テストの水面表現では,この固定凹凸のさざ波をスクロールさせることで水流があるように見せていたが,今見るとかなり陳腐な手法に思える

 

 

 さざ波を動かす。これはすなわち微細な凹凸を動かすということになる。さらに具体的にいえば,これはバンプマッピング用の法線マップ自体をアニメーションさせることになる。
 さざ波を動かす波動シミュレーション自体に,どんなアルゴリズムが採用されているかは不明。おそらく,この種の表現では定番的に使われている,現在のハイトマップの状態と前のハイトマップの状態の差分情報からライフゲーム的に計算できるVerlet積分を使ったものだと思われる。
 直接,法線マップを波動シミュレーションに従ってアニメーションさせるのは困難なので,通常は波動シミュレーションでハイトマップを動的に生成し,これをさらに法線マップへと変換する,という手順を踏むことになる。

 

 残念ながら,HL2のさざ波の波動シミュレーション自体にインタラクティビティは皆無で,水面を銃で撃とうがボートが走ろうが,さざ波のアニメーション自体にはまったく影響がない。"さざ波"よりも高位となる水面自身の揺れもない。
 また,さざ波の動きを全体的によ〜く見ていると,同一の動きをしている箇所が周期的に点在していることに気付く。その意味では,かなり小さめな規模のシミュレーションのようだ。

 

一番分かりやすいのは,やや引いた位置から水面を観察すること。波動シミュレーションの規模が一目瞭然だ


水面に近い位置でも,しばらく見ていると同一の動きに気が付く。これを分からなくするには,環境バンプマッピングによるさざ波だけでなく,水面そのものを実際に摂動させるジオメトリレベルでの波動シミュレーションを行えばいい。HL2ではそこまではやっていない

 

 また,水面の動きそのものについては,HL2でも,かなりの妥協が見られる。

 

銃弾を水面に撃つと水しぶきが上がり,輪状の波が広がっていくアニメーションが見られるが,これは水面のさざ波とは無関係なテクスチャアニメーションによるもの

 

 

HL2の水面表現(3)〜水面の透明感を出すためのフレネル反射

 

 「動きのある法線マップで環境バンプマッピング」……これだけでは水面というよりも,"水銀"みたいな表現になってしまう。水と水銀の違いは何かといえば「透明感」だ。
 汚濁した水の表現は,それはそれで奥深いものがあるのだが,それは置いておくとして,綺麗な水は透明であり,そのため,ある条件下で水面下の情景が見える。逆にある条件では水底の様子はまったく見えず,水銀のように周囲の情景が映り込む。このインタラクティビティが,水面の"水"面たる表現のリアリティに深く関係しているのだ。
 実際に大きな水たまりの近くに行ってみると分かるが,自分の位置に近い(視点に近い)水面は水底が見えるのに,視点から遠くなるにつれて水底よりも周りの情景の映り込みが強くなっていることに気づくだろう。

 

プレイヤーの近くでは水底がよく見え,遠ざかるにつれて映り込みの度合いが強くなっている。これが水面特有の透明感という実感に結びついている

 

 これがフレネル反射(Fresnel Term。Fresnelはフランスの光学物理学者)だ。実際にはもっと複雑な演算が行われるのだが,概念的には視線と水面のなす角度が直角に近ければ近いほど水底を映し,角度が鋭角になればなるほど周囲の映り込みのほうが強く見えるような処理が行われる。
 具体的な処理系では,水面のピクセルをレンダリングするとき,すなわち,さざ波の環境バンプマッピングを行う場合に,視線とさざ波の法線ベクトルをもとにフレネル方程式を計算して,その結果に則った映り込みの映像と水底の様子の混ぜ具合にすればいいことになる。

 

 ところで,HL2では,よく見ると水面上のさざ波の凹凸に周りの情景が歪むのと同様に,水底の様子もさざ波の凹凸に影響されて歪んでいるのが分かる。
 これは,あらかじめレンダリングした水底をテクスチャとし,水面上のさざ波の各ピクセルを描画するときに,そのさざ波の高さなどでテクスチャアドレスを摂動させるという,古典的かつ簡易的な疑似屈折技法が用いられているようだ。

 

まっすぐな棒が斜めに水面に突き刺さっているシーン。本当の屈折が配慮されているならば,視線が水面を境に折り曲げられ,結果,棒は水面を境に折れ曲がって見えるはずなのにそう見えていない

 

 

HL2の水面表現(4)〜設定によってどんな違いがあるのか

 

 まとめると,HL2の水面表現は,以下のシェーダ処理から成り立っているということになる。手の抜けるところはしっかり抜いて,ゲーム向きの実装をしているといえる。

 

・波動シミュレーションに従って動的にハイトマップを更新
・フレネル反射を考慮した環境バンプマッピング+簡易屈折表現

 

 さて,HL2のオプションには,この水面の表現専用の設定オプション,「水の詳細」が設けられている。この設定で,どのような表現の違いが出てくるのか,今度はこれに付いて見てみよう。
 用意されている設定は「簡易モードの影」「ワールドを反射」「すべてを反射」の三つ。

 

「簡易モードの影」 「ワールドを反射」 「すべてを反射」

 

 今回,筆者が手持ちのビデオカード数種で確認した限りでは「簡易モードの影」と「ワールドを反射」とで,これといった差異が認められなかった。

 

 一方,「ワールドを反射」以下と「すべてを反射」との違いは歴然で,水面に対して反転した位置に視点を逆転移動させてレンダリングする映り込み用のテクスチャ(反射マップ≒環境マップ)の精度が全然違う。「ワールドを反射」では,反射マップに描画されるオブジェクトが非常に限定的になるのに対し,「すべてを反射」では文字通り,シーン中のすべてのオブジェクトが描画されるようになる。
 この画面でいえば「ワールドを反射」では水面の外にある背景物だけが反射マップとして採用されているのに対し,「すべてを反射」では水面上にある柱や船のすべてに至るまでが反射マップに現れている。
 なお,プログラマブルシェーダ1.x世代のGPUでは,実質的には「ワールドを反射」までの設定が効き,「すべてを反射」は設定しても効かないか無視される。

 

 

ハイダイナミックレンジレンダリング
〜HL2のHDRレンダリングは本物か?

 

 HL2は,わざわざハイダイナミックレンジレンダリングのテクノロジデモをゲームとは別に公開するほど,これにこだわりを見せていたわけだが,果たしてそのクオリティはどんなものなのだろうか。

 

 まずは「ハイダイナミックレンジ」(HDR:High Dynamic Range)という言葉の意味だが,これは概念的には,「非常に表現幅の広い」というようなイメージになる。つまりHDRレンダリングとは,「レンダリングを表現幅の広い数値表現で行う」という意味になる。
 現実世界は,PCにおいて標準色表現として採用されている1677万色の24ビットカラー以上の白よりまぶしい光(色)で満ち溢れている。我々人間は,このハイダイナミックレンジ(HDR)な光に満ち溢れた現実世界を,瞳孔の大きさを変えることで,適正と思われる基準の明るさに調整して見ているのだ。この仕組みをリアルタイム3Dグラフィックスで実現しようとするのが,HDRレンダリングのトーンマッピングだ。

 

 実際のHDRレンダリングの処理系では,以下のような流れになる。

 

1.陰影処理演算結果をハイダイナミックレンジかつ高精度に行う
2.ディスプレイに表示できる32ビットカラーに丸め込んだり(トーンマッピング),人間やカメラがそうしたHDR映像を見たときに起こす視覚現象を擬似的に付加する(ポストエフェクト処理)

 

 当初,HL2は「浮動小数点実数バッファにHDRレンダリング」「結果はトーンマッピングされて,露出のシミュレーションも行われる」といった触れ込みだったのだが,結果的にはオーソドックスな疑似HDRレンダリングの範囲内に収まってしまったようだ。
 強烈な光の輝きにより,ジオメトリ状の奥行き関係を超越した光の溢れ出し効果である「ライトブルーム効果」は,屋外シーンでは随所に見られる。

 

疑似HDRレンダリング表現の定番となったライトブルーム効果。グレア効果とかライトブリーディング効果と呼ぶこともある

 

 太陽光がHDR光源として設定されているようなのだが,その水面に反射した太陽光はすでにライトブルームを起こさなくなっており,シーンすべてがHDRレンダリングというのはどうもあり得ない感じだ。

 

水面に映り込んだ太陽が既にHDRでない。HL2のHDR表現は直接光止まりであり,いわゆるHDR光源によってHDRレンダリングされたシーンというものはなさそう

 

 

 HDRレンダリングといえば,もう一つの醍醐味となるはずのトーンマッピングによる露出シミュレーションにも期待したのだが,これも最後までゲームをプレイしても,そうしたシーンには遭遇できなかった。ゲーム中盤で,

 

 

 こんな感じの,HDRレンダリングとトーンマッピングによる露出シミュレーションをやっているような演出もあり,

 

 そのまま屋外の明暗のコントラストが激しいシーンになるので,かなり期待させられたのだが,日陰の……

 こうした場所に入っても,目が慣れてきて明るく見えてきたりするような効果はまるでなく,ずっと見にくく暗いまま。外の太陽がHDR光源として設定されていれば,たとえ日陰でも十分明るいはずで,最初は日向の明るさから日陰に来たことで暗く見えてはいるが,すぐに瞳が広がって(トーンマッピングによる露出シミュレーションで)明るく見えてきて然るべき。

 このシーンも同様で,太陽がシーンに入ってきているときは,この明暗で正しいと思うのだが……

 このように,しゃがんで太陽を見えなくしても暗いままとなる。露出シミュレーションは行われていないと断言できよう。

 

 「HL2は世界初の本当のHDRレンダリングに対応した3Dゲームだ」という触れ込みは,残念ながら幻であったようである。

 

 

あれ? なんかおかしい屋外シーン

 

 このほか,HL2を通してプレイして気になったのは,屋外シーンにおける描画境界付近の処理のいい加減さで,描画境界のごまかしには,今や時代遅れ感の漂うレガシーなフォグ機能を活用しているのだ。

 

 遠くに見える丘のあたりが描画境界。その奥はフォグでごまかし。さて,ここでお立ち会い。視線の延長線上には大地しかない。

 ところが,まったく同じ立ち位置,視点位置のままで,ズームスコープを使って見ると,なぜか突然,廃船が出現する。

 そこに向かって歩き出してみると……。この画面をよく見てほしい。地形は完全にしっかりと描かれているのに,その廃船は薄く半透明で描かれ始めるのだ。そして歩み寄るにつれてだんだんと色濃く描かれていく。

 

 同じ屋外シーンを取り扱ったFarCryを見たあとだと,さすがにHL2の屋外シーンは否応なしに前時代的な雰囲気を感じてしまう。

 

まとめ

 

 前編,後編に渡って「冷静になって」HL2のグラフィックスを見てきたわけだが,通して感じられるのは,先進的な部分と前時代的な部分とが折り混ざっているという点だろう。
 ゲームそのものは,文句なしの出来映えでエンディングが難解であることをのぞけば満足の行くプレイ体験ができることは保証する。だが,2003年当時は最先端といわれたグラフィックスは,発売時期が1年延びたことにより,進化の早いPCグラフィックスの世界では,もはやその先進性をアピールできなくなってしまったことは残念だ。
 時間を掛ければ掛けるほど良いものができるのは,物作りの定説ではある。しかしコンピュータゲームの場合は,どうにも「出し時」というのはありそうな感じだ。技術の先進性がゲームの面白さの本質ではないが,技術の先進性がゲームの面白さに影響するタイトルでは,その先進性がアピールできなくなったときに面白さに色褪せを生じることはあるだろう。HL2の場合はそんな「色褪せ」を感じさせないほどのエンターテイメント性が盛り込まれていたので,トータルで見れば問題なしではあったのだが。
 ちょっとまとめが暗くなってしまったので,最後にちょっとした面白いエピソードを紹介したい。

 

 これはHL2のエンディングクレジットの協賛企業一覧なのだが,やはりというか当然というか……「NVIDIA」の名前がないのだ。このことについて,サンノゼのNVIDIA本社の某副社長クラスの人間に冗談半分で聞いてみると,「わっはっは。我々はそこに名前を載せることには興味なかっただけだよ。もちろんHL2はちゃんとGeForceでも動くから安心してくれよ。」とのお答え。
 ふむ。なかなかかっこいいセリフだが,そんなNVIDIAも「ENTER THE MATRIX」じゃ,

 

 こんなことをやっていたんだけど。
 夢のあるコンピュータゲームの世界にも,「大人の事情」はあるんです。

 

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

 

 

 

「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.