しがないエンジニアのブログ

技術的な内容をメモ代わりにつらつら

[Unite2018] 実践的なパフォーマンス分析と最適化

公式サイト

http://events.unity3d.jp/unitetokyo2018/session-lineup.html#session24

講演者

Kerry Turner (Unity Technologies Developer Relations Engineer)

SlideShare

https://www.slideshare.net/UnityTechnologiesJapan/unite-2018-tokyo-96352657/UnityTechnologiesJapan/unite-2018-tokyo-96352657

概要

  • プロファイリングのベストプラクティス
  • メモリ消費を抑えるための設定事例
  • tips

内容

  • プロファイリング改善
    • Unity上で特定しない
      • プレイヤが体験するゲームを体験できない
      • メモリの最適化は実機上で変わる
    • 実際のHWでプロファイリングする
    • ゲーム全体でプロファイリングする
      • 全体のリソースの影響を考慮する
    • どの変更がどんな影響が与えたか、変更前と後で確認
    • Unity Profile Windowの利用 CPU資源管理
      • Deep Profiling
      • Profiler.BeginThreadProfiling()
    • Unity Frame Debugger
      • グラフィックAPIに送られたコマンドを調べる
    • Unity Memory Profiler
    • Platform-specific tools
      • OSレベルのプロファイリング
      • Unityツールに対して補完的なもの
        • GPU確認、コアな処理


  • 問題解決
    • ランタイムメモリ利用
      • Asset(texture, oudio)など
      • アセット利用のルールを作る
        • Ex) 特定の解像度以上にしてはいけない
        • AssetPostProcessor
        • 過剰に複雑なassetを使う
          • 完璧な陰影をつけた1セント硬貨的なやつ
          • 利用対効果を考える
        • Read/write enambed texture
          • 2個のテクスチャ
            • GPU
            • CPU用(余分)
              • CPU用のメモリを解除してメモリ効率を半減
          • Texture 2D
            • デフォルトでenable
            • Readonlyにする
              • Texture2D.Apply(updateMipmaps, true)
        • 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のとき
        • animation compression
          • 出来る限り設定する
          • animation compression errorの調整により精度の調整も可能
          • デフォルトはoff
            • legacy clipのとき
              • keyframe reduction
            • generic and humanoid clipのとき
              • optimal
        • audio load type
          • 推奨設定
            • streaming if > 1 MB
            • compressed in memory if > 200KB and < 1MB
            • decompress on Load if < 200KB
              • 解答されるバッファサイズが上回ってしまう
      • audio compression format
        • 短いaudio clip、圧縮率がそこまで必要ない
        • 長いaudio clip
        • 100%クオリティでやりたい
          • MP3
      • load times
        • GetScriptingClass()
          • MonoManager::GetScriptingClass()がクソ重い
            • 名前をたよりにクラスをアセンブリレベルで探す
            • Unity 2017以降は改善
        • ETC Crunch Texture
          • 非可逆圧縮
            • Unity 2017.3で新しいライブラリで、ETCでも利用可能
            • CrunchテクスチャGPUにアップロードする前にCPUでdecrunch
              • かなり時間がかかる
                • ETC
                  • サイズが大きいが早い
                • ETC Crunch
                  • サイズが小さいが思い
      • animation CPU optimization
        • Unity Animation System for clips if > 300 curves
        • Legacy for clips if < 300 curves
          • ex) UI、チェストを開くなど
          • ただし、ローエンドなコアの場合の結果であることに注意
        • Humanoid or Generic?
          • Humanoid
            • retargeting, IKを使う場合
          • Generic
            • そのた
        • 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