「GDC2003 EXPOレポート」

〜究極のゲームエンジン登場〜

Text & Photo by トライゼット西川善司


■ドイツの職人芸がゲームエンジンの常識を打ち破る!
   究極のゲームエンジン,CRYエンジンが姿を現した!

 Ubi Softグループ傘下のCRYTEKは,ドイツを拠点に活動するゲームスタジオ。彼らが開発中の「CRY」エンジンは,今,業界やゲームファン達から「究極のゲームエンジン」と称され,熱い視線が注がれている。筆者もイチオシのゲームエンジンだ。
 2001年にGeForce 3が発表されたときに,CRYエンジンの映像はスクリーンショットだけ公開された。下の恐竜の映像に見覚えがある人も少なくないはずだ。そのあと,しばらく姿を隠していたCRYエンジンだが,久々に我々の前に姿を現した。

CRYTEK社のブース。小さいながらも注目度は高く,大手ゲーム制作企業からの引き合いも多い模様。筆者の前にミーティングしていたのは"コナミ"だった 2001年に初公開されたときのCRYエンジンの映像。当初「XISLE」という名前で開発が進んでいたゲームは「FAR CRY」に改称された。今年で開発3年めを迎える


■ゲームツクール感覚のCRYEDIT

CRYEDITの画面

 CRYエンジンは,WYSIWYG(What You See Is What You Get)ならぬWYSIWY-PLAY(What You See Is What You "Play")をコンセプトに開発が進められている。データ構造を作ってはゲームランタイムにリンクしてテスト……という一般的なミドルウェアスタイルではなく,最終的なゲーム画面に近いビジュアルを直接作り込んでいけるのだ。開発画面はマップ制作ツールやレベルエディタに近いインタフェースで,ゲームの中核部分を作り込むことができる。その意味では,日本でいうところの"ゲームツクール"シリーズような感覚に近い。

 このゲームのレベルエディタのようなユーティリティは,「CRYEDIT」と名付けられている。CRYエンジンのすべてのフィーチャーにアクセス可能で,なおかつGUIベースでインタラクティヴにゲーム世界を作り込めるものだ。地形の作り込みや3Dキャラクター,小道具/大道具の配置だけでなく,それらを最終的にゲームにまとめたときに「ゲーム世界でどういう挙動を示すか」という部分までを,その場で確認できるのだ。これが業界を震撼させた要素の一つでもある。
 たとえば地形をデザインして岩を配置,その後ろに敵キャラを設置する。このあとプレイヤーキャラクターをその場で出現させれば,すぐにテストプレイが行えるのだ。このとき,その配置された敵キャラは,あらかじめ割り当てられたAIスクリプトの通りの挙動をする。たとえば臆病で,敵を視界に捉えたら隠れるようなAIスクリプトが設定されていれば,こちらの姿を見かけたあと岩に隠れる動きをする。コリジョン(衝突判定)エンジンや物理エンジンも動作しているので,こちらが銃撃すれば相手は当然吹っ飛ぶし,銃弾が岩に外れれば,それに驚いて反撃をしてくる。
 ゲーム世界の構築とテストプレイがインタラクティヴかつシームレスに行えるのが,CRYエンジンそしてCRYEDITの強みなのだ。



■グラフィックスエンジンはDirectX 9世代GPUにいち早く対応

この映り込みは固定環境マッピングではない。リアルタイムレンダリングしたシーンをテクスチャに出力,これを環境マップとして利用して,もう一度レンダリングする。だから木が揺れれば,水面に映った木も同様に揺れる

 CRYエンジンのグラフィックスエンジンの基本設計は,GeForce 3時代から進められていたこともあり,グラフィックスエフェクトのほとんどがプログラマブルシェーダベースで作り込まれている
 用意されているシェーダプログラムライブラリの数は圧倒的で,それだけでもビジネスになるのではないかと思わせるほどだ。シェーダプログラムは,ゲーム開発サイドで追加,あるいはシェーダライブラリにあるものをカスタマイズ/リファインして利用することもできる。
 なお,シェーダプログラムの一部は,DirectX 9よりサポートされたプログラマブルシェーダ2.0ベースで作られているとのこと。CRYエンジンはほかのエンジンに先駆け,DirectX 9のDirect3Dフィーチャーへの対応を開始したわけだ。
 テクスチャはゲームエンジン側でなんと64レイヤーまでをサポートする。単なるテクスチャの重ね合わせだけでなく,シーンをテクスチャにレンダリングしてこれを貼り付ける,いわゆる"マルチパスレンダリング"もシステマティックにサポートする。
 たとえば金属面や水面への映り込みは,固定キューブ環境マップを使ったフェイクを採択してもいいし,実際にリアルタイムレンダリングしたシーンを環境マップテクスチャに使って,本当の映り込みを採択することもできるのだ。

 また影生成は,ライトマップによる静的な影はもちろん,動的なリアルタイムシャドウ生成にも対応する。
 CRYエンジンは影生成にも徹底したこだわりを見せており,ボリュームシャドウ技法,シャドウマッピング技法,双方のシャドウイングに対応。ホストのGPU性能やシーンに合わせてその技法を選択できるようになっている。
 一般に,屋外シーンはシャドウマッピングが不利だといわれている。シャドウマッピングは,複雑なシーンでもセルフシャドウを含めた正確な影が生成できるのが利点だが,登場オブジェクトが多い場合には,シャドウバッファへのレンダリングに時間がかかるし,描画エリアが広い場合には膨大なシャドウバッファ容量が必要になってしまう。屋外シーンではこういう状況が起こりやすいのだ。一方,ボリュームシャドウにはそういった問題はないが,複雑なシーンで3Dキャラクタ同士が影を落とし合う"相互投射影"や"セルフシャドウ表現"が面倒なことになる。
 そこで屋内シーン,屋外シーンの両方のマネージメントに対応するCRYエンジンでは,屋外シーンではボリュームシャドウ,屋内シーンではシャドウマッピングといった使い分けができるようになっているのだ(もちろん,あえてすべてのシーンでどちらかの技法を統一して使うこともできる)。ちなみに,DOOM IIIではボリュームシャドウ技法のみを使用している。影生成はフォトリアリスティックな3Dグラフィックス表現には欠かせない部分であり,CRYエンジンは数あるゲームエンジンの中でも,この点に真剣に取り組んだ数少ないエンジンだといえる。 「こちら」(32.9MB)のムービーでも,相互投射影やセルフシャドウが動的に生成されている様子が見られるので,じっくり観察してもらいたい。

これはシャドウマッピングによるリアルタイムシャドウ。若干影の解像度が低いのがその証拠。木が揺れれば影も揺れる。ビデオメモリが大容量(128MBや256MBなど)のビデオカードならば,大きいシャドウバッファが取れるので品質も向上するはずだ 水面のさざ波は法線マップを摂動させた動的バンプマッピングによるもの。いうまでもなくプログラマブルピクセルシェーダを使用して実現している シェーダプログラムのソースコードの一部。最近制作中のシェーダプログラムは,NVIDIAのCgやマイクロソフトのHLSLで作られているとのこと

なにげないシーンだが,よく見ると明るい部分が白くかすんでいるのが分かると思う。これはプログラマブルシェーダを使った"トーンマッピング"により実現しているオーバーブライト表現。最近流行のテクニックだ 各人の持っている銃の影が服にも投射されているのが分かる。これがセルフシャドウ 電球が揺れると影も揺れる。これがCRYエンジンこだわりの影生成


■新しいLODの形
   「POLYBUMP」テクノロジー

このキャラクターモデルの顔や衣服のシワや,ベルトの凹凸もPOLYBUMPによるもの。このキャラクターは見た目よりもポリゴン数が少ないのだ。遠くまで見える背景にも注目

 CRYエンジンは,遙か遠方までをエピックスケール表示するポテンシャルを持つ。仕様上,2km先までをレンダリングできるとあるが,その際には動的LOD(Level of Detail)が適用される。動的LODとは,今やゲームエンジンには必須ともいえる,視点からの距離に応じて描画オブジェクトのポリゴン数を増減させるテクノロジーだ。遠くに見えるオブジェクトはどうせ細部までは見えないので,頂点を間引いて少ないポリゴン数で表現し,近くのものは高精度モデルで見せる……というもの。具体的にいうとLODとはこのようなことを行う処理系になる。
 ただしLODにも弊害はあり,頂点の削減されたモデルはそのディテールを失うことになる。CRYエンジンはこの問題に対し,ポリゴンを削減してもディテールを失わない,画期的なLODシステムを開発した。それがCRYエンジンのウリの一つである「POLYBUMP」テクノロジーだ。
 このテクノロジーは,3Dキャラクターモデルの凹凸のうち,視点から遠くなったものに関しては頂点の少ないモデルで表現するが,その際,失われる細かなディテールのジオメトリ情報はプログラマブルシェーダを活用したパーピクセル・バンプマッピングに置き換えて表示するというもの。人の顔ならば目鼻口の部分の細かな凹凸やシワを法線マップに落とし込み,実際のレンダリング時にはポリゴン数の少ない顔モデルに顔の凹凸をバンプマッピングで表現してしまう…というわけだ。
 もちろん,バンプマッピングとは「ジオメトリが"あるかのように"ライティングするだけ」のテクニックなので,実際にサーフェースに凹凸が生成されているわけではない。ただ,視点からやや離れた位置にあるモデルのものならば,映像全体で見た場合には,この凹凸がフェイクであるということはまず分からない。岩肌や水面の凹凸の表現に使うのが一般的だったバンプマッピングを"ディテールを保ちつつ,ジオメトリを節減するために応用する"というのは,まさにコロンブスの卵的発想だといえよう。
 なおCRYTEKスタッフによれば,人の顔だけでなく,服のシワ,自動車のタイヤ,人工建造物上のケーブルや溝,ネジといったものも,POLYBUMPで表現すると効果的だとのこと。「ポリゴン数の少ない基本モデルに対し,より細かなディテールを含んだ頂点テクスチャを基に,ポリゴンを分割していく」ディスプレースメントマッピング(D-MAP)という機能がDirectX 9よりサポートされたが,CRYエンジンのPOLYBUMPはその中間的な技術だといえる。

 ところで,このPOLYBUMPの実際のデモも入手したので,各自のマシンで試してみてほしい。なお,実行にはプログラマブルピクセルシェーダ1.1を必要とするので,最低でもDirectX 8世代のGPUが必要だ(デモのダウンロードと使用方法は,本記事末尾に記載)。

遙か彼方に見える島や山々は「一枚絵背景」ではなく,実際にエピックスケールレンダリングされた3Dグラフィックス このタイヤの凹凸もPOLYBUMPテクノロジーによるもの。プログラマブルシェーダによるパーピクセルバンプマッピングによって表現されるので,光が動けばタイヤの溝の陰影も変わる


■"こだわりすぎ"の物理エンジン

流体力学のデモ。撃ち殺した敵兵が水面にプカプカと浮いて流れる。浮いている死体を銃撃すれば,流れ方も変わる。やりすぎだ!

 ゲームエンジンというと,どうしても3Dグラフィックスエンジン部分ばかりが取りざたされるが,実はゲームをプレイしたときにプレイヤーが感じるリアリティを左右するのは"物理エンジンの出来具合"だといわれる。どんなに見た目がリアルでも,動きが変だと違和感を生じるためだ。
 しかし,物理エンジンの制作には3Dグラフィックスとは別の,物理現象の簡略モデル化のノウハウが必要であり,グラフィックスエンジンは自前だが,物理エンジンは外部からライセンスしてインプリメントしている……といったゲームエンジンも多い。たとえばあの有名な「DeusEx2」エンジンも,物理エンジンはHAVOK製のものを採用している。
 だがCRYエンジンは,物理エンジンも自前で開発したものを採用しており,グラフィックスとの連動が完璧に行えるようになっている。

 筆者が驚かされたのは,屋内で銃を乱射するデモ。本棚や椅子,テーブルなどが吹っ飛び,それらがぶつかり合って倒れていく。それだけでなく,本が本棚からバラバラと床に落ちたのである。そして電球の傘を撃てば電球が振り子のように動き,室内にあるすべてのオブジェクトの影も電球の揺れに合わせて動く。撃ち込んだ銃弾は壁や室内の小道具に弾痕を残すが,その弾痕形状は壁の向きと射軸との関係を考慮して算出・生成されるため,一つ一つが異なる形状となる。シーンに配置されたすべてのオブジェクトに相互干渉付きの物理エンジンが効いているのだ。これはすごい。

 またCRYエンジンは,人体に関しても最近流行の双方向キネマティックス(運動学)をサポートしている。関節を曲げると接続されているオブジェクトが動く処理を「順方向キネマティックス」,オブジェクトを動かすとそのオブジェクトが接続されている関節が適切に曲げられる処理系を「逆方向キネマティックス」という。CRYエンジンでは,この両方向のキネマティックスをサポートする。
 たとえば,ある3Dキャラクターが銃撃を受けて吹っ飛ばされるとする。そしてその後ろに,壁や椅子やテーブルなどの小道具があったとする。従来のゲームエンジンでは,この吹っ飛ばされたキャラクタの体が壁や小道具にめり込んだりしていた。CRYエンジンではこのような場合,壁や小道具にキャラクターが衝突すれば,現実世界同様の物理に従い折れ曲がるのだ。
 こうしたキネマティックスは,人体アクションがテーマの3D格闘ゲームですら意外と適当に処理されている場合がある(パンチやキックがめり込んだりとか)。今後3Dゲームグラフィックスを見る際には気にしてみるといい。そのゲームの物理エンジンの善し悪しが分かってきて面白いかもしれない。

飛行物体の物理エンジンも当然搭載。ローターの風圧が水面に波紋を作り出している様に注目!!
 さてCRYエンジンは,本格的な車輌物理エンジンも実装したという。4輪車の荷重移動,各車輪の全方向当たり判定,接地摩擦係数,サスペンションのバネの挙動といった要素をサポートする。
 筆者が見せてもらったのは,CRYEDITにてジープを四台縦に並べて出現させて落下させるデモ(ムービーにも,同様のデモが収録されている)。地面にあたってバウンドし,車体と車体が重なり合うようにぶつかるのだが,各車輪が別の車輌のボディにめり込むことはなく,互いのボディラインに正しく車輪が乗った状態でクラッシュする。その際,各車輪のサスペンションは独立したバネ挙動を見せる。
 CRYTEKのエンジニアは「CRYエンジンならば,オフロードカーのレースゲームを作ることだってできる」と豪語していたが,なるほど,このデモを見る限り,確かに説得力がある。

 このほか,CRYエンジンに実装されている物理エンジンとしては,"布の挙動"の物理エンジン,いわゆる「クロスシミュレーション」がある。多くの3Dゲームにおいて,まだ衣服はテクスチャ付きステッカー程度の表現しかなされていないが,CRYエンジンでは,3Dキャラクターの動きに衣服オブジェクトが翻弄される動きを見せてくれるのだ。また流体力学,液体力学の物理エンジンも実装されており,これらを用いてリアルな水面上の波,水流の動きなどを制御できる。
 筆者が見せてもらったのは,下半身が水の中に浸かった3Dキャラクターを射殺するデモ。3Dキャラクターは,銃弾を受けて水しぶきをほとばしらせながら吹っ飛び,その後,水面の動きに従ってぷかりぷかりと死体となって浮き,流れていくのだ。その死体の上に別のキャラクターを載せると,その重みで死体がより深く水に潜る……という具合だ。
 このほかにも「地球シミュレーションをやる気か?」と思わせるほど多くの物理エンジンが搭載されているが,すべてを紹介するとキリがないので,このあたりで止めておく。



■そのほか,CRYエンジンの特徴

左がCRYエンジンのプロデューサー兼社長のCevat Yerli氏,右が「FARCRY」のプロデューサーChristopher Natsuume氏

 CRYエンジンは,植物のマネージメントもサポートする。今回のGDC2003レポート #15で紹介した「speedtree」などと同様に,植物モデルはパラメータで自動生成が可能になっている。CRTEDITでの地形生成の際,地面テクスチャを貼り付けるだけでなく,草や木を密度や種類を指定して生やすことができるのだ。
 またCRYエンジンには「システマティックAI」と呼ばれる,「シーン適応型のAIエンジン」も搭載される。シーン適応型とは,フィールドに配置した小道具や大道具の位置,自分以外のキャラクタの情報の位置などを処理し,次に自分が採るべき行動を決定していく処理系のこと。
 たとえば,あるキャラクターの周囲に岩を配置してやると,その岩に身を隠すような行動をとるのだ。なお,AIはスクリプト言語を使ってカスタマイズが可能で,そのゲームやキャラクターの性格にあった行動をとらせられるとのこと。

 ちなみに,サウンドエンジンは5.1CHサラウンドと,クリエイティブEAX2.0に対応。CRYエンジンは現在,クロスプラットフォーム対応ミドルウェアとして,CRYTEKスタッフ12名の手によって開発が進められており,PC版を元にしたXbox版も同時進行中だという。またPlaystation2やGameCube版の開発も予定されており,2003年第4四半期より,ライセンス問題をクリアしてから開始する予定となっている。
 CRYエンジン採用のゲーム第一号は,CRYTEK自社より発売予定の「FARCRY」で,発売日は未定。FARCRYはCRYTEKスタッフ32人で開発中とのことで,E3にはUbi Softブースにてプレイアブルな展示を行うとのことだ。
 今年のE3において,PCゲームとしては最も注目すべきタイトルになりそうだ。

この草木の表現は大した物だ

AIをテストしているところ。岩を配置してやると,そこに隠れるようになる こちらが銃撃すると,岩から岩へ逃げ隠れしながら反撃してくる


■CRYエンジンのデモムービーは「こちら」(32.9MB)

<<ムービーの再生方法>>
 インストールは不要で,Crytek_Small.exeを実行するだけでムービーが始まる。画質は粗めだが,CRYエンジンの実力は実感できるはず。必見だ。

■POLYBUMPのデモプロプログラムは「こちら」(6.99MB)

<<デモプログラムの使用方法>>
 polybumppreviewer.exeを起動してインストール。その後[スタート]メニューから[Crytek]−[PolyBump Previewer]を開いて実行する。
 プログラムが起動したら,「File」メニューから「Specify Source Objects」を選択し,「Samples」フォルダからオブジェクトを読み込む。「Head_OS」フォルダならばhead_highがハイポリゴンモデル,head_lowがPOLYBUMPモデルだ。

ワイヤーフレームにすると,そのポリゴン数の違いが分かる。1/100に減ってこのディテールが出ているならば,ゲーム中に遠くに見える分には違和感はないはず 左がオリジナルモデルで,2万8000ポリゴンからなる。右がポリゴン数を1/100に減らしたPOLYBUMPモデルだ