Unity Pro Tips

DEVELOPER詳細

Unity2018とUnity2019での最適化に効く10のアップデートと12の新機能

<このページで学べる内容>

Unite Tokyoや Unity道場をはじめとした数多くのセミナーで最適化についての講演を行なっている、弊社ディベロッパーリレーションマネージャー・エンジニアである黒河優介が CEDEC2019で行った「Unity2018/2019における最適化事情」の講演で紹介された「Unity Profilerのアップデート」「Profiling関連の Packageアップデート」「既存機能のアップデートで最適化されたAPI」「描画系の新機能」「描画系以外の新機能」の概要をご紹介します。 本講演はアーカイブ動画と講演スライドが公開されておりますので、ぜひご参照ください。

Unity Profilerのアップデート

以下の6つのアップデートについて具体例を豊富に用いて解説しています。

  • Profilerのフレーム上限数の引き上げによる可読性の向上
  • Hierarchy Viewの Thread対応によってTimeline表示に切り替えなくてもMainThread以外のスレッドの処理も閲覧できるようになった点
  • 実機上で Profilerのログファイルの書き出しが可能になる Profiler.SetAreaEnable
  • IL2CPPでも Deep Profilingに対応した点
  • Profilerで切り分けられる原因の幅を広げる FrameMetaData
  • Profiler上での CreateGPUProgramの改善

講演スライド7ページ目では、Profilerのフレーム上限数が2,000フレームでも足りない方向けの非公式エディタ拡張について言及され、講演スライドの20ページ目では CreateGPUProgramの具体的な対策が紹介されています。

Profiling関連の Packageアップデート

下記2つの新機能について具体的に解説しています。

  • PackageManagerに正式に入ったProfile Analyzer
  • Profilerのログファイルを直接読み込んでサマリーをcsvで生成するProfiler Reader

既存機能のアップデートで最適化されたAPI

以下の4つのアップデートについて細かく丁寧に解説しています。

  • AnimatorのGameObject非アクティブ時のリセット対策
  • CPUでMesh結合処理をせずに済むため負荷を低く抑えられる GPU Instancing
    • TerrainのGPU Instancing対応
    • ParticleSystemの GPU Instancing対応
  • Androidでの WorkerThreadの調整
  • Unityの各バージョンと PhysXのバージョンの対応

また、ParticleSystemを GPU Instancing対応させる際に必要な Shader側の対応については、講演スライドの 39〜40ページで具体的に紹介していますのでご一読ください。

描画系の新機能

以下の4つの新機能について導入時の注意点と共に解説しています。

  • GPU負荷が高い時に解像度を下げることでフレームレートを担保する Dynamic Resolution
  • 不要な Shader Variantを自分で判別して削除できる Stripping Scriptable Shader Variants
  • 描画パイプラインのカスタマイズの幅が大きい LWRP (Universal RP)
  • Materialの切り替えを出来る限り抑える技術の SRP Batcher

なお、Stripping Scriptable Shader Variantsについて講演スライドの55〜59ページで具体的なケースを図解を用いて解説しています。

描画系以外の新機能

以下の注目の6つの新機能について詳しく解説しています。

  • 不要な処理をループから排除することができる PlayerMainLoop
  • Unity2019で PlayerMainLoopに追加された OnDemandRendering.renderFrameInterval
  • GCを一定時間発生させなくするなどの制御を可能にする APIである GarbageCollector
  • GC処理を少しづつ走らせることで大きなスパイクを回避する Incremental GC
  • DOTS
    • メモリのnew/DisposeをC, C++のように自前で管理できる NativeContainer
    • Unityが確保した Job用の WorkerThreadを利用して処理の高速化を図る C# JobSystem
    • 複数の Transformのrotation/positionを並行して操作できる IJobParallelForTransform
    • ILコードよりも効率的なコードを書き出して C#を高速化する Burst
    • データの連続性を考慮した新しいオブジェクト制御システムである ECS
  • C#の GC Allocをすることなく動的Meshの生成が可能になった Mesh API v2

講演スライドのご紹介
PlayerMainLoop: 68〜71ページで具体例を図解で解説しています
IJobParallelForTransform: 83~84ページで図解で詳しく解説しています
91~93ページでは NativeContainer, C#, JobSystem, Burst, ECSの具体的な相関関係が図解で解説されています。

注目度が高い Unity2018と Unity2019の最適化を理解しやすい構成になっている講演です。ぜひご覧ください。

Unity2018/2019における最適化事情

なお、本講演の関連講演として以下の2つの代表的な講演のアーカイブとスライドも公開されておりますので、併せてご覧ください。

一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術

【Unity道場スペシャル 2017京都】最適化をする前に覚えておきたい技術

講演スライド

講演アーカイブ

この記事はいかがでしたか?