イベント
[SQEXOC 2012]リアルタイムレンダリングデモ「Agni's Philosophy」に用いられた最新グラフィックス技術の全容を見る(前編)
このセッションは,次世代ゲームグラフィックスを先取りするAgni's Philosophyに用いられたさまざまなリアルタイムグラフィックス技術を解説するものになる。現時点では次世代ゲーム機のスペックが不明瞭なため,ここで紹介された技術のすべてが実用化されるわけではないだろうが,「次世代ゲームグラフィックスの目標的水準」のようなものは見えてくるはずだ。項目が多岐にわたるため,今回は前・中・後編の3部構成でお届けしたい。
Agni's Philosophyの基本情報
このセッションを担当した登壇者はスクウェア・エニックス,テクノロジー推進部のRemi Driancourt氏とNapaporn Metaaphanon氏だ。共に海外から日本にやってきたエンジニアで,実はテクノロジー推進部にはこうした海外からの研究者も多く参加している。
Remi Driancourt氏(スクウェア・エニックス テクノロジー推進部 シニア R&D エンジニア)。同氏は元々はグラフィックスの専門家ではなく,ロボティックスやAIの専門家であったが,技術力を買われ,現在は,リアルタイムグラフィックス技術の研究開発を担当している |
Napaporn Metaaphanon氏(スクウェア・エニックス テクノロジー推進部 R&Dエンジニア) |
まず,前提情報として触れておきたいのは,Agni's Philosophyでは,ヴィジュアルワークス部が手がけたプリレンダー版のジオメトリデータ(ポリゴンモデル)を,ほぼそのままの形でリアルタイムに持ってきているということだ。
ただし,一部のキャラクターではポリゴン数の削減が行われており,例えば主人公Agniは,ヴィジュアルワークス部でのモデリング段階では205万ポリゴン(毛髪類を含まず)だが,リアルタイム化に際して約40万ポリゴン(毛髪類を含まず)と軽量化されている。
ちなみに,毛髪は,基本的にはヴィジュアルワークス部が「Maya」でキャラクターをモデリングした時点で与えていたNURBS(※1)カーブの制御点パラメータを,そのままLuminous Studioのリアルタイムレンダリングエンジンで継承してリアルタイム描画させているという。
※1 Non-Uniform Rational B-Spline:非一様有理Bスプライン関数
シーンにもよるが,多いシーンでは1フレームあたり1000万ポリゴンのレンダリングが行われており,おおよそだが現世代のゲームと比較して10倍ほどのジオメトリ量になっている。
なお,岩﨑氏によれば「実行にはこの環境が必要だったということではなく,その時点での最高スペックのPCを用意して実行しただけ」と,このハードウェア構成にした理由を述べていた。CPUやメモリについては,まだまだ使い切っていないとのこと。
Agni's Philosophyのライティングフィロソフィ
Agni's Philosophyでは,ライティングをFP16(16bit浮動小数点数)ベースのHDR(High Dynamic Range)でレンダリングし,ライティング計算はガンマ補正された対数空間ではなく,線形空間で行っているとのこと。ディスプレイ表示に適した階調のガンマ補正は,HDRレンダリング完了後に行われる8bit整数へのLow Dynamic Range化処理であるトーンマッピング時に行われる。
最近のゲームではとても重要視されている間接光ライティング,すなわち大局照明(Global Illumination:以下,GI)については,Agni's Philosophyが,ゲームではなくカメラパスが固定される映像作品であったことから,最終的な映像としての見映えを重視して,事前計算を伴った現実的な実装を採択したとのことだ。
事前計算GIは,2D版と3D版の両方のアプローチで実践している。
2D版というのは,要するに,ライトマップテクスチャのことなのだが,本作で用いているのは普通のライトマップではない。
一般的なライトマップの場合,テクセルに格納する値は拡散反射によるライティング結果になるが,本作の場合,各テクセルには,全方位からの入射光の情報を球面調和関数(Spherical Harmonics:以下,SH)の形で格納している。球面調和関数とは,簡単に言えば,放射状に広がる全方位方向の情報分布を基底関数の和で表現するもので,3DCGでは空間全周の状態を非可逆に圧縮する技法としてよく活用されている。
本作では,球面調和関数に与えるスケール係数群をライトマップテクスチャに格納しており,実際のライトマップテクスチャ適用時には,テクスチャから読み出した係数を球面調和関数に与えていくことで,このテクセルにやってくる全方位からの光を(低精度ながら)復元し,ライティング計算を行っている。
ライティング計算時には,拡散反射計算だけでなく鏡面反射計算まで行われている。これにより,ライトマップでありながらも,視線移動に対応したGI効果からの淡いハイライトまでが得られるのである。ちなみに,コナミの「METAL GEAR SOLID 4 GUNS OF THE PATRIOTS」では,このテクニックとよく似た手法を頂点単位で実装していた。
このSHライトマップテクスチャは,3Dモデルに直接貼り付けるようなイメージで利用されている。
対する3D版のほうは,3Dモデルに直接貼り付けるのではなく,シーンを適当な間隔で区切り,空間の各地点における「全方位からくる光の情報」を球面調和関数で表現しておく方式がとられている。つまり,シーンに充満する複雑なGI効果(環境光)を,各地点における仮想的な全周光源(ただし,SH化して表現するので大ざっぱなものにはなる)に置き換えるというアプローチだ。
分割された空間は縦・横・高さを持つ三次元的な箱で埋め尽くされたような形で管理され,箱の一つ一つが1テクセルに対応するようなイメージになる。このデータ構造を3Dテクスチャで構成してやるわけだ。なので,「テクスチャ」とは言っても,実際には,x,y,zからなる三次元配列数値テーブルという体裁になっている。
動的な3Dモデル(例えばキャラクターモデル)は,ライティング時に,自分が今いる箱の周辺に対応するテクセルを読み出して球面調和関数を復元して補間し,これをライティング計算に当てる。つまり,3Dモデルは,シーンの中を縦横無尽に動き回っても,この空間内の静的なGI効果をある程度正しく得られるということだ。
この手法は,Light Probeを用いたGIでよく使われるもので,橋本善久氏(CTO,兼 テクノロジー推進部 コーポレートエグゼクティブ)がセガ在籍時代に開発に携わった「ソニック ワールドアドベンチャー」(PS3 / Xbox 360 / Wii)や,Valveが「ハーフライフ 2」で用いていた手法とかなり近いものになっている。
疑似的な環境光からの自己遮蔽〜Ambient Occlusion
Agni's Philosophyにおけるリアルタイム影生成は,近傍比率フィルタリング(Percentage Closer Filtering:以下,PCF)ベースのソフトシャドウ処理を組み合わせたデプスシャドウ技法を採用している。
背景などの固定オブジェクトの影は事前生成したライトマップに焼き込まれており,レンダリング時にはそれが適用されることになる。とはいえ,背景などの固定オブジェクトに対するリアルタイム影生成(シャドウマップ)処理は行われており,固定オブジェクトから動的キャラクターへの影投射には,この影が適用される仕組みだ。
背景(固定オブジェクト)から動的キャラクターへの影の投射は,近年の3Dゲームグラフィックスではよく使われており,前出の「ソニック ワールドアドベンチャー」やカプコンの「バイオハザード5」「バイオハザード5」(PC / PS3 / Xbox 360)でも,同種の実装が行われていた。
こうした手法によるリアルタイム影生成は,オブジェクトのシルエットレベルでの影生成には向いているが,鼻の穴や目のくぼみといった微細な部分に使おうとすると,シャドウマップサイズの限界から,高精度に陰影を出すことが難しくなる。また,GI効果(環境光)からの自己遮蔽による淡いソフトシャドウも同様だ。
そこで,近年では「Ambient Occlusion」と呼ばれるアプローチで,そうした影生成(≒陰影生成)に取り組むところが多くなっている。
Agni's PhilosophyにおけるAmbient Occlusionは,シーンのライティング状況やアーティストのセンスに応じて,いくつかの手法が使い分けられている。
一つは,3Dモデルの表皮上の各点から全方位に向けてレイを飛ばして,遮蔽率をあらかじめ求めておき,これをテクスチャ化したものを用いる方法だ。一種のライトマップテクスチャだが,各テクセルには遮蔽率が格納されることになる。この遮蔽率テクスチャ生成にはLuminous Studioの内製ツールが用いられているとのことだ。
このテクニックは,曲がったり変形したりするオブジェクトとの相性は悪いが,細部の自己遮蔽陰影までを出せる特徴がある。なので,キャラクターの顔面における鼻の穴や目の凹みなど,比較的,静的で高精細な自己遮蔽表現に使われたそうだ。
二つめは,近年の3Dゲームグラフィックスでは定番となる,画面座標系での自己遮蔽陰影生成の仕組みである「Screen Space Ambient Occlusion」(SSAO)だ。こちらはレンダリング結果に対してポストエフェクト的に付加できる自己遮蔽表現なので,動的な移動体や変形オブジェクトにも対応できるが,原理的に精度はあまりよくない。そのため,Driancourt氏によれば,本作ではSSAOは補助的にのみ用いたとのことだ。
三つめは,解析的なオブジェクトベースの自己遮蔽生成(Object Based Analytical Ambient Occlusion)だ。このテクニックに関する詳細な説明はなかったが,オブジェクトを構成する各ポリゴンを遮蔽単位要素とみなし,互いに誰が誰を遮蔽しているかを解析して遮蔽率を求めていく手法だと思われる。
これと似た手法はNVIDIAのGeForce 6000シリーズ向けに提供された技術デモ「Timbury」で採用されている。詳細はこちらを参照してほしい。
Driancourt氏によれば,このテクニックは負荷が高いので,あまり多くのシーンで用いてはいないとのことだった。
Object Based Analytical Ambient Occlusion=OFF |
Object Based Analytical Ambient Occlusion=ON |
ただの黒い陰影を付加しただけのAmbient Occlusion |
色味を加えたAmbient Occlusion・その1 |
色味を加えたAmbient Occlusion・その2 |
Agni's Philosophyにおける人肌表現の秘密(1)〜画面座標系の表面下散乱テクニック
3Dゲームグラフィックスにおいて,長らく「やりたいのにできなかった」ことの一つとが本格的な人肌表現だろう。
Agni's Philosophyでは「次世代ゲームではこのくらいはやりたい」という意志表示とも取れるような,現実的かつ高品位な人肌表現手法を採用している。
人肌は,半透明の皮膚が多層に重なった透明度の低い半透明材質で,入射光のうち,表皮の脂質で約6%が反射し,残りの約94%が皮下に浸透して散乱して,再び表皮から出射することが実験的に確かめられている(※人種や年齢による差や個人差はある)。これが,皮下散乱(Subskin Scattering)現象で,CGの世界では一般化して表面下散乱(Subsurface Scattering)として扱われている。
これをまともに計算するのはとても難しいのだが,一つのベンチマーク的手法が映画「マトリックス」におけるエージェント・スミスが大量発生するシーンで採用された。のちにNVIDIAは,このテクニックをGeForce 8800 Ultra向けの技術デモとしてリアルタイム実装した「Human Head Demo」を公開している。
この手法は,キャラクターの顔面(皮膚)に対するライティング結果を,テクスチャ座標系に展開して,ボカしをかけてから再びテクスチャマッピングするという大胆なアプローチになる。なお,その「ボカし処理」は,皮膚面に対して直角に入射した白色光点が,どういう色分布で皮膚から再び出射するのかを計測した「反射率拡散プロファイル」( Reflectance Diffusion Profile,以下RDP)を用いて行う。RDPについて感覚的な解説をするならば,入射点に近ければ近いほど白に近く,遠ければ遠いほど赤黒くなっていく不均等な色分布を起こすような特性,といった感じになるだろうか。
この手法は,ハイエンドGPUを用いて一体のキャラクターの人肌表現をやるだけでも,処理負荷的に相当きつい。
そこで,Agni's Philosophyでは,この手法を簡略化したアプローチを採択している。それは,Activision BlizzardのJorge Jimenez氏が考案した手法だ。
Jimenez氏の手法では,拡散反射のライティング結果を前述したRDPでブラーさせる概念自体は変わらないものの,ブラーをテクスチャ座標系ではなく,画面座標系(Screen Space)で行う点が異なっている。この特徴的なアプローチから,Jimenez氏はこの手法に対して「Screen-Space Subsurface Scattering」(SSSS)という名称を与えている(※2)。
SSSSでは,人間キャラクターがレンダリングされたフレームに対し,人肌に対して選択的にRDPに従ったブラーを掛けることで,近似的な表面下散乱を実現するわけだ。そのブラー処理は画面座標系のポストプロセス的に実施する。
このポストプロセス的なアプローチだと,1フレーム内にキャラクターが1人だろうが,100人いようが,ほぼ同一の処理時間で済む。ただし,視点から近い人体と遠い人体とでは,そのブラーさせる幅が異なってくる。具体的に言えば,近いキャラクターは大きく,遠いキャラクターは小さくブラーさせる必要があるということだ。
これについては,「深度バッファを参照してブラー対象までの遠近を見極めたうえでブラー半径を決定する」ことで対応している。ポストプロセスの定番であるピンぼけ表現を行うための被写界深度表現でも,ピントが合っている箇所とずれている箇所のブラー径(ぼかし強度)を深度値をもとに決定するが,それと同じ考え方だ。
Jimenez氏の論文によるSSSSでは,異なるブラー径で複数回ブラーさせて合成させる手法がとられていたが,Driancourt氏によれば,Agni's Philosophyでは,このブラー処理を1回しか行わない実装にしているとのこと。
また,ブラー処理自体に関しても,ガウシアンブラーではなくポワソン・ディスク・サンプリング(Poisson Disk Sampling)法を採用し,ブラー対象の遠近に応じたブラー径の調整を行っているという。
(※2)現在はScreen-Space Subsurface Scatteringは,改良されて「Separable Subsurface Scattering」へと改称されたが,Screen-Space Subsurface Scatteringのほうが知名度が高いため,本稿ではこちらを用いている。
表面下散乱オフ |
表面下散乱オン |
表面下散乱オフ |
表面下散乱オン |
この画面座標系の疑似表面下散乱テクニックは,人肌だけではなく,モンスターの表皮表現や,本作の物語におけるキーアイテムであるクリスタル(水晶)のライティングにも用いられているとのことだ。
表面下散乱オフ |
表面下散乱オン |
表面下散乱オフ |
表面下散乱オン |
表面下散乱オフ |
表面下散乱オン |
Agni's Philosophyにおける人肌表現の秘密(2)〜「濡れた皮膚」と「乾いた皮膚」
人肌のキモはここまで述べた表面下散乱の要素であることは間違いないのだが,たかだか約6%とはいえ,鏡面反射の要素も無視できない。
Agni's Philosophyでは,鏡面反射のライティングについては,リアルタイム3Dグラフィックスの基礎となる算術的な方式,すなわちBlinnシェーディングやPhongシェーディングではなく,Csaba Kelemen氏やLaszlo Szirmay-Kalos氏らが2001年に発表した「A Microfacet Based Coupled Specular-Matte BRDF Model with Importance Sampling」の論文をベースとした「KS BRDF法」を採用している。
KSはKelemenとSzirmay-Kalosの頭文字,BRDFは「Bidirectional Reflectance Distribution Function」の略で,日本語訳では「双方向反射率分布関数」となる。
BRDFをひと言でまとめるならば,「光がどう反射するかを光学現象に沿った考え方で一般化したもの」ということになる。BRDFの実装法としては「どう反射するか」を一つの方程式で表すことが困難であることから,測定器を使って対象材質を測定したデータテーブル(=テクスチャデータ)を作成し,これをレンダリング時に参照して陰影計算に用いる方法がよく見られる。
KS BRDFでは,超微細な凹凸を表面に持つ材質の表現に適したベックマン分布(Beckmann Distribution)が採用されており,実装にあたっては計算負荷低減のため,このベックマン分布を事前計算してテクスチャデータに落とし込んでいる。KS BRDFについての,より詳細な情報は論文のほうを参照してほしい。
フォンシェーディングによる鏡面反射効果。ハイライトが唐突でしかも輝きが鈍い |
KS BRDFによる鏡面反射効果。ハイライトがなだらかでありながら,ピーク輝度は鋭い |
なお,この鏡面反射(スペキュラ)の結果の適用の仕方については二つのバリエーションがあるとのことで,具体的には,通常の「乾いた皮膚」表現用と,汗や涙などで「濡れた皮膚」表現用が用意されている。
「乾いた皮膚」では,KD BRDFライティングによる鏡面反射に対し,GI効果(SHライティング)による鏡面反射と映り込み表現用のキューブマップテクスチャの影響をミックスさせている。
一方「濡れた皮膚」では,映り込み表現用のキューブマップテクスチャの影響を支配的にしている。濡れれば周りの情景が映り込みやすくなる……というのは経験的にも理解しやすいだろう。
2種類の皮膚に対する鏡面反射効果の適用 |
「乾いた皮膚」表現のみ |
「濡れた皮膚表現」あり |
キューブマップテクスチャによる映り込み表現なし |
キューブマップテクスチャによる映り込み表現あり |
Agni's Philosophyにおける人肌表現の秘密(3)〜透過光表現
耳の耳殻や鼻の頭,手の指などの突起部では,光の強度によっては,表面下散乱に加えて光の透過も発生する。手のひらを太陽にかざしてみるまでもなく,逆光状態で前述したような部位が赤く鈍く光って見える現象を経験した人は多いだろう。
この現象は,前節で解説した画面座標系の疑似表面下散乱では再現できない。なぜなら,画面座標系の疑似表面下散乱は,表皮に入射した光に対してのシェーディングテクニックであり,逆光(透過光)は考慮されていないからだ。
そこで,Agni's Philosophyでは,対象物の近似的な厚みを算出し,厚み情報に比例して赤味を増すようなライティング効果を付加する方策をとっている。
この厚み情報は,光源からの対象物裏面までの距離(深度値)と,視点から対象物表面までの距離(深度値)とをそれぞれテクスチャにレンダリングし,対応するテクセル値の差の絶対値を近似的なその対象物の厚みとするのだ。そして,この「厚み」が薄ければ透過光の影響が強く,厚ければ影響は小さい(=あまり光が透過してこない)ので,この値を指標にして一次元テクスチャなどをサンプリングし,ライティングに応用するのである。
なお,このテクニックは,GeForce 7000シリーズ向けの技術デモ「Luna」に登場する巨大な手のモンスター「Oracle」の透過光表現に使われていたものと同じである。
Driancourt氏によると,「キャラクターモデルに対応する厚みテクスチャを事前に持たせる手法も検討したが,その手法では動的なシーンへの対応度が低いと判断した」とのこと。
例えば,今回採用した手法ならば,耳の後ろに遮蔽物があったとき,その影を考慮した透過光表現ができる(≒遮蔽物の影を見せられる)。一方,厚みテクスチャを持たせる手法では,透過光表現の計算は耳の厚みだけの情報で行われるため,遮蔽物の影響には対応できないのだ。
透過光表現なし |
透過光表現あり |
ちなみに,厚み情報テクスチャを利用する手法はElectoronic Artsの「バトルフィールド 3」(PC / PS3 / Xbox 360)でも用いられている。厚み情報テクスチャの生成に事前計算は必要だが,ランタイム時の負荷が軽いため,ゲームグラフィックスでの実用的な手法として認知されている。
Agni's Philosophyは映像作品であり,細かい表現にまでこだわりたかったため,Lunaのような手法を採用したということなのだろう。
精気すら感じられる「メヂカラ」の裏側
人間は人間を見るとき,眼を見ることが多い。だからこそ,「目のリアル度」が,「人間表現のリアル度」に直結していると考えられる。
顔面の表現において,人肌がリアルになり,顔面の表情が感情豊かになったとしても,最終的なCGキャラクターの演技力の決め手は「眼力」(めぢから)にあるような気がしてならない。CGキャラクターの演技に最終的な「気迫」や「精気」を与えるのは眼球表現なのではないか。
Agni's Philosophyでは,シネマティックな映像作品であるため,一般的なゲームよりもキャラクターの顔面が大写しになりやすい。そこでAgni's Philosophyにおいても,眼球表現に力が注がれることになったという。
一部で疑似的なアプローチも伴ってはいるが,Agni's Philosophyでは,解剖学に基づく眼のレンダリングに取り組んでいる。
と,このような複雑な構造をした眼の再現を実現するために,Agni's Philosophyでは特別な反射を再現する「眼球シェーダ」を設計して取り組んだ。この眼球シェーダの設計にあたっては留意したポイントはいくつかあるという。
一つは,盛り上がった角膜部分の表現。これは一般的な法線マップを用いたバンプマッピング(ノーマルマッピング)を用いて実現している。
二つめは,角膜の奥に見える窪んだ虹彩の表現。この窪んだ虹彩の陰影も法線マップを用いたバンプマッピングで実現されている。角膜のバンプマッピングが疑似凸陰影表現ならば,これは疑似凹陰影表現といったところか。虹彩部分は,角膜で使ったマッピングデータを流用し,反転して使っているとのことだ。
窪んで奥に見える虹彩の陰影も,法線マップを利用した凹マッピングともいうべき処理で実現している |
映り込み表現は,キューブマップで作成した外界情報を,法線マップに配慮した環境マッピングで適用することで映り込みが角膜の部分だけ凸状に見える |
三つめはハイライト。眼球に入射した光は,眼球表面で鏡面反射してハイライトを生じさせる(一次ハイライト)。一方,鏡面反射しなかった光は角膜上で屈折しながら入射し,前房を通過して水晶体にて反射する。その反射光は逆経路を辿って眼球面に達し,もう一つのハイライトを生じさせる(二次ハイライト)。
この表現は,前述してきたような凸状の法線マッピングと凹状の法線マッピングの両方による鏡面反射のライティング計算を行うことで実現されている。
角膜上のハイライトと虹彩上のハイライトは,凸状の法線マッピング面と凹状の法線マッピング面において鏡面反射ライティングを行うことで実践している |
最終映像 |
四つめは屈折だ。視点から飛ばしたレイは,盛り上がった角膜上で屈折するため,歪んだ虹彩や瞳孔を見ることになる。
これは,眼球上のピクセルをレンダリングするときに,虹彩や瞳孔のテクスチャにオフセットをつけてサンプルすることで実現されている。この結果,虹彩や瞳孔は引っ込んでずれて見えるのだ。
屈折表現オフ |
屈折表現オン |
屈折表現オン+そのほかの要素をすべてオン(最終映像) |
五つめは,眼球の白目部分に対して適用する疑似表面下散乱だ。眼球の白目部分も皮膚と同じで,透明度は低いが半透明材質で構成されているため,Agni's Philosophyでは,眼球に対しても,前節で触れた画面座標系の表面下散乱処理を適用している。
顔面の総面積に対する眼球の割合はごくわずかだが,実際に完成映像の人間キャラクター達がアップになったときの,この眼球シェーダによる精気溢れるメヂカラを目のあたりにすると,その効果の大きさを実感せずにはいられない。
前編はここまで。中編では「髪」「髭」「衣服」、後編では「アンチエイリアス」「屈折」「メタボールパーティクル」「インスタンシングによる蛍のレンダリングといった要素を解説していくことにしたい。
- この記事のURL: