このウェブページは、お客様の便宜のために機械翻訳されたものです。翻訳されたコンテンツの正確性や信頼性は保証いたしかねます。翻訳されたコンテンツの正確性について疑問をお持ちの場合は、ウェブページの公式な英語版をご覧ください。
メガポップが、エンティティコンポーネントシステム(ECS)のパフォーマンスとスケーラビリティを活用して、有機的に成長する高密度の水中シティビルダーを構築した方法をご覧ください。
課題:
CPUにボトルネックを与えずに、何万もの相互作用する海洋生物、カスタムAIタスクスケジューラ、ダイナミックサンゴをシミュレート
プラットフォーム:
PC(蒸気)
開発拠点:
オスロ
チーム人数:
正社員14名、フリーランス3名
Life Belowのようなゲームは、プレイヤーのPCを溶かすことなく、どのように高密度で生きた海洋エコシステムをシミュレートするのでしょうか。
メガポップの新しい「リーフビルダー」は、死にかけている海洋環境の復元をプレイヤーに課している。プレイヤーはコンクリートの建造物をグリッドに配置するのではなく、自然そのものとして行動し、有機的にサンゴを育て、壊れやすいエコシステムを管理して、クマノミやカニ、イルカやラッコなど、55種以上の実際の海洋生物を引き寄せます。
Life Belowの鮮やかな美学とゲームプレイを実現するには、データ指向の設計に全面的に取り組む必要がありました。魚、野生生物、NPCワーカーのこのネットワークを、複雑なGameObjectではなく連続したメモリ上の数値という純粋なデータとして扱うことで、チームはボイドの挙動、レンダリングスケール、空間オーディオ、エコシステムシミュレーションに関する複雑な課題を解決し、PC上でパフォーマンスの高い体験を提供しました。

成果
- 初期ストレステスト時に、同じ種類の魚を最大25万匹の群れをシミュレート
- RTX 3060で60FPSを維持。数千のアクティブなクリーチャーがゲーム後半に登場。
- 下位層のマシンで1,300匹以上のインタラクション動物を30FPSで維持
- プロのベータテスターから97.2%の支持率を獲得
- 14時間のレイトゲームセーブで15,000以上のエンティティと450以上のシステムを処理。スムーズに実行
- 「2025 Unity for Humanity」助成金で佳作

データ指向アプローチへの取り組み
メガポップは、試作段階でLife BelowをECS上で完全にビルドすることを決定しました。「ECSでは、大規模なクラス階層に依存するのではなく、連携する小さなシステムをいくつでも構造体できます」と、スタジオの創設者兼CEOのヨルゲン・タラルセンは言う。「これにより、小さなピースから動作を構成することで、複雑なシミュレーションのビルドが容易になります」
オブジェクト指向からデータ指向の開発パラダイムへの移行は、メガポップチームにとって大きなシフトでした。知識のギャップを埋めるために、ITR、つまりLife Belowの技術リードであり、プロジェクトにおけるECSの初期の提唱者であるは、Unityの公式ECSドキュメントやECSサンプルから、Unity DiscordコミュニティやYouTubeの実際のアドバイスまで、さまざまなリソースを活用しました。「Turbo Makes Gamesが主催するホットパスショーは、DOTSとECSに関するよりニッチな情報にも特に役立ちました」とITRは言います。
Life Belowのローンチの18カ月前にプログラマーのSimen WiigがMegapopに入社したとき、ECSを学ぶことが彼の新人研修に焼き付きました。「主なことは、通常のオブジェクト指向の考え方ではなく、データ指向の考え方に頭を巻くことでした」と彼は言います。「いったんそれがわかったら、コンポーネントとエンティティを持つことでコードの構造体が良くなるのがとても気に入りました」
ITRは、ECSのオンボーディングに最大の違いをもたらした原則を次のように特定しています。「さまざまなアーキテクチャを混在させようとするのではなく、データ指向のアプローチにコミットする。システムを小さく集中させることで、新しい機能が追加されてもプロジェクトをスケールしやすくなります」

Life Below | Megapop | Kasedo Games
NPCのタスクスケジューラの作成
『Life Below』では、プレイヤーはNPCの労働者に直接命令を出すことはありません。リーフを維持する水かきチームです。代わりに、プレイヤーが目標(ここにサンゴを置き、これらの資源を収穫する)を設定すると、カスタムタスクスケジューラが各タスクに最適なワーカーを自動的に割り当てます。
スケジューラはBurstコンパイルされたシステム内で実行され、3つの段階で動作します。まず、ECSを使用してワーカーの可用性、リソース場所、保留中のタスクに関する広範な情報を収集します。次に、アルゴリズムによって、タスク タイプ間の分布のバランスを保ちながら優先度の高いタスクが選択されます。最後に、ECSを使用して詳細情報を取得し、最適なワーカーを見つけて各ステップを計画します。「階層関数プログラミングを使用して、ゲームが破損状態にならないようにしながら、新しいタスクを簡単に追加できるようにしています」とITRは説明します。
ゲーム後半のピーク時には約100人の作業員が同時に操作します。システムはシングルスレッドです。技術的な制限ではなく、各タスクの割り当てが前のタスクの結果に依存しているためです。「オペレーティングシステムのタスクスケジューラに似ています」とITRは言いますが 、 「 タスクをスケジューリングする前に、後ではなく、おおよそどのくらいの時間がかかるかがわかる点が異なります」と。

Life Below | Megapop | Kasedo Games
複雑なボイド挙動のシミュレーション
多くのゲームは、単純なGPUまたはBurstソリューションを使用してフロック動作を実装しています。『Life Below』では、メガポップは狩りをしたり、逃げたり、プレイヤーとカメラを向けた接近戦など、ダイナミックに交流するための種族を必要としていました。
「単純なボイドシミュレーションでは、BurstやGPUの計算を使って何かを実行させることは簡単です」とJørgen氏は言います。「しかし、異なる種が相互作用する、さらにはアップカメラの眺めで野生動物と対話する場所でも、より複雑な動作がしたかったのです」
チームはジョブシステムを使用して、ボイドロジックの並列化可能な部分、つまり基本的な位置更新と分離計算を、捕食者の追跡のような複雑な分岐相互作用から分離しました。カニのような底生餌魚は比較的安価にシミュレーションできるのに対し、ライオンフィッシュのような捕食魚は、他の種を狩り、追いかけ、襲うために各フレームで複数の条件を評価する。
スケールでの空間オーディオの管理
ダイナミック空間オーディオを何千ものアクティブなエンティティーと一緒に動作させることは、プロジェクトでより困難な課題の1つでした。プログラマーのFingar Bøen氏が開発したソリューションは、近くの生き物をクラスタにグループ化し、個々の魚ではなくグループの動作からオーディオを駆動することでした。
「種、グループサイズ、動き、タイミングなどの要因が、音を鳴らすタイミングを決定するヘルプになります」とフィンガー氏は説明します。「これにより、サウンドスケープを自然な状態に保ちながら、数千の生き物を表現でき、CPUコストを管理できる」
ECS JobsとBurstはデータ収集フェーズのハンドルです。エンティティ位置を収集し、それらを並列で効率的にグループ化しながら、オーディオイベントをトリガーするマネージコードは可能な限り最小限に保ちます。また、文字列ベースのFMODイベントIDをGUIDにスワップする取り組みも進めており、これによりガベージ割り当てを減らし、オーディオパイプラインのBurstable化をさらに進める。
生きたサンゴ礁のレンダリング
数千のエンティティを視覚化するには、高度に最適化されたレンダーパイプラインが必要です。Megapopは、遊泳サイクルなどの複雑な動物の動きに頂点アニメーションテクスチャ(VAT)を使用し、より小さい群れを作る魚には手続き型アニメーションを使用します。環境はエコシステムの健全性にも反応します。サンゴはECSから直接渡されたパラメーターに基づいて、藻類の成長、ストレス、損傷の状態を動的にディスプレイします。
Entities GraphicsとGPUインスタンシング
チームは開発開始からGPUインスタンスを使用し、Unityの公式Entities Graphicsパッケージに移行する前に、最初はカスタムグラフィックスAPIコールを使用していました。スイッチはパフォーマンスの向上によって推進されたわけではありません。どちらのアプローチも、基盤となる同じテクノロジーに基づいて構築されています。しかし、Entities Graphicsにより、システムがはるかに簡単に操作できるようになり、ECSインテグレーションが大幅に改善されました。Megapopのテクニカルアーティスト兼プログラマーであるAdam Hove氏は 、 「 操作がずっと簡単で、ECSでもずっとうまく動作しました」と語る。
Entities Graphicsは、各フレームのエンティティごとの値としてGPUにデータを自動的にアップロードするカスタムECSコンポーネントをサポートしています。ただし、これらの値が実際に変更された場合のみです。つまり、何百もの安定したエンティティがデータに再アップロードしていないということです。GPUインスタンシング自体は、画面に何百ものサンゴとスキャッター装飾を持つことが描画呼び出しを乗算しないようにします。:「GPUインスタンシングでは、1回のドローコールで数千のサンゴをレンダリングできます」とITRは説明します。「つまり、1種類のサンゴを5匹、つまり5000匹も画面に映し出すと、同じように速くレンダリングされます」

Life Below | Megapop | Kasedo Games
Shader Graphによる動的サンゴ
各サンゴエンティティは、健康、藻類の成長、ストレス状態に関するECSコンポーネントを保持しています。エンティティグラフィックスのMaterialProperty属性を使用して、これらはGPUに自動的にアップロードされ、Shader Graphパラメータを駆動します。手動でマテリアル管理を行うことなく、白化、ストレスカラー、藻類スプレッドなどの目に見える変化を生成します。Shader GraphはHLSLを書かないアーティストにも作品を開放し、視覚的な結果を直接繰り返し、変更の効果をリアルタイムで確認できるようにしました。
データ指向コードのデバッグ
データ指向コードベースのデバッグは、標準のUnityプロジェクトのデバッグとは異なる規律であり、MegapopのUnity 6での経験は、ツールがどれだけ成熟しているかを反映しています。「6.0では検索ウィンドウ、プロファイラーマーカー、レンダーグラフが追加され、最適化に非常に役立ちました」とITRは言います。
チームはリリース前にUnity 6.3にアップグレードし、エンティティ階層ウィンドウやネイティブデバッガなどのツールが、サポートされている最新のLTSで実質的により安定していることに注目しました。
エンティティ階層は、ランタイムでのエンティティ状態の検査に不可欠でした。一方、JetBrains RiderのECS固有の機能(コードのステップ実行中に特定のエンティティのコンポーネント情報を確認できる機能など)により、ネイティブデバッガは大幅に便利になりました。ECSジャーナリングは、どのシステムがコンポーネントを予期せず変更し、最適化中に不要な書き込みにフラグを付けるかを特定するのに役立ちました。
グラフィックスでは、フレームデバッガーとRenderDocをUnity 6のレンダーグラフシステムと組み合わせて、GPUリソースがどこに触れたかを正確にトレースしました。
Burstによるパフォーマンスの向上
バグレポートとして提出された14時間のプレイヤーセーブには、15,000のエンティティと450以上のアクティブなシステムが含まれていました。それでも60FPSでスムーズに動作しました。エコシステム全体のシミュレーションでは、一般的なゲーム後半のシナリオでは、1フレームあたり約0.5ミリ秒のCPU時間でクロックインします。これは、ゲームがレンダーフレームごとに修正アップデートを複数回実行する時間アクセラレーションをサポートしているため重要です。
Burstは、これらの数値を達成する上で中心となります。無効にすると、シミュレーションに1フレームあたり3倍以上の時間がかかります。「多くのシステムでは、Burstで十分最適化できることがわかりました」とITRは説明し 、 「 Jobsは、多くのエンティティで反復処理するコードの特定の並列化可能な部分により適していました」と説明しています。
単一種のストレステストでは、8年前のITRのパソコンでは60FPSで3,500匹のカニ、50FPSで7,000匹のカニや5,500匹のクマノミが、全体を通して活発なボイドインタラクションを行うハイエンドの職場ノートPCで再現されています。また、DOTSネイティブのCollectionsとアロケータにより、チームの以前のプロジェクトと比較してフレームごとのガベージ割り当てが大幅に削減されました。
経験から学ぶこと
Life Belowは、本格的な海洋生物学と複雑なシステム工学を融合させることで、シティビルダーというジャンルに特徴的な空間を切り開いています。Megapopの最新リリースでは、シミュレーション負荷の高いゲームを扱う際のECS for Unityのスケーラビリティが実証されており、純粋なパフォーマンスをはるかに超える構造上のメリットが明らかになりました。チームは、例えばアセンブリをデータとロジックにきれいに分割できるということは、同規模の他のプロジェクトよりもはるかに速くコンパイルされたLife Belowを意味していたと指摘しています。
ECS for Unityでゲームを作ることを検討している開発者にとって、チームの経験は一貫しています。学習カーブは本物ですが、投資は回収できます。Megapopの次のプロジェクトでテックリードを務めるAdamは、すでにECSの活用を計画している。「すでにセットアップ済みであれば、簡単にビルドおよび拡張できます」と同氏は言います。
Unityでより良いビルド
シミュレーション負荷の高いゲームをスケールアップして開発できます。ECS for Unityは、複雑で生きた世界に命を吹き込むパフォーマンスとアーキテクチャのツールを提供します。
