Cloud Imperium GamesがStar Citizen向けに開発したStar Engineは、宇宙シミュレーションにおける最大の課題の一つである、ローディング画面を一切表示せずに惑星規模の都市全体をレンダリングすることを実現します。世界をレベルごとに分割する従来のエンジンとは異なり、Star Engineは64ビットのオブジェクトストリーミングシステムを採用し、プレイヤーの位置と速度に基づいてデータを動的にロードおよびアンロードします。これにより、プレイヤーは深宇宙から惑星表面まで飛行し、大気圏を通過し、密集した都市部に着陸するまで、すべてがシームレスで途切れのない移行で行われます。
プロシージャル生成とリアルタイムオブジェクトストリーミング 🚀
技術的な鍵は、惑星のプロシージャル生成とオブジェクトストリーミングという2つのシステムの組み合わせにあります。エンジンはすべての木や建物をディスクに保存するわけではありません。代わりに、ノイズアルゴリズムとフラクタルを使用して、地形、植生、気候パターンをリアルタイムで生成します。これは、関心領域(POI)システムによって補完され、格納庫や店舗などの複雑なアセットのロードを、プレイヤーが接近した時のみ優先的に行います。比較すると、Unreal Engine 5は仮想化ジオメトリにNaniteを使用していますが、天文学的な距離には最適化されていません。一方、UnityはWorld Streamerのようなサードパーティ製ソリューションを必要としますが、惑星スケールでの浮動小数点精度エラーを回避する64ビット座標の精度は備えていません。
AAAツール間のアーティスティックワークフロー 🎨
このレベルのディテールを達成するために、チームはMaya、ZBrush、Substance Designerを高度に効率的なパイプラインで組み合わせています。アーティストはMayaで宇宙船や建物の基本構造をモデリングし、その後ZBrushで高解像度のディテールを彫刻します。鍵となるのはSubstance Designerで、惑星の条件(温度、湿度)に適応するプロシージャルマテリアルが作成され、固有のテクスチャを必要としません。これらのマテリアルはStar Engineにエクスポートされ、シェーダーシステムがストリーミングデータと組み合わせることで、同じアセットが10メートル離れても詳細に見え、10キロメートル離れても認識可能となり、没入感を犠牲にすることなくパフォーマンスを最適化します。
Star Engineは、目に見えるロード時間なしに惑星都市をシミュレートするために、リアルタイムで数十億のポリゴンをプロシージャルに表現することをどのように実現し、メモリとデータストリーミングの観点でエンジンが直面する具体的な技術的制限は何ですか?
(追記: ゲーム開発者とは、人々が2時間でクリアするゲームを作るために1000時間を費やす人のことです)