Unity公式から無料のeBookがいくつか発行されており、今回取り上げる"Optimize Your Mobile Game Performance"もその中の一冊。Unityの最新版のLTSが出た段階で出されるらしいので、現在は2020LTSに則った内容です。
e-Bookについては上のリンク先よりダウンロードできますが、Eメール・アドレス等の情報を入力する必要があります。当然、英語版のみです。
この英文を日本語に翻訳してみる、というのが本企画。長くなってしまうので、各章ごとに記事を分けて書いていきます。まずはProfiling(プロファイリング)編からです。
プロファイリング
・Build SettingでDevelopment Build, Auto Connect Profilerにチェックして、ビルドしてプロファイリングする。(より細かく調べたい時はDeep Profilingにもチェックをいれる、ただし、負荷が大きい)
・Preferences>Analysis>Profiler>Frame Countでの設定で最大2000フレームまで計測時間延ばせる。
・ProfilerMarkerとDeep Profilingモードを使うと、全ての関数呼び出しの最初と最後を計測できるようになり、どこがボトルネックになっているか正確に分かるようになる。
・最適化する前に、Profiler .data fileを記録しておく。後で比較するのに使える。
・早めに、そしてこまめにプロファイリングする。開発の早い段階から計測をしていこう。
・闇雲に最適化しない。原因を空想せずに、きちんと計測したデータを元に最適化する。
・可能なら常に目標となるデバイス上で開発ビルドを計測する。エディターで計測して得られるのは大まかな情報に過ぎない。
・プラットフォーム毎、iPhoneやAndoroid向けも含めた様々な計測ソフトあるので、それを使うのもまた良し。(X code, Android Studio, Arm Mobile Studioなど)
・さらに深い分析をする時にはパッケージ・マネージャーからProfile Analyzerをインストールする。過去の計測データと現在のを比較して、最適化がどのくらい効果を出してるか確認できる。
・フレームごとに使える時間予算は決まっている。そのゲームが60FPSなら16.666...msで30FPSなら33.333...msとなる。ただし・・・
モバイルの場合、60FPSで11ms、30FPSで22msしか使えない!
と考える必要がある。
これはモバイルは過剰な発熱を抑えるために65%程度くらいのマシンパワーしか使えない、ということ。
・CPU-boundか?GPU-boundか?Gfx.WaitForCommandsマーカーが表示されている時はCPUが遅れていてGPUが待機している。Gfx.WaitForPresentマーカーは、GPUがフレームを表示するのをCPUが待っている状態。どっちに負荷が掛かって、処理が遅れているかを特定する。
・モバイルコンピュータには多くの場合、冷却機構がないので特に発熱には気をつける。プログラムに問題はなくても、熱くなりすぎると計測上のパフォーマンスが落ちることがある。
・サポートする最低スペック機で測定する。
というわけで、Profilingについてのまとめメモでした。Profilingに辿り着く前にまず、ゲームを動かすために覚えることがまだまだあるのですが、ここらへんも勉強し始めないとダメですね。次回はメモリ編です。