SatViewer3Dは元来、地球低軌道(LEO)や静止軌道(GEO)を周回する数千機の人工衛星や宇宙デブリをリアルタイムに追跡するWebGLアプリケーションとして開発されました。しかし、衛星軌道の背景として描かれる太陽系天体への関心の高まりを受け、最新アップデートにおいて「3D太陽系・惑星探査モード」を大幅に拡張しました。
Webブラウザ上で動作する軽量性を維持しながら、NASA探査機の実写データを忠実に再現し、土星や天王星の複雑な環構造を天文学的パラメータに基づいて3Dモデリングした舞台裏を詳しく解説します。
1. NASA探査機の実写テクスチャマッピングと極域歪み補正
天体のビジュアルクオリティを左右する最大の要素は、天体表面のテクスチャ解像度と物理ベースレンダリング(PBR)の適用です。SatViewer3Dでは、NASA JPL(ジェット推進研究所)やUSGS Astrogeology Science Centerが一般公開しているボイジャー1/2号、カッシーニ、ニュー・ホライズンズ、LRO(月周回衛星)などの高解像度観測モザイクデータを採用しています。
2:1比率の正距円筒図法(Equirectangular projection)テクスチャを球体メッシュ(SphereGeometry)に貼り付ける際、Three.js標準のUVマッピングでは北極・南極付近でテクスチャのポリゴン圧縮による極端なピクセル歪み(ピンチング現象)が発生します。これを緩和するため、経度方向のセグメント分割数(widthSegments)を64、緯度方向(heightSegments)を64以上に最適化し、さらにMeshStandardMaterialを用いて粗さ(Roughness)マップを個別に設定することで、大気のない月や水星のザラついたレゴリス表面と、木星の滑らかな大気流動を質感として描き分けました。
2. 土星の多重環と「カッシーニ間隙」の幾何学モデリング
太陽系で最も壮麗な環を持つ土星のモデリングには、特に精密な天文学的パラメータを投入しました。
土星の環は厚みがわずか数十メートルから数百メートルしかありませんが、外径は土星本体の直径(約12万km)の2倍以上におよぶ約28万kmにも広がっています。SatViewer3Dでは、環を立体的な厚みを持つトーラスではなく、平面のRingGeometry(2Dリング)として定義し、両面描画(THREE.DoubleSide)を適用しています。
- 環の幾何学的スケール比: 土星半径を $R_S$ としたとき、主環(C環、B環、A環)の内径 $1.21 R_S$ から外径 $2.27 R_S$ までを正確な比率でスケーリング。
- カッシーニの間隙(Cassini Division): A環とB環の間に存在する幅約4,800kmの隙間を、8ビットのアルファ透過チャンネル(Alpha Map)を用いて完全に透過描画。土星の衛星ミマスとの軌道共鳴によって粒子が掃き出された力学的背景を視覚的に表現しました。
- 環の透過率グラデーション: 密度の濃いB環は光を遮蔽し、薄いC環(クレープ環)やA環は背後の星空が透けて見えるよう、アルファブレンドのブレンド関数(
THREE.NormalBlending)をチューニングしています。 - 赤道傾斜角26.73度の反映: 土星の公転軌道面(黄道面)に対する環の傾斜角(約26.73度)をクォータニオン回転によって正確に設定。視点角度によって環が真横から見て線状に見える「環の消失現象」もシミュレート可能です。
3. 天王星の「横倒し」自転軸(97.77度)と直交垂直リング
太陽系の第7惑星である天王星は、公転軌道面に対して自転軸が約97.77度も横倒しに倒れているという、極めて特異な天体です。過去に地球サイズの巨大原始惑星と激しく衝突した(ジャイアント・インパクト説)ことが原因と推定されています。
このため、天王星のリング(微粒子で構成される13本の細い環)は、土星のような水平方向ではなく、公転軌道に対してほぼ垂直に立った「縦向きの輪」として存在しています。3Dグラフィックス上でこれを素朴にオイラー角(X-Y-Z回転)で合成しようとすると、特異点においてジンバルロック(Gimbal Lock)が発生し、公転運動に伴う姿勢制御が破綻します。
// 天王星の自転軸傾斜角(97.77度)をクォータニオンで設定
const uranusTilt = THREE.MathUtils.degToRad(97.77);
const axisRotation = new THREE.Quaternion();
axisRotation.setFromAxisAngle(new THREE.Vector3(0, 0, 1), uranusTilt);
// リングメッシュを惑星のローカル座標系に子オブジェクトとしてバインド
const ringGeometry = new THREE.RingGeometry(innerRadius, outerRadius, 64);
const ringMesh = new THREE.Mesh(ringGeometry, ringMaterial);
ringMesh.rotation.x = Math.PI / 2; // 赤道面に水平配置
uranusGroup.quaternion.copy(axisRotation);
uranusGroup.add(ringMesh);
SatViewer3Dでは、惑星本体とリングを同一の親子階層(Group)に配置し、親グループに対してクォータニオンによる姿勢傾斜を一括適用することで、カメラがいかなる角度から接近しても幾何学的な破綻を起こさない堅牢な描画パイプラインを確立しました。
4. 表面温度HUDと太陽黒点の熱力学メカニズム
宇宙ファンや教育現場での利用を想定し、天体をクリックした際に表示されるHUD(ヘッドアップディスプレイ)には、単なる名称だけでなく天体物理学的なメトリクスをリアルタイム表示する機能を実装しました。
特に太陽を選択した際には、光球面の平均温度(約5,800K / 5,500℃)とともに、暗く観察される「太陽黒点(Sunspot)」の物理メカニズムを解説するカードが展開されます:
黒点が黒く見える理由: 太陽黒点の温度は約4,000℃と非常に高温ですが、周囲の光球(約6,000℃)に比べて2,000℃ほど低いため、ステファン・ボルツマンの法則(放射エネルギーは絶対温度の4乗に比例:$E = \sigma T^4$)により放射光量が激減し、相対的に黒い斑点として観測されます。この温度低下は、太陽内部の強力な局所磁場がプラズマの熱対流を強力に抑制し、深部からの熱エネルギー輸送をブロックすることによって生じています。
5. まとめと天文学・宇宙科学教育への貢献
WebGLとThree.jsの進化により、かつてはハイエンドな天文台シミュレータでしか体験できなかった高精度な宇宙空間の探査が、スマートフォンのブラウザ1つで瞬時に実行できるようになりました。
SatViewer3Dは、地球上の人工衛星追跡にとどまらず、深宇宙の惑星科学を身近に体験できるプラットフォームとして今後も進化を続けます。ぜひ地球儀の外側に広がる広大な太陽系ワールドをお楽しみください。