VRゲームでパフォーマンスが出るように改善
2016年8月24日~26日の3日間、パシフィコ横浜で開催された、日本最大級のコンピュータエンターテインメント開発者向けカンファレンス“CEDEC 2016”。2日目に開催されたセッション“UE4 VRのロードマップ”のリポートをお届けしよう。
本セッションで講演を行うのは、Epic Games Support EngineerのJoe Conley(ジョー・コンリー)氏。Unreal Engine 4のVR作品対応に関する最新情報が紹介された。では、セッション内容をお届けする。
まずは、Unreal Engine 4の進捗について。Epicでは実際にゲームを開発し、それをテストケースとして、エンジンの改善や最適化を行っている。実際に開発している作品として、『Bullet Train』が紹介された。(参考記事はこちら)
本作を開発するうえで、いくつかの新機能を搭載。ひとつは、不可視のジオメトリをカリング(描写しないこと)し、見えるところにのみポストプロセス(アンチエイリアスやブラー、被写界深度などのエフェクト)を適用する機能。見えない部分は描画しないことで、エンジンの描画速度を向上させている。プラットフォームによって異なるが、たとえばPSVRでは1.0msを節約できる。「小さい数字に思えるかもしれないが、状況によっては効果が大きい」(コンリー氏)。
「VRではゲームの反応速度もかなり大切です」とコンリー氏。レイテンシーを改善するため、GPUスレッドの作業を開始する直前に、カメラ、アタッチメント、モーションコントローラーなどを更新し、できる限り反応を早く感じられるよう改善。60Hzのプラットフォームでは大きな違いが出るそうだ。
もうひとつの重要な最適化が、INSTANCED STEREO RENDERING。これは両目用の画像のメッシュを同時に描画するもので、CPUとGPUの時間を節約できるそうだ。PCおよびPS VRでのみ有効だが、近い将来にモバイルプラットフォームでも対応予定。
ただし、クリッピングを頂点シェーダーで行うのは、PS4にはあまり向いていないとのこと。そこで、PSVRでは、マルチ・ビューという異なるアプローチで最適化。こちらは4.13から実装予定だそうだ。「モバイルも、PS VRと似たような実装になる」(コンリー氏)。
PSVR向けでは、アーリーZパスも改善。以前は、スタティックメッシュのみ対応してため、最大限に活用できていない状況だった。そこで、ダイナミックメッシュにも対応。ドロー時間はわずかに増えたが、GPUのコストは大きく下がったため、「トータルでは改善された」(コンリー氏)。
Unreal Engine 4.12では7つのプラットフォームに対応。標準ですべてに対応しているため、開発側で何かをすることなく、各プラットフォームで実行できるとのこと。「今年はVR元年と言われているが、インストールベースはまだ少ない。開発者にとっては、できるだけ多くのプラットフォームへ、簡単にリリースできることが大切」とコンリー氏は述べる。
VRエディタを使い、VR画面で直接ゲーム制作!
ここからは、エンジンおよびフレームワークにおける新機能の紹介。VRでは高フレームレートを維持することが大切で、GPUだけではなく、CPUのパフォーマンスも重要。そのため、処理が重い部分は、ブループリントからC++へ変換することをオススメしてきたそうだ。
4.12では、ブループリントからC++への自動変換ツールを実験的に搭載。こちらはパッケージ化する際に変換するため、編集は扱いやすいブループリントで、実際のランタイムでは、C++のパフォーマンスを得られるメリットがあるとのこと。「かなりフレキシブルに使える」とコンリー氏。
フレームレートを維持するためには、「ターゲットとするプラットフォームのパワーに応じてスケーリングすることも重要」とも述べた。そのために、リアルタイムにスケーリングを変更する機能を搭載。「フレームレートをキープしながら、リッチな映像を実現できる」そうだ。
続いて、レンダリングについて。こちらは『Bullet Train』を例に、VRで高品質な映像を実現する機能、およびテクニックが紹介された。
「『Bullet Train』では、デスクトップ ディファード レンダラを使用してゲームを作成」とコンリー氏。ディファード レンダラ(陰影計算を遅らせるレンダリング手法)はGBufferにある多くの情報を活用し、エフェクトを活用してリッチな映像を作成できるそうだ。
たとえば、『BULLET TRAIN』で登場した、看板が床に反射している図。こちらは反射を計算して描画しているわけではなく、看板のモデルを利用した板ポリゴンを看板の下に配置し、反射らしく見えるようにゆがみを加えて、描画しているそうだ。「このエフェクトを実現するためのマテリアルは、かなり簡単」(コンリー氏)。同様のテクニックは、キャラクターが床に反射する映像でも使用。こちらは足の回転に対応するため、いくつかのポーズを用意し、ブレンドしたそうだ。
電車内でのライティングにも、GBufferを利用している。もともとは70以上の動的ライトを使用してシーンを作成したが、そのまま使用したのでは処理が重すぎる。そこで、事前に作成したライトとシャドウのテクスチャを利用して、ライティングのフェイクを作成。こちらをワールドに投影して、電車の外から社内に入り込む光を再現しているとのことだ。
「ディファード レンダラを利用すれば、ビジュアルインパクトが強いVRゲームを作れると思っている」とコンリー氏。ただし、すべてのVR体験で有効ではなく、トレードオフとなるケースも存在する。
そこで、デスクトップ フォワード レンダラを発表したとコンリー氏。両者で特徴は異なり、たとえばフォワード レンダラはより早く上手にスケールダウンできるが、ディファード レンダラのすべての機能はないとのこと。なぜうまくスケールダウンできるかは、AA(アンチエイリアス)でMSAAを使っていることが理由だそうだ。「より小さくスケーリングしても、最終的なイメージクオリティはそれほど低下しない」(コンリー氏)。「さらにMSAAは4x、8xなどパスを変更できるため、解像度を低くしてパスを上げたり、逆に解像度を高くしてパスを下げるなど、自身のコンテンツに合わせて対応できる」そうだ。
「ディファードレンダラは、多機能だが使いこなすのは難しい」とコンリー氏。なお4.13にはフォワード レンダラがあるが、「個人的には、使うにはまだ早いと思います」とのこと。「4.13ではいくつかの機能しかなく、最適化のプロセスはまだ始まっていないので、パフォーマンスはまだ発揮できない。4.14では、もっと使えるものになるだろう」とコンリー氏は語った。
続いてはコンリー氏が「個人的にもっともおもしろいと思う」コンテンツである、VRエディタについて。
開発のきっかけは、VRゲームのレベル(ステージ)を作成するとき、最初と最後の20パーセントにおける時間を短縮したいと思ったそうだ。これは、PCで操作してレベルを作成し、今度はVRヘッドセットをかぶってテストプレイ。その後、VRヘッドセットを脱いで、またPCで調整……というサイクルで開発してきた。この、毎回VRヘッドセットを着脱する時間が無駄で、生産効率が下がる。
また、第二の対象ユーザーとしている、プロではないクリエイターに向けた展開でもある。たとえばこれからインディーでVRに参入したいと思っている人でも、VRエディタは使いやすいとのこと。
このエディタは4.12からプレビュー版を同梱。実際に利用したフィードバックを得て、今後の方向性に役立てるそうだ。
VRエディタの、つぎのステップについても紹介された。まずは編集ギズモの改善。つかめる範囲を大きくし、回転や配置の操作性を改良し、もっと使いやすくなったそうだ。
また、従来のUIをVRでインタラクションするのは難しかったそうだが、これを解決するために、ウィジェットインタラクションコンポーネントを追加。3D空間に配置しているUMGやSlateウィジェットと簡単にインタラクション可能になった。すでに存在していたUIをエディタで使用することが簡単になったと言う。
VRエディタから直接ゲームを開始できるようにもなった。以前は開発かゲーム起動か、どちらかを選んでから開発環境を立ち上げる、という感じだったそうだが、開発画面とゲームを自由に行き来できるため、利便性が向上したそうだ。さらに作成画面では、VRエディタヘッドセットをかぶるだけで、自動的にVR画面に移行する機能も。
また、UEが使いやすくなっている理由のひとつとして、ドキュメントが充実していることにも触れた。できる限りドキュメントを追加、更新して日本語化している。また付属しているテンプレート(サンプルプログラム)は、ゲーム開発を早くスタートさせるために大きく役立つとコンリー氏。4.13からVRバージョンを搭載し、カメラの設定例やテレポートなど、必須となる共通のタスクがあるため、すぐに作業を開始できるそうだ。
VRゲームへも意欲的に対応を行うUnreal Engine 4。同エンジンを利用した、リッチなVR作品がたくさん登場することを期待したい。