Search Unity

Adaptive Performance を使って、美麗かつスムーズに動くモバイルゲームを作る

, 3月 30, 2021

Adaptive Performance を使ってモバイルゲームのチューニングを行い、フレームレートとグラフィック品質のバランスを取る方法をご紹介します。Adaptive Performance のデバイスシミュレーター、サンプル、スケーラーのアップデートに関する最新情報をご覧ください。

開発者は、特に複雑なモバイルゲームを作る際には、プレイヤーのデバイス上でのゲームのパフォーマンスに細心の注意を払う必要があります。パフォーマンスの問題は、ゲームプレイに影響を与え、デバイスのバッテリーを消耗させる可能性があるからです。特に携帯電話では、発熱量が非常に大きくなるとサーマルスロットリングが発生し、フレームレートの低下を招きます。これは修復が困難な問題です。

では、サーマルスロットリングはなぜモバイルゲームのパフォーマンスに影響を与えるのでしょうか。ゲームがレンダリングやゲームロジックの処理など、より多くの処理を行おうとすると、CPU や GPU はより多くの電力を消費します。この消費電力量の増加によってより多くの熱が発生し、デバイスは温度を下げようとしてパフォーマンスを低下させます。

Unity と Samsung の Adaptive Performance を使えば、デバイスの熱や電力の状態を監視して、適切な対応ができるようになります。例えば、長時間プレイしている間に、詳細度や LOD の偏りを動的に減らして、確実にゲームをスムーズに動作し続けさせられます。Adaptive Performance を使えば、パフォーマンスのためにグラフィックの忠実度を最小限に抑えるということを制御された方法で行うことができます。

上のビデオでは、Adaptive Performance の詳細と、ビルドに Adaptive Performance を追加する方法を紹介しています。

Adaptive Performance の仕組み

Screenshot of Unity editor, Device simulator is visible

Adaptive Performance は、すべての Samsung Galaxy デバイスで動作します。言い換えれば、Samsung のデバイスだけが Adaptive Performance の恩恵を受けることができるということです。

しかし、AppBrain によると、Samsung は Android 端末のトップメーカーであり、世界市場の 3 分の 1 以上のシェアを占めています。つまり、ゲームに Adaptive Performance を追加すれば、何億ものデバイスで確実にパフォーマンスを向上させることができるのです。

Adaptive Performance の API を使用してアプリケーションを微調整することができますが、Adaptive Performance にはそうした調整を自動的に行うモードもいくつかあります。これらのモードでは、Adaptive Performance が、以下のようないくつかの重要な指標に基づいて、調整すべきゲームの設定を決定します。

  • 以前のフレームに基づく望ましいフレームレート
  • デバイスの温度レベル
  • 熱による障害が起きるまでデバイスがどのくらい近づいているか
  • デバイスが CPU バウンドか GPU バウンドか

これらの 4 つの指標によりデバイスの状態が表現され、Adaptive Performance が調整された設定を微調整して、ボトルネックを軽減します。これは、デバイスの状態を表すインデクサーと呼ばれる整数値を提供することで行われます。インデクサーは、デバイスの熱やパフォーマンスの状態を記録し、品質を数値化した指標を提供するための仕組みです。

スケーラーとは、ゲームの個々の機能を表すもので、グラフィックや物理演算の設定などが含まれますが、これに限定されません。スケーラーは、インデクサーの値に基づいて自らを調整します。どのスケーラーが利用できるかは、デバイスシミュレーターの Adaptive Performance 拡張で確認できます。

デバイスシミュレーターでのボトルネックのシミュレーション

Screenshot of editor

ボトルネックのシミュレーションは難しいものですが、Adaptive Performance とデバイスシミュレーターの統合により、わざわざデバイスに熱を持たせてベンチマークを行うということをしなくても、様々なシナリオをエディターで直接テストすることができます。

デバイスシミュレーターの Thermal 設定では、デバイスがサーマルスロッティングを起きている状態に設定したり、サーマルスロッティングに近い状態になった時に警告を発するように設定したりすることができます。また、Level や Trend の値を正の値にして、デバイスが発熱している状態のシミュレーションをすることもできます。

一方、Performance 設定では、現在のボトルネックを CPU、GPU、ターゲットフレームレートのいずれかに設定できます。同様に、CPU や GPU のレベルを設定して、そのパフォーマンスの周波数をシミュレートすることもできます。

Thermal と Performance の設定は、Adaptive Performance がインデクサーやスケーラーを介してゲームのパフォーマンスをどのように変化させるかに影響します。デバイスシミュレーターでは、いくつかのスケーラーを有効にして、Adaptive Performance がデバイスがスロットリングを起こした時にどのように対応するかを確認することができます。

例えば、GPU がボトルネックに設定されていて、熱が上昇傾向、温度の水準も上昇していて、警告レベルが「Throttling」に設定されている場合、Adaptive Performance にシャドウの設定を調整させることができます。また、スライダーでスケーラーをオーバーライドして、個々の設定をテストすることもできます。

カスタムスケーラーの作成

Unity エディターの画面イメージ - Adaptive Performance タブを開いたところ

Adaptive Performance では、カスタムのスケーラーを作成することで、ゲーム設定の制御方法を強化、拡張することができます。これには、自動的には提供されない設定も含まれます。

カスタムスケーラーを実装するには、AdaptivePerformanceScaler クラスを実装する必要があります。

例えば、QualitySettings.masterTextureLimit を設定すると、レベルごとのテクスチャの品質とサイズを指定するよう求められます。

スケールの現在のレベルに基づいて、OnLevel 仮想関数をオーバーライドして、スケーリングのロジックを実装することができます。Adaptive Performance が報告する CurrentLevel によって、QualitySettings.masterTextureLimit をより高い値に設定するように通知することができ、これによって、すべてのテクスチャのより低いスケールのテクスチャミップマップが使用されます。テクスチャサイズを扱う場合、カスタムスケーラーがビジュアルに影響を与え、特に GPU に対して働きかけることがわかります。

また、最大レベルと境界を記述することで、ゲームのビジュアルが完全に失われることはなくなります。高レベルのミップマップテクスチャでも、低レベルのミップマップテクスチャの寸法を各々半分にしたサイズはあるためです。

Adaptive Performance は、ゲームがデバイスの現在の状態に適切に反応するため機能をたちどころに提供してくれます。Adaptive Performance の詳細については、Package Manager > Adaptive Performance > Samples と選択して、パッケージマネージャーを通じて提供されるサンプルをご覧ください。各サンプルは特定のスケーラーと連動しているので、各スケーラーがゲームにどのような影響を与えるかを確認することができます。また、Adaptive Performance の設定や、API を直接操作する方法については、エンドユーザー向けのドキュメントをご覧になることをお勧めします。ドキュメントやその他の関連するリンクはこのすぐ後に示しました。

フォーラムチュートリアルビデオで、Adaptive Performance について詳しくご紹介しています。また、Adaptive Performance の実装方法については、弊社のドキュメントをご覧ください。

9 replies on “Adaptive Performance を使って、美麗かつスムーズに動くモバイルゲームを作る”

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です