[Unite2018] 実践的なパフォーマンス分析と最適化
公式サイト
http://events.unity3d.jp/unitetokyo2018/session-lineup.html#session24
講演者
Kerry Turner (Unity Technologies Developer Relations Engineer)
SlideShare
概要
- プロファイリングのベストプラクティス
- メモリ消費を抑えるための設定事例
- tips
内容
- プロファイリング改善
- Unity上で特定しない
- プレイヤが体験するゲームを体験できない
- メモリの最適化は実機上で変わる
- 実際のHWでプロファイリングする
- バージョン、プラットフォームを合わせる
- クロスプラットフォームではそれぞれプロファイリングする
- マルチプレイの場合はそれも考慮
- ゲーム全体でプロファイリングする
- 全体のリソースの影響を考慮する
- どの変更がどんな影響が与えたか、変更前と後で確認
- Unity Profile Windowの利用
CPU資源管理
- Deep Profiling
Profiler.BeginThreadProfiling()
- Unity Frame Debugger
- グラフィックAPIに送られたコマンドを調べる
- Unity Memory Profiler
- Platform-specific tools
- OSレベルのプロファイリング
- Unityツールに対して補完的なもの
- GPU確認、コアな処理
- Unity上で特定しない
- 問題解決
- ランタイムメモリ利用
- Asset(texture, oudio)など
- アセット利用のルールを作る
- Ex) 特定の解像度以上にしてはいけない
- AssetPostProcessor
- ルールをスクリプトで管理
- 作成、利用を自動化
- 過剰に複雑なassetを使う
- 完璧な陰影をつけた1セント硬貨的なやつ
- 利用対効果を考える
- Read/write enambed texture
- 2個のテクスチャ
- GPU用
- CPU用(余分)
- CPU用のメモリを解除してメモリ効率を半減
- Texture 2D
- デフォルトでenable
- Readonlyにする
Texture2D.Apply(updateMipmaps, true)
- 2個のテクスチャ
- Mip map
- 33%のテクスチャサイズの増加
- デフォルトでtrue
- カメラの距離が変わらないならdisable
- Ex) UIなど
- Read/write enabled mashes
- GPU用
- CPU用
- メッシュサイズを倍以上にしてしまう
- Enableにするとき
- コード上でメッシュにアクセスする場合
- mesh colliderでマイナスのscale
- mesh colliderでmeshをななめに利用
- コード上でメッシュにアクセスする場合
mesh.UploadMeshData(true);
- readonlyにする
- Vertex Compression
- player settingで指定
- 頂点チャネル数を指定
- ただし精度は多少落ちる
- 静的バッチ含め全てに適用される
- 上書きされている場合は無効
- 上書きされる条件
- import設定
- mesh compressionで設定されている
- meshのread/writeがenableのとき
- import設定
- 上書きされる条件
- player settingで指定
- animation compression
- 出来る限り設定する
- animation compression errorの調整により精度の調整も可能
- デフォルトはoff
- legacy clipのとき
- keyframe reduction
- generic and humanoid clipのとき
- optimal
- legacy clipのとき
- audio load type
- 推奨設定
streaming
if > 1 MBcompressed in memory
if > 200KB and < 1MBdecompress on Load
if < 200KB- 解答されるバッファサイズが上回ってしまう
- 推奨設定
- audio compression format
- load times
- animation CPU optimization
Unity Animation System for clips
if > 300 curvesLegacy for clips
if < 300 curves- ex) UI、チェストを開くなど
- ただし、ローエンドなコアの場合の結果であることに注意
- Humanoid or Generic?
- Humanoid
- retargeting, IKを使う場合
- Generic
- そのた
- Humanoid
- Culling Mode
Always Animate(default)
- すべてのanimationを実行する
Cull Completely
- 何も実行しない
Cull Update Transforms
- transform, retarget IKをスキップ
- Animator bindings
- ランタイムメモリ利用
- Tips. more talk like this
- Unite Europe 2017
- Unity 2016
- Unite Europe 2016