したかみ ぶろぐ

Unity成分多め

【宣伝】本当にBoidsを大群で動かせるのか検証!

始めに

技術書典18にて、個人で執筆した技術書『Unity JobSystemで大群を動かす!実用Boidsシミュレーション』を出版します。

techbookfest.org

shitakami.hateblo.jp

今回は『Unity JobSystemで大群を動かす!』に焦点を当てて、本当に大群が動かせるのかを様々なマシンで検証してみます。


使用するマシン

自分が持っている3台のPCと、2台のモバイル端末で検証をします。

  • PC
    • デスクトップPC
    • M4 Mac mini
    • ノートPC
  • モバイル端末
    • iPhone16 Plus
    • iPad Pro 11inch 第2世代

細かいスペックは検証結果の章でお話します。


検証方法

検証に使用するサンプルは、技術書『Unity JobSystemで大群を動かす!実用Boidsシミュレーション』の5章「Boidsシミュレーションを使ったシューティングゲーム開発」です。


www.youtube.com

検証は以下の方針で実施しました。

  • ゲーム実行して10秒後に、計測を開始
    • 個体が密集すると負荷が増えるため、群れが形成されるまで待機
  • 計測開始後から30秒ほどプレイして、平均FPSと最小FPSを計測
    • ただし、モバイル端末は60fpsを上限とする
  • PCの検証はUnity Editorとil2cppビルドの両方で行う
    • il2cppビルドで処理速度が変わるため
  • Unity Editorで動作確認するとき、Gameビューのみを表示
    • Sceneビューを同時に表示すると、描画がボトルネックになり正しく計測できないため
  • Unity Editorでは15,000体から30,000体、il2cppビルドでは20,000体から50,000体まで検証
    • 個体数は5,000体ずつ増やす
    • モバイル端末は15,000体から30,000体まで
  • Boidsのパラメータは、負荷が高くならない程度に設定
    • 個体が密集しすぎないように、程よく分離させて細長い群れを形成
    • 空間を広めにとり、密集を避ける


検証結果

マシンごとの結果を見ていきます。

デスクトップPC

ミドルハイエンド程度のPCで、2024年の2月ごろに購入しました。

Unity Editor

30,000体まで100fps以上を維持できました、驚異的な性能です。

15,000 20,000 25,000 30,000
平均FPS 183.9 162.2 153.8 132.9
最小FPS 179.1 156.5 151.2 130.1

ビルド(il2cpp)

50,000体まで、平均FPSを100以上で維持できました。ここまで来ると恐ろしさを感じます。

20,000 25,000 30,000 35,000 40,000 45,000 50,000
平均FPS 292.9 228.4 188.4 156.7 136 119.7 102.5
最小FPS 282.9 209 171.1 146.2 126.3 113 93.8


M4 Mac mini

2024年に発売された小型PCです。2024年12月に購入しました。

  • CPU:M4(10コア)
  • メモリ:24GB
  • GPU:M4(10コア)

Unity Editor

M4 Mac miniも30,000体まで60fps以上を維持できています。

15,000 20,000 25,000 30,000
平均FPS 246.2 162.7 107.1 88.6
最小FPS 233 150.4 86.7 75.9

ビルド(il2cpp)

35,000体までは60fps以上を維持できましたが、40,000体ではギリギリと言った結果となりました。

M4 Mac miniは小型で安価なPCですが、ここまでの性能が出るとは思っていませんでした。

20,000 25,000 30,000 35,000 40,000 45,000 50,000
平均FPS 160.9 130.6 98.8 85.8 65.3 58.9 48.7
最小FPS 145.1 114.2 86.4 76.0 59.8 52.1 44.0


ノートPC

古くなったミドルクラスのゲーミングノートPCです。2019年ごろに購入しました。

Unity Editor

15,000体ではある程度余裕はありますが、20,000体では最小FPSが60を下回りました。

15,000 20,000 25,000 30,000
平均FPS 92.3 64.9 53.9 44
最小FPS 88.6 56.8 49.8 37.8

ビルド(il2cpp)

20,000体は安定して60fps以上を出せましたが、25,000体ではギリギリ維持できない程度でした。30,000体以降は言わずもがなです。

20,000 25,000 30,000 35,000 40,000 45,000 50,000
平均FPS 84.9 63.2 49.1 40.1 34.3 26.6 22.5
最小FPS 74.4 58.2 43.7 34.3 28.3 22.5 20.5


iPhone16 Plus

2024年に発売されたモデルです。2024年の12月に購入しました。

補足情報ですが、"Plus"がついてもSocに影響はないので、スペックはiPhone16と同等です。

  • Soc:A18
  • メモリ:8GB

iOSビルド

モバイル端末ですが、15,000体でも60fpsを維持しました。20,000体ではギリギリ60fpsを維持できませんでした。

15,000 20,000 25,000 30,000
平均FPS 60.0 59.8 53.5 45.0
最小FPS 59.7 58.3 40.0 41.2


iPad Pro 11-inch 第2世代

2020年に発売されたモデルです。2020年に購入しました。

実はiPhone16 Plusよりもスペックは下回ります。

  • Soc:A12Z
  • メモリ:6GB

iOSビルド

iPhone16と同様に、15,000体で60fpsを維持し、20,000体でギリギリ維持できない程度でした。

15,000 20,000 25,000 30,000
平均FPS 60.0 59.4 46.6 37.8
最小FPS 60.0 57.8 41.1 33.7


まとめ

PC環境では20,000体、モバイル端末では15,000体を60fps以上で動作できたので、『Unity JobSystemで大群を動かす!』は達成できていると思っています。

私個人として、驚いた結果が次の通りです。

  • iPhone16, iPad Pro共に、15,000体を安定して動作できた
  • M4 Mac miniが、40,000体でもギリギリ60fps程度を出せた
  • デスクトップPCが、50,000体を安定して60fps以上を維持できた

この結果から伝えたいこと

技術書『Unity JobSystemで大群を動かす!実用Boidsシミュレーション』のサンプルは、Boidsシミュレーションに特化しており、UIや演出などの他の処理は含まれていません。また、使用しているモデルも負荷の少ないCubeです。

そのため、このサンプルをそのままゲームやコンテンツに組み込んでも、同じようなパフォーマンスを発揮できるとは限りません。

とはいえ、数万体を安定して動かせる余力を持っているため、実際のゲームやコンテンツで活用しても、ある程度大きな群れを再現することは可能と見込んでいます。

本書の結果から、Boidsシミュレーションを使ったコンテンツ開発の可能性を感じていただけたら嬉しいです。