イベント
Unity 4はDirectX 11対応へ。その可能性を示す技術デモ「Butterfly Effect」の技術解説
ゲームエンジン「Unity」は,2012年末に「Unity 4」へと進化している。Unity 4の目玉機能の一つに,DirectX 11世代のグラフィックス技術への対応が挙げられるのだが,そのポテンシャルを分かりやすく,そして楽しく見せるために,Unity Technologiesは技術デモ「The Butterfly Effect」を制作した。
2013年4月16日に行われた「Unite Japan」の「Butterfly Effect リアルタイムデモの制作とDirectX 11の活用法」セッションでは,UnityデモチームのErland Korner氏(Unity Technologies,Demo Team,Lead Artist)が,このデモの技術的バックグラウンドの解説を行った。
このプロジェクトでリードアーティストを務めたErland Korner氏(Unity Technologies,Demo Team,Lead Artist)。彼はかつてEA/DICEに在籍し,「Battlefield 3」や「Mirror's Edge」の開発に参加していた経歴を持つ |
「Unite Japan」公式サイト
技術デモ「The Butterfly Effect」の制作背景
制作チームの構成員は,CGアーティストが25人,プログラマが5人とのこと。映像部分の制作期間は約14週間だそうだ。ただし,本編制作後,最適化に約3か月間ほど費やしているという。
ところで,本作はリアルタイムグラフィックス作品として制作が行われたわけだが,その動作ターゲットハードウェアとしては,CPUにCore i7 2600K,GPUにGeForce GTX 680が想定されたという。しかし,残念なことに,本作のデータ量が40GB以上になってしまったこともあって,各ユーザーのPCで動かせるようなランタイム版の一般向け配布は行わない判断がなされたそうだ。
なので,「Butterfly Effect」の映像の内容については下のYouTube版をご覧いただきたい。
「Butterfly Effect」に採用されたシェーダー技術
セッションでは多くの時間を割いて,このButterfly EffectのどのシーンにどんなDirectX 11世代の技術が活用されたのかについてが語られた。
ライティングおよびシェーディングに関しては,次世代ゲームグラフィックスでは本格的に採用が始まると言われている物理ベースレンダリングを採用したとしている。
物理ベースレンダリングは,エネルギー保存の法則に従い,入射光エネルギーが拡散反射,鏡面反射,屈折,透過といった要素それぞれに振り分けられて処理される仕組みで,トーンマッピング処理(最終的にディスプレイ表示をするための減色,階調処理)を受けるまでは計算結果はリニア値で保存される。また,ライティング計算において,複雑な反射特性を持つマテリアルについてはBRDF(双方向反射率分布関数)を持たせており,オフラインレンダリングの映像作品のクオリティに近づけたいという思惑を強く感じさせられるシェーダ・アーキテクチャとなっている。
物理ベースレンダリング技術の採用 |
一部のマテリアルにはBRDFを導入 |
左がオフラインレンダリングの現場で採用例が多いレイトレーシングベースのグラフィックスエンジン「Mental Ray」方式の物理ベースレンダリング結果。右が今作で実装した物理ベースレンダリングの結果。両者がかなり近い……ということをアピールした図 |
ビニール,金属,コンクリートといった異なる材質表現を,基本的には単一のシェーダで実装している。材質の違いは拡散反射,鏡面反射,屈折,透過,BRDFなどのパラメータの違いで表現している |
大域照明に関してはライトマップ技術と,シーン内に配置したLight Probeが取得した事前計算済みの全方位の大域照明情報の組み合わせで実践している |
「Butterfly Effect」における人物表現
顔面の人肌表現については,これまた次世代ゲームグラフィックスでは積極採用が進むと思われる皮膚の反射率拡散プロファイルを用いた「表面下散乱シェーダ」によって行われている。
ただし,スクウェア・エニックスが採用したような簡易的な画面座標系のブラーで実装するものではなく,NVIDIAが「Human Head」デモで採用したテクスチャ座標系で行うものを採用したとのことだ。
この手法は,人肌における拡散反射計算は3Dモデル上の3D実空間で行うが,その結果をテクスチャ空間(2D平面)に展開して,ボケを適用してから再び3Dモデルに適用し直すというヘビーなテクニックだ。NVIDIAのデモでは人肌の多層皮膚構造に配慮した6レイヤー分に対して,この処理を行っていたが,「Butterfly Effect」デモではこれを3レイヤー分に簡略化している。
人肌表現では表面下散乱だけでなく,脂質層で反射する鏡面反射についても配慮する必要がある。これは全体の入射光エネルギーのわずか6%程度なのだが,人肌のつるっとした質感を再現するのに欠かせない要素となる。本作では,この要素に2レイヤー分を割いているという。
また,本作は,「耳」などの肉厚が薄い部分で背後から強烈な光が照らされた場合に,前面側に光が漏れ出てくる「後方散乱」(Back Scattering)にも対応している。これは,視線方向から3Dオブジェクトまでの深度値と光源から3Dオブジェクトまでの深度値の差分から求めた「厚み」情報をもとに透過光量を求めるテクニックで実践している。このテクニックについての詳細は,同系テクニックを採用していた「Agni's Philosophy」の解説記事のほうを参照してほしい。
逆光時に耳たぶや耳殻が赤くなる表現はBack Scatteringによるもの |
そのほか,主人公の顔面モデルは,テッセレーション技術によって,視点からの距離に応じて適した詳細度の曲面表現が実装されているという。これは,オフラインレンダリング畑のアーティストがそうした曲面制作手法を好み,業界的にもこの手法が標準化しているため,あえて採用したという。なお,実装したテッセレーションメソッドは「トイストーリー」などで有名なPixarが長らく標準採用してきたCatmull-Clark法を採用したとのこと。
毛髪表現については,NVIDIAの全面協力で実装されたと述べられている。具体的には,業界でTariqヘアーと呼ばれる手法で,NVIDIAの技術者,Sarah Tariq氏が考案したテクニックになる。
この手法は,毛髪を実際に線分で生やすもので,本作ではあらかじめ定義された「生える場所」からリアルタイムに生やす実装となっている。
ポイントはDirectX 11のテッセレーションステージにある「Isoline Tessellation」モードという等値線生成を活用するところで,1本の毛髪(線分)を,テッセレーションステージで自在に増毛するところにある。また,視点からの距離に応じて髪の毛を太くするため,ジオメトリシェーダを用いて,この線分をポリゴン化する処理系が実装されていることもKorner氏は実演して見せていた。
髪型は,平常状態であれば基準の髪型に戻るが,風や重力の影響を受けるとちゃんと曲がったり寝たりする。
なお,この毛髪生成技術は人間キャラクターの頭髪以外に,主人公が履いている「ウサギちゃんスリッパ」の毛皮にも採用されているとのこと。
ウサギちゃんスリッパ。毛皮なしの状態 |
あえてボーボーに生やしてみた例。こちらも毛髪と同一技術によって生成されるのでリアルタイムに変更することが可能 |
「Butterfly Effect」におけるポストエフェクト技術
「Butterfly Effect」では,オフラインレンダリングの映像作品並のリッチなビジュアルを実現するために,多量のポストエフェクトを盛り込んだとKorner氏は述べる。
被写界深度(DoF:Depth of Field)の表現は,最近の流行に則って,撮影カメラのレンズの絞り形状が出るようにしている。また,このDoF表現は,図らずも,髪の毛のアンチエイリアス効果にも貢献したとのこと。逆に言うと,本作では毛髪類に特別なアンチエイリアス処理は適用していないということでもある。
フレーム中の高輝度部分から光が溢れ出すブルーム効果やグレア効果は2レイヤーに分けての処理になっている。これは単純に,一つは太陽を直視したときのレンズフレアなどの表現,そしてもう一つはライティング結果で高輝度になった部分のブルーム,グレア表現という切り分けだ。
逆光時のレンズフレア表現 |
背景の車のボディの高輝度部分はボケてはいるが,鮮烈な高輝度のまま絞り形状でボケている |
モーションブラーにももちろん対応。DoFとモーションブラーもHDR対応なので,DoF効果としてのピンぼけ箇所,モーションブラー効果としての流れるボケ表現においても,高輝度な箇所は高輝度なままのエフェクト効果が表れている。
このほか,ポストエフェクトとして,アナログフィルムでの撮影っぽい効果を付加するフィルムグレインノイズ効果,カラーコレクション(色調変調)処理なども用意され,実際に本作で活用されている。
「Butterfly Effect」におけるボリュメトリック表現
本編の最後では大爆発が起こる。
この大爆発エフェクトは,パーティクルによるものではなく,ボリュームレンダリングのテクニックが採用されたとしている。
ボリュームレンダリングとは,形のはっきりとしないものや,内部までが緻密に表現された複雑な構造を持つ立体物(例えば人体とその内臓など)をレンダリングするために用いる技術だ。その実現方法にはさまざまなアプローチがあり,本作で用いられたものは分類としてはレイマーチング法に分類されるが,本作での実現様式は極めてシンプルなものとなっている。
まず,爆煙/爆炎はボリューメトリックオブジェクトであるにもかかわらず,その表現に3Dテクスチャなどは用いていない。爆煙/爆炎は球体として表現され,時間経過と共に半径値が肥大化していくものを複数個,シーン内に設定するだけとなっている。
実際のレンダリングはレイマーチング法となるので,視線(カメラ)位置からレイを放ち,その球体達の界面に衝突したときにライティング,シェーディングを行う。
球体のままだとブドウの房のようになってしまうため,爆発らしく見せるためにプロシージャルノイズ生成法として有名なパーリンノイズで大胆な凹凸を与えるようにしている。
なお,この爆心地に配置される球体達はポリゴンモデルではなく,あくまで半径値と中心地点と,そしてパーリンノイズにより変位を与えられた数値データであるという点に留意してほしい。なので,爆発が進むと,この爆煙/爆炎を表現する球体は移動しながら肥大化していくのだが,ポリゴンが角張ったりすることはない。シーン内に配置された球体群は,いわば無限大解像度の球体オブジェクトとして設定されており,ボリュームレンダリングされることによって初めて有限個の画素で可視化される……というイメージだ。
この爆煙/爆炎はよく観察すると,爆心地に近いものほどオレンジの“爆炎”となり,遠いと灰色っぽい“爆煙”となっているのだが,これは爆煙/爆炎を表現する球の密度,爆心地からの距離に応じてプロシージャル的に色を決定することで求めているとのこと。
ボリュームレンダリングされたあとは,画素単位で深度値も法線も決定されるため,爆煙/爆炎自体へのライティングが可能となる。また,シーン内の3Dオブジェクト達との3D的な整合性も問題がなく,爆煙/爆炎とポリゴンモデルのガスボンベや,そのほかのパーティクルとの描画位置関係にも矛盾が出ていない。さらに,作中では,ポストエフェクトの一つであるAmbient Occlusion(ポストエフェクトで付加する簡易的な環境からの陰影効果)までを,この爆煙/爆炎に与えているという。
Butterfly Effect」制作はUnity 4を鍛えるために
今回の技術デモの制作は,「映像作品として楽しめるものをDirectX 11技術を駆使してリアルタイムで動かす」ということが第一テーマとして掲げられたのだが,Korner氏は,ほかにいくつかの副次的なテーマもあったと振り返っていた。
一つは,「リアルタイムCGではない,映画やTVCM向けのオフラインレンダリング技術の制作スタイルを勉強する」というもの。
この経験を積んでいくことで,オフラインレンダリング畑のアーティスト達が扱いやすいコンテンツパイプラインやワークフローを,Unityに強化していこうという狙いがあったようだ。
二つめは,オフラインレンダリングに肉迫するクオリティを,Unityベースのリアルタイムレンダリングで実践することで,Unity 4の負荷テストを行うこと。
近未来的には,Unity 4上のゲームにて,本作「Butterfly Effect」クラスのゲーム内イベントシーンなども実装される可能性がある。ある意味,本作はその予行演習的な側面があったということなのだろう。
偶然か必然か,こうした「ハイエンド技術デモを制作してエンジンを鍛え上げる」というエピソードは,スクウェア・エニックスの「AGNI'S PHILOSOPHY」のときにも聞かれたものだ。ゲームエンジンのグラフィックス機能を鍛え上げるには,こうしたハイエンド技術デモを開発することが,半ば必要不可欠なのだろう。
「Unite Japan」公式サイト
- 関連タイトル:
Unity
- この記事のURL: