見出し画像

RDC24 セッション解説 "Using Roblox Tools to Improve Performance"

こんにちは。株式会社mozeのまつさこです。
今年9月にアメリカ・サンノゼで開催されたRobloxの開発者向けイベント「Roblox Developer Conference 2024」に参加してきました!

イベント二日目には各開発ジャンルのプロフェッショナルによるセッションがありました。本記事ではその中の、Mr. Chicken Rocket 氏による「Using Roblox Tools to Improve Performance」というセッションについて、解説します。

公式からYouTubeにてアーカイブ動画も投稿されました。こちらも合わせてご覧ください。



セッションの概要

本セッションでは、既存のRoblox標準のツールのみを使用して、エクスペリエンスのパフォーマンスを向上させる方法について紹介されました。
Robloxプレイヤーの半分以上がモバイルデバイスでプレイしていることから、ゲームを最適化することでプレイ時間が長くなり、ゲームの収益化の観点でも有利になります。
本セッションでは最終的に、開発者が気にするべき6つのポイントが示されました。先に「まとめ」としてそれを紹介し、詳細は下に続けて記載することとします。お時間のない方はこの「まとめ」だけ読んでいただけば、本セッションの要旨をつかむことが出来るかと思います。

まとめ

開発者は以下6つの点に気を付けてエクスペリエンスを開発することが推奨されます。
下記でいう「シーン」というのはカメラに写っている範囲のことです。Roblox Studio では Ctrl + Shift + F2 でレンダリング統計を表示でき、その中のDraw (scene) で確認できます。

  • トライアングル数 … シーンごとに500,000以下に抑える。

  • ドローコール数 … シーンごとに500以下に抑える。

  • メモリ使用量 … 2GBデバイスで1.3GBを目標に。

  • インスタンス数150,000以下が望ましい。

  • CPU使用率 … 特にモバイルデバイスでCPU負荷を抑える工夫をすべし。ゲームがCPUバウンドかGPUバウンドかを判断する。

  • 帯域幅使用料 … サーバーとの通信が過剰にならないように。workspaceで動くオブジェクトの数を抑え、50KB/s以下を目標に。

上の6つの点に気を付けることで、モバイルデバイスの良いベンチマークである iPhone6 や Galaxy S6 の様な2GBデバイスでも問題なく動作します。


セッション詳細

以下、セッションの詳細です。まとめで示した「6つの要素」それぞれについて細かなTipsも紹介していきます。
登壇者の Mr. Chicken Rocket さんは、Roblox以外でも長くゲームを作ってきておりゲーム制作歴は約25年、Robloxコミュニティに参加してから7年が経つと話しました。
▼ Mr. Chicken Rocket 氏のXアカウントはこちら
https://x.com/MrChickenRocket

Fruit Ninja や JetpackJoyride というゲームの開発に携わったそうです。あの頃はゲームの容量を20メガバイド未満にしないといけなかったので、技術的に本当に大変だったとのこと。

以下、セッションの本題です。
既存のRobloxのツールを使ってパフォーマンスを向上させるには、まずはヘルスチェックから始めることが大切です。
Robloxの長期的なビジョンでは、ゲーム開発者が最適化を気にせずともRobloxがすべて自動でやってくれるようにするとのことです。しかし、現時点ではきちんと最適化されたゲームこそがたくさん遊ばれ、また収益化にも成功しています。
Robloxにはプロジェクトのヘルスステータスをモニタリングし、追跡する素晴らしいツールがあります。そして Mr. Chicken Rocket 氏は、プロジェクトの進行中にパフォーマンス最適化を行う方が、最終的に後からやるよりもはるかに良いと、勧めます。
パフォーマンスを無視し続けて最後に最適化をするのではなく、作業をしながらパフォーマンスを確認していく方が良いとのこと。
これまで多くのチームと仕事をし、「なぜ私のゲームは上手く動かないのか?」という質問をたくさん受けてきたRocket氏。パフォーマンスに問題のあるゲームの多くは、以下の6つの問題のいずれかに関連するとのことです。

  1. パーツ数が過剰であること(トライアングル数の問題)

  2. ドローコール数が過剰であること

  3. CPUの使用率が高すぎること

  4. メモリ使用量が多すぎること

  5. ロード時間が長すぎること(インスタンス数が多い)

  6. 帯域幅の使用料が多いこと

トライアングル数(パーツ数)

Robloxでは、UnionやTerrainを含め、すべてが三角形(トライアングル)で表現されています。ほとんどの開発者はトライアングル数をあまり気にしませんが、それは描画パフォーマンスに直線的に影響します。
Robloxは、距離に応じてトライアングル数を減らすスケーリング技術を採用していますが、それでも200万のトライアングルがあるシーンは、100万のトライアングルがあるシーンよりも描画に2倍の時間がかかります。
では、どうやってシーンのトライアングル数を確認するのか?
シーン内のトライアングル数というのは、「カメラから見える範囲のトライアングル数」を指しています。カメラの外にあるトライアングルは無視されるので、カメラの視界内にあるトライアングルの数が重要です。
Roblox Studio で Ctrl + Shift + F2 ショートカットを使って、レンダリング統計を表示できます。

表示された統計の中で一番重要なのは、「ドローコール数」と「トライアングル数」です。画像のシーンでは、77回のドローコールで13万個のトライアングルが描画されています。
モバイルデバイスをターゲットにした場合の良いベンチマークは、iPhone 6やGalaxy S6のような2GBのデバイス。これらのデバイスで約50万のトライアングル数が上限です。

ドローコール

ドローコールとは、エンジンがレンダリングパイプラインに送るコマンドのことで、「何かを描画せよ」という指示を出すこと。
ドローコールごとにメッシュとマテリアルの組み合わせが作成され、それが画面に描画されます。
Robloxはジオメトリインスタンシングという技術を使って、同じメッシュとマテリアルを持つパーツを1つのドローコールで処理できるようにしています。これにより、例えば同じティーポットを4つ描画しても、1つのドローコールで済むのです!
同じティーポットであれば、Position, Rotation, Size, Color が違っても、ドローコールは1つです

ドローコールが多くなる理由の一つは、透明度のあるパーツを使うことです。透明度を持つオブジェクトは、描画順序を変更する必要があり、追加の描画コールが発生します。たとえば、透明度のない場合は2回の描画コールで済んだシーンが、透明度を持つと16回の描画コールが必要になることがあります!

パーティクルも、同じものでも一つあたりドローコールが1つ増加します

CPU使用率

次に、CPUのパフォーマンスについて。ゲームがモバイルでスムーズに動作しない場合、CPUが原因であることが多いです。

Ctrl + F6 で Microprofiler を表示し、CPU使用率をモニタリングしましょう。青くなっているときは、健康な状態です。

Microprofilerについては詳細説明は割愛し、Robloxのドキュメントを参照してくださいとのことです。

メモリ使用量

クラッシュの原因はほとんどがメモリの使い過ぎによるものとのこと。
一般的に、モバイルデバイスのメモリ使用量は、デバイスの総メモリの66%を超えないようにするのが理想的です。たとえば、2GBのデバイスでは、約1.3GBを超えると警告が出ます。

F9キーを押すことで、クライアントでのメモリ使用量を見ることが出来ます。ただし、Studio上での数値は間違っているので、RobloxPlayerなど本番環境での数値を見てみる必要があるとのことです。

メモリの使用に関しては、特に注意すべき3つの要素があります。それは、テクスチャパーツ数、そしてオーディオファイルです。

  • テクスチャの解像度はできるだけ小さいものを使う

  • Partはひとつあたりおよそ1KBを消費する

  • 長い楽曲はメモリを圧迫する

インスタンス数

ゲームのロードが遅い原因は、クライアントに複製されるインスタンスの数に関係しています。大体、1秒間に10,000インスタンスを複製することができますが、もし30万のインスタンスがあると、30秒かかることになります。そういったことから、インスタンス数の管理が重要です。
特にオーディオやテクスチャは、ロード時間に大きく影響します。

帯域幅の使用量

最後に、帯域幅の使用について。サーバーで移動しているオブジェクトの数が多すぎると、帯域幅を多く消費します。Robloxでは、1つの移動するオブジェクトが約1KBの帯域幅を消費します。例えば、50個のボールが転がっていると、毎秒50KBの帯域幅が必要になります。
ゲームプレイ中に Ctrl + F7 キーを押して出てくるパフォーマンスモニターの「Recv」が帯域幅に相当します。
1秒あたり50KBの使用が目標としたい限度で、それ以上だとネットワーク負荷が大きくなります。

最後に、Mr. Chicken Rocket 氏は、Roblox Dev Forumに投稿した自身の記事を紹介しました。

こちらの記事の内容は、 newtraceえんじにあ 氏が詳細に日本語訳もしてくださっています。こちらも是非参照ください。


株式会社mozeについて

株式会社mozeは、メタバースxAI時代の新世代Robloxゲームスタジオです。これまでにFind The Dragonsなどの複数のRobloxゲームを開発しています。

Robloxに関してお気軽にお問合せください。
問い合わせ先 : hello@moze.ai もしくは弊社コンタクトフォーム


いいなと思ったら応援しよう!