Snapdragon Profiler

UnityのProfiler上ではGPUの細かいメトリクスはとれないので、描画負荷をはかるためには Androidなら各SoC向けのプロファイラ。iOSならInstrumentsを使って描画負荷を測ることになります。

自分は私物端末がSnapdragonなので、普段はSnapdragonProfilerを見ています。

Snapdragon Profiler - Qualcomm

ダウンロードするためにはQualcommにユーザー登録が必要です。

普段よくみる指標

仕事で2Dのゲームを作っていたので、見るところは

  • GPU Memory Stats
    • Texture Memory Read
    • Read Total
    • Write Total

と、テクスチャの読み込みやフィルの周りにしています。
次点で

  • GPU Stalls
    • Texture Fetch Stall
    • Texture L1 Miss
    • Texture L2 Miss

あたりです。

f:id:enrike3:20180428172246p:plain

↑の図は2048x2048の画像をTruecolorからETC2_4bppに切り替えた瞬間のナイアガラ
24bit per pixel → 4bppなので1/6ですが、実際のTexture ReadやReadTotalの測定結果は1/10近く行ったりします。 このあたりは測らないとわからない。

一方でWrite Totalは解像度とoverdraw依存、つまり塗りつぶすピクセルの量に依存するので 圧縮テクスチャを使っても下がらないことがわかります。

overdrawはUnityEditor上で視覚的に見ることができますが、 エフェクトを作成する人に「overdraw控えめにしてね!」とどんなに口酸っぱく言っても各人の感覚によってしまうので
「これぐらいはギリギリ許されるだろう」と許されざるエフェクトが上がってくることがあります。
こういうときはやっぱり数値で落とせると強い(はず) 。
「このシーンに置いたときにWrite Totalが500MB超えたらNGとします」 みたいなやりとりができるようになります。

この手の数値は普段からいろんなものを眺めていないと「1G超えはヤバい!」みたいな感覚が養われないので
性能面で追い詰められてからみても、なるほどよくわからん、にしかならないので
普段からいろいろ眺めておきたいなぁと思っております。