スクエニ、「スクウェア・エニックス オープンカンファレンス 2012」

「Agni's Philosophy」の舞台裏を明らかにする“技術編”


開催期間:11月23日~11月24日 開催
会場:ベルサール神田



 株式会社スクウェア・エニックスは、11月23日、24日の両日にかけて「スクウェア・エニックス オープンカンファレンス 2012」と銘するプライベートカンファレンスを開催した。既にお伝えしている遠り、本カンファレンスでは今年6月にE3 2012にてお披露目となった技術デモ「Agni's Philosophy」についてのポストモーテム的なセッションが披露されている。

 「Agni's Philosophy」のグラフィックス技術の構成要素については、弊誌連載記事「西川善司の3Dゲームファンのための「AGNI'S PHILOSOPHY」講座 /「不気味の谷」を渡りきる、次世代「ファイナルファンタジー」基準のリアルタイム表現力」に詳しい。

 本稿では、3Dモデルなどのアートワーク制作にフォーカスした「アート編」に引き続き、「Agni's Philosophy」の実現を支えた技術スタッフによる講演をまとめた「技術編」としてお届けする。

 本カンファレンスで技術面にフォーカスしたセッションは4つ。「ランタイム&パイプラインの構築と最適化」、「リアルタイムグラフィックス技術解説」、「サーバーサイド経路探索システム」、「次世代ゲームAIアーキテクチャ」である。このうち、「Agni's Philosophy」でその成果を見ることのできる2セッションを中心にとりあげていこう。

【「Agni's Philosophy」テクノロジーデモ】



■ テクノロジー推進部は、プリレンダー水準の膨大なデータをいかに乗りこなしたか?

岩﨑浩氏(スクウェア・エニックス、テクノロジー推進部 リードエンジニア)
データサイズの一例。数秒で終わる1シーンでこれだ
「Agni's」におけるデータフロー

 技術的詳細を扱うセッションのひとつめは、テクノロジー推進部でリードエンジニアを務める岩﨑浩氏による「ランタイム&パイプラインの構築と最適化」と題する講演だ。

 岩﨑氏のミッションは、「Agni's Phiolosophy」の開発にあたって、ビジュアルワークスによるプリレンダー映像品質のアセットを、「Luminous Studio」上で実行可能にすることだ。「次世代水準のゲーム開発で発生する問題に直面すること」をひとつの目標として掲げた本プロジェクトで、まず矢面に立ったのが岩崎氏ということになる。

 岩﨑氏は、まず第一の問題はデータサイズにあったことを解説。実例として「Agni's Philosophy」で使われているいくつかのシーンでのデータ量を披露した。それによれば、控えめなシーンでも頂点数500万、テクスチャ約1,000枚で総計1GBあまり、重厚なシーンでは頂点数1,000万近く、テクスチャ1,300枚でデータ量は1.8GBにものぼる。

 「Agni's Philosophy」のアート制作ではMayaを用いており、シーンデータが出来上がると中間フォーマットであるFBXに変換し、そこからLuminous用のデータに変換、そこでライブエディットやタイムライン編集を行ない、つなぎ合わせて最終データを出力するという流れになっている。

 このプロジェクトでは映像面のクオリティに関してヴィジュアルワークス部の仕事がメインとなってくるため、Luminous側でできる編集機能はあまり使わず、ほとんどMayaでシーンデータが完結していることが特徴だ。そのため、MayaからLuminousへのコンバート作業が頻繁に行なわれることになる。そこに問題が発生した。


あまりに巨大なデータサイズのため、Mayaからのデータ変換に時間がかかりすぎるという問題が発生した

データフローにおける問題点

 特に致命的だったのは、Mayaで作成したシーンデータを開き、FBXに変換し、FBXからLuminous用に変換する部分だ。あるシーンにおいてはそれぞれ6分、45分、1時間半という膨大な時間がかかる。これでは、テストし、改善し、またテストするというイテレーションサイクルが崩壊する。日々データが大きくなるにつれ、実際に崩壊しかかるところまで行ってしまったようだ。

 そこでテクノロジー推進部では、Maya側で頻繁に調整するパラメータは別ファイル化。またシェーダーの変換時に何度も同じコードをコンパイルして時間がかかってしまう問題対しては最初に出力したバイナリーを再利用するよう、Maya側のプラグインで対応してロード時間を短縮した。

 さらに、FBXを経由した変換に時間が掛かる問題に対し、同一シーンのMayaファイルを編集単位で分割し、Luminousのランタイム側で統合するという仕組みを導入した。また、FBXの変換等にCPUコアが1つしか使われないという問題の解決のため、データを細かく分けた上で複数のPCで分散処理するという対策により問題全般が「ある程度解決した」という。力技ではあるが現実的な方法である。


バージョン管理に使用していたPerfoceも高負荷で鈍重化。ときには一晩がかりでもデータのコミットが終わらないこともあったという様々な教訓が得られたが、本流の「Luminous Studio」では全て対策済みという

シーンのレンダリングパフォーマンス概要
ほとんどがOpaque(地形など)の負荷となっている

 続いてとりあげられたのはレンダリング処理の最適化について。「Agni's Philosophy」では従来では考えられないほどの頂点数を描画する(1シーンに1,000万ポリゴンにもなる)。しかし岩﨑氏によると、実行環境として用意したGeForce GTX 680、Intel Core i7-3770K 3.5GHz、メモリ32GBのPCでは、「ビジーなのはGPUの描画部分だけで、CPUはあまり使っていない」くらいには軽かったそうだ。特に、膨大な頂点を軽々と処理するGPUの頂点演算機能には感動すら覚えたとのこと。

 しかし、当初与えられたデータをそのまま描画するだけではパフォーマンスが低く、ある程度の最適化を行なった。その中で、表現に手を加えている最中のためシェーダーの最適化はしていないという。

 そこで岩﨑氏が着目したのは「Drawcall数の多さ」。1シーンに表示されるモデル数が膨大であること、また各モデルが多数のマテリアルから構成されているため、最初のシーンで1フレームの描画に3,375回ものDrawcallが発生していた。このためGPUがストール(描画処理待ちの状態)になることが多くパフォーマンスが低下していたわけだ。そこで同一マテリアルのものはまとめて描画するようにした。万能シェーダーで描画するオブジェクトが多かったため、Drawcall数の劇的な削減(85%減)に成功。GPUのストールがほぼなくなり大幅なパフォーマンスアップが実現した。

 もうひとつ効果があった最適化は、スキニングの結果を一旦キャッシュして複数のレンダリングパスで最良することで高速化が果たされた。ただし、シーンによっては前計算の負荷のほうが多くなり遅くなる部分もあり、条件に応じてON/OFFするように調整したとのことだ。


効果のあったDrawcallの最適化。赤線が最適化前、青線が最適化後の描画単位
Drawcall削減前と削減後のGPUプロファイル。ストールが劇的になくなっている

細かな最適化の一例。頂点データサイズの最適化は10%ほどの効果

 そのほか細かな部分も含め、「ごく一般的なもの」に最適化作業はとどまっている。特にゲーム開発ではまっさきに行われる3Dモデルの頂点数削減についてはほぼやっておらず、ヴィジュアルワークス部が作成したデータをほぼそのまま使用したとのことだ。

 これを端的に示したのが、冒頭のシーン。トラックが走る前景から奥に目を向けると巨大な崖があるが、実はその頂点付近に山岳を切り抜いて作られた寺院の3Dモデルがある。それをさらにズームすると精密に作られた寺院のドアがあり、さらにズームするとドアの取っ手に付けられた高詳細な装飾がある。さらにズームすると装飾を構成する縄がある。この縄だけで9万頂点も使っている。

 1ドットにも満たない面積に9万頂点が使われているという「プリレンダー向けのデータをそのまま持ってきた」からこそのシュールな現実に、会場は大爆笑。実際にはZカリングされて描画は行なわれない部分だが、Zテスト前の頂点の変換処理は行なわれる。しかしそれに要する時間は90マイクロ秒にとどまっており、最新GPUの凄まじい能力を証明。岩﨑氏も「本当に高速なので、メッシュの最適化はほとんどしませんでした」と興奮気味だ。

 ただしこれは地形など静的なデータに限った話で、動くものについては頂点処理がネックになることがあるので頂点を減らす、テッセレーターを使用するなどの対応が現実的とも。また無駄な頂点はメモリ使用量、ロード時間、作業効率に影響をおよぼすため、次世代水準のゲーム開発ではそちらの対策メインとして頂点数を削ることになりそうだと展望を述べている。

 ちなみに「Agni's Philosophy」で直面した変換時間の長さなどの問題は、本流版のLuminousでは既に解決されており、同様の問題は起こり得ないだろうとのことだ。「Agni's」のプロジェクトがエンジン開発半ばでスタートし、その時点で未完成なLuminousが枝分かれしたばかりに直面した問題、と見ることもできる。


遥か遠くの山岳頂上付近に隠された寺院、その門に取り付けられた装飾、そこで使われている縄に9万頂点。これが描画パフォーマンスにほぼ影響しないほど、現在のGPUは高速だ


■ 「Agni's Philosophy」の映像品質を支えるリアルタイムシェーダー技術

Remi Driancourt氏(スクウェア・エニックス、テクノロジー推進部)
Napaporn Metaaphanon氏(同上)

 カンファレンス2日目には「リアルタイムグラフィックス技術解説」として、「Agni's Philosophy」で使用されたグラフィックスレンダリング技術の詳細が披露された。講演を行なったのはテクノロジー推進部のRemi Driancourt氏とNapaporn Metaaphanon氏。

 大半の技術解説はDriancourt氏によって進められたが、情報量があまりにも膨大で、2時間のセッションではそのすべてを解説することができないほどだった。本稿ではセッション内で解説が行なわれた要素のうち、特に力点が置かれたキャラクターレンダリングについて字数を割きたい。

 なお、「Agni's Philosophy」ではプリレンダー品質の映像をリアルタイムで実現するにあたり、背景・人物ともにフォトリアルなシェーディング技法が取られている。クセのないリニア空間でシェーディングを行ない、そこからシーンの雰囲気に合わせた適切な色調補正を加えつつ、fp16のHDR空間からLDRにトーンマッピングするというのが基本の流れだ。

 その上で背景その他のオブジェクトには汎用的な万能型のシェーダーを主に用い、人物など重要性の高いものについては非常に手の込んだ特別なシェーディング技術を用いて、プリレンダリング品質に迫るリアルタイム映像を実現している。以下、その詳細を見ていこう。


・フォトリアルな空気感を演出するグローバルイルミネーション

リニア空間のHDRレンダリング
「Agni's」におけるグローバルイルミネーション(GI)

 シーン全体の空気感に寄与する環境光源の表現には独自のグローバルイルミネーション(GI)技術が用いられている。これは各オブジェクト表面での光の拡散反射(間接光)を計算に入れてシーン全体をライトアップする技法であり非常にフォトリアルな照明効果が得られるが、普通にリアルタイムで行なうにはコストが高い。したがって「Agni's Philosophy」では光源のダイナミクスを犠牲にし、GIの計算結果を内製のツールであらかじめ焼き込み、ライトマップ化することで対応している。

 ライトマップの各テクセルは、全方位からの光源の影響が球面調和関数(SH)の形で記録されており、視点方向の変化に応じてきちんと表面の明るさが変化するようになっている。従って、光源やオブジェクトの位置は動かせないものの、地面や壁面がカメラの方向によってはギラついて見えるようなダイナミクスが再現される。関節光源を含む光線の情報をしっかり維持しつつ、効率性の高い静的データが焼きこまれているわけだ。

 ダイナミックオブジェクトの環境照明については、立体空間を格子状に区切り、各地点での光の当たり方をSHの形で記録したもの(SH Irradiance Volume)を使用している。メモリーを多く使う手法だが、ライティングの結果が静的オブジェクトと調和しつつ、動的モデルに適用できるという点でメリットがある。

 通常のライティングとシャドウで表現できない、細かい凹凸や回り込みによってできる暗部の表現はアンビエント・オクルージョン(AO)によって実現している。高品質な表現のために予め焼きこんだAOを使用しているほか、動的なシーンに対してはスクリーンスペースのAO、また大きな動的オブジェクトが作る暗部など特殊なシチュエーションに対してオブジェクトベースドAOと呼ばれる技法を使用しているとのことだ(トラックの車輪周りに見ることができる)。


2D SHライトマップ。静止物に用いられるSH Irradiance Volumes。動的オブジェクトのライティングに使用される
GIが焼きこまれたサーフェイスのイメージスクリースペースAO(SSAO)
オブジェクトベースのAOは大型の動的オブジェクトに用いられる。このシーンではトラックのタイヤ周り

・リッチな表現を賢く詰め込んだスキンシェーディング

人間の体が持つ透明感の表現にチャレンジ
皮下散乱の概念

 「Agni's Philosophy」において、特に注意深く実装されているのがキャラクターのレンダリング機能だ。従来のシェーダーでは全く表現力が不足しおり、人物の皮膚、眼球、髪の毛それぞれに特別なシェーダーを用意。さらにいくつかのポストプロセスを加えることで説得力のある映像が実現されている。

 まず、人物の皮膚表現の基礎となっているのが表面下拡散(サブサーフェイススキャッタリング、SSS)だ。これは、人間の皮膚(本来は生物全般だが)が、半透明の層が重なった構造となっていることに着目した技法。受けた光のうち6%が直接反射(スペキュラー)となり、あとの94%は皮下で拡散し角層の色に基づいてカラーシフトを起こしたあと外部に放射される。

 「Agni's」ではこれをポストエフェクト的に行なうスクリーンスペースのSSS技法をベースとしスケーラビリティを確保している。また、皮下散乱のシミュレーションに用いるテクセルのサンプリングを、ボアソン分布の特殊なテーブル(回転して参照結果をブラすことができるので“disk”と呼ばれている)を参照しつつ行なうことで、よりヘビーな皮下拡散シミュレーションに対する情報量の少なさを補っているようだ。


スクリーンスペースSSSの概要サンプリングに工夫を加えたバージョン
実装されたSSSのパイプライン概念図スクリーンスペースで処理するため距離によって大きく負荷が変化する
SSSなしと有りの比較。SSSが適用されると一部に赤みを生じ、表面が滑らかになる

Kelemen SzirmayーKalosのスペキュラー
2種類のスペキュラーをブレンド

 これと同時に皮膚の質感に貢献しているのはスペキュラーの表現だ。人物用のスペキュラーには単純なPhongスペキュラーでは不足として、Kelemen SzirmayーKalos実装に基づくスペキュラー(BRDF、双方向反射率分布関数)の技法を用いている。これは反射地点毎に反射方向・強さの変化をもたらすスペキュラー処理で、肌の細かな凸凹による影響を加味したスペキュラー効果が得られるものだ。

 これをもとに2種類のスペキュラーをブレンドする。ひとつは、SH Irradiance Volume(GIの環境光)からの影響をメインに、キューブマップの影響を鈍くブレンドしたスペキュラーで、こちらは乾いた質感が得られる。もうひとつはキューブマップに基づいた強いスペキュラーで、これは濡れてギラついた質感となる。これらを適切に組み合わせることで、乾いた肌、脂ぎった肌、流れる汗などの多彩な質感が表現できるようになっている。


一般的なPhongスペキュラー「Agni's」でのスペキュラー
ウェットなスペキュラーをマスクして一部使用することで、汗や涙などの表現が可能となる

 人物用のAOも用意されている。あらかじめ焼きこまれたベイクドAOと、リアルタイムに付け加えるスクリーンスペースAOの両方が使い分けられている。通常のAOと異なるのは、AOのレベルに応じてカラーシフトを発生させ、暗い部分にやや赤みを持たせていることだ。これにより、暗い部分で皮下拡散の効果が強調され赤みを帯びるという、自然な表現がなされている。


AOの色計算に少々変化を与えることで、暗くなる部分に若干の赤みを持たせている
AOのあり、なしでの映像比較。細かい凹凸部分にメリハリが生まれている

 もうひとつ、人物の肌の透明感を表現するため、バックスキャッタリング(背景拡散)の効果が実装されている。これは指や耳などの薄い部分で、背景の光が透過し、厚い部分より明るく赤みがかって見えるものだ。これは、対象物の厚み情報を加味して光源色を反映させることで実現している。


バックスキャッタリングのあり、なしでの比較。自然な透明感が演出されている

 CGキャラクターに「眼力」を与えるため、眼球にも特別なシェーダーが用いられている。眼球は単なる球体ではなく、厚みのあるレンズがあり、その奥に虹彩がある。眼球を斜めから見れば、レンズによる歪みで虹彩の深さが違って見えるものだ。これを再現するためバンプマップで虹彩のへこみを表現し、パララックスマッピングで屈折を表現。違和感のないリアルな眼球描写がなされている。


拡散反射光にはバンプマップでへこみを表現環境光の反射には判定したバンプマップで盛り上がりを持たせる
スペキュラーには両方のバンプマップを適用合成された最終出力はこのようになる
パララックスマッピングによる屈折表現のあり、なしの比較。どちらが自然にみえるか瞭然だ

・髪の毛のシェーディングも抜かりなし!

伝統的な手法のB-Hair
NurbsベースのT-Hairを追加してボリュームアップ

 目と同様に人物を印象づける髪の毛の技法も手が込んでいる。まず、髪の毛のジオメトリーには2種類の技法を使用している。ひとつは、従来と同じポリゴンベースの髪の毛表現、もうひとつはNurbs曲線で与えられる制御ラインで毛束をシミュレーションし、テッセレーションで増毛させる技法だ。

 テクノロジー推進部では前者を「バナナの皮」に見立ててB-Hair、後者は参考にした論文の発表者の名前をとりT-Hair(Tariq-Hair)と呼称している。B-HairはMaya上で通常のメッシュとして作成され、T-HairはNurbs曲線の制御点の集合として作成される。制御点はバネのような力学オブジェクトとしてシミュレーションが行なわれ、重力や他のオブジェクト、あるいは風などベクトルフィールドの影響を受け動作する。

 T-Hairの制御点はDirectX 11のCompute Shaderでスムージングされた上で、テッセレーターで増毛される。増毛の際にはテッセレーターに与えるパラメータで縮れ、歪み、回転などを加えることが可能で、直線ではなくビルボードテクスチャーを貼り付けることで毛質の表現が可能となっている。これにより「アグニ」のサラサラな髪の毛から、冒頭に登場する男性の縮れたヒゲ、ハイエナ風モンスターの剛毛まで説得力ある体毛表現ができているわけだ。


T-Hairは召喚士など男性キャラクターのヒゲ、あるいは動物の体毛にも使われている
Mayaでのデータはこのような構成Nurbsの制御点は物理制御されたのちスムージング、テッセレーションで増毛、ビルボードテクスチャを生成するという手順で最終イメージとなる
テッセレーターでの増毛時に変形を加え、異なる毛質を柔軟に表現できる

 髪の毛のシェーディングについては、上記のB-HairとT-Hairの双方がうまくなじんで見える必要があり、難度の高い問題となる。「Agni's」では、髪の毛の色を決めるハイライト、二次ハイライトといった複雑な要素を近似するSteve Marschner氏による手法を取り入れ実装している。


スペキュラーなし第1ハイライトを追加
第2ハイライトを追加しフェーズシフトを加えるキューブマップによる環境反射などのライトを追加

PCFシャドウをややカスタムしたセルフシャドウ技法

 髪の毛が作る影については、PCF(Percentage Closer Filtering、近傍比率フィルタリング)シャドウの変形を用いている。具体的には、影の濃さを遮蔽物(この場合は毛髪)への距離に応じて減衰させている。この陰影付けにはシャドウマップ専用のジオメトリを用いることで負荷を軽減しているようだ。

 これだけでもそれなりの陰影がもたらされるが、「Agni's」ではさらに複数のポストプロセスを適用してしている。まず、アンシャープマスクをかけることで陰影のエッジを際立たせ、髪の毛や体毛の深みのある印影表現が実現されている。

 これに加え、エッジ部分にジャギーが目立ってしまうという問題についてはマルチサンプリングによるアンチエイリアス(MSAA)、ポストプロセス的にAAを行なうFXAA、そして被写界深度(DoF)によるボケを組み合わせることで自然なエッジ感を演出。髪の毛、体毛表現だけでも非常にリッチなポストプロセスが適用されているわけだ。


シャドウなしのイメージシャドウマップ用のジオメトリー
シャドウをやや効かせるシャドウをもっと効かせる
ポストプロセスなしアンシャープマスクでメリハリ付け
AAなしMSAAx8
さらにFXAADoFをかけて完成

・1度のカンファレンスでは紹介しきれないほどのレンダリング技術

異方性スペキュラーのイメージ

 本セッションではこのほか、衣服に用いられた異方性スペキュラー、ボリューメトリックフォグ、瓶や水滴の描写に使われた屈折シェーディング、煙や昆虫の表現に使われたパーティクルシステムなどのトピックがとりあげられたが、セッションの2時間という尺には収まりきらず、非常に駆け足での解説となった。

 本稿もここまで字数を尽くしてしまったので、これらについてはスライドの一部をご紹介するに留めておこう。講演者のDriancourt氏が言うには、ひとつの項目だけでも詳しく解説すればそれだけで終わってしまう、というほどの技術の集大成が「Agni's Philosophy」である。まさにそれを感じさせた密度の濃い技術セッションだった。

 「Luminous Studio」にまつわる技術情報は今回のオープンカンファレンスにとどまらず、ゲーム業界団体CESAが主催するCEDECでも一旦が披露されており、今後もさらに詳細な、あるいは幅広い情報が提供されることになるだろう。次世代ゲームグラフィックスの世界を垣間見せてくれた「Agni's Philosophy」およびそのバックボーンとなった「Luminous Studio」は、今後も引き続き世間の注目を集めていきそうだ。

【異方性スペキュラー】
スペキュラーの効き具合を角度によって変化させることで、上質な布の質感が得られている

【プリレンダリングとリアルタイム映像の比較】
これまで紹介したシェーディング技法により、プリレンダリング映像に驚くほど近い品質のリアルタイム映像が実現している

(2012年 11月 29日)

[Reported by 佐藤カフジ]