U/Day Tokyo_Session9_UnityのProfiling機能のオーバービュー紹介

1.1K Views

July 11, 24

スライド概要

【U/Day Tokyo 2024】
U/Day Tokyo 2024では 日本のゲームクリエイター、エンジニア、アーティストのために、Unity 6 に関する最新情報や開発ロードマップの紹介、グラフィックスやUI、DOTS、最適化などの各種技術の解説、Unity Muse や Unity Cloud といった Unity の最新製品・サービスのライブデモ、ゲームアプリのユーザー獲得やマネタイズの最新トレンドなどを、Unity Japan や Unity 本社のスタッフが講演します。

【講演内容】
・タイトル:UnityのProfiling機能のオーバービュー紹介
・講演者:黒河 優介(パートナーエンジニア)
・講演内容:UnityにはPeformanceを計測するためのProfilingする機能が色々と入っています。
Unity標準機能のProfiler以外にも、Profile Analyzer/MemoryProfiler/Unity Profiling Core API等多くのパッケージが存在しています。
このセッションでは、いくつもあるプロファイリングのパッケージについて、それぞれの概要や使い方を一通り説明していきます。

profile-image

リアルタイム3Dコンテンツを制作・運用するための世界的にリードするプラットフォームである「Unity」の日本国内における販売、サポート、コミュニティ活動、研究開発、教育支援を行っています。ゲーム開発者からアーティスト、建築家、自動車デザイナー、映画製作者など、さまざまなクリエイターがUnityを使い想像力を発揮しています。

Docswellを使いましょう

(ダウンロード不可)

関連スライド

各ページのテキスト
2.

UnityのProfiling機能の オーバービュー紹介

3.

Presentation Title 黒河 優介 パートナーエンジニア

4.

“まず何よりも、プロファイリングや、 モバイルゲームのパフォーマンスデータの 収集・活用を行うプロセスから スタートさせるべきでしょう。 モバイルゲームのパフォーマンス最適化は、 まさにここから始まるからです。” — UnityBlogより https://blog.unity.com/ja/games/optimize-your-mobile-game-perfo rmance-tips-on-profiling-memory-and-code-architecture-from

5.

“Profilingのパッケージとか 機能とか色々あって… 混乱するので… 黒河さんその辺り 講演よろしく” — Unity社内から上がった声

6.

→ → 本セッションで 取り扱うコンテンツ → → UnityEditor標準のProfilering機能 ⎯ Unity Profiler ⎯ Frame Debugger ⎯ その他 UnityProfilerの拡張API紹介 ⎯ ProfilerMaker ⎯ Profiler Module ⎯ RawFrameDataView ⎯ その他 Profilingパッケージの紹介 ⎯ Memory Profiler ⎯ Profile Analyzer ⎯ Profiling Core API ⎯ その他 その他 パッケージにある機能 ⎯ Addressables ⎯ Universal Render Pipeline ⎯ その他

7.

Unity標準の機能紹介

8.

Unity Profiler → 最も基本的で、大事な機能 ⎯ → 問題の多くは UnityProfilerで発見可能 CPUやMemory、Renderingに関する負荷を 計測する事が出来る → Wifiや有線で、実機上での Profilingが可能 → RuntimeのみではなくEditor自身の負荷を計 測することも可能 → 計測データの拡張や、表示自体の拡張も可能 (後述)

9.

Unity Profiler - CPU → CPU負荷に関する情報を確認できる → UnityEngine内部の処理の負荷は自動で計測 される → C#スクリプトの負荷も計測することが可能 ⎯ DeepProfilingを有効にすると全てのC#メ ソッドが計測対象 ⎯ スクリプト処理で区間計測も可能(後述) → Timeline表示とHierarchy表示がある → 最も見る場所

10.

Unity Profiler - Rendering → DrawCall / SetPassCallなどの描画負荷の指 標が確認できる → 各種Batching等の処理がどの位起こったかも 確認できる

11.

Unity Profiler - Memory Simple → アプリが使用しているメモリ状況を大まかに見 ることができる → 各カテゴリ毎の使用メモリの推移をグラフで確 認できる → 詳細が見たい場合は後述する MemoryProfilerを使用する

12.

Unity Profiler - AssetLoading → Assetのロード量をグラフの形で確認できる → 「Analyze Markers」をする事でどの Assetロー ドにどの位時間が掛かったか等を確認する事 ができる ⎯ Analyze MarkersはProfilerのCPUか らデータを集計して結果を出している

13.

Frame Debugger → Unityの描画のデバッグが可能なツール ⎯ 描画時のShaderキーワードや パラメーターが確認できる → プロファイリングツールと言うよりデバッグ ツール ⎯ 描画ごとの掛かった時間などは計測 できない ⎯ しかし無駄な描画をしていないか確 認するのに手軽に使える

14.

Import Activity → Editorのプロファイリング機能 → アセット毎のインポート時間を確認可能 → Editorでのインポートなどで重い時に活用 ⎯ 活用ポイントは少ない

15.

Unity Profilerの 拡張API紹介

16.

Profiler Module → Unity標準ではMemory/Rendering/Audio 等がある → 表示する項目を独自に拡張することが可能 ⎯ Editor拡張のコードなしで UIのみでも 可 ⎯ Editor拡張で専用の Moduleも作成 可能 Editor拡張の詳細はスクリプトリファレンスへ https://docs.unity3d.com/ja/2022.2/ScriptReference/Unity.Pro filing.Editor.ProfilerModule.html

17.

RawFrameDataView → ProfilerのCPUの項目からデータを取得でき るAPI → 複数フレームにまたがった処理を一括で一 覧すると言った利用が可能 詳しくは、スクリプトリファレンスへ https://docs.unity3d.com/ja/current/ScriptReference/Profiling. RawFrameDataView.html

18.

ProfilerMarker → スクリプト中の任意の区間を Profilerに載せ られる → ⎯ using( Auto())で括った箇所が計測可能 ⎯ Begin/Endで括った箇所でも計測計測 Deep Profilingで重そうな箇所に辺りを付けた箇所 について仕込み、計測・改善していくプロセスがおス スメ

19.

ProfilerUnsafeUtility → Unsafeなコードが要求される代わりに高度 な操作が可能 ⎯ Metadata埋め込み ⎯ 独自のカウンター作成 ※実は独自カウンターも Metadata付きのProfilerMakerで実装されている

20.

Package紹介

21.

MemoryProfiler → ある時点のメモリ使用状況をキャプチャし て、どのオブジェクトがどの位のメモリを確保 しているか等が確認可能 → Wifiや有線等を経由して、 Runtime上のプロ ファイリングが可能 ⎯ Editor上のプロファイリングも可能だ が、正確性に欠ける → 二つのキャプチャの比較も可能 ⎯ リークの発見等に有効活用

22.

MemoryProfiler - Untracked? → 「OSから取得したアプリのメモリ使用量 UnityEngineが把握しているメモリ使用量」 がUntrackedメモリ → Untrackedだがラベルがついている? ⎯ OSからAPI経由等で取得する際に名前も 取得出来るので、それを表示 ⎯ 実装はプラットフォーム依存 ⎯ Android : "/proc/self/statm" ⎯ iOS:vm_address_t ⎯ Windows : VirtualQuery

23.

MemoryProfiler - Untracked? → 詳細知りたい場合、プラットフォーム提供のツール を使う事を推奨 ⎯ Xcode Instruments ⎯ Android Studio等

24.

Profile Analyzer → RawFrameDataView等のAPIを使って Profiler上にあるデータを集計して表示 ⎯ データそのものは Profiler以上のデー タは取得できない → LoadAsyncなど複数フレームにまたがって 起こる処理を見る時に便利 → データ同士での比較も可能

25.

Profiling Core API → 主な機能は、ProfilerUnsafeUtility APIの Wrapper ⎯ → Unsafeなコードなく、Metadata操作 ProfilerMakerの拡張とProfileCounterの 二つの実装がある ⎯ ProfilerMarker拡張ではGenericイ ンターフェースで Metadata埋め込み が可能 ⎯ ProfilerCounterは独自の指標が作 成可能

26.

System Metrics Mali → Arm社のGPU「Mali」を積んだAndroidに特 化したパッケージ ⎯ → 日本ではGooglePixelシリーズなど GPU使用率等が確認可能 ⎯ Arm Performance Studioを用いず ともGPU指標が閲覧可能 → 独自のカウンター実装と、 ProfilerModuleに よって実現

27.

Adaptive Performance → モバイル端末では発熱を抑えるため、一時 的にスペックを下げるサーマルスロットリン グがある → 現在の実装は2種類 ⎯ Android Thermal Headroom API ⎯ ⎯ Samsung GameSDK ⎯ → Android10以降 一部Galaxyシリーズのみ サーマルスロットリング等の発生をイベント で検知できる ⎯ どうするかはアプリの実装

28.

Packageの機能紹介

29.

Addressables → Profiler Moduleの形でAddressablesの ロード状況を確認できるモジュールを提供 → OpenしているAssetBundleの数などがグラ フで表示される → Build Reportがあれば、Open状態のAsset の詳細を確認出来る

30.

Netcode for GameObjects → MultiPlayerToolsパッケージの導入が必要 → ProfilerModuleの形で提供 → 通信量などを計測することが可能

31.

Universal Render Pipeline → RenderingDebuggerというランタイム上で 動くユーティリティを提供 ⎯ 描画の負荷を Runtime上で確認でき る ⎯ DevelopmentBuildで利用可能 ⎯ PC Ctrl+Backspaceで呼び出し ⎯ Mobile 3点のダブルタップで呼び出 し

32.

最後に ・Unity には様々なProfiling機能があります 各種拡張もありますが、ProfilerModuleとしてProfilerに統合されるものも多くあります まずはUnityProfilerから見ていきましょう ・多くの問題はUnityProfiler / MemoryProfilerで見つけることが出来ます まずはUnity上で問題をみつけ、それでも難しいものについてプラットフォーム提供のツールを使うと良 いでしょう

33.

Thank you

34.

“Add a short, impactful quote from a creator or other Unity client.” — Name, Role, Company

35.

Placeholder title Subheading Subheading Subheading Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam maximus eros ac luctus accusman. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam maximus eros ac luctus accusman. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam maximus eros ac luctus accusman.

36.

Placeholder title Subheading Subheading Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam maximus eros ac luctus accusman. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam maximus eros ac luctus accusman.

37.

Placeholder title Lorem ipsum dolor sit amet. Est vero nemo qui explicabo voluptatum ex tempore aspernatur est nihil. Nam maximus eros ac luctus accumsan. Aenean eget leo sapien. Morbi at dapibus purus, non fermentum lorem. Mauris non pellentesque elit, a malesuada tellus. Integer consequat nunc nec eros euismod pretium. Interdum et malesuada fames ac ante ipsum primis in faucibus. Mauris pulvinar gravida orci vitae ornare. Etiam id tincidunt lorem. Nam nsi felis, suscipit ut varius vel, voluptat ut turpis. Nam consequat leo ut metus bibendum, in viverra felis suscipit. Ut aliquam lacus sit amet ullamcorper fermentum. Integer dapibus ante et congue gravida. Sed ultricies tristique justo. Vestibulum ductum tellus quis iaculis facilisis. Pellentesque facilisis ante et lobortis sollicitudin. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.

39.
[beta]
Presentation
Title

Section Title

Code example

Placeholder title
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

/* Override styling */
$overrideColor: #ffffff;
.override {
font-style: italic;
color: rgba($overrideColor, 0.79);
background-color: rgba(255, 255, 255, 0.25);
padding: 20px;
}

40.

Presentation Title Section Title Placeholder title: Subheading Consectetur adipiscing elit → Ut dictum purus eget tincidunt – Hendrerit curabitur vel ● Lorem ipsum dolor sit amet → Consectetur adipiscing elit ut dictum purus → Lorem ipsum dei moranem

41.

Presentation Title Section Title Placeholder title: Subheading Consectetur adipiscing elit → Ut dictum purus eget tincidunt – Hendrerit curabitur vel ● Lorem ipsum dolor sit amet → Consectetur adipiscing elit ut dictum purus → Lorem ipsum dei moranem

42.

Section Divider Subtitle if necessary

43.

Icons CORE

44.

Icons AV COMMUNICATION DEVICE

45.

Icons HARDWARE IMAGE MAPS

46.

Icons NOTIFICATION SOCIAL