|
Game Developers Conference 2005現地レポート3Dゲームファンのための「AGE OF EMPIRES III」エンジン講座(前編) |
ENSEMBLE STUDIOSリードプログラマDave Pottinger氏 | ENSEMBLE STUDIOSシニアプログラマMichael Bean氏 |
■ AOE3エンジンはENSEMBLE STUDIOの2代目3Dグラフィックエンジン
「AGE OF EMPIRES」シリーズはMicrosoftから発売されているが、このシリーズを開発しているのは「ENSEMBLE STUDIOS」というゲームスタジオで、初代「AGE OF EMPIRES」以降、ずっとRTSゲームを作り続けている、いわばRTS専門メーカーだ。
同社の初3D化作品といえば神話世界をモチーフにしたRTS「AGE OF MYTHOLOGY」(以下MYTHOLOGY)だ。
それまでの「AGE OF~」シリーズではプリレンダーグラフィックスを2D配置していたわけだが、「MYTHOLOGY」では、これを過不足なく単純にリアルタイム3D実装したような形態であり、ビジュアル的に確かに3Dではあるが、映像のリアリティという面においてはそれまでの「AGE OF~」シリーズと大差ないといってよかったと思う。「MYTHOLOGY」は、同社にとってはグラフィックスを完全3D化した初の作品ということもあり、今思えばあまり冒険はしない、いうなればグラフィック的には消極的な3D化アプローチで作れられた作品だったように思える。
実際、「MYTHOLOGY」は、プログラマブルシェーダ時代に突入した2002年に発売されているが、グラフィックスエンジンは固定パイプラインを使った、いわゆるDirectX 7世代のテクノロジーベースであった。
「AGE OF EMPIRES II」より。そのグラフィックスはプリレンダーの3DCGをチップスプライトとして配置描画する方式であった | 「AGE OF MYTHOLOGY」より。「AGE OF EMPIRES」シリーズのグラフィックの持ち味をほぼそのままの形で3D化したのがこの「MYTHOLOGY」 | 「MYTHOLOGY」のグラフィックスはDirectX 7であった |
■ 各特殊効果は4種類のレンダリングパスからそのハードウェアにあったものが自動採択される
開発初期時から「AOE3」グラフィックスエンジンに求められる能力として設定していたのは、300体から400体という大量のユニットを表示できるスケーラビリティだったそうだ。
そして、なによりも、ハイエンドのグラフィックスカードですごいビジュアルが体験できることをも重視し、最終的には「HalfLife2」や「DOOM3」のような最先端グラフィックスエンジンと肩を並べ、あるいはそれらを凌駕するような、いってみればグラフィックスカードのキラーアプリとなることを目標に据えたとのだという。RTSというゲームジャンルを考えると珍しい方針といわざるをえないわけだが、RTSの金字塔であるAOEシリーズの3D化作品ということで、その期待に見合う最高の3Dグラフィックスを提供することはなかば宿命となってしまったとも言える。
AOE3グラフィックスエンジンで、サポートされるレンダリングパスは固定パイプライン、プログラマブルシェーダ1.1/2.x/3.0の全4種。ユニークなのはその実装形式で、ある特殊効果に対し、その実現方法が各シェーダパスによって異なる実現方法で提供される点だ。
たとえば「バンプマップ」という特殊効果であれば、この実現方法としてプログラマブルシェーダ3.0を使うパス、2.xのパス、1.1のパスが用意され、固定パイプラインでは何も行なわない(バンプマップなし)……といった形でエンジン側に実装されている。
各マテリアルには、その質感を表現するための特殊効果が指示されており、ゲームを動かすハードウェア環境に応じた適切なパスが動くという仕組み。こうしたフォールバックできる仕組みは丁度DirectXのFXシステムにかなり近い |
■ これまたRTSでは初か? ~法線マップによるディテール表現
「AOE3」は、RTSという性格上、俯瞰視点になりやすく、このため必然的に画面上に無数の小さな建物や兵ユニットなどが描画されることになる。
小さく描画されてしまうことから、当然、多ポリゴンでモデルを構成するのは割に合わない。しかし、RTSは高解像度画面でプレイされることになるため、ディテール感が乏しいとユニット一体一体のリアリティが乏しくなる……というわけで、「AOE3」では、あらゆる地形、あらゆる建物、そして多くの兵ユニットにバンプマッピング(法線マップ)を適用し、ディテール感を付加している。
一般的な3Dモデルに適用する法線マップは、その3Dモデルにさらなる細かいディテールを付加する“薬味的な”意味合いで利用されるのが常だったわけだが、RTSにおいては、どうしても小さく描かれてしまうユニットに対して説得力のある形状情報を与える事に繋がり、RTSには今後必要不可欠なテクニックという気すらしてくる。
左が法線マップ適用前、右が適用後。砲身に注目。細かいことだが、兵ユニットとしての説得力の違いは歴然だ | 地面の細かい凹凸は法線マップによるもの。「AOE3」では地形の細かい起伏表現においてもバンプマッピングが積極的に活用されている | 帆船の旗のシワ、家屋の屋根のシワ、地表の雪の凹凸も法線マップによるもの |
■ 「AOE3」はOpenEXRベースの“本物の”HDRレンダリングを実装!
「AOE3」グラフィックスエンジンはおそらくRTSとしては初めて、正真正銘のハイ・ダイナミック・レンジ(HDR)レンダリングパスを採用する。
現実世界はRGB各8ビットの1,677万色の範囲では表現しきれないほどの明るさに満ちあふれており、人間の目は瞳の大きさを、カメラは絞り状態を変化させ、その景色が一番適切に見えるように調整している。暗いところでは多くの光を捉えるために絞りが大きくなり、明るいところでは光を抑制するために絞りが小さくなる。
さらに、明るい部分は、目ならば水晶体で、カメラならばレンズで内部散乱などが起きて、明るい部分があふれ出て見えるライトブルーム(ライトブリーディング)と呼ばれる現象が起こる。また、目の場合、明るい光が睫毛(まつげ)で回折し、キラキラと☆ (星形) が放射状に見えたりする。
HDRレンダリングとは、定義的には、現実世界に近い形で表現幅の広いフレームバッファでレンダリングすることをさすが、広義的には、そうした視覚効果までをいうことが多くなってきている。
「AOE3」のHDRレンダリングはプログラマブルシェーダ2.0世代のGPU以降で採用された浮動小数点実数バッファベースを用いており、最近流行の高輝度属性を盛り込んだ疑似HDRレンダリングとは違う、正真正銘のHDRレンダリングパスを採用する。
レンダーターゲットとしてGeForce 6800シリーズ発表時にOpenEXRバッファとして紹介された各ARGBが16ビット浮動小数点実数であるA16R16G16B16FのFP16フォーマットを採用する。なお、OpenEXRは「スター・ウォーズ」制作元のLucas FilmのILMとNVIDIAが標準化を推し進めているフォーマットだ。
さて、FP16というと表現幅として狭いような印象があるが、たとえば人間の受光細胞の10^14:1、すなわち14dBであり、OpenEXRのFP16では10^12:1だから12dB……、実際には必要十分だといえる。いわゆるA8R8G8B8の32ビットカラーだと255:1、約2.4dBしかないので、FP16は十分ハイダイナミックレンジということができるのだ。
さて、実際の「AOE3」グラフィックエンジンのHDRレンダリングパスは以下のようになっている。
(1) FP16バッファへのレンダリング
(2) レンダリングされたFP16バッファ中の高輝度部をダウンサンプルして低解像版の高輝度分布を抽出
(3)光の溢れ出し(ライトブルーム)や光の回折による光線(☆形)の付加
(4)トーンマッピング
トーンマッピングとは、前述した目やカメラの絞りを変化させて適切な明るさで映像を見る処理系にあたり、実際の処理系としてはFP16バッファでハイダイナミックレンジでレンダリングされた内容をA8R8G8B8のお馴染みの32ビットカラーに落とし込む操作に相当する。
さて、ATIのRADEON 9500以降におけるFP16バッファでは、アルファブレンディングやバイリニアフィルタリングが使えない制約がある。この点において、GeForce6系はそうした制約がないため、「AOE3」はGeForce6系で動かした方がパフォーマンス的にもビジュアルクオリティ的にも有利となる。
通常のレンダリングパス | HDRレンダリングパス。直接光が当たっている箇所がブルームを起こしてまばゆい感じになっている | 実際のゲーム画面からのショット。屋外では太陽光がHDR光源に設定されており、兵士のヘルメットや鎧に反射した陽光は通常の陰影から逸脱した光の溢れ出しが起こっている。こうした表現がHDRレンダリングの醍醐味だ |
■ 疑似大域照明技術の導入(1)~自己遮蔽項の実装
「AOE3」エンジンの映像で目を見張るのは建物や兵器ユニットなどのしっとりとした……それでいて細かいディテール感の強い陰影だ。
よく見ると、3Dオブジェクトの突起部やジオメトリ構造が入り組んだ部分に、影生成エンジン部によって生成される影とは異なる、柔らかいセルフシャドウのようなものが出ているのに気が付くだろう。
これは、「Ambient Occlusion(環境光遮蔽)」と呼ばれるテクニックで、DirectX 8世代に簡易的かつ擬似的な大域照明技術(グローバル・イルミネーション)として紹介されながらも、あまり3Dゲームには実装されてこなかったものだ。
やり方は、まず、3Dモデルを構成する各頂点から、ここか、どの程度他のポリゴンに遮蔽されているかを事前計算する。具体的には各頂点から全方位をぐるりと見回して全天が輝いていたと仮定したとき、そこに何パーセントの光が到達できるかを各頂点の付随情報として持っておくようにする(こうした処理系は3Dの世界では焼き込む、Bake……という言い方をよくする)。そう、この部分はいわばレイトレーシング的な作業であり、事前に計算して、3Dモデルの各頂点に格納しておくことになる。
たとえば、わかりやすく人体の顔で説明すると、鼻の穴の内側のポリゴンは鼻自体に覆われているので、ここにはほとんど光が到達しない。だから、ここの光の到達パーセンテージはかなり低くなる。一方、頬は外皮部分であり、これを覆うものはないため360°全天のうち半天分は光が到達することになる。顔に光が当たったとき、頬はその光で陰影が出るが、鼻の穴の中は光が届かないので常に暗くなるわけだ。
自己遮蔽項の有無でリアリティはこれだけ違う |
「AOE3」エンジンでは頂点ベースの自己遮蔽項を配慮する。これもRTSでは初めての試み |
実際のレンダリング時には、この頂点に焼き込んだ自己遮蔽項に配慮して光源処理を行なってやる。演算自体は一個ベクトル積が増えるくらいのものでそれほど重くはない。しかし、現在の3Dグラフィックスでは無視されてしまうはずの「そのポリゴンが、どの程度他のポリゴンに遮蔽されているか」という情報に配慮できるのでその恩恵は絶大なのだ。
もちろん、自己遮蔽項は光源の方向とかを全く無視した光の到達率(あるいは遮蔽率)でしかないから、結果としてはかなりインチキくさいものだ。たとえば光源が動いても、このテクニックで出るセルフシャドウは動いたりしないのでよく見れば嘘っぱちである。とはいえ、シーン全体に及ぶ大局的な影生成では、上手く影として見えてこない細かい遮蔽構造にも確実に柔らかい影が出てくれるので見た目としてはかなり説得力がある。
これも、まさに、俯瞰視点で細かい描写になりがちなRTSの映像に、一定のディテール感を増す方法として実にリーズナブルな技術だと言える。
■ 疑似大域照明技術の導入(2)~半球ライティングの実装
半球ライティングの概念図 |
3Dゲームグラフィックスの世界では、そうした、複雑な一次反射光以上の光が、そのシーン全体に溢れているという粗暴な仮定の下に環境光(Ambient Light)という物を設定する。
この環境光を、空の天球からの光と、地表からの反射光というふたつの大胆な簡略化モデルに置き換えて処理してやれば、今よりも大部ましな光源処理にならないかと考えられたのが半球ライティング(Hemispheric Lighting)という概念だ。
無条件に充満する機械的な環境光だけとは違い、天球からの柔らかい光と、地表からの淡い照り返しが配慮されるので、シーン全体から現実世界に似た柔らかい光の存在が感じられるようになる。
こうした効果を出すのに、キューブ環境マップを使った全方位のイメージベース・ライティングなどもあるが、キューブ環境マップの格納スペースや、ライティング時のキューブ環境マップ読みだし(すなわちはテクスチャ読み出し)の手間(バス帯域の消費)を伴うというパフォーマンスインパクトがある。これに対して、半球ライティングの場合は、定数と数個のベクトル積だけで処理できるので負荷も軽い。
「AOE3」のグラフィックスが、どれも「リアルな屋外シーン」として見えるのは、ここまでで解説した「HDRレンダリング」、「自己遮蔽項」、「半球ライティング」の総合的な合わせ技によるものと思ってよい。
「AOE3」エンジンは「RTSというゲームジャンルではあるが、今年の3Dゲームグラフィックスの最高峰を自負する」というだけあり、見所は多い。後編は影生成や水面処理、プロシージャルな地形表現などについて紹介したいと思う。
(2005年3月10日)
[Reported by トライゼット西川善司]
GAME Watchホームページ |