generated at
パフォーマンスの計測 再入門 〜Unity 2020版〜



Unity Japan 公式の動画
処理落ちの悪夢
入力した操作が反映されない
気づいたら死んでる
まずは、処理落ちしているか確認
1フレーム内で処理が終わっているか
60FPSだったら、1frame = 16ms
Render結果については、前フレームの結果を使うのでフレームをまたぐ
その描画結果の反映が VSync(垂直同期)
VSyncオフにしてると画面がずれることがある
フレーム内の処理が早くて時間が余っていても、次のVSync待ったりする
1msでも処理時間越えたら、次のフレームまで待つので、処理落ちの原因になる
CPUかGPUか
Gfx.WaitForPresentが呼ばれている場合は、CPU処理は時間が余っていてレンダリング待ちなのでGPUに問題がある
Gfx.WaitForCommandが呼ばれている場合は、GPUがCPU待ちになっているので、CPUに問題がある
Unity 2020からProfilerをStandaloneで起動できるモードできた
Editor処理のオーバーヘッドを減らせる
TotalとSelf
Totalは処理全部にかかった時間
非同期処理が待っている時間も計上される
Selfはその処理だけの時間
GC
GC.Alloc
メモリを確保する
GC.Collect
メモリを開放する
これがめっちゃ時間かかる
Profile Analyzerが便利
Totalであたりをつけて、Selfで怪しい処理を見つける
Compare機能で複数frame間の比較ができる
コードの変更前と変更後のパフォーマンス差分に気づける
Deep Profilerは重いので、mySamplerを作って Begin(), End() したらサクッと特定箇所のプロファイリングができる
ProfilerでJobSystemを誰がどこで呼んだか分かるようになった
描画の流れ
FrameDebuggerの内容が同じならSet Pass Callは増えない
SRPバッチング
SetPassを減らす
GPU自体の処理
ポリゴン数
フィルレート
オーバードロー
シェーダーの負荷
デバイスが苦手な表現の有無
GPU処理の確認方法
Xcode Frame Debbuger
これがオススメとのこと
GPUメーカー提供のデバッガー