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コンテンツ、体験型エンタメの開発をしています。モニター画面の中だけで完結しないゲーム体験が好きで、ここ十数年注目しているのはアイドルマスターです。

関連記事

Adobe『Substance 3D Sampler』、複数の写真から3Dモデルを生成する「フォトグラメトリ」機能を追加。『Substance 3D Designer』もアップデート
2023.02.02
シーンになじむ、リアルな煙のライティングをUnityで制作。UnityブログでVisual Effect Graphの新機能を解説する記事が公開
2023.02.01
Unity 2023年2月前半のイベント情報まとめが公開。世界最大級のゲーム開発ハッカソン『Global Game Jam』が日本各地でも開催される
2023.01.31
VRゲームに適したフォントとは?『DYSCHRONIA: Chronos Alternate』のフォントについてインタビューした記事を、フォントワークスが公開
2023.01.26
『Maya』のプラグイン『Ziva VFX』を長編アニメーションで活用する解説記事がUnityブログで公開
2023.01.25
舌打ちで「エコロケーション」を体験できるVR作品『MEcholocation』、開発者インタビュー記事が公開
2023.01.19

注目記事ランキング

2023.01.26 - 2023.02.02
1
フォートナイトがv23.20にアップデート!「ファルコンスカウト」が新たに追加されたほか、全ての島でゲーム終了後の演出設定が可能に
2
まるで『マイクラ』?ボクセル地形を生み出す無料アセット「VoxelPlugin Free」で”地形を掘ったり積み重ねたり”して遊んでみよう
3
【2022年5月版】今から始めるフォートナイトの「クリエイティブ」モードープレイ開始から基本的な操作方法まで解説
4
フォートナイトがv22.30にアップデート!クリエイティブモードにて「バトルロイヤル島」が登場したほか、メモリ使用量を表示する新たなマップUIが追加
5
フォートナイトがUnreal Engine 5.1に移行。Nanite、Lumen、仮想シャドウマップ、テンポラル スーパー解像度に対応
6
フォートナイトがv23.30にアップデート!「バジェット超過編集」や「クラウドボリューム」など、クリエイティブモードで多くのアップデート
7
Epic Games、フォートナイトで動作する新たな専用エディターを2023年3月末頃までにリリース予定であることを報告
8
【フォートナイト クリエイティブ】ドリフトボードで駆け巡る!タイマー付きのレースゲームを作ってみよう
9
フォートナイトがv23.00にアップデート!クリエイティブモードにおける仕掛けが大幅アップデート、バトルロイヤルモードは新チャプターへ
10
『Fortnite』クリエイティブモードで「スパイダーマン」と「ヴェノム」の世界を再現、一般参加可能のe-sports大会が開催
11
フォートナイトがv23.10にアップデート!イベントブラウザの追加による島制作の効率化、当たり判定カプセルの縮小化など
12
教育版マインクラフトで行われる18歳以下対象の全国大会「Minecraftカップ2022全国大会」開催決定、エントリー受け付けがスタート
13
『マインクラフト』Java版と統合版のセット販売が6/7(火)開始。どちらかのエディションを所得しているユーザーはもう片方を無料で入手可能に
14
メイキング動画「マインクラフトの秘密」第10話:ディープ ダーク (深淵)が公開。コンセプトアートやボツ案になった幽霊のブロックなどを紹介!
15
iPhoneやAndroidから『フォートナイト』がプレイ可能に。マイクロソフトのクラウドサービスXbox Cloud Gamingが提供開始
16
フォートナイトがv22.40にアップデート!クリエイティブモードにてクリエイター用の仕掛け「クラスセレクターUI」などが登場
17
フォートナイト『NO SWEAT サマー』イベントが開催!「汗をかかない」夏をテーマにして作られた島の投稿を募集中
18
フォートナイトがv21.10へアップデート。騎乗可能な野生動物やガードの雇用、アイテムプレーサーなどがクリエイティブに追加
19
『Fortnite』建築なしの「ゼロビルド」が実装、新武器アンヴィルロケットランチャー追加など
20
フォートナイトがv22.20にアップデート!クリエイティブモードに新しいイベントシステム「ディレクトイベントバインディング」が追加
21
ZETA DIVISIONのFORTNITE部門にNeverty7氏、Ta-Key氏、yappy氏の3名が加入。クリエイティブモードで世界的に高い評価を得るマップビルダー
22
Java版『Minecraft』ver1.19「ワイルド アップデート」と題した大型更新が行われる。バイオームやレッドストーン回路の新出力オブジェクトなど新要素が盛り沢山
23
フォートナイトがv21.30にアップデート!クリエイティブに「プレイヤーマーカー」や新しい小道具ギャラリーが追加
24
フォートナイトがv21.50にアップデート!クリエイティブに「近接デザイナー/近接武器」やレインボーロイヤルの旗の小道具が追加
25
フォートナイトがv22.00にアップデート!アイテム「ポケットバンカー」、新しいプレイヤーの移動機能「スライディングキック」が登場
26
フォートナイトがv21.20にアップデート!クリエイティブに新武器「チャージサブマシンガン」や「ボーラースポナーの新オプション」が追加
27
『Minecraft Live 2022』が10/16(日)午前1時より配信決定!『Minecraft』の最新情報発表や恒例のモブ投票が実施予定
VIEW MORE

イベントカレンダー

VIEW MORE

今日の用語

ローカル座標
ローカルザヒョウ 各オブジェクトの原点を基点とした座標系における、特定の一点を示した座標。
VIEW MORE

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