|
【Game Developers Conference 2004】レポート
3DゲームファンのためのUnreal3エンジン講座 |
EPIC GAMESのスイート展示ルーム。写真が撮影できるのはここからだけ |
数あるゲームエンジンメーカーのなかでも、もっとも成功しているEPIC GAMESの製品だけあり、単なる「見て楽しいメガデモ」としてではなく、「ゲームエンジンとして技術的にどこが優れているのか」ということをわかりやすく解説してくれたことが印象的であった。
■ 3DCG映画クオリティの映像をリアルタイムで動かすUnreal3エンジン
Unreal3エンジンは、「オフライン・レンダリングされた3DCG映画の映像をリアルタイムに動かすこと」を表現コンセプトとして設定しているという。これだけを聞くとかなりうさんくさく聞こえるが、突き詰めて聞いていくと、けっこうな裏付けがある。
まず彼らのエンジンでは、かなりの割合のテクスチャやフレームバッファ等に高精度バッファを活用している。ここが従来の3Dゲームエンジンと決定的に違うところだ。現在一般的なリアルタイム3Dグラフィックスに活用されている、いわゆる32bitカラー(αRGB各8bit整数の1,677万色カラー)ではなく、αRGB各16bit整数の64bitカラーや、αRGB各16bit浮動小数点実数(FP16)の64bitカラーといった、多bit高精度バッファを活用しているのだ。
ピクサースタジオの大ヒット3DCG映画「ファインディング・ニモ」等に代表される非リアルタイム3Dグラフィックスのレンダリングでは、様々な陰影処理をFP16やFP32次元で行ない、用いるテクスチャや最終的なレンダリング結果を格納するバッファも前述したような高精度タイプを活用している。相互反射や光拡散といった複雑な反射モデルや陰影処理を多段階で行なうためには、そうした高精度演算と高精度バッファが必要不可欠だからだ。
Unreal3エンジンではまだ限定的なところもあるが、かなりの割合の陰影処理やバッファを高精度次元で行なう方針をとっているという。そのようにした理由は、やはり、これも3DCG映画と同じ、複雑な陰影処理を多段階に行なっても映像が破綻しないため、なのだ。Unreal3エンジンは、いわゆる本当の意味でのハイ・ダイナミックレンジ(High Dynamic Range:HDR)レンダリングを実現しようとしている……といってもいいかもしれない。
それではどんな処理に高精度カラーと高精度バッファを活用しているのか、これについて意識しつつ、Unreal3エンジンの見所を追っていきたい。
3DCG映画と3Dゲームでまずなにが違うかと言えば、キャラクタのリアリティだろう。
動きはゲームでもかなり良いものになってきているが、決定的に違うのがその造形のリアリティだ。3DCG映画では、それこそ尋常でないほどの細かいディテールまでがモデリングされているが、3Dゲームでは多くても数千ポリゴン程度。自動車などならばともかく、生物や植物のモデルについては3DCG映画と3Dゲームとでは、そのキャラクタ表現のきめ細かさには格差が感じられる。
こうした状況に際し、Unreal3エンジンでは、なんと3DCG映画並みの細かいディテールを持ったキャラクタをリアルタイムに登場させることができるのである(もちろんフェイクで。そのからくりは単純。詳細は後述)。
さて、EPIC GAMESのブースとなっているスイートルームの壁には、オフラインレンダリングかコンセプトアートかと思われるおどろおどろしいモンスターの映像が張り出されていた(これも撮影禁止であった)。ところが、別室に移ってから見せられたUnreal3エンジンのプレゼンテーションでは、このポスターの映像と全く同じクオリティのキャラクタ達がリアルタイムで動き出し始め、度肝を抜かれたのであった。壁のポスターは画面ショットだったのである。
これらのキャラクタは数十万から約百万ポリゴンでモデリングされたものだそうで、これはほぼ3DCG映画のモデリング精度と同等なものだ。最新のPC用3Dゲームでの複雑なシーンにおける総ポリゴン数が数十万ポリゴンというレベルなので、1キャラクタあたりのポリゴン予算としてそれではやりすぎだ。3Dゲームエンジン上でリアルタイムに動かせるはずがない。しかしプレゼンテーションでは、実際に動いている。
しかし、これには“タネ”があるのだ。
数十万ポリゴンから100万ポリゴンの多ポリゴン・キャラクタのディテールを冒頭で触れた高精度テクスチャに法線マップとして落とし込んでいるのだ。そう。やりすぎにも見えたディテールは、バンプマッピングで表現されていたのだ。ただし、従来のx、y、z各8bit整数精度の法線マップではなく、多bit精度の法線マップなので、そのディテール感はほぼ完璧。3DCG映画レベルのキャラクタに見えてしまっている。
ちなみに、ディテールを多bit法線マップに落とし込んだあと、モデルを構成するポリゴンは10分の1ほどに削減されているという。彼らの説明によれば、エンジン表示時のモデルは8,000ポリゴン前後とのこと。この数字は最近の3Dゲームのキャラクタ表現に用いられるポリゴン数の平均よりもちょっと上くらいの値であり、これならば現実味はある。
本来のHDRレンダリングとは若干意味は違うが、キャラクタモデルのディテールをHDR法線マップで再現する……というUnreal3エンジンの方策は、ちょっと変わった意味でのHDRレンダリングといえなくはない。
こうした立体モデルを高精度レーザースキャニングして、3Dモデルを構築して、多ポリゴン3Dモデルに変換し、最終的にディテールを法線マップに落とし込んでポリゴン数は削減……という工程は3DCG映画制作でも行なわれている。なお、ここで示した映像はUnreal3エンジンとは無関係。今、説明したようなプロセスによる3Dモデル構築のオーサリングを提供するXYZ-RGB社の資料より |
キャラクタの質感も素晴らしく、その皮膚、身につけている衣服、金属でできた各種アクセサリや鎧などの質感も、その素材特有のリアルな陰影を見せる。詳しくは後述するが、これはUnreal3エンジン専用に新開発されたマテリアル(材質)シェーダーエディタによって作り出された、シェーダーをパーツ単位に適用しているためだ。
現行3Dゲームグラフィックスにおいてバンプマップによる表現といえば、水面のさざ波表現が3Dゲームファンならばお馴染みだろう。あれは水面上の映り込みと水面下の屈折した水底の映像を配慮した形でバンプマッピングを適用する、いわゆる環境バンプマッピングの発展系だ。
Unreal3エンジンのキャラクタを構成する各素材の質感再現は、基本的にはこの技術と同じようなアイディアによる。キャラクタのディテールは多bit精度の法線マップによるバンプマッピングで再現され、その部分部分の素材を再現する表現は、カスタム生成されたシェーダパスを通ることで再現されているのである。
簡略化して示すとするとこんな流れになる。
(1)多bit精度法線マップによるキャラクタディテール生成
(2)素材再現のためのカスタムシェーダ
(2)の部分はアーティストが作り込める部分だ。例えば、鏡面反射(スペキュラ)シェーダを20%、拡散反射(ディフューズ)シェーダを50%、擬似的な面下光散乱シェーダを10%かけるようなシェーダを「スキンシェーダ」としてカスタム定義し、(2)の部分に持ってこられるのだ。
かなり長いピクセルシェーダになるが、Unreal3エンジンはプログラマブルシェーダ3.0仕様GPUまでをターゲットに開発されていることもあり、この辺りは特に問題にしていない。プログラマブルピクセルシェーダ3.0仕様では命令数の制限が512以上となり、ほぼなくなっているためだ(速度的な問題はさておき)。
なお、今回公開されたUnreal3エンジンは、次期GeForce(開発コードネームNV40)搭載マシンで動作しており、上記のような複雑で長いピクセルシェーダも1パスで動作できているとのことだった。
「プログラマブルシェーダ時代の3Dゲーム開発において特に問題視されているのは、3Dゲームエンジン上での効果的な表現のデザインが、プログラマの力量にゆだねられてしまっていることだ」と語るのは、EPIC GAMESでレベルデザイナを務め、今回のUnreal3エンジンのプレゼンを担当するAlan Willard氏。
この点を打開するために、EPIC GAMESがUnreal3エンジンと密接した形で並行開発しているのが、前段でも少し触れたマテリアル(材質)シェーダーエディタだ。これは、前段で筆者が勝手に想定して例示したカスタムスキンシェーダのようなものを、GUIベースで作り出せるもの……とイメージしてもらいたい。
エディタ側に内蔵されている多数の基本的なマテリアルシェーダから適当なものを選んでメインウィンドウにドロップし、これらのシェーダを線で結びながら組み合わせていく。各シェーダの出力は鏡面反射、拡散反射など、各種反射モデルから選択が可能で、まるでフロチャートを描くようにしてシェーダの設計ができる。操作を行なうたびに、その瞬間に、シェーダの実行結果がサンプルオブジェクトに適用され、リアルタイムにプレビューできる。また、それぞれのシェーダがどういう条件で効くようにするのかをプロパティ設定できる。
たとえば、鏡面反射と環境マッピングを直結し、マーブル模様のアニメーションテクスチャが視点の位置関係によって貼り付け具合が変わるような、異方性ライティングが行なわれるようにプロパティ設定してやれば、これだけで金属に油膜が乗ったようなシェーダができあがる。
このツールはかなり強力であり、ブースにいた実際のゲーム開発社達の間から「これだけ欲しい」という声も聞かれたほどであった。「アーティストにシェーダーを作らせたい」というのは多くのゲームスタジオの願望であり、このツールはそれに対する1つの解という印象がある。
この他、Unreal3エンジン向けに新開発されたボーンエディタ、衝突判定エディタも紹介された。
ボーンエディタは、キャラクタの骨組みをデザインするものだが、その関節の可動範囲が設定できるだけでなく、重量等の物理パラメータや、その関節強度等の挙動パラメータが設定できる。関節の耐久度を超える形で、設定した可動範囲を超えて関節が曲がると、関節が抜けてしまう、といったアクション設定も可能であった。
設定したボーンの挙動は、すぐさまプレビュー画面で、ゲーム内物理エンジンが効いた形で実験できるので、最終的なゲーム中でのキャラクタアクションがどんなものになるのかをイメージしつつ制作が行なえる。
衝突判定エディタは、3Dモデルに対しての当たり判定を設定するもので、呼び出した3Dモデルに対し立方体範囲、球形範囲などの3D形状で衝突判定領域設定が可能。設定した衝突判定はプレビュー画面にて、ゲーム内物理エンジンを働かせた状態ですぐに実験ができる。
これらの取っつきやすく強力なエディタ群は、技術情報に明るくないゲームデザイナやアーティストには大歓迎されることだろう。
取材協力頂いたEPIC GAMES社のプログラマーAndrew Scheidecker氏 |
Unreal3エンジンのプログラマのひとりであるAndrew Scheidecker氏は、Unreal3エンジンの影生成エンジンについて、「Unreal3エンジンでは影生成を3つのケースに分けて処理している」と説明する。
まず、動かない固定光源によって作り出される、動かない静的オブジェクトの影は、いわゆるプリレンダーな影であるライトマップを活用したり、頂点データへの影の焼き込みで表現するという。なるほど、リーズナブルな解決方法である。
動く光源が作り出す、動いて変形もする動的オブジェクトの影は、「DOOM III」が採用していることでも有名なステンシルシャドウボリューム技法を採用しているという。これは光源から3Dオブジェクトの頂点を引き延ばして生成した影領域(シャドウボリューム)をシーンの深度情報を吟味しながらステンシルバッファにレンダリングし、最終的にそのステンシルバッファ情報を元に影ポリゴンを描いていく技法だ。
この場合の影はエッジのはっきりした、この技法特有の形状になる。この技法は、テクスチャのオパシティ(Opacity:不透明度)は配慮されない形の影になるので、画面に出ているキャラクタとは異なる影が出る場合もあるが「実際の3Dゲームでは、モデルデザインやレベルデザインで対応するしかない。」(Scheidecker氏)とのこと。たとえば四角ポリゴンに四つ葉のクローバー形状のテクスチャを貼ったオブジェクトの場合、影は四つ葉形状にはならず、ポリゴンの形そのままの四角い影になる。
そして3つめがUnreal3エンジン特有の影生成技法を採用しているケース。固定光源が作り出す、動的オブジェクトの影の実現様式には全方位シャドウマッピング(Omnidirectional Shadow Mapping)を使っているのだという。
シャドウマッピングといえば、Xbox、PC向けの人気タイトル「SplinterCell」シリーズが採用していることが有名な技法だ。これは光源を視点としてシーンを深度情報だけでレンダリングして、シーンの遮蔽構造をデータ化(シャドウマップの作成)。視点からの通常レンダリンは、描画するピクセルが遮蔽されているかどうかを、このシャドウマップを参照しながら行なっていく。
全方位シャドウマッピングは、これを発展させたもので、遮蔽構造を表すシャドウマップを浮動小数点実数テクスチャのキューブに行なっていくのだ。
キューブマップの例 |
キューブマップに描かれた映像をポリゴンに貼り付けるキューブ環境マッピングという手法は、最近ではよく見かける「映り込み表現技法」だ。全方位シャドウマッピングでは、そのキューブマップに映像ではなく、全方位(6面方向)の遮蔽構造をレンダリングして、全方位の遮蔽構造を生成するのだ。
全方位シャドウマッピングに用いるキューブマップには、浮動小数点実数テクスチャフォーマットの「D3DFMT_R32F」や「D3DFMT_R16F」などの1色浮動小数点実数フォーマットを採用する。なぜ1色フォーマットでいいのか。全方位シャドウマップにレンダリングする情報は、光源から遮蔽物までの距離情報1つだけだからだ。浮動小数点実数のキューブマップときくとギョッとするが、実際のキューブマップ容量は、1テクセル当たり16bitや32bitという、普通のキューブマップ・テクスチャと変わらないことになる。ただし、精度の高い全方位の遮蔽構造分布がレンダリングできるので、Unreal3エンジンの技法はHDR全方位シャドウマッピングということができるかもしれない。
シーン内に複数の光源がある場合は、その全ての光源について、用意した唯一のHDRシャドウマップに対して遮蔽構造をレンダリングしてやればいい。光源の向きがそれぞれバラバラでも、シャドウマップが全方位なので何の問題もないのだ。
最終的な視点から見たレンダリングは、通常のシャドウマッピングと変わらない。陰影処理モデルも、プリンだろうがフォンだろうか好きなものを使えばいい。
Unreal3エンジンのHDR全方位シャドウマップでは、近距離投射用と遠距離投射用の2つのキューブシャドウマップを用いているそうだ。最終レンダリング時に双方のキューブシャドウマップに対しての遮蔽構造を吟味することで、投射距離の長さに応じて、影のぼやけ方の違う「ソフトシャドウ」の表現が実現されるのだ。
この3つの影技法の他、キューブマップ化した6面ライトマップを、シーン内に逆に全方位投射する表現も紹介され、これも印象的であった。こちらはいわゆる全方位ライトマップ表現……ということになる。なお、こちらも近距離投射用と遠距離投射用の2つのキューブライトマップを用意し、投射距離に応じてぼやけ方が変化する。
3つの影生成技法+全方位ライトマップ表現が同居したシーンは、たしかに、3DCG映画に近いビジュアルになっていた。もちろん、相互反射などはサポートしていないので、よく見れば3DCG映画にはまだ及んでいないのだが、それでも現行のどの3Dゲームエンジンよりも、光と影の存在感が手応えとして感じられる映像にはなっていた。
なお、今回のエンジンデモは、来月発表予定の次世代GeForceのNV40で動作していたわけだが、背景とキャラクタが1体出てくるだけでもフレームレート的には20fps前後(目視による推測)をさまよっていた。さすがのNV40も、HDRバッファを多用されると息切れしそうなかんじだが、その処理内容を聞いた上で、ここまで動いていることを考えれば、逆にNV40のパフォーマンスの高さをうかがい知れるというものだ。
ちなみに、実際にこのエンジンを使った3Dゲームが製品化されるのは早くて2006年だという。ターゲットGPUはそれこそNV50世代以降ということなのだろう。確かに随分先の話ではあるが、著名エンジン達のように3Dゲームファンを「もうすぐもうすぐ」と煽らないだけ、逆に好感が持てるというものだ。
このような、いってみれば開発初期状態にあるエンジンを公に見せたのはどうしてなのか。
これは、現行のUnreal2エンジンのライセンス契約を一層伸ばすためだろう。同型エンジンのアップグレードというのは、それまでの関連ツールや素材などの移行が楽というメリットがある。「Unreal2エンジンを今から使ってもらえば、Unreal3エンジンを使ったすごいゲームを早期に出せますよ」というメッセージが今回のデモには込められていたのだと思う。
ちなみに、「日本でもこのUnreal3エンジンのプレゼンを行なってみてはどうか」という筆者の問いかけに対して、EPIC GAMESの副社長Mark Rein氏は、「実は日本でのデモは既に計画中だったりする。興味のあるゲームスタジオは是非ともコンタクトを取ってきて欲しいね」とコメントしてくれた。
まだ画面素材が一切ないのが寂しいところだが、「いずれ徐々に出していく」(Rein氏)とのこと。おそらく、5月開催される予定のE3のタイミングでは、なんらかのアップデートがあることだろう。
□「Game Developers Conference 2004」のホームページ
http://www.gdconf.com/
□EPIC GAMESのホームページ
http://www.epicgames.com/
□XYZ-RGBのホームページ
http://www.xyzrgb.com/
(2004年3月29日)
[Reported by トライゼット西川善司]
GAME Watchホームページ |
|