イベント
[CEDEC 2019]スクエニが開発したパストレーシングベースのリアルタイム技術デモ「Back Stage」を実現する仕組みとは?
YouTubeで公開中の動画は,当然ながら映像が流れていくだけであるが,セッション会場では,「GeForce RTX 2080 Ti」を1基搭載したWindows PCによるリアルタイム動作を披露していた。デモでは,視点を動かしたり,レイトレーシングと従来のラスタライズ法によるレンダリングを一瞬で切り換えたりする様子を披露している。
覚えている人もいると思うが,Luminous Productionsは,スクウェア・エニックスの先端技術研究開発チームからスタートしたグループで,実質的な「FINAL FANTASY XV」(以下,FFXV)開発チームを経て,2018年に完全子会社となったゲーム開発スタジオである。
Luminous Productionsのコアメンバーは,2012年にスクウェア・エニックスが発表したリアルタイム技術デモ「Agni's Philosophy」の開発にも携わっていた。Agni's Philosophyは,事実上,FFXVを開発するための技術実験プロジェクトであったと言えよう。
[E3 2012]スクウェア・エニックスの独自開発エンジン「Luminous Studio」による,驚異のリアルタイム技術デモ「AGNI'S PHILOSOPHY」が公開
スクウェア・エニックスは,E3 2012開催中のロサンゼルスコンペンションセンターでレセプションを開催し,同社が開発中のゲームエンジン「Luminous Studio」を使って制作された技術デモムービーを公開した。まるでプリレンダリングCGのようだが,実はリアルタイム処理が行われているという驚きの映像を4Gamerにも掲載しよう。
そう考えると,今回のBack Stageで活用している技術は,今後,次世代ゲーム機向けに登場するであろう次世代ファイナルファンタジーに応用される可能性が高いと考えていいだろう。本稿では,開発メンバーによるBack Stageの解説について,その概要をレポートしたい。
FFXVを生み出した開発メンバーの新たな挑戦とは?
セッションは,前半がLuminous Productionsで開発部長兼スタジオヘッドを務める荒牧岳志氏が,後半はBack Stageにおけるノイズ低減フィルタの開発を担当したNVIDIAの竹重雅也氏が担当した。
リアルタイムレイトレーシング関連デモには様々なものがすでにあるので,「あとから挑戦するならば,他社が試みていないことに挑戦したい」(荒牧氏)という気概を持っていたようだ。開発に当たっては,「反射(鏡像),AO(環境光遮蔽),影生成だけではなく,すべての表現要素をレイトレーシングで描画する」という目標を掲げたうえで,さらに「ラスタライズ法を一切使わない」という縛りまで課したという。
ちなみに,Back Stageの開発が始まったのは2019年6月だそうで,わずか3か月で制作したというのには驚かされる。
Back Stageデモは,シーン全体で400万ポリゴン程度を使ったそうで,近年におけるゲームグラフィックスでは,一般的なジオメトリ量と言ったところ。光源数は,狭い室内シーンとしては多めの17個。逆に,マテリアル(材質)の総数は76で,やや少ない印象だ。これも狭い室内シーンだからだろう。
光源数が多いと,レイトレーシングの描画負荷は高くなるはずだが,後述する大胆な最適化でなんとかしのいだと,荒牧氏は述べていた。
また,シーンには半透明のオブジェクトを多く配置しており,たとえば髪の毛や睫毛なども含むという。このような半透明オブジェクトを構成するポリゴンにレイがヒットすると,そのたびにテクスチャを読んで不透明か半透明かのテストを行わなければならず,これもまた負荷の高い処理系なのだが,あえて挑戦したそうである。
とはいえ,何もかもきまじめにレイトレーシングで描画していては,とてもリアルタイムでは動かせないので,いくつもの妥協を盛り込んだという。たとえば,肌表現の場合,皮下に無数のレイを投げる皮下散乱シミュレーションは行わず,近年のゲームグラフィックスで採用事例が多い簡易型の表面下散乱技法「Screen Space Subsurface Scattering」と同様の処理で代行したそうだ。
また,Back Stageでは女性が体を動かしたときの衣服の動きに,NVIDIA製の布シミュレーションライブラリ「NvCloth」を利用したそうである。
このような目標を掲げて開発した最初のバージョンは,わずか5fps前後のフレームレートしか出なかったそうだ。しかし,最終的には30fps程度にまで引き上げたと荒牧氏は述べている。
Back Stageにおけるグラフィックスエンジンの仕様
続いて荒牧氏は,Back Stageデモで用いたグラフィックスエンジンの実装を説明した。Luminous Productionsは,自前のゲームエンジンとして「Luminous Engine」(ルミナスエンジン)を持っており,FFXVは,これを用いて開発したゲームだ。
Back Stageデモは,Windows上で動作するデモとして開発を進めたので,リアルタイムレイトレーシングの実装にあたっては,必然的にWindows 10向けのリアルタイムレイトレーシングフレームワークである「DirectX Raytracing」(以下,DXR)を使うこととなった。
しかし,Luminous Productionsとしては,Windows PC以外の据え置き型ゲーム機への対応も考慮しなければならない。しかも,次世代PlayStationや次世代Xboxこと「Project Scarlett」は,レイトレーシングに対応することが予告済みだ。
現行のXbox Oneシリーズと同様に,Windows×DirectXベースとなることが確実視なProject Scarlettはともかく,次世代PlayStationは,独自のリアルタイムレイトレーシングフレームワークを採用すると思われる。
そこでLuminous Engineでは,レイトレーシング処理を行う機能ブロックを,DXRだけを前提とした仕様にはせず,あえて抽象化を行ったと荒牧氏は述べる。すなわち,Luminous Engine側でレイトレーシング処理用のAPIや関数を規定して,ここからDXRを制御する仕組みにしたわけだ。これで,たとえば次世代PlayStationに対応するためには,抽象化レイヤーを入れ替えるだけで同じグラフィックスを描画できることになる。
また,マテリアルなどの処理,すなわちライティングやシェーディングを行う処理系は,Luminous Engine上で従来のラスタライズ法によるグラフィックス用のシェーダエディタで制作したコードを,そのまま利用できる仕組みを採用した。これにより,事実上は,レイトレーシング対応ハードウェアと非対応ハードウェアで共通したシェーダコードが利用できるようになるので,プラットフォームのレイトレーシング対応,非対応を問わずにタイトル開発の効率化や,既存のシェーダコード資産の流用を可能にする。
Back Stageデモはパストレーシングベース
続いて荒牧氏が説明したのは,Back Stageデモで採用したレイトレーシングパイプラインの概要と,最適化方針だ。下に示したスライドは,Back Stageデモにおいて,どのようなレイを射出しているかを示したものである。
Back Stageデモのグラフィックスは,レイトレーシングで描画しているわけだが,Luminous Productionsでは,あえて「パストレーシングで描画」という表現している。
パストレーシングとは,視点から視界方向へ画面解像度に相当するだけのレイを放ち,レイとオブジェクトが最初に衝突する場所(=画面上のピクセル)から,無限数のレイを放つレイトレーシングを究極の目標とする手法だ。しかし,当然ながら無限のレイを放つことはできないので,リアルタイムで映像を描画するためには,投射レイ数を大胆に削減しなくてはならない。とはいえ,あまり省略しすぎると,パストレーシングとはいいがたいものになってしまう。
Back Stageデモの場合,まず直接光によるライティングとして各ピクセルからレイを1本放つ。これが何かのオブジェクトに遮蔽されているなら,影生成を兼ねることになる。
さらに,その起点となるピクセルの材質によっては,鏡像(リフレクション)生成用レイや大局照明(GI)処理用レイ,半透明・屈折レイも放つ。これらのレイは,衝突先の材質次第で,さらに別のレイを放つこともある。こうしたたび重なるレイの射出は,ワーストケースだと10以上になるとのこと。
ところで,あるピクセルにおける直接ライティングおよび影生成を正確に行うには,本来ならシーンにあるすべての光源方向にレイを飛ばす必要がある。だが,それは負荷的に無理と判断したうえで,当該ピクセルに最も影響が大きいと見込んだ1つの光源に向けてレイを放つようにしたと荒牧氏は説明した。
鏡像生成用レイや大局照明処理用のレイは,本来なら多数のレイを放たないと正しい描画結果を得られない。
しかし,放つレイが多くなればなるほど負荷が高くなり,リアルタイム描画の実現は難しくなるので,ここでも大胆に,鏡像生成用レイや大局照明用レイは1本ずつしか放たないようにしたと荒牧氏は説明する。しかも,放つレイの方向はランダムで決めているという。もちろん,ある程度は意味がありそうな方向に限定するよう配慮はしている。ここで言う配慮とは,たとえば,レイの射出起点における材質パラメータ※を考慮するといったことだ。
※反射特性パラメータ,たとえば双方向反射率分布関数(Bidirectional Reflectance Distribution Function,BRDF)などのこと。
配慮するとは言っても,放たれるレイの方向はランダムなので,レイが持ち帰った情報で描画する映像フレームは,ザラザラとしたランダムな輝度を含んだ砂絵のようなノイジーなものになる。これを見られるレベルの映像に修正するのが,竹重氏が解説する「ノイズ低減フィルタ」の役目だ。
話を戻すとBack Stageデモのパストレーシングエンジンでは,表示用の映像フレームを直接は生成しない。以下のスライドをもとに説明していこう。
Back Stageにおけるパストレーシングエンジンでは,まず,青色で示す中間パラメータバッファを生成したうえで,中間バッファを複数組み合わせてノイズ低減フィルタ用となるオレンジの後処理用バッファを生成する。そのうえで,複数の後処理用バッファを参照して,ノイズ低減フィルタで表示用の最終フレームを生成するのだという。
余談だが,パストレーシングエンジンのスライドをよく見ると,レイトレーシング非対応ハードウェアでラスタライズ法により描画した結果を,同じパイプラインで処理できる仕様にしている様子がうかがえるのは興味深い。
ゲームグラフィックスにおけるパストレーシングの普及は,2035年よりも早そうだ
このセッションで興味深かったのは,30fpsでBack Stageのリアルタイムグラフィックスをパストレーシングで描画するためには,レイの射出数を大幅に減らさなければならないという点だった。
Back StageデモはフルHD解像度で描画したそうだが,1ピクセルあたりの基本レイ射出数は2本だけだ。上述したように,実際には起点となるピクセルの材質や,そこから放ったレイが衝突したオブジェクトの材質によっては,さらなるレイの射出を余儀なくされるのだが,それでも,1ピクセルあたり20レイを超えることはあまりないようである。
むしろ,レイの数を増やさないように,大局照明の解像度を3分の1に縮小したり,シーン内における調度品のレイアウトや構成を変えたりといった方向で調整したそうである。
ところで,かつて筆者はGeForce RTXシリーズが登場したときに,各GPUが1秒あたり何本のレイを射出できるかの公称値をもとに,フルHD解像度の各ピクセル(約207万ピクセル)から何レイ射出できるのかを試算したことがあった(関連記事)。
その計算結果は以下のとおり。
- Quadro RTX 8000&Quadro RTX 6000:約80レイ
- GeForce RTX 2080 Ti:約80レイ
- GeForce RTX 2080:約64レイ
- Quadro RTX 5000:約48レイ
- GeForce RTX 2070:約48レイ
射出したレイが何かに衝突したとき,衝突先の材質に対応したシェーダプログラムが走って処理負荷がかかるので,計算した値のレイ数を実際に射出できるわけはないと思っていたが,まさか,「数レイを放つだけでけっこうキツキツ」というのは意外であった。今回のセッションで,まだまだ現実は厳しいのだなと実感した次第だ。
逆に言えば,そこまで少ないレイ数でBack Stageほど説得力のある映像が得られるというのも驚きであった。これだけ少ないレイ数のパストレーシングでも,これだけのリアルタイムグラフィックスが実現できるのであれば,NVIDIAのMorgan McGuire氏による「2035年には,ゲームグラフィックスはパストレーシングベースとなる」(関連記事)という予測も,Back Stageデモを見たあとでは,むしろもっと前倒しになる可能性もあるのではないだろうか。
[SIGGRAPH]2035年,ゲームグラフィックスはパストレーシングへ。NVIDIA技術者が語る未来予想図
Luminous Productions公式Webサイト
- この記事のURL: