ゲーム・エンターテイメント事業部では、Unityにおけるパフォーマンスチューニングに必要な知識を体系的にまとめた書籍『Unity パフォーマンスチューニングバイブル』を社内向けに刊行しました。
本記事ではこの取り組みの概要と、300ページに及ぶ書籍の一部を紹介します。

パフォーマンスチューニングバイブルの概要

モバイルゲーム開発においては、常にパフォーマンスを意識した開発を行う必要があります。
これが不十分だと、メモリ圧迫によるクラッシュやFPSの低下、ロード時間やダウンロード時間の増大といった深刻な問題がもたらされます。

このようにパフォーマンスチューニングに関する知識は重要ですが、その一方で体系的な学習が難しいという問題があります。
ハードウェアや3Dグラフィックス、物理演算、C#などの言語機能、Unityの仕組みといった幅広い知識が必要になるためです。

このような課題感から、パフォーマンスチューニングに関する知識を体系的にまとめた書籍として、『Unity パフォーマンスチューニングバイブル』を製作し、社内の Unity エンジニアの方々に配布しました。

Performance Tuning Bible
Performance Tuning Bible

パフォーマンスチューニングに必要な知識のみを効率的に得られる構成にしましたが、それでも300ページを超えるボリュームになりました。

第一部:チューニングに必要な基礎知識

ここからは実際の本の内容の一部をピックアップして紹介いたします。

パフォーマンスチューニングを行うためには、その前提として幅広い知識が必要です。
そのためまずは、第一部としてパフォーマンスチューニングを行うための基礎知識を体系的にまとめました。

データの表現方法の節では、ビットの概念からはじまり、テクスチャやモデルのデータ構造やそれらの容量の計算方法についてまとめています。
レンダリングの節では、グラフィックスパイプラインの概念から、オーバードローやセットパスコール・バッチングといった知識の説明をしています。

TuningBibleBlog_01

Unity の仕組みの節では、Unity におけるゲームループやスレッドの仕組み、AssetBundle の概念についてまとめています。
C# の基礎知識の節では、スタックとヒープ、ガベージコレクションや構造体のようにC#スクリプティングに関する知識について説明しています。

TuningBibleBlog_02

第二部: パフォーマンス計測ツール

実際にパフォーマンスチューニングを行う時には、何よりもまず計測を正確に行うことが重要です。
そこで第二部では、パフォーマンスチューニングの際によく使用する計測ツールの使い方についてまとめました。

まず、Profiler からはじまり、Profile Analyzer や Memory Profiler、Frame Debugger といった Unity のツールの使い方をまとめています。

TuningBibleBlog_03

また、Heap Explorer や Xcode、Android Studio、Render Doc といった Unity 製ではないツールについてもまとめています。

TuningBibleBlog_04

第三部: チューニングプラクティス

第三部では、実践的で具体的なノウハウについてまとめています。
本書のうち、この第三部がもっともボリュームが多くなっています。

例えば Asset Bundle については基礎知識編でも触れましたが、ここでは Asset Bundle の分割粒度やアンロード戦略など、実装する際に考えるべき事項について紹介しています。
また物理挙動についてもコリジョンの形状における処理負荷や各 API の最適な使い方についてまとめています。

TuningBibleBlog_05

グラフィックス関連は解像度やバッチング、インスタンシング、カリングなど、多くの設定項目をそれぞれ説明しています。
また SRP Batcher など基礎知識編で触れなかった技術についてもまとめています。

Unity UI (uGUI) についてもよくパフォーマンスのネックとなる部分なので、Canvas や Layout のビルド周りの仕組み、TextMeshProやその他の設定項目についてまとめています。

TuningBibleBlog_06

スクリプティングについては、C# において注意するべき点と Unity 特有の注意点についてそれぞれまとめています。
例えば、 tag や name といったプロパティにアクセスする際の注意点や、比較的最近追加された Burst コンパイラを使った処理の高速化について紹介しています。

TuningBibleBlog_07

取り組みの経緯

さて、本書を刊行した背景として、弊社においてパフォーマンスチューニングを行う人材が不足しており、またそのスキルが属人化しているという課題がありました。

前述の通り、パフォーマンスチューニングには幅広い知識が必要であり、かつ体系的に学びづらい分野です。
一方でこれらの知識は、Unityでゲーム開発を行う全てのエンジニアにとって役立つものが非常に多いこともまた事実です。
したがって、各エンジニアがパフォーマンスチューニングについて学ぶ機会を作ることで、各自のスキルアップやキャリアアップに繋がり、また同時に人材の不足やスキルの属人化といった組織課題の解消につながると考えました。

また弊社では、獲得した技術的知識は自身で抱え込むのではなく、積極的に発信をするべきだと考えています。
自身が時間をかけて得た知識を、より吸収しやすい形にしてシェアすることで、他のエンジニアの技術力向上に繋がり、結果的に組織として良いモノづくりができるようになります。

このような経緯と考え方から、社内の有志11名を集めてパフォーマンスチューニングバイブルを執筆することにしました。
執筆者には日頃から発信をしているメンバー(@ohbashunsuke渋谷ほととぎす通信 / @yucchiy_Unity Weekly / @harumak_11LIGHT11)と、各分野に詳しいメンバーに声をかけさせていただきました。

さいごに

本書を配布した結果、社内からは良好な反応をいただいており嬉しく思っています。

今後の展望としては、まず本書に関しては更新を続け、ブラッシュアップを行っていく予定です。
執筆者についても現状のメンバーだけではなく、社内から幅広く募る仕組みを考えています。

またより知識を定着させるために、座学だけではなくより実践的なハンズオンを作成することなどを計画しています。