Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Unityプロファイラについて

8,018 views

Published on

This slide is about the Unity profiler.

Published in: Engineering
  • Be the first to comment

Unityプロファイラについて

  1. 1. Unityプロファイラー ぬこでもわかる 2016/6/2 九谷 美生
  2. 2. 英語を日本語訳したものが多いので 若干の語弊があるかもしれません…。
  3. 3. スマホアプリのパフォーマンス問題 Unityのプロファイラー機能 プロファイラーの見方 LET’S PROFILE
  4. 4. スマホアプリのパフォーマンス問題
  5. 5. ・メモリーチェーン →スマホは利用可能なメモリが少ない為、 破棄予定にある、大量の小さなメモリオブジェクト ために何度もメモリを確保するとGCが複数回動き、 16ms以上の時間がかかってフレーム落ちが生じる。 ・メモリリーク ・アセットなどのロード ・透過の多用や頂点数が多い時のグラフィックス …etc スマホアプリのパフォーマンス問題
  6. 6. 問題を解決し、ゲームを最適化するために プロファイラでボトルネックを特定しよう →アプリで設定されたフレームレート(60fps)を下回るフ レームを調べ、どの処理に時間を消費しているか調査。 スマホアプリのパフォーマンス問題
  7. 7. ・CPU →ドローコールが多すぎる! →複雑な物理演算がある! ・頂点処理 →頂点数が多すぎる! →過度な頂点ごとの計算がある! スマホアプリのパフォーマンス問題
  8. 8. ・フラグメント処理 →オーバードローに繋がる過度なフラグメント処理! →フラグメントごとの過度な計算! ・帯域幅 →解像度が大きく非圧縮なテクスチャ! →高解像度なフレームバッファ! スマホアプリのパフォーマンス問題
  9. 9. スマホアプリのパフォーマンス問題 Unityのプロファイラー機能 プロファイラーの見方 LET’S PROFILE
  10. 10. Unityのプロファイラー機能
  11. 11. Unityのプロファイラー機能 フレーム単位のパフォーマンスに関する詳しいデータを 色別で表示してくれる便利機能。 提供してくれるデータは以下の通り。 ・Unityの各コンポーネントによるCPU使用率 ・レンダリングに関する統計(バッチ数、頂点数等) ・ドローコールあたりの消費時間 ・メモリの使用状況 ・シーンの物理計算に関する統計 ・各種パフォーマンス測定基準の詳細や オーディオアクティビティのログ
  12. 12. Unityのプロファイラー機能 モバイルデバイス上のコンテンツの実行を プロファイルすることができる。 Unity Proでのみ使用可能 Unity5からは無料です。
  13. 13. スマホアプリのパフォーマンス問題 Unityのプロファイラー機能 プロファイラーの見方 LET’S PROFILE
  14. 14. プロファイラーの見方
  15. 15. プロファイラーの見方 プロファイラーウィンドウ ウィンドウ上部にあるツールバーでコントロールを行う。 ・Record→記録開始。 ・Deep Profile→全てのスクリプトのプロファイリングを行う。 全ての関数コールが記録されるので、 どの部分で時間を要したかを正確に知りたい時に使用。 ※ただし、注意が必要(後述)
  16. 16. プロファイラーの見方 プロファイラーウィンドウ ウィンドウ上部にあるツールバーでコントロールを行う。 ・Active Profiler→プロファイリングする対象を選ぶ。 Editor上のアプリ、リモートデバイス上で動作しているアプリ(自身の端末等)、 スタンドアロンやウェブプレイヤー上で動作しているアプリ など…
  17. 17. プロファイラーの見方 プロファイラーウィンドウ ウィンドウ上部にあるツールバーでコントロールを行う。 ・Profile Editor→有効にするとUnity Editor自体の プロファイリングデータを収集する。 (アプリだけをプロファイリングしたい場合は必要ない(多分)) ※Unity Editor自体のプロファイリングデータを収集するには、 Active Profiler を Editor に設定する必要がある。
  18. 18. プロファイラーの見方 プロファイラーウィンドウ ウィンドウ上部にあるツールバーでコントロールを行う。 ・Clear→全てのプロファイリングデータをビュー上から消去。 ・◀︎▶︎ →フレーム移動 ・Current→常に最新のフレームを取る ・Add Profiler→プロファイリングする項目を追加
  19. 19. プロファイラーの見方 プロファイラータイムライン クリックで 表示・非表示 の設定可能 30FPSライン 60FPSライン 選択したフレームの 処理時間 アプリによって定めている目標のFPSラインを 上回る箇所があった場合、 そこで処理落ちが起こっている。 今回の場合、 スクリプトの負荷が30FPSを割ったので、 スクリプトに原因があると考えられる。
  20. 20. プロファイラーの見方 CPU Usage レンダリング、スクリプト、物理計算、GC、カメラ、 オーディオ処理、ユーザーインターフェースなどにおける CPU利用率を見ることができる。 (タイムライン上にあるVSync(ヴィーシンク:Vertical Synchronization)とはディスプレイの更新のタイミングに 同期させて処理を行う仕組みで、垂直同期とも言う。 CPU負荷とは考えなくても良さげ)
  21. 21. プロファイラーの見方 ブレイクダウンビューのモードの種類は以下の3つ ・Hierarchy ・Raw Hierarchy ・Timeline(※Unity5から) 実行している関数のCPU負荷率、処理時間、コール回数、 GC対象のメモリ情報などが表示される。 クリックすると切替できる
  22. 22. プロファイラーの見方 CPU Hierarchy このモードではUnity標準のAPIや、 MonobehaviourのUpdate/Startなどの処理を計上している。 (さらに深い処理の内容を知りたい場合は DeepProfile か Profiler.BeginSample/EndSampleを使用) また、特定のメソッドを見る場合、Unity5なら検索機能がある。
  23. 23. プロファイラーの見方 CPU Hierarchy Total : メソッド全体の負荷率(別メソッド呼出し込み) Self : メソッド自体が行う処理の負荷率(別メソッド呼出し除外) Calls : メソッドが呼び出された回数 GC Alloc : 現在のフレームにおけるメモリの割当量 Time ms : 処理の秒数(別メソッド呼出し込み) Self ms : 自身の処理の秒数(別メソッド呼出し除外) Object : 処理を呼出しているオブジェクト
  24. 24. プロファイラーの見方 CPU Hierarchy(Deep Profileモード) 比較⇩(上:Deep Profile前、下:Deep Profaileモード)
  25. 25. プロファイラーの見方 CPU Hierarchy(Deep Profileモード) Deep Profileはスクリプトで発生した、 全メソッドの呼出しを測定するために再コンパイルする。 これは実行時に大きなコストがかかるため、 メモリを大量に使用しゲームが著しく遅くなる可能性がある。 もしゲーム全体で使用して、ほとんど実行できないくらいに フレームが落ちてしまった場合は、この方法は避けるべき。 代わりにProfiler.BeginSample及び Profiler.EndSampleを使用する。
  26. 26. プロファイラーの見方 Profiler.BeginSample / Profiler.EndSample 特徴として以下の点があげられる。 ・Deep Profileと比較して動作が軽い。 ・異なるスタックトレースの処理を1つにまとめて計上する。 →Deep Profileでは同じ関数が二回呼び出されても、 呼出順でそれぞれの負荷率などを見ることができる。 しかし上記の関数を使用すると、二回呼び出されていた場合、 一つにまとめてcallsを2と表記し、 その他の負荷率などもトータル表示となる。
  27. 27. プロファイラーの見方 Profiler.BeginSample / Profiler.EndSample 使い方は以下のとおり Void Hoge() { Profiler.BeginSample( “開始だっちゃ” ); // 何かしら処理 Profiler.EndSample(); }
  28. 28. プロファイラーの見方 CPU RawHierarchy このモードは、例えば、とあるグローバル関数を 指定の回数呼出しているかカウントしたい時や、 呼び出し毎にどれだけ負荷率が違ってくるか調査するのに役立つ。
  29. 29. プロファイラーの見方 CPU Timeline(Unity5から) 指定したフレームの処理実行順や処理時間など、 何が起きているかをタイムラインで表示し、視覚的に確認できる。
  30. 30. プロファイラーの見方 GPU Usage 描画時間の内訳が階層構造で表示される。 また任意の項目を選択すると右側に詳細が表示される。
  31. 31. プロファイラーの見方 GPU Usage ・Opaque : 不透明なオブジェクトのレンダリング ・Transparent : 透明なオブジェクトのレンダリング ・Shadow / Depth : 影 ・Deferrd PrePass : ディファードシェーディングパス ・Deferrd Lighting : ディファードライティングパス ・PostProcess : ポスプロセッシング
  32. 32. プロファイラーの見方 Rendering ドローコール、三角メッシュ、頂点数、画面サイズ、 バッチ数などの詳細が表示されている。
  33. 33. プロファイラーの見方 Memory このprofileはアプリケーションの メモリ使用量を調査することができる。 メモリ使用率を調査する方法として、 ブレークダウンビューには以下の二つのモードがある。 ・Simple Mode ・Detailed Mode
  34. 34. プロファイラーの見方 Memory(Simple Mode) Used Total : 総メモリ使用量 Unity : Unityのネイティブコードへのメモリ割当量 Mono : ガベージコレクトされたMonoが管理する割当量。 クリックすると切替できる
  35. 35. プロファイラーの見方 Memory(Simple Mode) GfxDriver : Texture , Rendertarget , Shader , Meshdata 等が 使用しているメモリ量。 FMOD : オーディオドライバが使用している推定メモリ量。 Profiler : プロファイラーデータ自身のメモリ使用量。 (タスクマネージャーやアクティビティモニタと同じ量を表示するものではな く、幾つかのドライバが使用しているメモリも含まれている)
  36. 36. プロファイラーの見方 Memory(Simple Mode) TexturesやMeshesなどはオブジェクトタイプごとの 総数とメモリ使用量を表示している。 Total Object Count は生成された全てのオブジェクト数。 この数が時間と共に増えている場合はオブジェクトが 破棄されていないことを示しているので注意。
  37. 37. プロファイラーの見方 Memory(Detailed) Task Sampleボタンを押すことによって、 アセット/オブジェクトのメモリ使用量の詳細を 確認することができる(メモリ消費の理由など) Assets : 使用されているアセット Building Resources : エンジン内に含まれるアセット
  38. 38. プロファイラーの見方 Memory(Detailed) Not Saved : 実行時に生成されたアセット Sene Memory : シーンに含まれる ゲームオブジェクトとコンポーネント Other : 上記のどれにも当てはまらないオブジェクト
  39. 39. プロファイラーの見方 Memory(Detailed) エディタでプロファイルを使用する場合、 メモリプロファイラで表示される値は エディタの使用量を含み、端末で使用するより 若干値が大きくなるので注意が必要。 クリックすると、 エディタのprojectビュー またはSceneビューに フォーカスを当てること ができる。
  40. 40. プロファイラーの見方 Audio ボイスカウントや合計負荷など、 オーディオシステムにおける パフォーマンスの調査が可能になる。
  41. 41. プロファイラーの見方 Physics 3D/2D Rigidbody、衝突などの様々な物理学の統計を提供する。
  42. 42. プロファイラーの見方 Physics 3D/2D Active Rigidbodies : 現在アクティブなRigidbodyの数。 (移動中、スリープ直前の状態など) Sleeping Rigidbody : スリープ中のRigidbodyの数。 (更新する必要がないものの数) Number of Contacts : シーンにおける全コライダーの 接触している数の合計。
  43. 43. プロファイラーの見方 Physics 3D/2D Static Colliders : 非Rigidbodyオブジェクトにアタッチさ れたコライダーの数(物理挙動なし) Dynamic Colliders : Rigidbodyオブジェクトにアタッチさ れたコライダーの数(物理挙動あり)
  44. 44. プロファイラーの見方 Network Messages(Unity5) プロトコルパケットの流れが追跡できる。 マルチプレイができるように構築する高レベルAPI (以下HLAPI)を使用するときに役立つ。
  45. 45. プロファイラーの見方 Network Operations(Unity5) どのタイミングでオブジェクトの生成・破棄が起きたか CommandやClientPRCが何回コールされているか コールされた関数の正体は、などを調べられる。
  46. 46. スマホアプリのパフォーマンス問題 Unityのプロファイラー機能 プロファイラーの見方 LET’S PROFILE
  47. 47. LET’S PROFILE
  48. 48. LET’S PROFILE 参考サイト http://malideveloper.arm.com/downloads/Unite_2013- Optimizing_Unity_Games_for_Mobile_Platforms.pdf http://tsubakit1.hateblo.jp/entry/2016/05/09/073000 http://sssslide.com/speakerdeck.com/sgeengineer/unitysumatoh uonapurifalse-pahuomansuzui-shi-hua
  49. 49. LET’S PROFILE 参考サイト http://docs.unity3d.com/ja/current/Manual/Profiler.html https://www.packtpub.com/packtlib/book/Game- Development/9781785884580/1/ch01lvl1sec08/The%20Unity %20Profiler http://www.slideshare.net/williamyang3910/unitekorea2013- memory-profiling-in- unity?ref=http://tsubakit1.hateblo.jp/entry/20131125/13853 55220
  50. 50. ご静聴有難うございました!

×