宇宙空間を周回する数千機の人工衛星を、Webブラウザ上でリアルタイムに3D描画し、ミリ秒単位で位置を追跡するWebシミュレーター「SatViewer3D」の開発裏側を詳しく解説します。
1. なぜブラウザ上で軌道力学計算を行うのか?
従来の衛星トラッカーの多くは、サーバー側で定期的に位置を計算してクライアントに座標を配信する方式を採用していました。しかし、この方法では以下の課題がありました:
- サーバーの通信トラフィックとCPU負荷が膨大になる。
- 通信遅延(レイテンシ)により、時速28,000kmで高速移動する衛星の滑らかな連続アニメーションが難しい。
そこでSatViewer3Dでは、最新のNORAD TLE(2行軌道要素形式)データのみを初回にキャッシュ配信し、クライアント端末のCPU/GPUでSGP4(Simplified General Perturbations 4)軌道伝播計算を完全リアルタイム実行するアーキテクチャを採用しました。
2. SGP4モデルとJ2重力ポテンシャル摂動の計算
地球は完全な球体ではなく赤道付近が膨らんだ楕円体です。このため、地球の重力場は不均一であり、衛星の軌道面は地球自転の影響を受けて徐々に回転します(J2摂動)。
SGP4モデルは、このJ2/J3/J4摂動、大気摩擦による軌道減衰、月・太陽の引力を解析的に解くアルゴリズムです。
JavaScript / WebAssemblyでSGP4数学関数を最適化し、1フレームあたり数千機の三次元直交座標系(ECI座標系:地球中心慣性座標系)から地心固定座標系(ECEF)および地理座標系(緯度・経度・高度)への変換を0.5ミリ秒未満で完了させています。
3. CesiumJS / WebGLのドローコール削減と60fps描画
数千機の衛星ポイント、リアルタイム軌道ライン、日照判定(昼夜境界線)を同時にレンダリングすると、通常のWebGLパイプラインではドローコールが跳ね上がりフレームレートが低下します。
SatViewer3Dでは、ポイントスプライトのバッチング描画と頂点バッファオブジェクト(VBO)の効率的な再利用により、数千機同時表示でも安定した60fpsを実現しました。