始めに
技術書典18にて、個人で執筆した技術書『Unity JobSystemで大群を動かす!実用Boidsシミュレーション』を出版します。
今回は『Unity JobSystemで大群を動かす!』に焦点を当てて、本当に大群が動かせるのかを様々なマシンで検証してみます。
使用するマシン
自分が持っている3台のPCと、2台のモバイル端末で検証をします。
細かいスペックは検証結果の章でお話します。
検証方法
検証に使用するサンプルは、技術書『Unity JobSystemで大群を動かす!実用Boidsシミュレーション』の5章「Boidsシミュレーションを使ったシューティングゲーム開発」です。
検証は以下の方針で実施しました。
- ゲーム実行して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月ごろに購入しました。
- CPU:intel Core i7-14700KF
- メモリ:32GB
- GPU:NVIDIA Geforce RTX 4070Ti Super
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年ごろに購入しました。
- CPU:intel Core i7-9750H
- メモリ:16GB
- GPU:NVIDIA Geforce RTX 2070
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シミュレーションを使ったコンテンツ開発の可能性を感じていただけたら嬉しいです。