Games Focus:プロファイリングとパフォーマンスの最適化

今回のブログは、来年以降の製品開発の主要な取り組みについて紹介する Games Focus シリーズの第 3 回です。ここでは、Unity におけるプロファイリングとパフォーマンス分野について、現状、今後のリリース予定、将来のビジョンについて説明します。
Marika です。ゲーム業界で 10 年近く働き、現在は Unity でプロファイリングツールとパフォーマンスの最適化を担当するシニアテクニカルプロダクトマネージャーを務めています。
Unity のパフォーマンスを考えるとき、私たちが皆さんのためにできることは主に 3 つあると考えています。
- インサイト:ゲームのパフォーマンスを調査し、ボトルネックを特定し、最適化戦略の恩恵を受ける領域を特定することができる。
- 体験:Unity エディターと実行時のパフォーマンスを向上させることで、シームレスなプロジェクト開発を保証します。
- イノベーション:最初からパフォーマンスを考慮した新しいプログラミング技術やパラダイムへとユーザーをガイドします。
本日の記事では、最初の 2 つの分野に焦点を当て、プロファイリングツール群の最近のアップデートについてと、2023 年以降のロードマップが顧客の声を受けてどのように形成されるかをご紹介します。最後に、プロジェクトを最適化するためのベストプラクティスについてまとめます。
3 つ目の分野、DOTS ベースのプロジェクトにフォーカスしたパフォーマンス重視のプログラミングテクニックとワークフローについては、今後の記事で紹介します。
私たちはよく、Unity のプロファイリング機能は、アプリケーションのパフォーマンスが低下したり、不具合が発生したり、コードが過剰にメモリを割り当てたりする原因を解明する、探偵のようなツールであると考えます。このツールは、Unity ゲームエンジンの内部で何が起こっているのかを理解するのに役立ちます。
プロファイリングと最適化により、Unity ツールや実行時のパフォーマンスを向上させ、幅広いプラットフォームやデバイスでプレイヤーにスムーズなパフォーマンスを提供できるよう支援することを目的としています。
Memory Profiler は、メモリの使用状況や構成を簡単に把握できるように設計されています。Memory Profiler 1.0.0 が、Unity 2022.2 ベータ版リリース以降、検証済みパッケージとなったことをお知らせします(ダウンロードの手順はこちら)。この重要な機能に対して、より良いワークフローを構築するための貴重なご意見をお寄せいただいた皆さんに感謝いたします。
多くの方は、それぞれのターゲットプラットフォームのメモリ制限の中で仕事をするという課題を抱えています。Memory Profiler は、アセットやオブジェクトのメモリへの影響を一覧して把握できる概要を提供することで、この課題の解決に貢献します。一方で、そのメモリがどのオブジェクトやシステムに関連しているかという詳細なコンテキスト情報も表示できます。
ブレイクダウンビューでキャプチャを深く掘り下げたり、メモリスナップショットを比較して、メモリ使用量に悪影響を与える潜在的なリークや不要なメモリ割り当てを特定することができます。


既存のプロファイリングツールセットの改良
Unity 2022.1 では、Frame Timing Manager を追加し、複数のフレームにまたがるフレームタイミングデータをキャプチャしてアクセスすることができるようになりました。パフォーマンスが低下している場合、この機能を使用してフレームを評価し、アプリケーションがパフォーマンス目標を達成していない理由を分析します。この詳細については、ドキュメンテーションをご覧ください。
Unity Profiler で低レベルの GPU メトリクスを監視する場合は、Arm との提携により 2022.1 でリリースした新しいSystem Metrics Mali パッケージ を使用することができ ます。このパッケージを使用すると、モバイルデバイスの低レベルのシステムまたはハードウェアメトリクスにアクセスすることができます。Arm CPU と Mali GPU を搭載したモバイルデバイスでコンテンツをスムーズに動作させる方法について興味がある方は、こちらの 2021 年のブログ をご参照ください。
パフォーマンスの最適化
これまで紹介したプロファイリングツールは、パフォーマンスを向上させることができる領域の特定を始めるときに非常に役立つものです。しかし、私のチームでは「パフォーマンスの最適化」は、ターゲットとなるデバイスでのゲーム実行時のパフォーマンスだけでなく、チームの働き方、つまり生産性にも適用されます。イテレーション時間の短縮、中断の少なさ、エディターの効率化などの実現を目指しています。
Unity 2021 LTS では、Unity 2020 LTS と比較して、アセットのインポートが 3 ~ 4 倍、インポートしたプロジェクトを開く速度が最大で 8.7% 高速化されました。
2022 年のリリースで利用できるようになった改善点もご紹介したいと思います。
- ユニバーサルレンダーパイプラインと HD レンダーパイプラインでのマテリアルの再インポートの改善
- エディターワークフローに関する改善点
- 大規模シーンの保存時間を短縮
- シーンピッキングでの停止時間の短縮
- LOD グループが多数存在する場合のシーンビューのパフォーマンスの改善
- 最適化された Animation Rigging パッケージ
- ヒエラルキーのスクロールの改善
- 大規模なプレハブの保存ワークフローの改善
- ドメイン再読み込み時の最適化により、エディター内で作業する際のイテレーションにかかる時間を短縮
- 再生モードに関する改善点
- 静的バッチングのパフォーマンス向上
- Addressables がリソースディレクトリを検索するプロセスの最適化
- パーティクルシステムのプレウォーミング
これらの改善の多くに、また皆さんからのフィードバックが重要な役割を果たしました。今後のロードマップについて、こちらで公開しています。引き続きご意見をお聞かせください。また、フォーラムからもチームにご連絡していただくことが可能です。特にパフォーマンス関連の問題に関心があり、それらの問題はこちらにまとめられています。
10 年以上にわたって、私たちはプロファイリングツールを使って最高のパフォーマンスを実現できるように注力してきましたし、今後もツールセットの改良を続けていきます。この開発は、ここですでに紹介したすべての機能を含め、さまざまな形で行われています。
もう 1 つ、大幅な性能向上に取り組んだのが、データ志向技術スタック、DOTS と呼ばれる分野です。DOTS の成功に不可欠なコア機能として、Burst コンパイラーと C# Job System の 2 つが挙げられます。これらは、私たちの社内でエンジンのパフォーマンスを活用され、大きな成果を上げています。そしていますべての人に使ってもらえるようになりました。ネットワークや物理演算などの分野でプロジェクトのパフォーマンスを飛躍的に向上させる、3 つ目の重要な機能である Entities は、近日中に提供する予定です。これは私たちのゲーム開発へのコミットメントにとって非常に重要な要素ですので、近日中に DOTS を特集した Games Focus の記事をお送りする予定です。
ここでは、今後のリリースで予定されているいくつかの改善点を紹介しましょう。
エディターの起動にかかる時間を短縮し、起動時間を改善し、フロー状態を維持しやすくするための工夫をしています。現在、ターゲットデバイスをエディターに接続すると、接続が切れたり、復帰できないなどの不安定な状態になることがあります。Unity 2023.1 リリースでは、モバイルプラットフォームへのエディター接続をより信頼性の高いものにし、パフォーマンスを向上させるよう取り組んでいます。
さらに、プロファイラーでボトルネックを特定し、それを発見したら次に何をすべきかを知るために、より効率的な方法を提供したいと考えています。私たちの目標は、最大のパフォーマンス向上をもたらす最適化の領域を迅速に指示することです。
また、ビルドするデバイスに応じたメモリのインサイトを追加し、プラットフォーム固有のパフォーマンス向上を図れるようにしたいと考えています。この新機能は初期段階であり、現在積極的にフィードバックを求めています。フィードバックはロードマップのページで受け付けています。
Unity のプロファイリングツール群に関する専門知識は、皆さんのゲーム開発に使う道具に加えるべき最も有用なスキルの 1 つです。そのため、私たちはツールを最大限に活用していただくためのベストプラクティスについて、より高度なコンテンツを制作することに取り組んでいます。
最近私の複数のチームメイトが、Unity のプロファイリングについて Unity Integrated Success チームのエキスパートのエンジニアと協力し、これまでで最も広範なガイドをまとめました。
また、プラットフォーム別の最適化のベストプラクティスを幅広く紹介しているより詳細な e ブックもありますので、そちらもダウンロードされることをお勧めします。
もう 1 つの便利なリファレンスはこのフローチャートです。これはプロジェクトにおけるボトルネックを特定するために推奨されるアプローチをまとめたものです。

最後に、このプロファイリングと最適化に関するリーディングリストは、Unity のコンテンツおよびマーケティングチームが作成したもので、プロファイリングの概念と手法を理解するのに役立つ主要なブログ記事を基礎レベルから高度なものまで紹介しています。

私のチームは、皆さんの最も野心的なプロジェクトに必要なソリューションをお届けするために努力していますし、どうしたらもっと皆さんのお役に立てるかを常に理解したいと思っています。
公開されているロードマップページへのアップデートをお待ちください。また、製品チームへ直接フィードバックを行うにも最適な場です。
次回の Games Focus シリーズの記事では、皆さんがより多くのプラットフォームやフォームファクターをターゲットにしたゲームコンテンツを提供できるように Unity が行っていることに焦点を当てます。ぜひブログをチェックしてください。またいつも通り、フォーラムでもご意見をお聞かせください。