Cities: Skylines IIのリリースは、都市シミュレーションゲームにおけるパフォーマンス基準を再定義しました。独自の行動を持つ何千人もの個々の市民を管理する能力の背後には、ECS(エンティティコンポーネントシステム)に基づいた、高度に修正されたUnityアーキテクチャがあります。このアプローチにより、CPUに負荷をかけることなく、各エンティティの交通、経済、ライフサイクルロジックを同時に処理することが可能になり、密集した都市で安定したフレームレートを維持するために重要な成果です。
MayaとHoudiniによるアセットフローと幾何学的最適化 🏗️
建物やインフラの極めて詳細なレベルは、Autodesk MayaとHoudini間の自動化されたワークフローなしには実現できません。Mayaでベースアセットがモデリングされ、Houdiniが手続き的なバリエーション(窓、屋根、経年テクスチャ)を生成し、Unity用に最適化されたLOD(レベルオブディテール)メッシュとしてエクスポートされます。技術的な要点は、これらのバリエーションをECSシステムと統合することにあります。各市民や車両のエンティティは、カメラからの距離に応じて簡略化される動的LODメッシュを参照し、GPUメモリを解放します。昼夜サイクルには、アルベドテクスチャとエミッシブテクスチャ間を補間するカスタムシェーダーが使用され、動的天候はECSパーティクルを使用して雨や雪を表現し、従来のパーティクルシステムのオーバーヘッドを回避します。
大規模シミュレーション開発者への教訓 🎯
同様のアーキテクチャを実装する予定があるなら、最初からレンダリングデータとロジックを分離することを優先してください。最も一般的な間違いは、各市民をGameObjectとして扱うことであり、これによりエンジンがクラッシュします。代わりに、軽量なコンポーネント(位置、状態、目的地)を持つECSエンティティと、非アクティブなエンティティを再利用するためのプーリングシステムを使用してください。さらに、気象の遷移は個別のイベントとしてではなく、グローバル時間システム内の補間としてプログラムしてください。これにより計算の急増を防げます。最後に、Houdiniでポリゴン削減ノードを使用してLOD生成を自動化してください。極端な幾何学的詳細は近距離でのみ見えるからです。
Colossal Orderのチームは、Cities: Skylines IIの高密度都市においてパフォーマンスの安定性を維持するために、Unity ECSシステムと個々のエージェント間のデータ同期の課題にどのように取り組んでいるのでしょうか?
(追記:ゲーム開発者とは、人が2時間でクリアするゲームを作るのに1000時間費やす人のことです)