|
Electronic Entertainment Expo 2003現地レポート番外編
3Dゲームファンのための「Half-Life 2」エンジン講座(前編) |
会場:Los Angeles Convention Center
E3会期中、とあるブースで、連日長蛇の列ができていた。それはATIブース。しかし今回のE3ではATIは新製品を発表していない。連日ATIブースに詰めかけた人たちは何を目的にしていたかというと、それは「Half-Life 2シアター」だった。
シアターといっても映画を見せているわけではなく、開発途中版のゲームを見せているだけ。しかし、あまりにもその映像が衝撃的であったために口コミがさらなる人を呼び、連日、展示時間終了後も追加公開を行なうほどの人気を集めていた。
こうした開発途中版のゲーム作品のシアタースタイルでの公開というと、去年のE3の「DOOM III」(id software)を思い出す。去年の「DOOM III シアター」では、館内の撮影は一切禁止されていたのだが、今年の「Half-Life 2シアター」は「フラッシュ禁止」という制約のみで、スチルもムービーも撮影OK。
GAME Watch編集部でも、このシアター内で行なわれたプレゼンの内容を撮影することができたので、その凄さをたっぷり紹介していきたい。なお、理解促進のためにムービーをシーンごとにわけて掲載しているので、ぜひあわせて参照いただきたい。
■ 「Half-Life 2」に、何故こんなに世界中が大騒ぎするのか?
Valveの代表作となった「Half-Life」は、発売されるやいなや大ヒットを記録し、この年のゲーム・オブ・ザ・イヤーを受賞。その後、PCゲームとしては異例のロングセラー作品となり、現在までの総出荷本数は800万本を超える。ちなみにPS2版も後に発売されるが、こちらは総出荷本数50万本だ。
大ヒットを記録した理由は、もちろん単純に「Half-Lifeというゲームが面白かった」というところに帰結するわけだが、PC版がロングセラーとなりえたのは、そのゲームエンジンの拡張性が優れていたためだ。「Half-Life」の拡張MODという形で、サードパーティはもちろん、一般ユーザーに至るまでが、オリジナルゲームのリリースを行なってきたのだ。
拡張MODというと「追加シナリオ」というようなイメージがあるが、「Half-Life」の場合は、シナリオやマップだけでなく、テクスチャ、3Dキャラクタのモデル、サウンドに至るまでカスタマイズが可能で、ほとんど完全新作といってもよい作品までが制作できたのだ。代表的なものとしては「Counter-Strike」、「Day of Defeat」などがある。
これまでに数え切れないくらいの「Half-Life」関連作品がリリースされてきており、ある意味、この5年間、HalfLifeは1つのゲーム・プラットフォームとして活躍してきたという印象すらある。PCゲームファンにとってみれば、5年間の沈黙を破って、新ゲーム機がリリースされたような感覚なのだ。
ここで簡単に前作「Half-Life」のバックグラウンドを簡単に紹介しておきたい。時代は近未来。アメリカ政府直属の研究機関「ブラックメサ研究所」が異次元転移装置の実験を行なうものの失敗に終わる。その際の衝撃で次元に亀裂が生じ、そこから異世界の怪物(エイリアン)達を地球上に流入させてしまう。
事態を重く見たアメリカ軍は、ブラックメサ研究所に海兵隊を派遣し、証拠隠滅のための破壊活動と、全研究所員の完全抹殺を敢行する。この悪夢のような状況に置かれた主人公ゴードン・フリーマンは、研究所に勤務するスタッフの1人。ゴードンは、エイリアンと米軍の両方を敵にまわしたサバイバルを強いられることになるのだ。
以上が「Half-Life」のプロローグ。5年も前のゲームなので、少々ネタバレ的なことを話しても問題はないだろう。実はこの「Half-Life」の冒険はラストシーンで完結しない。「2」があることを確信させて終わるのである。
「Half-Life 2」は「Half-Life」の完全な続編として位置付けられており、主人公も前作と同じゴードン・フリーマンだ。「Half-Life」のラストシーンからほんの少し時間が経過しているとのことだが、「Half-Life」と「Half-Life 2」との間に何があったのか、またどのくらいの時が経ったのかといったことについては明らかにされていない。
■ “生きた目”を持つ「Half-Life 2」のキャラクタ達
「Half-Life」に登場したG-MANは「Half-Life 2」にも登場する。モデル精度の向上だけでなく、鼻筋と首筋の自然なセルフシャドウにも注目してほしい |
今作でプレーヤーをバックアップしてくれるヒロインAlyx Vance。多彩な表情の変化に注目。ちなみにこれもゲーム中のリアルタイム映像だ |
シアターで示された映像の全てはリアルタイム生成された映像でプリレンダーのものはひとつも無い。なお、「Half-Life 2」で使用されているゲームエンジンの正式名称は「VALVE SOURCE TECHNOLOGY」で、あえていうならばSOURCEエンジンということになるのだが、ここでは便宜上、広く使われている呼び名である「Half-Life 2エンジン」で統一する。
さて、最初にデモの映像で登場したのは、「Half-Life」から引き続き登場するG-MAN。彼はブラックメサ研究所での事故の全貌を知る謎の人物だ。最初に現れるカクカクしたキャラクタが「Half-Life」のモデルで、後に出てくるリアルな紳士が「Half-Life 2」でのモデルだ。
顔内部にはフェイシャル(表情描写)アニメーション用に40以上のボーンが仕込まれており、このボーンを引っ張ったり、変位させたり、さらにボーンの状態を考慮した外皮のスキニングを行なうことで最終的なレンダリングが行なわれる。
なお、表情の制御エンジンは、カリフォルニア医大の精神医学教授であり、心理学の分野でも著名なPaul Ekman博士の協力の下で作り込まれている。口の動きは単なる口パクではなく、最近3DCG映画と共に進化してきている「リップシンク」技術を導入している。「Half-Life 2」エンジンのリップシンクエンジンは音節駆動型だ。どんなものか簡単に解説しよう。
まず、台詞を普通にWAV録音する。このWAVをリップシンク・コンパイラにかけると、コンパイラはWAVの音節遷移を分析し、口周りの筋肉を制御するボーンの変位データを自動生成してくれる。あとはこのデータと共に音声を再生すれば、日本語だろうがスワヒリ語だろうが、自然な唇の動きで台詞を再生してくれるのだ。デモ映像の途中で、このG-MANが中国語をしゃべるのでよく見てみて欲しい。
さて、このG-MANの映像のように、顔がアップになるようなシーンでは、顔レンダリングのために特別なシェーダが呼び起こされる。まず、現行ゲームエンジンとしては世界初と思われる「セルフ・オクルーシプ・ファクタ(SOF:Self Occusion Factor自己遮蔽要素)」をサポートする。これは鼻の穴や耳の穴などの光の当たりにくい部分に対しては「光が届きにくい」という属性を持たせてレンダリングを行なわせるテクニックだ。
3Dゲームグラフィックの陰影処理は、これまでずっと「第三者に光源からの光が阻害される可能性がある」ことを無視して行なってきた。「Half-Life 2」ではこの要素を考慮した陰影処理を行なってくれるのだ。厳密な意味では「Hal-Life 2」のSOFもフェイクなのだが、映像を見れば一目瞭然、従来とは次元の異なる非常に高いリアリティが感じられる。
眼球にも注目して欲しい。解説では「グローバル・イルミネーション(ラジオシティ)テクニックを採用して」といっているが、実際にはこれはマルチパスレンダリングのテクニックを使っている。このキャラクタの目の位置からシーンを超低解像度でテクスチャへレンダリングし、これをピクセルシェーダでそれっぽく加工し、環境マップとして眼球に貼り付けているのだ。このおかげで、キャラクタが文字通り「生きた目」をするようになり、キャラクタの存在感が、これまでのゲームグラフィックスとは一線を画したものになっている。
(*1)本稿で「プログラマブルシェーダ」と表記した場合にはプログラマブルバーテックスシェーダとプログラマブルピクセルシェーダの双方を同時に指し示すものとする
「Half-Life 2」Promotion Movie シーン1 |
---|
MPEG1形式(LZHでアーカイブしてあります)・1分37秒 [16.3MB(アーカイブサイズ:16MB)] |
あの不敵だったG-MANの泣きそうな顔。果たしてゲーム中で見られるのだろうか |
■ 「DOOM III」エンジンを上回る究極の物理エンジンを搭載
ガソリン缶をパチンコのように落とすデモ |
左奥のマットレスがたわんでいるのはそうモデリングされているからではなく、自重で曲がっているのだ |
「Half-Life 2」エンジンの物理エンジンは、Havokからライセンスしたエンジンを独自拡張したものを採用している。ちなみにHavokは物理エンジン専門のミドルウェア開発会社で、同社の物理エンジンはゲーム業界におけるデファクトスタンダードとなっている。ちなみにION STORMの「Deus Ex 2」エンジン、REMEDYの「MAX PAYNE 2」もHavokのものを独自拡張したものを採用している。
さて、「Half-Life 2」エンジンで、特徴的なのは登場するすべてのオブジェクトに対して物理パラメータが設定されるところだ。物理パラメータとは、そのオブジェクトの「重量」、「材質」、「強度」、「密度(比重)」などだ。
たとえば、一般的なゲームでは、ゲームのシナリオ進行に関係のない小道具、大道具オブジェクト達はある意味「無敵」な存在となっている。思い出してみて欲しい。ゲーム進行に関係のない空き缶や本は、叩こうが銃を撃とうが壊れない、というかびくともしない。また、見た目は木製のドアでも、「シナリオ上、開かない」ということになっていれば、爆薬でも壊れない。
これに対し「Half-Life 2」エンジンでは、ゲーム中の全てのオブジェクトが「ゲーム世界の物理法則」に従って振る舞うのである。映像では木材で組まれた櫓(やぐら)が、銃撃によって割れて崩れるシーンが見られる。この崩壊シーンは「仕組まれた物」ではなく、被弾した木材が設定された強度限界にを超えたために実際に割れ、そしてバランスを崩して自らの重さで崩れていったのである。
続いて、水面上に、ドラム缶を積載して浮いているいかだを銃撃するシーンがある。銃弾はガソリン入りのドラム缶の1つに当たって爆発、その衝撃がいかだを破壊、上に載っていたドラム缶は水中に沈んでいく。何気ないシーンだが、いかだを構成していた木材は浮力によってプカプカと浮いたままだが、ガソリンのはいったドラム缶は比重が高いのでそのまま沈んでいく。
このあと、すべてのオブジェクトに物理パラメータが本当に設定されていることを見せてくれるデモへと続く。「Half-Life 2」エンジンでは、SoftBody(柔らかい物)とRigidBody(堅い物)の振る舞いの物理エンジンを搭載しており、上記の物理パラメータの他に、「物の柔らかさ」のパラメータを持つのだ。
柔らかい物は衝撃を吸収する特性があるのでぶつかってもあまり跳ねず、また、自重でそのボディを支えきれないときにはフニャっと折れ曲がってしまう。マットレスを持ち上げたシーンでその様子がよくわかるはずだ。
そして次に人体を持ち上げて振り回してぶつけるというシーンを見せているが、人体もSoftBodyオブジェクトの一種である。しかし、マットレスと違うのは、人体は中に骨と関節をもっているという点だ。
こうした力の抜けた死体のような人体の物理を制御するエンジンを3Dグラフィックスの世界では一般に「Ragdoll」エンジンと呼び、実際、3Dゲームでは主に死んだキャラクタの姿勢制御に用いることが多い。
さて、人間の関節には折り曲げられる角度や方向、ねじれの角度に限界があることについては日々生活していて自覚があると思う。こうした関節制御はキネマティクス(運動学)といい、Ragdollエンジンは、前述のSoftBodyエンジンにキネマティクスを組み合わせたものと理解するとイメージしやすい。映像では死体を振り回し、腕や脚がぶらんぶらんと揺れ、その揺れ方で荷重の移動感までが視覚的に伝わってくるのが凄い。
そして映像中、脚をつかまれた死体が、発電機にぶつけられるが、死体がその発電機の形状に正確に乗りかかるようにしてぶつかっているところも見逃さないでいただきたい。今までの一般的なゲームであれば死体モデルが発電機モデルにめり込んでしまうところだ。「Half-Life 2」エンジンでは発電機の形状に正確に設定された衝突判定が、人体モデル側の関節の折れや回転を促しているのだ。
最後のシーンは地味だがもっとも見どころのあるところだ。つまみ上げた死体を机にぶつけて机に載っている物ごと池の方に吹っ飛ばしている。ここで注目して頂きたいのは、机の上に載っている物の落ち方だ。ペンキ缶やボール箱、スイカなどが全て独立した動きで落ちているのだが、その際、重いボール箱とペンキ缶には慣性の法則が働いているため、机の動きから遅れて落ち始めるのだ。文章だけだとわかりにくいので映像と共に読んでいただきたい。
「Half-Life 2」Promotion Movie シーン2 |
---|
MPEG1形式(LZHでアーカイブしてあります)・1分15秒 [12.5MB(アーカイブサイズ:12.2MB)] |
発電機の局面にそって死体が曲がっている点に注目。また、机のデモでは、机の方が先に動いて、箱とペンキ缶はその場にいようとする慣性が働いている |
■ すべてのサーフェースがディスプレースメントマップに対応
「ゲーム世界のインタラクティビティ」とは何かというと、端的に言えば「ゲーム世界がプレーヤーの行動に対して変化していく」ということになる。これを実現するために、「Half-Life 2」エンジンは、登場するすべてのオブジェクトのサーフェースに対しディスプレースメントマップ・パラメータを持たせたという。
ディスプレースメントマップとは直訳すれば「変位マップ」となるが、これは動的にオブジェクトの形状を変形させるテクノロジーだ。デモ映像では、地核振動かなにかで地形が盛り上がるシーンを見せているが、これは地形のデザインデータを盛り上がったシーンに更新させたり、盛り上がったモデルを置いているのではなく、もともと平らだった地面の各頂点を直接変位させて隆起を実現しているのだ。
単なるジオメトリの変位ではただの写像でしかないので、高度な技術とはいえない。そこで「Half-Life 2」エンジンでは、変位の際にポリゴン分割(ジオメトリの増大)を行ない、その変形後の形状を自然なものにしているのだ。
ゲームの場合、物の形状が変わるということは、必然的に当たり判定も変わらなければゲームプレイ時に違和感を与えることになってしまう。このあたりはいうまでもなく「Half-Life 2」エンジン側が自動的に面倒を見てくれる仕組みになっている。
この技術は、ゲーム中では、たとえば威力の高い爆発物を爆発させて地面に穴を開けてしまったりとか、ロッカーなどの大道具オブジェクトに物をぶつけたときに「その場所がへこむ」といった表現に活用できる。
「Half-Life 2」Promotion Movie シーン3 |
---|
MPEG1形式(LZHでアーカイブしてあります)・20秒 [3.43MB(アーカイブサイズ:3.35MB)] |
突如盛り上がる地面。「ディスプレースメントマップ」というキーワードはMATROX Parhelia系やATI RADEON9500、9800などのGPUに搭載されている「ディスプレースメントマッピング機能」を連想してしまうが(NVIDIA GeForceFX系には未搭載)、「Half-Life 2」エンジンがこの機能を活用してくれるかどうかは今のところ不明だ |
リアルタイムシャドウ生成は新世代エンジンのキーワードにもなっている。「Half-Life 2」エンジンのシャドウ生成は、ぼやけたフィルタリングを最大限にかけた影(シャドウマッピングの特徴)と、解像度の高い影(ボリュームシャドウの特徴)が混在していることから推測して、シャドウマッピングとステンシルボリュームシャドウの複合技だと思われる |
「Half-Life 2」も表向きDirectX 6時代のビデオカードでも動作することになっているが、今回、本稿で示したムービーで見られるグラフィックスとは別物になってしまうことは確実だ。「DX6のビデオカードでも動作する」というのは「動くだけ」と心構えを持った方がいい。
プログラマブルシェーダが必要になってくるのはいいとしても「なぜ大容量ビデオメモリが必要になるのか」ここに疑問を持つ読者が多いのではないだろうか。これは結論から言うとビデオメモリの活用のされ方がDirectX 8時代以降変わってきたからだ。
これまではビデオメモリといえば、フレームバッファとテクスチャのための領域という認識があった。もちろん実際にはそれ以外に頂点バッファやインデックスバッファ(頂点情報を管理するためのバッファ)もビデオメモリを利用して確保されるのだが、当時は絶対的なジオメトリ量が少なかったこともあり、その量は微々たるものだった。
ところがDirectX 8時代以降、プログラマブルシェーダの概念が導入され、テクスチャの利用され方が変わってきたのである。プログラマブルシェーダ世代では、テクスチャは「ポリゴンに貼り付ける画像」としてだけではなく、様々なベクトルデータの格納領域としてテクスチャが利用されるようになってきたのだ。
最も一般化しているのは法線ベクトル(Normal Vecto)をテクスチャに入れておくもので、これは特に「法線マップ(Normal Map)」と呼ばれる。最もよく使われるのが、凹凸情報を法線ベクトル化して法線マップとして格納しておき、最終的な陰影処理を行なう際にピクセルシェーダでこの法線マップから法線ベクトルを取りだし、ピクセル単位で高度な陰影処理を行なう処理系だ。
具体的には、視線ベクトルや光源ベクトルと、取り出した法線ベクトルを吟味して鏡面反射の色演算を行なったり、あるいは法線ベクトルをインデックスとして環境マップを参照させて映り込みを表現したりする。ちなみに、こうした技術を用い、少ないポリゴン数の3Dモデルの表面に対し、映り込みまでを考慮した細かい凹凸表現を再現する陰影処理は「環境バンプマッピング」と呼ばれる。結局のところ
(1)テクスチャにあらかじめ作成しておいたベクトルデータを入れる
という考え方は、プログラマブルシェーダ時代の3Dグラフィックスの基本プロセスなのだ。言い換えれば新世代ゲームエンジンでは、法線マップを画像テクスチャと同列に取り扱うのが当たり前のことになってきているのである。
(2)ピクセルシェーダでこのテクスチャからベクトルを取り出して、さらに高度な陰影処理を行なう
ちなみに、「Half-Life 2」エンジンでも、壁の煉瓦模様からキャラクタの服に至るまで、ほぼ全てのテクスチャが、対応する法線マップを持っている。法線ベクトルをどの精度で持つかにもよるが、単純計算するとテクスチャ使用量は昔の2倍になったと考えていいだろう。
そして、ビデオメモリを食うもうひとつの要因が影生成だ。メジャーな影生成技法にはシャドウマッピング(Shadow Mapping)、ステンシルボリュームシャドウ(Stencil Volume Shadow)の2つがあるが、前者はシャドウバッファの確保が、後者はステンシルバッファの確保が必要になる。これらは当然ビデオメモリから確保されるわけで、特にシャドウマッピングで解像度の高い影を出そうとすると、表示用フレームバッファの数倍のシャドウバッファの確保が必要になる。これも、ビデオメモリを多く必要とする要因となっている。
そして、最新3Dゲームエンジンでは、これまで無視できていた頂点バッファやインデックスバッファの使用量が、増大してきていることにも留意したい。これは、シーンあたりの絶対的なジオメトリ量が増えてきたためだ。「Half-Life 2」では人物キャラクタは約5,000ポリゴン程度から構成されているそうで、シーン全体では50万~100万ポリゴン程度になるといわれている。そうなると経験則的にいけば頂点バッファとインデックスバッファは概算で数十MBは確保されると予想される。ビデオメモリは今や128MBでも「多すぎない」のである。
■ プログラマブルシェーダー大前提のグラフィックスシステム
博士の肌のシワも法線マップによる表現 |
煉瓦の凹凸を感じられる陰影はピクセルシェーダと法線マップのコンビネーションから生成されたバンプマッピングによるもの |
水面を見てみよう。非常にリアルな水面の揺らめきだが、この表現も実は基本的な考え方は煉瓦の例と変わらない。ただし、法線マップによって表現されている凹凸が、ピクセルシェーダによって摂動されて、リアルタイムに変化しているためにこうした、さざ波のようなビジュアルになっている。イメージ的には凹凸をリアルタイムで動かしているバンプマッピングと考えるとわかりやすいだろう。
掲載した映像中の解説でも言っているが、水面の映り込みはフレネル方程式を考慮している。水面を見たとき、水面に対して見る角度が深い(直角に近い)感じになる近場は水底の景色がよく見えるが、見る角度が浅くなる遠くの水面は周りの景色をよく映り込ませているという現象に気が付いたことはあるだろうか。遠くにある水たまりは空を映しているのに、足元にある水たまりは透けて地面が見えるというのでもいい。こうした現象を再現するのがフレネル方程式だと思って頂きたい。
「Half-Life 2」エンジンの水面処理はさざ波だけでなく、このフレネル方程式をサポートしているのだ。いうまでもなく、これは頂点シェーダとピクセルシェーダの双方を使ったテクニックだ。なお、水面の映り込みはさざ波の凹凸の法線ベクトルをインデックスとして環境マップを参照することで行なっている。だから映り込んだ映像に凹凸感があるのだ。そしてその環境マップはよくある「描ききり」ではなく、シーンを低解像度でテクスチャにレンダリングしたものを適用しているようだ。いわゆるマルチパスレンダリングによる、本物の映り込み表現ということになる。
透けて見える水底の景色は、ただ透けて見えているのではなく、視線ベクトルを水面で折り曲げさせるすなわち屈折させる処理系を挟むことで屈折現象も再現している。その後はいくつか特殊なシェーダを適用したマテリアルのデモが続く。これらも考え方は水面のさざ波と同じだ。
炎のシーンでは光学迷彩をまとった透明人間のようなものが見えるが、人体モデルの表面に水面シェーダを適用しているだけだ。カメラに映ったG-MANが複数のディスプレイに現れるシーンは、カメラを視点にレンダリングしたフレームをテクスチャとしてディスプレイモデルの画面に貼り付けているだけで別段変わったものではないが、こうした処理系がシステマティックにサポートされるあたりに、「Half-Life 2」エンジンのポテンシャルの高さを感じる。
(後編へ続く)
「Half-Life 2」Promotion Movie シーン4 |
---|
MPEG1形式(LZHでアーカイブしてあります)・2分3秒 [20.5MB(アーカイブサイズ:20.2MB)] |
水面の揺らぎが非常にリアル。水面に沈んだ石にも影が映えている点にも注目 | 近場は水底がよく見えるが奥に行くに従って映り込みが強くなる。これがフレネル効果。もちろん屈折の効果も同時に考慮 |
光学迷彩。これもやっていることは水面の処理と変わらない。が、CGチックで見た目にかっこいい | 三脚に立てられたカメラがG-MANを捉える。その映像はシーン内の複数のテレビモニタに映し出される |
(2003年5月23日)
[Reported by トライゼット 西川善司]
GAME Watchホームページ |
|