ニュース
【GDC 2013】「アサシンクリードIII」グラフィックス技術解説
広大な世界を美しく! ギリギリの工夫を重ねた職人的レンダリングテクニック
(2013/4/1 01:45)
Ubisoftの代表作「アサシンクリード」シリーズは、緻密に再現された都市環境と自由度の高い移動アクションという、比較的ゲーム技術への依存度の高いゲームコンセプトをウリにしていることが特徴だ。
その歴史は今世代のコンソールゲーム機とともに歩んできているが、昨年末に発売されたシリーズ第3作「アサシンクリードIII」に到るまで、さらに広大な世界、さらに多彩なアクション、さらに説得力のあるグラフィックスという全ての方向で、確実にスケールアップしているのだから大したものである。
特に今作では舞台を近代アメリカに移し、オープンワールド色を濃くした結果、世界はさらに広大になり、天候や季節の変化といったダイナミクスも追加されている。それにともない、グラフィックス技術においても数々のチャレンジをクリアすることになったのだ。
その内幕が、「Rendering Assasin's Creed III」と題されたセッションで披露された。講演者はUbisoft Montrealで本作のリードグラフィックスプログラマーを務めるJean-Francois St-Amour氏。「アサシンクリード III」というゲームだからこそここまで求められるという、知恵と工夫と根性の結晶のごときグラフィックス技術の一端をご紹介していきたい。
その技術、まさに職人芸。鬼気迫る最適化のオンパレード
まず天候表現について。「アサシンクリードIII」ではゲームに天候・季節の概念が存在するため、グラフィックス的には雨、雪といった環境変化の要素が追加されている。これらの実装はシンプルだ。近景の雨や雪はパーティクル。遠景の雨はたくさんの雨粒を1枚に描いたテクスチャを、雨が降る方向にUVスクロールさせてそれっぽく見せているだけだ。
よりチャレンジングなのは夏・冬の季節の変化の描写だ。2バージョンの景色をアーティストがデータとして作っていてはコストも容量も勿体無いので、本作では夏バージョンのアセットを基本とし、レンダリングの段階で冬っぽく見せるテクニックを実装している。初代「Crysis」でも同じコンセプトが実装されていたが、レンダリングコストがほぼ倍になっていた。本作でのそれは、ずっとパフォーマンスへの影響が低い方法だ。
まず、足が埋もれたりしないレベルの薄い雪の層は、テクスチャカラーのアルベドを高め(白っぽくする)、キラキラとした反射を加えているだけ。とてもシンプルで、雪の結晶の細かい描写はされないものの、きちんと寒々しい風景に見えるのがおもしろい。
深い足跡が残るような深い雪の表現はもっと手が込んでいる。まず、地面全体のジオメトリを複製して、数十センチの高さにずらしたジオメトリを用意しておく。これを雪面としてレンダリングする。雪面は見た目だけで判定はないので、上にキャラクターが立つと、その下にある地面のジオメトリに足が設置するため、若干埋もれた感じになるという塩梅だ。
その上をキャラクターが歩く際は、該当部分のポリゴンを細かく分割。これをシリンダー状の判定で押し出す操作を加えることで凹ませ、これをディスプレースメントマップとして元のジオメトリに合成。こうして、雪をかき分けた跡のような効果が作られる。その際、地面のテクスチャが露出しないよう、雪面のジオメトリにはあらかじめ変位量の上限を示す値が組み込まれている。
次にライティング周りの話題となるが、ここからはもう職人芸の世界だ。まずマップ全体の大局照明(グローバルイルミネーション、GI)について。間接光の影響を近似するフェイク系のGIは様々なゲームで実装されるようになっているが、本作のものは非常にユニークだ。
「アサシンクリードII」から「アサシンクリード リベレーション」までは、彼らが「WORLD LIGHTMAP」と呼ぶ方法を使って非常に軽量なGIを実装していた。ステージ全体を覆う2Dテクスチャに対し、アーティストが各地点の「照らされ具合」を手で書き込んでおくというものだ。
「WORLD LIGHTMAP」の照明データとして使われる、アーティストが作ったテクスチャ(ここではGIテクスチャとしよう)は、各テクセルのRGBチャンネルに色、Aチャンネルに高さ情報が格納されている。地形をレンダリングする際、GIテクスチャから該当地点のXY平面座標に対応するテクセルを取り出し、ライティングパラメーターに加える。
この方法は、組み込みが簡単で計算負荷が軽いなどの利点があるが、照らされ具合を色で格納しているだけなために光源位置の情報がない、ゆえに指向性がない、ゆえにスペキュラーを生成できない、そもそもデータを作るのが大変すぎる、という弱点がある。
そこで「アサシンクリード III」では、トップダウンの座標系で各地点の照らされ具合の情報をマッピングするという方法は同じながら、各ピクセルに、そこを照らしている光源の位置・その地点での光の強度を格納したテクスチャと、色相を格納したテクスチャの2段構えに変更した。
その結果、各地点がどこから照らされているのかという情報が得られるようになったため、メリハリのあるGI効果が得られるようになった。また、レベルエディタ上で光源の配置情報からGIデータを自動生成することも可能となったという。品質・開発効率の両面で飛躍的に進歩したようだ。
続いてアンビエント・オクルージョン(AO)。「アサシンクリード III」より前の作品では頂点単位のAOだったところ、今回はピクセル単位のAOに変更している。
頂点単位のAOは、ジオメトリが大雑把な部分がのっぺりしてしまうので品質を高めるためにはジオメトリを追加するしかなく、そもそも膨大な頂点データに明るさ情報も付加することになるため、ステージが複雑になるほど効率が悪く使いにくい技術になる。
そこでピクセル単位のAOというわけだが、流行りのSSAOでも、ちゃんとした事前計算型のAOでもない。非常に独特の方法だ。
説明が大雑把だったので、ここは筆者の推測も含むことをご了承いただきたい。まず、あらかじめステージ全体について、トップダウン視点にてデプス情報をレンダリングする。ステージ全体の標高データみたいなテクスチャができるので、それに7x7のガウスフィルタをかけてボカす。このデータを「WORLD AO」と呼ぶ。
レンダリング時には、該当地点のXY平面座標に対応するWORLD AOの値を参照する。その値が、その地点における遮蔽物のだいたいの高さ(高さA)とみなす。これからレンダリングする地点の高さを高さBとする。AよりBが小さい場合、その差に比例して、その地点への環境光の影響を弱めてレンダリングする。すると、すごく大雑把だがきちんとAO的な効果が得られるらしい。それっぽく見えるからこれでいいじゃない、という感じだ。
上掲のGIにしてもこのAOにしても、涙ぐましいまでの努力だと言わざるを得ない。計算コストのかかる重い処理は意地でも避けつつ、その上でメモリをギリギリまで節約する。汎用性は捨てる。本作の世界だけうまく描画できればいいというテクニックばかりだ。
それだけ「アサシンクリード III」では、より多くのエリアを一度にメモリ内にロードし、広大な世界を描き出すことに心血を注いでいるのだろう。現行世代のコンソールの性能を限界まで使う。特にメモリは1bitだって無駄にしてたまるか、という鬼気迫る思いを感じる。
次に、本作の世界を賑わせている大量の群衆についても触れておこう。街をうごめく数百人の群衆や、戦場に密集する5,000人の兵士などはまともに描画していられないので、GPUでのインスタンシングによって負荷を軽減している。しかし兵士たちは様々なアニメーションするため、個別にスキニング処理が必要であることが問題だ。
しかし、インスタンスで増やした兵士のジオメトリに対して一気にGPUスキニングするのは、膨大な頂点シェーダーのレジスター数が必要になるため不可能である。そこで、頂点バッファに人数分のボーン、頂点データをいっぺんに詰め込んでおき、スキニング処理をピクセルシェーダーで実装するという、非常にややこしい手法をとっている。
このように本作では、非常に高いゲーム仕様状の要求を満たすため、エンジニアリングの部分で、他に例がないような数々のユニークな創意工夫が施されている。他の作品だったら「ここまでしなくても……」という水準の最適化テクニックのオンパレードだ。その開発はさぞ大変だったろう。ここまでやり遂げた講演者のSt-Amour氏に敬意を表したい。
DirectX 11フィーチャー対応で、超リッチなPC版もチェック!
昨年末にリリースされた「アサシンクリード III」のWindows版は、DirectX 11の機能を活用し、よりリッチなグラフィックスを実現したハイエンド版という位置づけになっている。その詳細も本公演で触れられていたので、最後にご紹介しておこう。
DirectX 11版では、コンソール版に比べ根本的にディティールが向上している。レベルオブディティール(LoD)の距離が4倍、メモリに展開されるエリアの広さが2倍、テクスチャ解像度は最大、という感じである。
テッセレーションも使用されているが、曲面を滑らかに見せるフォンテッセレーションの仕様にとどまっている。その代わり、シャドウマップの解像度が倍になったり、PCF(Percentage Closer Filtering、近傍比率フィルタリング)で実現されていた半影表現に、さらに計算負荷の高いフィルタリングをかけることで半影の品質を上げるといったことも行われている。
とくにAO周りは、グラフィックスの雰囲気をぐっと引き締めるものということで、彼らがMHBAO(Multi-resolution Horizon-Based Ambient Occlusion)と呼ぶユニークな方法が取り入れられている。負荷の高いHBAO(Horizon-Based Ambient Occlusion)を低解像度で行ない、それにフル解像度のSSAOを組み合わせるという方法のようだ。
DirectX 11世代GPUの性能の高さに任せて、とりあえず詰め込めるだけ詰め込んでみたという感じでもあるが、実際、PC版は別次元のグラフィックスを楽しめるバージョンとなっている。本セッションの内容を踏まえつつ、コンソール版に比べてどのあたりがよくなっているかなどじっくり観察しながらプレイしてみるのも面白いかもしれない。