2012年11月23日と24日、スクウェア・エニックスが東京都のベルサール神田で公開技術カンファレンス“スクウェア・エニックスオープンカンファレンス2012”を開催した。
その中から本稿では、同社テクノロジー推進部のドリアンクール・レミ氏とメタアパノン・ナパーポーン氏による発表“リアルタイムグラフィックス技術解説”の内容をお届けする。なお、講演はおもに人体周りの内容をドリアンクール氏が、後半の無機物周りのシミュレーションなどをメタアパノン氏が行った。
テーマは、テクノロジー推進部が開発中の最新ゲームエンジン“Luminous Studio”の技術デモ「Agni's Philosophy」を制作するにあたって、どのようなリアルタイムCG技術が使われているか。最新の学術的研究なども応用した専門的な内容だったが、講演中に見せていたデモ映像や参考画像が面白かったので、専門用語は適宜読み飛ばしつつ、「へー、そんなことやってるの」程度でも興味を持って頂ければ幸いだ。
グローバルイルミネーション
おおざっぱに説明すると、照り返しなどの間接光などを考慮して照明効果を計算すること。実際にはすべての光線の行方を追うわけにはいかないので、さまざまな手法で事前計算を行なっておいて、擬似的に再現するのが一般的。
▲ゲームのようなインタラクティブ性がないこと、質の高い結果が欲しいが他のリソースを犠牲にしたくはないといった「Agni's Philosophy」ならではの理由からグローバルイルミネーションを実現する手法が選択されている。
▲静的なオブジェクトか動的なオブジェクトかによって間接光の事前計算結果をどこから取り出すかが異なる。
背景などの静的オブジェクトは2Dライトマップ、動的オブジェクトはイラディアンスボリューム。結果は球面調和関数を利用して格納されている。また、静的なオブジェクトか動的なオブジェクトかによって、静的オブジェクトのリアルタイムシャドウの影響を受けるかどうかが異なる。
アンビエントオクルージョン
周囲から当たる環境光がどれだけ強いかを考慮するにあたって、物体の特定の部分がどれだけ遮蔽されているかによって色を変化させ、主に自然な陰影を再現する。
▲「Agni's Philosophy」では複数のアンビエントオクルージョンを使い分けている。
▲「Agni's Philosophy」のシェーダー構成(簡略版)。
▲オブジェクトベースAO。タイヤと床板の間あたりに注目。左がオフで右がオン。
▲アグニの場合。より自然な柔らかい陰影が生まれている。
▲“サチュレーテッドAO”。遮蔽具合をカラーに対してかけるのではなく、カラーの強さに対してかける。
▲左が通常のAO(黒く出る)。その中央と右がサチュレーテッドAO。色味が出て黒くなりすぎない。
肌周りの表現(サブサーフェイススキャッタリング、肌のスペキュラーetc)
通常のシェーディングでは皮膚が「カサカサに見える」とドリアンクール氏。人間の皮膚の感じを再現するために、サブサーフェイススキャッタリングや独特なスペキュラー処理などを行なっている。サブサーフェイススキャッタリングとは、物体内に入った光が散乱する現象。人体モデルなどでは、手のひらを太陽に透かしてみると真っ赤に流れる僕の血潮が見えたりする、光の皮膚下散乱のこと。
▲人間の肌はディフューズが94%でリフレクションが6%。皮膚は複数の層で出来ており、皮膚下で光が散乱する。
▲いろいろ実験。皮膚の複数の層をシミュレートしてみたり、バンプマップを手がかりにしてみたり。
▲バンプマップとブラーをかけたバンプマップの差分から色を変えている“フェイク・カラーシフト”での例。
▲テクスチャ空間SSS、スクリーン空間SSS……。
▲「Agni's Philosophy」で採用したのはスクリーン空間SSSにサンプリングポイントとしてポワソンディスクサンプリングを加えたもの。カメラとの距離などで最適化が行えるといったメリットがあるそう。
▲SSSオン。鼻のフチとかがちょっと赤くなっている。
▲実は変身するハイエナやクリスタルなどにも使われている。
▲スクリーン空間SSSでは、裏側に抜けてくる光を十分に再現できない。そのためこれを再現するための手法が別に実装されている。
▲“ドライ”スペキュラーと“ウェット”スペキュラーのふたつを使って皮膚の反射を再現。
▲スペキュラーのみ(左)とキューブマップリフレクションを足した例(右)。生々しいぬめぬめ感。
▲“ウェット”スペキュラーでシドロ(召喚士のおっちゃん)に汗を足す(右)。涙などにも使える。
▲ゲームのキャラクターはドアップになることもある。眼球(特に虹彩)がそれらしく見えるように、屈折も視差マッピングと屈折の組み合わせで表現している。
▲アグニちゃんの目のアップ。普通。
▲虹彩部分にかかっている視差マッピングをオフ。なんか眼球内部がのっぺりしたような……。
▲視差マッピングを戻して今度はキューブマップをオフ。目が死んでいる……。
髪の毛の表現
顔の表現同様、髪の毛についてもヴィジュアル・ワークス品質の髪をリアルタイムCGとして実現することを目指している。問題は1本1本シミュレーションした場合は自然で滑らかな髪の毛を再現できるが、負荷が大きい上にアーティストの蓄積がないこと。そこで「Agni's Philosophy」では、ふたつの毛のモデルを組み合わせている。
▲髪の毛はポリゴンメッシュで作ったもの(“バナナリーフ”)と、ナーブスカーブで作り出すもの(NVIDIAの研究者にちなんで“タリク ヘアー”)を組み合わせて、動きとパフォーマンスのバランスを取っている。
▲アグニちゃん風マネキン。
▲バナナヘアーを乗せる。
▲タリク ヘアーを乗せる。
▲タリク ヘアーの作り方。糸状のナーブスカーブがマスターとなる。コントロールポイントを持っており、アニメーション可能。テッセレーションにより滑らかに分割され、ビルボードを形成してからシェーディング。
▲おヒゲや動物の毛なども同様の手法でできている。オリジナルでは295本、1656コントロールポイントだったものが、2種類のテッセレーションで2万9500本、71万コントロールポイントのもじゃもじゃに。
▲というわけでパラメーターを放り込んでカールさせたり、先をひねったり、ヒゲの硬さを変えたり、重力からの影響を切ったり、自由自在。オブジェクトが当たることで変形するデモも披露された。
ガラス・屈折
ガラス瓶のCGをいかにガラス瓶のように見せるか? 「Agni's Philosophy」には、銃創を負ったアグニが清涼飲料水に回復魔法を込めて自分を回復する印象的なシーンが出てくる。
▲事前計算で屈折を計算しておく。表面だけ、表面と裏面だけの計算だと中身が詰まった物体がある感じ。
▲瓶の屈折面は4つある。内側も計算してやるとそれっぽい感じに。
▲屈折回数による違い。少ない回数では見えなかったオブジェクトが次第に出てくる。
パーティクルシステム(水、血、煙、光虫……)
パーティクルとは、粒子のこと。「Agni's Philosophy」では、キャンドルの灯、回復魔法をかけた水、召喚獣の肉を形成していく大量の光虫などがパーティクルシステムで生成され、制御されている。中でも発光しながら飛ぶ超大量の光虫は圧巻。10万匹が生成され、互いに重なり合わないようにしながら飛びまわっている。光虫は召喚獣の骨に取り付いたところで置き換えられて肉を形成していくのだが、こちらもパーティクルで処理している。
▲パーティクルシステムはGPUで実行。煙やキャンドルの灯、光虫や薬莢、水や血などの液体といった3タイプのパーティクルを生成・コントロール可能。
▲オブジェクトにぶつかっても跳ね返されず、周囲に沿って流れていくような表現も可能。
▲液体タイプ。血や、召喚獣のお肉(メタボール)も表現。
▲メッシュインスタンスタイプ。メッシュを切り替えて光虫の羽ばたきも表現。ターゲットに追従するような動きもできる(デモビデオでは赤い光虫がクリスタルの動きを追従している)。