VRゲーム『ディスクロニア: CA』負荷低減策から世界観を強化する魚群表現まで――Meta Quest 2の性能を最大限生かしたリッチなグラフィックの実現方法

2022.12.08
注目記事ゲームづくりの知識講演レポート公開資料まとめ3DCGUnityVR・AR・MR
この記事をシェア!
twitter facebook line B!
twitter facebook line B!

Unityに関する大規模オンラインカンファレンスイベント『SYNC 2022』が2022年10月25、26日に開催されました。10月25日にはMyDearest株式会社の山本 順也氏と尾上 明広氏が登壇し、「Meta Quest 2の性能を最大限生かしたリッチなグラフィックを実現するには」と題するセッションを行いました。

本セッションでは2022年9月に第1章がリリースされたVRゲーム『ディスクロニア: Chronos Alternate』を題材に、Meta Quest 2の特性を踏まえリッチなグラフィックを表現するための工夫について報告がされました。GPUとCPUの負荷を低減させるためのパフォーマンスチューニングや、ハードのポテンシャルをフル活用した「魚群」の表現など、実開発を踏まえての知見が展開された本セッションをレポートします。

TEXT / 田端 秀輝

EDIT /  神山 大輝

目次

VR向けゲームの開発の特徴

『ディスクロニア: Chronos Alternate』(以下、『ディスクロニア: CA』)は、VR空間上を自由に探索できるVRノンストップ捜査アクションゲームです。探索可能なマップ数や触れられるオブジェクト数が膨大になったことで、以前のタイトルよりも、ゲームプレイを飽きさせず、かつVR酔いを低減できるようグラフィックスやモーションの強化が必要になったと言います。

本作は、Meta Quest 2(以下、「Quest 2」)を主な対象端末として開発されています。モバイル端末と比較すると、VRゆえ両目向けに2画面分の描画をする必要があります。

さらにMeta Questストアでリリースするためには、MetaのVRC(バーチャルリアリティチェック)にある「リフレッシュレート 72FPSの維持」の厳守が求められます。

これに対して山本氏は、様々なOSや機種に向けて開発をしなければならないモバイル向けアプリの開発と比較して、本作の対象端末はQuest 2の1つを意識すればよく、しかもQuest 2のSoCはSnapdragon 865相当とそれなりに速い上にメモリも潤沢であったと言います。このため、「モバイルの開発と比較して極めてつらいということはなかった」と本作の開発を振り返っての印象を述べました。

GPUのパフォーマンスチューニング

続いて、GPU向けとCPU向けにどのようなパフォーマンスチューニングを行ったかが解説されました。

バランスの良い解像度を探す

本作ではSFの空気感を演出するためにブルームの導入が方針として定められており、そのための計算リソースを空けておく必要がありました。また、VRでは特にエイリアス(ジャギー)が目立ってしまうという問題があり、解像度を高く保つ必要があります。

そこで「フィル」と「解像度」のバランスをとるべく、Render Scale(描画解像度)やMSAA(マルチサンプル・アンチエイリアシング)レベルを調節して、検証を行いました。

計測条件は「R11G11B10 HDRバッファへの描画」「Bloomを有効化」「FFR(GPU負荷が高い時に視野外周の解像度を下げる機能)無効」「GPU実行時間の最大値を10ms~11ms(75FPSを安定して出すため1s/75≒13msより余裕を持たせている)」とした

検証の結果、MSAA = 2でRender Scale = 0.9にしたところ、72FPSがキープ出来た上、GPUの実行時間にも余裕が出る状態となりました。

エイリアスの問題を回避する

さらに、エイリアスの問題を回避し「解像度」を高めるために、以下のような工夫がなされました。

最初に紹介されたのは「UVのシームを大きくとる」という工夫。Mipmapsの影響でUVの縁辺の部分に外側の白い部分が混じりジャギーができていますが、UVマップのシームを大きくとり、外側の色を近い色にすることでジャギーを回避しました。

ふとももに注目すると、画像左の方には白いジャギーが出てしまっている。画像右のようにシーム(赤い線の部分)を大きくとることで対応した

また、モバイルアプリ向け開発でよく使われる疑似的なリムライトやMaterial Captureを利用する際は、鋭く光らせるのではなく、グラデーションが出るように鈍く光らせることでエイリアス問題を回避しています。鋭いハイライトをださないというのも重要なポイントです。

さらなるGPU負荷の低減

GPU負荷の低減については「半透明を極限まで減らす」「SetPassの最小化FFRの活用などの工夫が挙げられました。

半透明の描画では、想像通り処理が顕著に重くなったそうです。出来る限りポリゴンでの表現に変えることで、半透明処理を極限まで減らす工夫を行いました。

オーロラを表現するために空に半透明ポリゴンを2枚置いたところ、それだけでGPUの実行時間が2.2ms増加したとのこと

画像左はプレイヤーキャラクターの左手にでるエフェクトだが、半透明処理をした板状のポリゴンから3Dモデルに変更した。画像右のオブジェクトについて、細かい十字の部分も3Dモデルである

SetPassの最小化については、SRP Batcherの恩恵で、ほぼ問題にならなかったそうです。

FFRの活用について、GPU負荷が高い時に視野外周の解像度を下げ負荷を低減させる機能であるFFRですが、本作ではQA直前まで使用せずにパフォーマンスチューニングを行い、最後の最後に有効化したそうです。

GPU負荷低減に対する効果は大きいのですが、ブラッシュアップやQA工程で重い処理が出てきたときに対応する「へそくり」として残しておくことを山本氏は推奨していました。

山本氏はこれらのGPUのパフォーマンスチューニングを振り返り、「当たり前のことを当たり前にやると、思ったよりもQuest 2は動く端末であった」と評価し、比較するとCPUパフォーマンスチューニングの方が「つらかった」と述べました。

CPUのパフォーマンスチューニング

「CPU側の方が実際つらい」というスライドの通り、困難を極めたCPUのパフォーマンスチューニングについては尾上氏から発表がありました。

予想と異なったCPU負荷

『ディスクロニア: CA』ではゲームのコアロジックとして重い処理は存在しないので、CPU処理に関しては「真っ当に作れば普通に(72FPS以内に)収まるはず」と尾上氏は予想していました。しかし、現実には72FPS以内に収まらず、パフォーマンスチューニングをする必要が出てきました。

まずはセオリー通りProfilerで計測し、「瞬間的なスパイク(処理負荷の上昇)」「恒常的に時間を取っている処理」といった目立つ点を潰していくことになりました。

CPUのパフォーマンスチューニングの対象

主にパフォーマンスチューニングの対象となったのは「GCアロケーション」「ログ出力」「uGUI」「AnimationJobs(内製のLookAt処理)」「XR Interaction Toolkit」の5箇所。

GCアロケーション(ガベージコレクション時のマネージヒープの確保)については、Profilerを確認し、毎フレーム出ているものは確実に処理していきました。

シーン遷移時や低頻度の操作で出るものはある程度許容したが、基本的には0を目指したそう

ログ出力はデバッグ時限定の処理とはいえ、残っていると他の高負荷処理が埋もれて見つけづらくなるため、実機ビルドの際は全て排除したそうです。

外部ライブラリを使ったログ出力も除外。尾上氏はMeta Quest 2について「他のハードよりログが処理に占めている領域が大きかった」という印象を持ったそうだ

uGUIについて、Canvas自体や要素を移動させるとレイアウトの再計算処理が走りますが、VRではGUI全てが2Dではなく3D空間に置かれるので、プレイヤーが動くたびにGUIの再計算が走ってしまいます。

このため、uGUIをすべてSpriteや不透明なMeshポリゴンに置き換えて対応を行いました。

ImageのFillAmountなどuGUI固有の機能はSprite用シェーダー上に新たに実装することで対応

AnimationJobs(内製のLookAt処理)は、Burst Compileを行うことで軽量化を行いました。

XR Interaction ToolkitUnityが提供しているVR/AR向けインタラクションシステムですが、「公式パッケージだから問題ない」と思いきや非常に高負荷だったとのこと。不要な処理を省くために改修を行った結果、毎フレーム0.8msかかっていた処理が0.3msで済むようになるなど大幅な軽量化につながりました。

XR Interaction Toolkitを使った開発を行う際には軽量化を検討したほうがよいとのこと

上記のようなチューニングを実直に行う事によって、CPUのメインスレッドでの処理において72FPSを確保することができました。これらの作業を振り返って、「Quest 2はあくまでフレームレートの基準が家庭用機やモバイルより厳しいだけで、無理な軽量化を求められるわけではない」と尾上氏は述べました。

未使用のコアを活用して魚群を描く

これまでに行った内容でCPUのメインスレッドのチューニングは達成できました。しかし、ワーカースレッドは使用しておらず、まだまだQuest 2のポテンシャルを活かしきっていない状態です。

そこで、使用していないワーカースレッドを使い、『ディスクロニア: CA』の世界観にも沿った「魚群」を実装することになりました。

今までの社内の開発リソースでは手が出せなかったものを実装したことで、開発チーム全体のテンションを上げ、全体のクオリティを引き上げたという効果もあったそうだ

「魚群」生み出した技術

「魚群」を実装するにあたって活用した技術は以下のようなものです。

 

  • Burst Compiler + JobSystem
  • GPU Instancing
  • Vertex Texture Animation

 

魚群の挙動は、Burst Compilerとマルチスレッドコードを容易に作成できるC# JobSystemで完全に並列化を行っています。魚群の中の魚は、1フレーム前の魚やプレイヤーの位置を参照し、次のフレームの位置を計算しています。

Burst CompilerとJobSystemが優秀なため、それほど複雑な最適化を行わなくても十分パフォーマンスが出せたとのこと

GPU Instancingについては、DrawMeshInstancedでインスタンシング描画を行っています。描画リクエストについて、細かく投げるよりも一度にまとめて複数のリクエストを投げたほうがパフォーマンスがでるため、本作では1,023匹ずつまとめてリクエストをしています。

MaterialPropertyBlockに魚ごとの情報を格納することで、複数種類の魚を1度のリクエストで描画している

また、魚のアニメーションは、頂点の位置などの情報を格納したテクスチャでアニメーションを行うVertex Texture Animation(VAT)で実現しています。

頂点位置を変えることで異なる種類の魚を作ることができる

負荷対策の重要性

山本氏は『ディスクロニア: CA』の開発について「Quest 2はポテンシャルの高いハードであり、得意なことに徹すれば驚くような絵を出すことができる」と振り返りました。一方、VR環境特有の注意として「プラットフォーム(Meta Quest Store)のFPS要件がキツイ」「エイリアスの問題がNonVRのゲームよりもシビア」という点があり、これらの対策の重要性を語りました。

本セッションの動画や講演資料は、下記ページをご覧ください。

Meta Quest 2の性能を最大限生かしたリッチなグラフィックを実現するには | Unity Learning Materials『DYSCHRONIA: Chronos Alternate』公式サイト
田端 秀輝

「ゲームと社会をごちゃまぜにして楽しんじゃえ」がモットーの、フリーのコンテンツ開発者。節電ゲーム「#denkimeter」やVRコンテンツ、体験型エンタメの開発をしています。モニター画面の中だけで完結しないゲーム体験が好きで、ここ十数年注目しているのはアイドルマスターです。

関連記事

Unityのプロジェクトをインポートできるプラグインも無料公開。3DゲームやVRアプリの開発に向いた「UNIGINE Engine」、バージョン「2.18.1」がリリース
2024.04.25
Unreal Engine 5.4がリリース。アニメーション関連の新機能「Modular Control Rig」の追加、「Motion Matching」の正式リリースなど
2024.04.24
【GDC 2024】Unity Technologies講演の日本語吹き替え動画、5/8(水)より順次公開予定。Unity Japan公式YouTubeチャンネルにて
2024.04.24
「Meta Quest」のOS、サードパーティのハードウェアメーカーに開放。ASUSやレノボはデバイスを開発中
2024.04.23
Unity Technologies、HDRPを解説した無料の電子書籍をUnity 2022 LTS版にアップデート。進化した水面の表現やSpeedTreeを組み合わせたTerrainの使い方を183ページにわたって紹介
2024.04.19
XRプラットフォーム・アプリ間の標準化を目指す「OpenXR」、バージョン「1.1」が公開
2024.04.16

注目記事ランキング

2024.04.19 - 2024.04.26
1
【2022年5月版】今から始めるフォートナイトの「クリエイティブ」モードープレイ開始から基本的な操作方法まで解説
2
『フォートナイト』で動く本格的なゲームが作れるツール「UEFN」とは?従来のクリエイティブモードから進化したポイントを一挙紹介!
3
フォートナイト クリエイティブとUEFNで使える仕掛け一覧
4
フォートナイト クリエイティブとUEFNで使える仕掛け一覧 Vol.1「アイテム系」
5
フォートナイト クリエイティブとUEFNで使える仕掛け一覧 Vol.5「島の設定」
6
【CHALLENGE1】「クリエイター ポータル」を使って、UEFNで作成した島を世界中に公開する
7
フォートナイトとUEFNがv29.30にアップデート。すでに公開した島をプレイできないようにする機能が導入される
8
フォートナイト クリエイティブとUEFNで使える仕掛け一覧 Vol.7「NPC系」Part1
9
フォートナイト クリエイティブとUEFNで使える仕掛け一覧 Vol.2「ユーティリティ系」
10
フォートナイト クリエイティブとUEFNで使える仕掛け一覧 Vol.4「ゲームシステム系」
11
フォートナイト クリエイティブとUEFNで使える仕掛け一覧 Vol.6「チーム・対戦系」Part1
12
フォートナイトとUEFNがv29.20にアップデート。見下ろし視点でもプレイヤーキャラクターの向きを操作できるようになった
13
UEFNで使えるプログラミング言語「Verse」のノウハウが集結。『UEFN.Tokyo 勉強会 03 Verse Night』レポート
14
フルカラー書籍「UEFN(Unreal Editor For Fortnite)でゲームづくりを始めよう!」、ついに本日発売!全国書店で好評発売中!
15
『フォートナイト』で建築ビジュアライゼーション!?UEFNでオリジナルの世界観をどう作り上げたか、その手法を解説【UNREAL FEST 2023 TOKYO】
16
まるで『マイクラ』?ボクセル地形を生み出す無料アセット「VoxelPlugin Free」で”地形を掘ったり積み重ねたり”して遊んでみよう
17
【STEP2】UEFNの基本的な使い方を覚えよう
18
フォートナイト クリエイティブとUEFNで使える仕掛け一覧 Vol.10「UI系」Part2
19
【CHALLENGE3】UEFNの機能「ランドスケープ」を使ってオリジナルの地形を作る
20
フォートナイト クリエイティブとUEFNで使える仕掛け一覧 Vol.9「建築物系」Part1
21
フォートナイト クリエイティブとUEFNで使える仕掛け一覧 Vol.7「NPC系」Part2
22
フォートナイト クリエイティブとUEFNで使える仕掛け一覧 Vol.10「UI系」Part1
23
フォートナイト クリエイティブとUEFNで使える仕掛け一覧 Vol.3「プレイヤー系」
24
フォートナイトとUEFNがv26.30にアップデート。ロビー画面が一新され、クリエイターが島ごとにロビー背景を自由にカスタムできるように
25
フォートナイト クリエイティブとUEFNで使える仕掛け一覧 Vol.8「ゾーン系」
26
「UEFN」って実際どうなの? 編集部が3時間で「みんなで遊べるアクションゲーム(?)」を作ってみた
27
【STEP4-2】リスポーンとチェックポイントの仕組みを作る
28
【CHALLENGE2-1】フレンドと一緒にゲームを作ろう――UEFNプロジェクトをチームメンバーとリアルタイムで共同編集する
29
Epic Games、200を超えるフォートナイトの島クリエイターが年間10万ドル以上の配当金を得られると発表。島の「プレイ時間」が影響
30
【STEP4-1】コース外に出たらデスする仕組みを作る
VIEW MORE

イベントカレンダー

VIEW MORE

今日の用語

ワイヤーフレーム(Wire Frame)
ワイヤーフレーム
  1. 3Dモデルのエッジ情報のみを表示するレンダリング手法。ゲーム開発においては、3Dモデルやシーンのポリゴン構造を確認することに用いることが多い。
  2. UIやWebページなどのレイアウトを決めるための設計図。
VIEW MORE

Twitterで最新情報を
チェック!