― 連載 ―

タイトル

 2005年5月に開催されたE3 2005(E3:Electronic Entertainment Expo)で電撃的に公開された「Half-Life 2: Lost Coast」(以下HL2LC)が,2005年10月下旬になってとうとう公開された。今回はこのHL2LCを採り上げてみたいと思う。

HL2LCはHDRレンダリング技術のショーケース

HL2LC唯一の新キャラ「漁師のおじさん」。プレイヤーに街を救ってくれと依頼してくる

 HL2LCは,「ハーフライフ2」(原題 Half-Life 2,以下HL2)を購入して,Valve Softwareのオンラインサービス「Steam」のIDを取得していれば,Steamを介して無料で入手可能となっている。

 HL2LCについては,E3 2005で,崖を舞台に,敵兵と打ち合うデモシークエンス(あらかじめ用意されたスクリプトに従って,実際のゲーム内で動作するデモ。ムービーとは異なる)が繰り返し再生されていたのを紹介しているから,覚えている人も多いだろう。正式公開版では,プレイヤーの操作によってこのマップ内を自由に移動でき,登場する敵を自分なりの戦法で倒すことができるFPSになった。

ゲームそのものは,特別にどうということもない,ごく普通の銃撃ミッションという様相だ

 ゲームシステムはHL2そのまま。新要素や新兵器などはとくに追加されていない。ラストシーンの近くにはちょっとした謎解きがあって,これをクリアすると(キャラは使い回しだが)ボス的なものも登場する。
 ステージはこの崖のシーンのみで,このボスを撃破しても,次のミッションに進んだりはしない。これが全部である。サクサク進めば30分程度でクリアできるから,ゲームファンの立場からすれば,HL2LCはHL2の無料追加ミニミッションといったところだろうか。

 HL2LCはそもそも,次世代HL2エンジンのためのテクノロジーデモというスタンスで作り込まれていた。だから,それ以上でもそれ以下でもない,というわけである。

 ならHL2LCはいったい,何のテクノロジーを見せるためのデモだったのか?
 結論からいえば,それは「HDRレンダリング」ということになる。
 HL2LCのアピールポイントは,まだ実装例の少ない,本当のHDRレンダリングを実装したことに尽きるのだ。

HDRレンダリングって,いったい何?

 HDRレンダリングのHDRとは,High Dynamic Rangeの略。定義だけを簡単にまとめると「RGB各8ビットの1677万色にとらわれず,幅広い表現域を用いてレンダリング工程を行う技法のこと」である。
 自分で書いておいてなんだが,正直,これではさっぱり分からないと思う。なので,ざっくりとした説明を行っておきたい。

 現在のPCで日常的に取り扱う色表現は,RGB(赤・緑・青)各8bitの,合計24bitカラー,俗にいう1677万色が主流だ。
 1677万色(正確には1677万7216色)もあれば十分だと思うかもしれない。PCを使っていて,困ったことなんかないという人もいるだろう。
 きちんと解説しようとすると相当難しいので,できる限り単純化して説明しよう。例えば「雪原が太陽光を反射する明るさ」が相当明るく,「夜空の星の光が地表で反射する明るさ」は相当に暗いことはイメージできるだろう。こういった極度の明るさと暗さを「ルミナンス」と呼ばれる,明度を示す値に換算したとき,両者の間には10の12乗という開きがある。10の12乗は1兆のことだから,ひとまず現実世界の“明るさ”には,ルミナンス値にして1兆の表現幅があると,ざっくり理解しておいてほしい。
 この10の12乗を対数にして,10をかけ,dB(デシベル)という値を用いて「120dB」と表記したものが「ダイナミックレンジ」だ。

 3Dグラフィックスのレンダリングとは、陰影演算の結果求められた光のエネルギー量を画素単位で記録していくことにほかならない。それゆえ,このエネルギー量を損失なく記録しておくために,広いダイナミックレンジを扱える数値表現系が必要になるのだ。

 では現在主流のRGB各8ビット=1677万色が取り扱える数値の幅を,便宜的にダイナミックレンジに落とし込んで見てみよう※。各色8bitで,1bitは0と1の2通りで示されるから,2の8乗=256段階≒10の約2.4乗(24dB)。120dBなければ現実世界の明るさを記録できないのに,1677万色体系では24dBしか記録/演算処理できない。
 3Dグラフィックスというものは,そもそも現実世界に近い映像をコンピュータで作り出すために生まれたものである。にもかかわらず,1677万色体系では現実世界の光を記録/演算処理できない。そこで登場してきたのがHDRレンダリングというわけだ。

現実的な表示能力としての“ダイナミックレンジ”は,ディスプレイのスペック次第であり,別の話となる。ここでいうダイナミックレンジは「取り扱える数値の範囲」というほどの意味に捉えてほしい。

 RGB各8bitだと全然足りないのは分かってもらえたと思うが,どのくらい必要なのか。2005年現在,3Dゲームをはじめとしたリアルタイム3Dグラフィックス用のHDRレンダリングフォーマットとして標準的な位置づけになりつつあるのが,16ビット浮動小数点(16bit Floating-Point,以下FP16)である。
 FP16は符号1bit,仮数10bit,指数5bitで成り立っている。仮数は整数と同様に,そして指数の場合は2の5bit乗,つまり2の32乗で計算することになるので,(2の10乗)×(2の32乗)≒10の12乗,つまりダイナミックレンジ120dBとなり,ダイナミックレンジに関してFP16は現実世界と同等のポテンシャルを持てるといっていいだろう。

 FP16は「スターウォーズ」の特殊効果を担当したILM(Industrial Light & Magic)のCG部門で活用され,ILMが「OpenEXR」フォーマットと提唱して有名になった。

 もっとも,メリットだけではない。RGBと不透明度を表すα値が各FP16なので,16bit×4=64bit。1テクセル(1ピクセル)当たり64bitの幅が必要となる。これを「FP16の64bitバッファ」(以下FP16-64)というが,要するに,いわゆる32bitカラー(α値8bit+24bitカラー)と比べて,容量と帯域幅は2倍になるわけだ。簡単にいえば,レンダリング負荷が通常の2倍になる。高性能なグラフィックスチップでなければ,HDRレンダリングを円滑に行えないことは,容易に想像できると思う。

 明言されてはいないが,HL2LCでも,このFP16-64を活用したHDRレンダリングが行われているはず。FP16-64は,ATI TechnologiesもNVIDIAもプログラマブルシェーダ3.0(Shader Model 3.0)世代のグラフィックスチップでフルサポートしており,互換性の面で有利だからだ。

まもなく発売の「トム・クランシーシリーズ スプリンターセル カオスセオリー」,年末発売予定の「マイクロソフト エイジ オブ エンパイア III」でも“本物”のHDRレンダリングエンジンを実装。どちらもFP16-64を採用している

HDRレンダリングによる三つの効能

HDRレンダリングモードを有効にするには「ビデオ」オプションにて「High Dynamic Range」設定を「フル」にする必要がある。ちなみに「ブルーム」あるいは「なし」の設定がHL2の持つ標準のレンダリングモードに相当

 小難しい話はまあなんとなく分かった。では,HDRレンダリングを行えるようになることで,いったいどういう視覚効果を体験できるのだろうか。

 FP16-64を利用した,ものすごい表現の,あるいはものすごい高精度のカラー情報が記録されていたところで,最終的に表示するのは,読者の目の前にある,1677万色表示のディスプレイだ。
 HDRレンダリングは,確かに1677万色を遙かに超えた色域でレンダリングできる。しかし,最終的にディスプレイに表示させる段階で1677万色に丸め込んで減色しなければならないのである。

 この減色処理工程は「トーンマッピング」(Tone Mapping)と呼ばれているが,HL2LCは,この,HDRレンダリングとトーンマッピングを示すインタラクティブデモの意味合いが強い。実際,シーンの各所で「HDRレンダリングの効果」が実感できる作りになっている。
 その「HDRレンダリングの効能」は,大きく分けて以下の三つがある。ここからは,実際のゲーム画面を使って,その効果をチェックしていくことにしよう。

  1. 陰影がよりリアルになる
  2. 露出のシミュレーションが可能になる
  3. まぶしさの表現が可能になる

HDRレンダリング第1の効能
陰影がよりリアルになる

 第一の効能は,光をあまり反射しない材質の陰影の表現が,より高精度になるというものだ。

各色256段階で,18付近の色を見てみるとこんな感じ。ディスプレイの輝度設定にもよるが,かなり黒っぽい色なのが分かる

 これは,光の反射率の話でよく出てくる数値だが,道路の材質であるアスファルトはの反射率は約7%。7%だと,ほとんど反射しない計算になる。実際1677万色では,8ビット整数表現で最も明るい「255」(=2の8乗−1)を限りなく理想的に反射させても,値は17.85。右のグラデーションパターンを見てもらえば分かるが,ほとんど黒である。

 しかし,現実世界では,ものすごい輝度(明るさ)である太陽光を受けると,そんなアスファルトでも鈍く輝いて見える。だから,「HDR光源」という非常に高い輝度の光源を設定して,HDRレンダリングを行うことで,現実世界に近い結果を得ましょうね,というわけだ。

これはDirectXのデモから抜粋したもので,各色8bit幅,1677万色域のレンダリングと,HDRレンダリング+トーンマッピングの違いを示したもの。どちらがどちらかは,拡大して見てもらえばすぐ分かるだろう。1677万色域のレンダリングでは,反射率の低い床の陰影が白く飛んでしまっているのに対し,HDRレンダリング+トーンマッピングを適用したほうは,床の陰影がよく見えている

 HL2LCにおいては,崖の上の教会に入ることでこの効果を実感できる。下の画面6点は,いずれも左がHL2オリジナル,右がHL2LCでHDRレンダリングモードを有効にした結果だが,違いは一目で分かってもらえると思う。薄暗い中にも明暗ははっきりと表れ,陰影が非常に見やすくなっている。

暗くて何がなんだか分かりにくい

HDRレンダリングを適用するとご覧のとおり。柱の陰影がくっきりと見えるようになる

暗いだけでなく,陰影が平坦に見える

全体的に陰影がはっきりしてきて,なおかつ右奥の日だまりが柔らかく輝くことで,明暗のコントラストがより強調された映像になっている

全体が見えにくく,暗さが一様でリアリティに欠ける

全体的な陰影の立体感が増しただけでなく,窓からの光,天井から見える空からの太陽光,そしてそれを受ける壁の輝きがブルームを起こし,光の存在感がある

HDRレンダリング第2の効能
露出のシミュレーションが可能になる

 第2の効能は,人間の目やカメラの“露出”をシミュレートできるというところにある。
 人間の視覚システムはダイナミックレンジとして120(〜140)dBあるといわれているが,実際に色として感じられる視覚は,見ているシーンの明るさのピークに引っ張られる格好だ。ある程度の輝度レンジ(明るさの範囲)にしか有効でない。

人間の視覚のダイナミックレンジと,8bit整数/FP16-64のダイナミックレンジの比較。8bit整数とFP16-64は,幅はそのまま,左右方向に移動できる。図だと,8bitの幅は薄明かりと屋内の間にしか適用できないようにも見えるが,実際にはこの幅を維持したまま,図の中で左右に移動できる。FP16-64も同じ

 いい例がノートPCの液晶ディスプレイだ。暗い部屋でノートPCを開いたときには明るく見えていた液晶画面が,晴れた日の屋外では,周りの明るさに埋もれてほとんど見えなくなる。液晶ディスプレイの明るさは変わらないのに,見え方だけが変わる。
 これは,人間の目にある光彩(Iris)という部位が,見ている情景情景全体の輝度に適応して閉じたり開いたりして,眼球内に通す光量を調整しているためだ。これは,カメラの「絞り」や「露出」といった概念に相当する。
 HDRレンダリングを行った後,最終的にはトーンマッピングで1677万色に減色することは前述したとおり。しかし,このときただ減色するのではなく,人間の目やカメラの仕組みに似せた処理をリアルタイムに行うことで,明暗の推移を感じさせる,臨場感のある雰囲気を演出できるようになる。

 HDRレンダリングであれば,暗いシーンでも,その暗さを基準にしてトーンマッピングを行うことで,場面を明るく描ける。「暗さに目が慣れている」状況を作り出せるわけだ。
 次に,この基準のトーンマッピングのまま,明るい屋外へ飛び出すと,画面はほとんど白飛びしたような状態になる。これも,現実世界における「暗いところから明るいところへ移動すると非常にまぶしく,慣れるまではよく見えない」という状況のシミュレートである。
 この,適正輝度に調整する動的なトーンマッピング処理を,若干の遅延を伴って行うようにしてやれば,「明るさ/暗さに目が慣れていく」様子を表現できる。
 以下に挙げた6点が,HL2LCにおける実際の例だ。順に見ていってほしい。

ここを見ている状態から……

急に空へ目を向ける(マウスを動かして照準を向ける)と,空が眩しく,白飛びしたような映像になるが……

だんだんと空の陰影が見えるようになり……

空の高い輝度に合わせて目が“絞られ”た。結果として,銃や水面,街といったほかのオブジェクトは,空を見ていなかった最初の視点と比べて,暗く見えることになる

この状態で素早く最初の視点に戻すと,先ほどの絞り状態を引きずっているため,全体的に若干暗く見えるが……

やや遅れて,元の適正輝度に調整される

 HL2LCでは,この効果は屋外屋内を問わず,随時リアルタイムで処理されている。上の6枚はまさにその証拠だが,明暗が激しく移り変わるように情景を素早く切り替えれば,ゲーム中のどこででも体感できるはずだ。

この4枚は,まぶしさに目が慣れていく様子を追ったもの。左上,右上,左下,右下の順に見ていってほしい。階段状の暗いトンネルから出口に向かうと,外はまばゆいばかりの光に満ちているように感じられる。外に出ても,しばらくは目が慣れず,明るい部分が白飛びしているように見えるが,しばらく歩いているうちに適正な露出に補正され,違和感なく見えるようになる

 また,HL2LCの解説モードでは,この露出シミュレーションに関する解説に合わせて,シーンのリアルタイム輝度ヒストグラムが見られたり,画面の右半分だけHDRレンダリングを有効にした状態を確認できたりする。

解説モードでは,露出シミュレーションについて解説されるとき,シーンのリアルタイム輝度ヒストグラムが表示される。左が暗部,右が明部を示しており,視点を移動させるとグラフが変動。例えば明部を見続けると,それを基準にトーンマッピングが行われることになる

これも解説モードから。従来のレンダリングとHDRレンダリングの違いを左右で分けて確認できる

設定は随時変更可能だ

 HL2LCのプレイに当たって,ぜひ味わってほしいのが解説モードだ。「設定」メニューにある「オーディオ」タブの「解説」を「ON(使用可能な場所)」にすることで解説モードは有効になり,HL2LCの各シーンで吹き出しマークが出るようになる。

 この吹き出しマークに照準を合わせて「アイテム使用ボタン」(デフォルトでは「E」)を押せば,開発者による技術解説や,作り込みに際してのこだわりを聞くことができる。HL2本編同様,日本語字幕が出るので,英語力にあまり自信がなくても大丈夫だ。

吹き出しマークを見つけたら,「E」キーを押すと,日本語字幕付きで開発者の肉声解説を聞ける

HDRレンダリング第3の効能
あふれ出す光によるまぶしささの表現

 第3の効能は,まぶしさをフォトリアリスティックに作り込める点にある。

HDRレンダリングによる光のあふれ出し効果の概念図(出典:ぶんか社 川瀬正樹氏のスライド)

 カメラや人間の目で高輝度のものを見ると,その光が飛び気味に見える。また,高輝度のものと視点の間に遮蔽物があったとしても,前後関係を無視して,光があふれて見える場合がある。
 木の下から木漏れ日を見上げると,葉や枝の遮蔽を無視して,光がぱーっと放射状に広がって見えるという体験をしたことがあるだろう。アレだ。輝度が極めて高い光がレンズ内で反射したり,目のまつげで光が回折したりする現象が,そういった見え方をさせているといわれている。

 これをHDRレンダリングの仕組みに導入するには,そのシーンの適正輝度と比べてあまりに明るすぎる領域を,輝度が極めて高い「強輝度部」として抽出し,これにぼかしを加えて,レンダリング結果に合成してやればいい。こうすると,強輝度部の光があふれ出す表現になる。
 ちなみに,こうした処理のうち,光がぼやっとあふれ出す表現を「ライトブルーム」(Light Bloom)といい,光が放射状にあふれ出す表現を「グレア」(Glair)と呼び分けたりする。実際にどういうぼかしを行うかは,アーティスティックな領域になるので,デザイナーによって多様な方法がある。よって,「これがまぶしさ表現の代表」といったものは存在しない。

HL2からの1シーン。スカイボックスの太陽はブルームを起こしているのに,水面に映り込んでいる空はブルームを起こしていない

 HL2でも,光があふれ出す効果は実装されていたが,発生するのは高輝度設定されたテクスチャやスカイボックス(シーンにおける空や雲)を直視したときだけだった。「空はHDRレンダリングされているのに,空が映り込んだ水面はHDRレンダリングされていない」という,不自然な現象が生まれていたのだ。
 この点,本物のHDRレンダリングを実装したHL2LCでは,テクスチャやスカイボックスはもちろん,映り込みを表現する環境マップに至るまでHDRレンダリングに対応している。

HL2LCで,HL2と同等のレンダリングモード(“疑似HDRレンダリング”)を選択した状態(左)と,HDRレンダリングモードを選択した状態(右)。右の画面では,水面に映り込んだ空からもHDR反射によってブルームが起きている(光があふれ出している)

右上の状態から少し視点を変えてみると,法線マップによる岩肌の凹凸もHDRの空を反射して強く輝く

 HL2LCだと,動的なトーンマッピングの効果もあって,光があふれ出すライトブルームはほんの数秒間だけで,すぐに露出補正がかかって消えてしまうことが多い。ただ,これまでは,ライトブルームがあるだけで「HDRレンダリングだ」と言い張っていたわけだから,一歩進んだ表現法になったとはいえるだろう。

HL2LCの教会内。窓からの陽光が差し込みまばゆいばかりの光が注ぎ込み,その光を受けた部分がブルームを起こすことで,光が目の前を覆う(左)。しかし,1秒足らずで,露出補正や瞳のシミュレーションが行われ,高輝度と見なされる奥の壁の投射を除いて,適正な見え方に落ち着く(右)

教会に注ぎ込む外からの強い光。窓がブルームを起こし,光筋も強く出ている(左)。だが,その場にしばらくいると目が慣れ,窓のブルームは弱まり,光筋も細く見えるようになる

まとめ
HL2LCの技術をフル活用した続編に期待

 HL2LCは当初,HL2の「メジャーエンジンアップデートプロジェクト名」に位置づけられているという話だったが,半分正解だったといったところだろう。実際に配布されたのは,E3 2005で公開されたテクノロジーデモをプレイアブルバージョンにしただけだった。

 ただ,この“プレイアブルデモ”には,ごまかしのない,「本物のHDRレンダリングの仕組み」がHL2エンジン――正確にはSourceエンジン――に実装されたことの証が見て取れる。

 将来的には分からないが,2005年11月中旬時点では,HL2LCを導入しても,HL2本編には何の変化もない。「Half-Life 2: DeathMatch」「Counter-Strike: Source」も然りだ。
 フルシーンの完全なHDRレンダリングを実現するには,単にシェーダを書き換えるだけでは不十分。テクスチャなどもHDRフォーマット対応したものに変更する必要があり,新たな工程が発生することが避けられない。レンダリングするバッファの確保も変更する必要があり,ゲームプログラム側のリソース管理にもそれなりの仕様変更が必要になるはずだ。

 残念なことだが,そこまでして,いまや旧作であるHL2本編にHL2LCのHDRレンダリング技法を取り入れるのはコスト的に見合わないと判断されたのだろう。
 しかし,HL2のラストシーン後を描く続編といわれる「Half-Life 2: Aftermath」では,この“HL2LCエンジン”を積極的に活用したものになるのではなかろうか。
 その意味で,今回のHL2LCはまさに,テクノロジーの予告編といった意味合いになっている。こう考えられなくもない。(トライゼット西川善司)

 

タイトル ハーフライフ 2 日本語版 / コレクターズエディション 英語版
開発元 Valve Corporation 発売元 サイバーフロント
発売日 2004/11/17 価格 日本語版 6825円(税込),CE英語版 9240円(税込)
 
動作環境 OS:Windows 98/Me/2000/XP(+DirectX 9以上),CPU:動作クロック1.2GHz以上[Pentium 4/2.40GHz以上推奨],メインメモリ256MB[512MB以上推奨],グラフィックスチップ:DirectX 7.0以上に対応[DirectX 9.0以上に対応が推奨],HDD空き容量 4.5GB以上(コレクターズエディションは5.5GB以上),オンボードグラフィックス搭載PCは動作対象外

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