はじめに
Unityでモバイルアプリの性能を測ることになりまして、調査しながら計測をやってみたら色々罠を踏みました。
その結果をまとめました。誰かナレッジ作って。ないですか。じゃあ一通りまとめます。
技術情報はありますが、普遍的な内容にまとめられなかったのでポエム扱いです。
ことのあらまし
- とあるUnity製のモバイルアプリがあります。
- 結構重い。
- じゃあ、アプローチとしてグラフィックを軽くしてみましょうか。
- UnityのProfilerで計測しましょうねー。
- せっかくだから実機でチェックしよう!
- Macも持ってるからiOSとAndroid両方チェックできるな!
- USAGEでGPUがどれくらい変化したか取ったらいいっしょ!
結果
- うわー!ほしい情報が取れない…
- PROFILERのUSAGEで出てほしいのに!
- 結局目論見通りに軽くなったのかわからない!
- 相手に説明できない!!
どうすればよかったか?
- まずはPCのUnityエディタ上で測ろう
- 何がボトルネックになるか、それを見極める
- FPSやUSAGEだけが全てじゃない
- グラフィックはGPUのみならず
- CPUも使うよね。
- 当然メモリもVRAMだけでなく、通常のメモリを消費する。
- ということは、描画に使われるメソッドがあるということ。
- そこの動作時間がいつでも測れる。
- 記録はしっかりと残そう
具体的には何をして、何を間違え、何が起こったか?
- とりあえずFPSを指標にした
- 重いのが課題のはずなのに、計測してるところが軽すぎてFPSがカンストしちゃう
- 60FPS制限があってそれ以上にはあげられない(Android)
- iOS(調べる。たぶん60FPS以上出る?)
- GPU Profilerがモバイルに対応していない
- この世にNVidia Graphicsに対応している携帯端末ってNintendo Switchですよ(未確認)
- ので、サードパーティーのプロファイラーやツールを当たる
- iOSはiOSでXCodeで取得するのがベストプラクティス…だけど
- フレームデバッガーと同等の内容が取れるけどわかりやすい数値としては取得できない
- 情報の陳腐化が早すぎてGUIも変われば取得できるデータもコロコロ変わる
- 過去のナレッジが役に立たない筆頭
- どうすりゃいいんだこれ
結論
結局何を基準にしたらいいんだろうね。全くわからんよ。
なお、この記事2年前くらいに作ってて途中で塩漬けにしてたのですが、いまだに挽回できていないので悲しみを込めて公開します。なんとかなってますように。