|
会場:Los Angeles Convention Center
「Half-Life 2: Lost Coast」とはいったいなにものなのか。今回は「Lost Coast」によって「Half-life 2」がどう進化するのか、そしてこの「Lost Coast」のコアとなるHDRレンダリング技術についてじっくり紹介していくことにしたい。 なお、文末に「Half-Life 2: Lost Coast」テクノロジーデモの映像を掲載しているので、興味を覚えた3Dゲームファンはぜひ一度見ておいてほしい。 ■ 「Lost Coast」はとどのつまりはHDRレンダリングパスのアップデートパッチ
この「Lost Coast」パッチを適用することで、「Half-Life 2」がどう変わるのかと言えばそれはハイダイナミックレンジ(HDR)レンダリング・パスの洗練化。裏を返すと「それ以外には何も変わらない」(Walker氏)。 そして、このエンジンのHDRレンダリング機能アップデートを記念して(?)、シングルプレイヤーモードの新ステージを提供するのだそうだ。新ステージは、「Half-Life 2」本編の中盤あたり、「Highway 17」の章を補間する内容になる。フレームむき出しのバギーで疾走した、あの海岸線のシーン。あのあたりだ。 提供時期は今年2005年夏を予定。既に「Half-Life 2」本編を所有しているユーザーには、開発元Valveのオンラインコンテンツ取引システムであるSteam経由にて無償提供される。 なお、現在、Valveでは、あの衝撃の「Half-Life 2」ラストシーン以降のエピソードを綴った「正当なる続編」の制作もスタートさせている。こちらは「Half-Life 2: Aftermath(余波)」と命名されており、今のところ、いつ完成するかは公言できない段階だという。 今回、展示されていたHL2LCは同じ内容を無限ループで繰り返す、デモ映像であったが、この映像もテクノロジーデモムービーとして、夏に提供を開始するとのこと。こちらはBINKムービーのような形式で提供されると見られ、「Half-Life 2」本編ユーザー以外も入手することができると思われる。 ■ 「ハイ・ダインミック・レンジ・レンダリング」とはそもそもなんなのか?
現実世界はそれこそ液晶モニタやCRTテレビなどでは表現できないほどの幅の広い「明るさ」に満ちあふれている。 たとえば、雪に当たる太陽の光は1.0E+6 Lum/m2だというし、夜の森の地表に当たる星の光は1.0E-6 Lum/m2だ。この例をいわゆるコントラスト比換算すれば1012:1ということになり、これを過不足なくレンダリングするためにはダイナミックレンジとして120dBが必要になる。 いわゆる32ビットカラー(実際には24ビットカラーの1,677万色)では、各RGBが整数8ビット表現(255段階≒102.4)しかないのでダイナミックレンジとしてはわずか24dB。全く足りないことになる。ちなみに、人間の視覚システムはだいたい平均的に120~140dBくらいあると言われている。 いくら人間の視覚細胞のダイナミックレンジが広くても、実際の人間の視覚システムは明るさのピークに引っ張られて、結局ある範囲の明るさのレンジしか一度に知覚できない。真っ暗な部屋で携帯電話の液晶画面は明るく見えるがこれを太陽下にもっていくと途端に見えにくくなる。これは人間の目が瞳を絞って視覚細胞への光量を調整しているからだ。携帯電話の液晶の明るさ自体は変わらなくても陽光下で見えなくなってしまうのは太陽光の明るさピークに合わせて瞳を絞って光量を制限してしまっているためだ。 そこで、3Dゲームグラフィックスの世界でも、
(1)現実世界に近いダイナミックレンジでシーンをレンダリングする としたほうが、「見た目としてリアル」になるんじゃないだろうかという仮定の下、生まれ出でてきたアイディアがHDRレンジレンダリングだ。 用語的な定義としては(1)そのものがHDRレンダリングを指し、(2)は特に「トーンマッピング(Tone Mapping)」と呼が、今や一般的には(1)(2)の処理系全体をそう呼ぶことが多い。
なお、1,677万色系に限定した従来のレンダリングシステムをHDRレンダリングに対し、ロー・ダイナミック・レンジ(LDR)レンダリングと呼ぶことがある。
■ HDRレンダリングのメリットとは? 「結局1,677万色になるんなら意味ないのでは?」という意見もごもっとも。しかし、HDRレンダリングにはいくつかの「リアル」に結びつく“おいしい要素”がある。最もメジャーな2つを挙げるとしよう。 たとえばアスファルトの反射率は実測によれば約0.07にしか満たないという。1,677万色系で最も明るい光“255”を当てても“17.85”となってしまい、ほとんど真っ黒になる。しかし、現実世界の昼間の太陽光が降り注ぐ世界のアスファルト道路を見ると鈍く光って見える。これは光源となっている太陽光が255どころか、ものすごい高い輝度の光源だから反射率が0.07でも、結果としてちゃんと目に見えるわけだ。 HDRレンダリングは、1,677万色系に制限されるLDRレンダリングでは見えなくなってしまうようなディテールを見えるようにしてくれる可能性があるのだ。数学的に言えば、誤差の少ないレンダリングができるようになると言うことだ。これが1点目だ。
人間の目やカメラで強い光を見ると、光が溢れ出して見える。たとえばうっそうと木が茂る森の中から太陽を見上げると本来は枝や葉に遮蔽されているはずなのに、木漏れ日がまぶしく溢れ輝いて見え、枝や葉の姿が光に塗りつぶされてよく見えなくなる。これは強い光がレンズ内を散乱したり、目の"まつ毛"で光が回折したりする現象がそう見させている。 HDRレンダリングしても最終的にはピーク輝度を元に1,677万色LDRレンジに落とし込まれてしまうHDRレンダリングだが、その際に過度に輝いている部分について画像処理的に光を溢れさせる効果を描き込んだらば、より見た目としてリアルな「まぶしさ」を表現できるはずだ。これがHDRレンダリングの“おいしい”2点目だ。 ただ、こうしたHDRレンダリング結果に対しておこなう「リアルに見えるようにする画像処理」に正しい回答はなく、どう見せるかはゲームエンジン設計者やデザイナ、アーティストにゆだねられる部分だったりする。
レンダリング結果の強輝度部分にアニメチックな十字や★型の"煌めき"を書き込んだり、単純に強輝度部をただ柔らかくあふれ出したりと、この部分の処理はかなりアーティスティックなセンスに委ねられる。ちなみにこうした「光のあふれ出し」を特にライトブルーミング、グレア効果と呼んだりする。
■ スプライトベースのレンズフレア表現から疑似HDRレンダリングへの進化
「Incoming」のレンズフレア表現は太陽やライトなどの、光源を直視したときを判別して出していたに過ぎない。だから「水面に映り込んだ太陽」とか「まばゆく輝く車のボディ」など、「反射の結果が明るい」、言い換えれば「レンダリングした結果として強輝度で輝いている」箇所にはこうしたフレアを出せなかったのだ。 このレンズフレア的な発想を発展させたのがDirectX 8世代、プログラマブルシェーダ1.x世代に大流行した疑似HDRレンダリングだ。これはレンダリング処理系自体はLDRレンダリングで行なうが、太陽などのものすごく明るく光る光源に対し「HDR光源とみなします」という属性を与える点がキモだ。 このHDR光源で照らされたピクセルには、通常の陰影処理結果の他に、HDR光源の影響がどのくらいあったかも計算してその結果も合わせて書き込んでいくのだ。 グラフィックスの各ピクセルはαRGBの四要素からなることは知っている人も多いだろう。この疑似HDRレンダリングでは通常の陰影処理結果はRGBに書き込むようにし、この付加輝度情報はαチャンネルに書き込むようなピクセルシェーダを実行するのだ。本来αチャンネルは透明度合成に使うパラメータだが、これを付加輝度情報の一時記憶先として使ってやるわけだ。 最終的なレンダリング結果からプログラマブルピクセルシェーダで、このαチャンネルに書き込まれた付加輝度を抽出。高輝度としての結果が残っている箇所に対して光のあふれ出る画像処理をしてやれば疑似HDR映像のできあがりだ。
強輝度光源を反射した部分にもまぶしい表現を付加できることになり、光源直視時しかまぶしい表現ができなかったクラシックなレンズフレア表現よりも映像に説得力が増す。
ただし、実際のHDRレンダリングでないため、冒頭のアスファルトの例で示したような「誤差の少ないHDRレンダリング」をこの方法で行なうことは難しい。また、前述した(2)トーンマップの実現も一筋縄ではいかない。
■ “本物”のHDRレンダリングとは何か? それでは、本当のHDRレンダリングを行なうにはどうしたらよいのか。最も基本的な話として、それには1,677万色系ではない、HDRなレンダリングバッファを確保できるGPU(ビデオカード、あるいはゲーム機)が必要になる。 結論から言えば、最新世代のGPU、PS3やXbox 360などの次世代ゲーム機はもれなくHDRバッファをサポートしている。そうしたHDRバッファは、いくつかが考案されていて、代表的な物には以下のような物がある。
(a)αチャネルが2ビット、RGBすべてが10ビット整数(Fx10)→32ビットバッファ、1ピクセルあたり4バイト
(b)RGBすべてが16ビット整数(Fx16)→64ビットバッファ、1ピクセルあたり8バイト
(c)αRGBすべてが16ビット浮動小数点実数(FP16)→64ビットバッファ、1ピクセルあたり8バイト
(d)αRGBすべてが32ビット浮動小数点実数(FP32)→128ビットバッファ、1ピクセルあたり16バイト
(b)と(c)のHDRバッファは、ATI RADEON9500以上、NVIDIA GeForceFX以降でサポートされる。またPS3、Xbox 360でもサポートされる。 特に(c)FP16の64ビットバッファは、最新世代GPUや次世代ゲーム機ではαブレンディング、フィルタリングが取り扱えることもあり、その表現幅の広さとLDRバッファ同等の優れた活用性を両立できる点が評価され、3Dゲームグラフィックス用のHDRレンダリングの本命と見なされている。
一方、(d)FP32の128ビットバッファは表現幅が広すぎて3Dゲーム用としてはいささかオーバースペックなこと、64ビットバッファの2倍もの帯域を消費することから、3Dゲーム向きでないとされている。
■ 「Half-Life 2」のHDRレンダリングは実はニセモノだった? なお、オリジナル「Half-Life 2」のHDRレンダリングパスでは当初「(b)Fx16の64ビットバッファを使用している」と発表された。当時のATI RADEON9500以上でもFP16-64ビットバッファもサポートされていたが、αブレンディング、フィルタリングが適用できないという制限があり、これの使用を見送ったようだ。 一方、Fx16-64ビットバッファの方はαブレンディングには対応できないものの、フィルタリングは活用できる。ちなみにFx16-64ビットバッファはNVIDIA GeForce系ではサポートされていない。にも関わらず採用に踏み切ったのはValve SoftwareがATIとの強力なパートナーシップを結んでいたため。
「Half-Life 2」のHDRレンダリングは当初「本物のHDRレンダリングだ」と主張されてきたのだが、おかしな部分も多かった。 まず、HDR光源を直接見たときには光が溢れ出る等のHDR表現を確認できるのだが、HDR光源の照明をうけた3Dオブジェクトの陰影からはHDR表現が有ったり無かったりしたのだ。 また、冒頭で触れたトーンマッピング技術を実装して、明るいシーンや暗いシーンからの移り変わりで動的な露出制御をやっていると当初説明していたが、これも実際には怪しかった。 どうも実際の映像を見る限りでは、「屋内から窓を通して屋外を見たとき」のように、明るいとわかり切っている箇所を意識的に飛ばし(オーバーブライト)気味にレンダリングしているだけのようであり、屋外シーンにてドラスティックに明暗が切り替わるところでは不自然な明暗で、ゲーム自体もプレイしにくかった。
そこで、今回発表されたHL2LCでは、そうしたHDRレンダリングにまつわる疑惑を払拭し、本物のHDRレンダリングパスを実装したのだという。
■ 「Half-Life 2: Lost Coast」のHDRレンダリングシステムはこうなる!!
●Blooming(ライトブルーミング) 強輝度の光があふれ出して見える表現であるブルーミング。今回は、一次反射した情景や、HDR光源に照らされた陰影にもブルーミングが現れる。物理照明現象としてオリジナルよりも正しいHDRレンダリングとなった。 ●HDR Skybox(HDRスカイボックス) Skybox(スカイボックス)とはそのシーンの天球映像のこと。具体的に言えばその名の通り空や雲のこと。HL2LCではこうしたスカイボックステクスチャもHDRバッファに描かれた物を採用する。実際のライティング時には、このHDRスカイボックス自身もHDR光源として処理される。 このように、テクスチャとして描かれた背景映像全体の陰影を光源とみなして、そのシーンをライティングする処理系を、リアルタイム3Dグラフィックスの世界では「イメージベースド・ライティング」と呼ぶ。言い換えれば、HL2LCではこのイメージベースド・ライティングがHDRに対応したということだ。 ●HDR Cube Maps(HDRキューブマップ) イメージベースド・ライティングを行なうためには、六面体状の全方位環境マップをレンダリングして生成する必要があるわけだが、HL2LCではこの生成がHDRレンダリングに対応した。 この生成には、前述のHDRスカイボックス、後述するHDR光源やHDRライトマップがちゃんと正しく配慮される。HDRキューブマップはHDRなキューブ環境マップとしても利用され、映り込み素材として適用される。 ●HDR Water Reflection/Refraction(HDR水面反射/屈折) オリジナル「Half-Life 2」と違い、水面の映り込んだ情景にもブルーミングが発生するようになる。前述したようにHDRなキューブ環境マップが導入されているので、別段特別な処理を必要とせず自ずと実現される。水面下に潜った状態から水面上の世界を見た情景も同様なHDR処理がなされる。
●HDR Refraction Effect(HDR光屈折効果) HDR光源が半透明マテリアルを透過した際、その透過率が正しくHDRに配慮した形で計算されて伝搬される表現。いわゆる光筋の表現がHDRに対応したということのようだ。
ライトマップとは、光の明暗の分布を表したテクスチャ。画像テキスチャのように取り出したテクセルが描画画素として適用されるのではなく、ライトマップではその明暗テクセルでピクセル単位のライティング処理を行なうもの。懐中電灯などのスポットライトの表現や、局所的に複雑なライティングを行ないたい場合などに使う。 HL2LCでは、このライトマップがHDRテクスチャベースとなる。なお、このHDRライトマップは、事前処理でそのシーン内の光分布をラジオシティ法を使ってレイトレーシングすることで生成される。 ●HDR Light Sources(HDR光源) 光源の輝度レンジを従来のRGB各8ビットレンジではなく、レンダリング対象バッファと同じようなダイナミックレンジに富んだ多ビット表現値で提供する。 ●Exposure Control(露出制御)
できあがったHDRレンダリング結果を表示するためにLDRへ変換する際、そのシーンの輝度ピークを中心に、もっとも映像が自然に見えやすい色輝度補正をピクセルシェーダで行なう。これは前述したトーンマッピングの処理系のことをいっている。
■ Sourceエンジンはさらに進化する~次のお題は影生成!? どうやら、今度こそ、「Half-Life 2」は、本物のHDRレンダリングパスを実装したようだ。 この大がかりなHDRレンダリングパスの進化改良に踏み切れたのは、ATI,NVIDIA両社のGPUが共にHDRレンダリングに関して十分な機能とパフォーマンスを兼ね備えるようになってきたからだろう。 なお、今回取材を受けて頂いたWalker氏に、今や陳腐と言わざるを得ないクッキー投射ベースの「Half-Life 2」の影生成について聞いてみたところ、こんな返事が返ってきた。 「影生成ね。それは多くのユーザーから指摘を受けている部分で、Valveでも重要な課題として受け止めている。今回のHL2LCアップデートはHDRレンダリングの強化改良だったが、実は影生成部の強化も研究開発中なんだ。時期は明かせないが、いずれ影生成も最先端なものに進化させたいと思っている。期待して待っててくれ」 「Half-Life 2」エンジン(正式名はSourceエンジン)の進化に今後も期待したい。
(C) 2005 Valve Corporation. All rights reserved. Valve, the Valve logo, Half-Life, the Half-Life logo, and the Lambda logo are trademarks and/or registered trademarks of Valve Corporation.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.
□Valve Softwareのホームページ (2005年5月25日) [Reported by トライゼット西川善司]
また、弊誌に掲載された写真、文章の転載、使用に関しましては一切お断わりいたします ウォッチ編集部内GAME Watch担当game-watch@impress.co.jp Copyright (c)2005 Impress Corporation, an Impress Group company. All rights reserved. |
|