【Unity】パフォーマンスチューニングを組織的に解決する方法

こんにちは、サムザップUnityエンジニアの飯田です。

ところでゲーム開発中 「パフォーマンスチューニング」 が問題になったことはありませんか?弊社はいくつもゲームをリリースしてきましたが、そのたびにパフォーマンスがネックになってきました。

開発中盤までは問題が起きなかったのに、後半になるにつれて 「動作が重い」「待ち時間が長い」「カクつく」 といった声が聞こえてきます。そのたびに頭を悩ませ続けてきました。

そこで、本記事では弊社で取り組んでいる 「パフォーマンスチューニング問題を解決する方法」 を紹介します。

チーム開発はもちろん、個人開発者にも有効な方法です。最後まで読んで、一緒にパフォーマンスチューニングに備えていきましょう。

Unityパフォーマンスチューニングバイブルが超絶オススメ

https://cdn-ak.f.st-hatena.com/images/fotolife/s/sumzap_engineer/20221025/20221025125652.jpg

結論から話しますが「Unityパフォーマンスチューニングバイブル」をおすすめします。

弊社サムザップはサイバーエージェント ゲーム・エンターテイメント事業部(以下 : SGE)の子会社の1つとして所属しています。そのSGEからリリースされたのが、今回使用する「Unityパフォーマンスチューニングバイブル」です。SGEの各子会社の有識者が集まり1年ほどかけて執筆したのが本書です。

↑Unityパフォーマンスチューニングの経緯に興味ある方は、こちらの記事を読んでみてください。

Unityパフォーマンスチューニングバイブルの3つの良いポイント

Unityのパフォーマンスチューニング問題を解決する上で、Unityパフォーマンスチューニングバイブルを使う3つのポイントを簡単に紹介します。

  1. 有料級のチューニングノウハウがてんこもり
  2. パフォーマンスチューニング初心者でもわかる内容からコアな内容まで網羅
  3. 幅広いチューニング範囲をカバー

1つずつ解説していきます。

1. 有料級のチューニングノウハウがてんこもり

Unityパフォーマンスチューニングは 「無料公開」 しているにも関わらず、内容は有料級です。今までサイバーエージェントの各子会社が何年も貯めてきたノウハウを一斉に放出し、大事なところをわかりやすくまとめているからです。

パフォーマンスチューニングを学ぶ上でこれほど適した教材はありません。特にパフォーマンスチューニングを学びたい初心者にはおすすめです。

2. パフォーマンスチューニング初心者でもわかる内容からコアなコンテンツまで網羅

パフォーマンスチューニングと聞くと「難しそう」って思う方もいらっしゃるのではないでしょうか。僕もそうでした。しかし、本書はパフォーマンスチューニングをやったことのない初心者でも理解できるように解説されています。

もちろんコアな内容まで網羅しているため、全てが初心者向けではありません。分かる範囲からコツコツ読み進めて実践することでパフォーマンスチューニングスキルが身についていきます。

3. 幅広いチューニング範囲をカバー

Unityはカバーする技術範囲がとにかく広いですよね。その広い分野それぞれにパフォーマンスチューニングが存在します。本書はゲーム開発で使用する分野に特化していますが、Unityの各技術範囲におけるパフォーマンスチューニングノウハウが詰め込まれています。

本書一冊をマスターすることで、パフォーマンスチューニングを一通りこなせるUnityエンジニアになれるかと思います。

なぜ開発後半パフォーマンスチューニングが問題になるのか?3つの課題に分解

そもそもなぜ毎度、開発後半にパフォーマンスチューニングが問題になるのでしょうか。パフォーマンスチューニングを理解する上ではこの問題が発生する原因を知っておく必要があります。

課題1. アセットの急激な増大

開発後半になると、急激にアセットが増えます。アセットの増大が、パフォーマンス問題を顕在化させるのです。

アセットとはゲームで使用する「画像」「音楽」「動画」などのゲーム素材です。開発中盤までは最低限のアセットで開発しているため、パフォーマンスの問題に気づき辛いのです。しかし開発後半、本番仕様のアセットが大量に完成しゲーム内に投下されます。そこで問題が発覚することが多いです。

それはアセットの量が想定より多い、仕様と違ってメモリを大量に消費しているなどです。

これは、開発中ではゲームの仕様が変わりやすく、どうしても後半にならないとパフォーマンス問題に着手できないという性質にも起因します。

課題2. パフォーマンスを意識していないソースコードの乱立

弊社ではチーム単位でゲームを開発しています。チームですのでメンバーのスキルレベルもバラバラです。パフォーマンスに精通したメンバーがチームに1人必ずいるわけではありません。

また基本的にスケジュールの余裕はありませんから、機能開発を優先することになります。そこでおざなりになりがちなのがパフォーマンスです。パフォーマンスを意識していないソースコードが開発後半になるに連れて乱立していく場合が多いです。

その数が増えればそれだけパフォーマンスは下がっていきます。パフォーマンスは小さな積み重ねで改善していくものです。そのため本来、開発序盤や中盤からパフォーマンスを意識したソースコードを書いていくべきですが、現実的にはどうしても難しいという課題があります。

課題3. パフォーマンスチューニングのノウハウが少ない

課題3つ目は開発メンバーにそもそもパフォーマンスチューニングへのノウハウが少ないということです。パフォーマンスチューニングは特に属人化しやすい分野です。開発後半、一部の有識者がパフォーマンスをチューニングするケースが多いのではないでしょうか。

組織としてノウハウを蓄積することが理想なのですが、開発スケジュールの観点で全員がパフォーマンスチューニングに時間を割くというのは難しいのです。結果、パフォーマンスチューニングの属人化は進んでいきます。

以上の課題を踏まえ、弊社では 「Unityパフォーマンスチューニング輪読会」 を実施することにしました。

Unityパフォーマンスチューニング輪読会とは?

Unityパフォーマンスチューニング輪読会とは、本書「Unityパフォーマンスチューニングバイブル」を用いて、弊社Unityエンジニアで集まり一緒に読見進めていくという施策です。

輪読会の様子
コロナ下なのでZOOMで開催。
↑キャプチャの通りUnityパフォーマンスチューニングバイブル執筆者で弊社所属の @ohbashunsuke@Gaku_Ishii も参加しています。

具体的なUnityパフォーマンスチューニング輪読会の進め方

具体的にどのような形で輪読会を進めたのか、簡単に解説します。

  • 事前に運営から参加メンバーに対して指定の章を読んできてもらう
  • 事前に疑問点や議論ポイントをドキュメントにまとめておく
  • 実際に読み進めて、疑問点、議論ポイントを話し合いながら消化していく

このような形で1時間ほど開催しています。

本施策はUnity Japan公式noteでも一部取り上げていただきました。

Unityパフォーマンスチューニング輪読会を開催する3つのメリット

Unityパフォーマンスチューニング輪読会を通して気づいた3つのメリットをここで紹介いたします。

  1. 各プロジェクトで発生した具体的な事例の自然な共有
  2. 教え合う文化の醸成
  3. エンジニア組織内に生まれた共通言語

メリット1. 各プロジェクトで発生した具体的な事例の自然な共有

1つ目のメリットは、Unityパフォーマンスチューニング輪読会中に開発中に実際に起きた事例が 「自然」 に共有されたということです。

例えばメモリリークの調査方法やリークの実例について以下のような共有、議論がありました。

  • 実はTextオブジェクトがリークしていた事例
  • Unityのバージョンによってメモリーリークしていた事例
  • サードパーティ製のプラグインが実はメモリーリークしていた事例

他にもパフォーマンスの指標については各プロジェクト以下のような共有がありました。

  • インゲームは最低でも60FPSはキープ
  • 古い端末でも動くように意識してメモリが2GBの端末でもチェック
  • 最低保証端末で30FPSを目指している
  • ゲーム内でオプションを作り描画負荷を下げられるようにしている
  • 通常の描画でFPS目標を達成すべき端末と描画負荷を下げて達成すべき端末を決めている

本書をきっかけに議論に発展し、それを自分のプロジェクトに持ち帰り、実践するという流れは組織全体のスキルアップにつながる非常に良いサイクルです。

メリット2. 教え合う文化の醸成

メリット2つ目は教え合う文化が生まれたことです。もともと弊社ではプロジェクト間の垣根をできるだけなくす努力をしてきました。例えばUnityプロジェクト共有会という会議体です。各プロジェクトの開発状況、技術課題の共有などを定期的に実施しています。

今回紹介している「Unityパフォーマンスチューニング輪読会」はさらに組織内で教え合う文化が促進されたと思っています。特に新卒エンジニアは開発経験が少ないため、パフォーマンスチューニングに疎い傾向があります。

この輪読会によって、先輩後輩間で教え合う場が生まれ、よりよい文化づくりに繋がりました。また、逆に先輩社員も教えることで学ぶ機会に繋がります。教えるということは自分がより幅広く知っておかねばなりません。

輪読会は若手、中堅関係なく組織全体でスキルをアップさせる良い施策であることがわかりました。

メリット3. エンジニア組織内に生まれた共通言語

最後のメリットは、エンジニア組織内で「パフォーマンスチューニング」という共通言語が生まれたことです。輪読会を通して、メンバー間でパフォーマンスチューニングの相談がしやすくなりました。

パフォーマンスチューニングは開発中、運用中含めどのプロジェクトでも必要な技術です。同じ共通言語を持つ者同士、仲間意識が芽生え、組織内での助け合い精神が自然と発生しやすくなったと実感しています。

まとめ

ここまでUnityパフォーマンスチューニングバイブルを使った輪読会を通して、ゲーム開発中の問題になりやすいパフォーマンスチューニングを組織的に解決する方法を紹介しました。

記事の内容を簡単にまとめます。

  • 開発後半にパフォーマンス問題が顕在化
  • パフォーマンスチューニングは属人化しやすい分野
  • Unityパフォーマンスチューニングバイブル輪読会で個に貯まった知識の自然共有
  • スキルを教え合う文化醸成
  • 共通言語によるチーム力活性化

こんな感じです。

本記事を読んで、パフォーマンスチューニングの課題を解決したい、組織力をアップしたいという方は、ぜひ輪読会をやってみてください。まずは一緒に読み進めてみて、感想を言い合うだけでも大丈夫です。自然とそこから議論や知見の共有に発展していきますよ!

最後に、今回紹介させていただいた「Unityパフォーマンスチューニングバイブル」の執筆に関わった皆様に感謝いたします。有料級の内容を無料で提供、そしてUnityのパフォーマンスチューニングスキルを磨く最高の教材だと思います。

Unityパフォーマンスチューニングバイブルはどなたでも無料でダウンロード可能な書籍です。
こちらからPDF版をダウンロードできます。

ぜひ、みなさま手にとって読んでみてください。弊社でも輪読会を進めていく中で新しい発見や有益な情報が出てきた際には再び本ブログで共有させていただこうと思います。

最後まで読んでいただきありがとうございました。
この記事がパフォーマンスチューニングに役立ったら嬉しいです。

飯田 凌大

2020年入社のUnityエンジニアです。
ゲームと効率化とイラスト制作が趣味。