地表の2次元地図や単なる球体サーフェスを見つめるだけでは、「なぜ深さ数百キロメートルの地中で地震が起きるのか」「地球の内部はどのような層構造になっているのか」という地球物理学の本質を直感的に捉えることは不可能です。
この教育的・科学的課題を打破するため、QuakeViewer3Dでは、地球儀を任意の子午線や断面でスパッと切り開き、地下深さ6,371kmの地球中心(内核)に至るまでの層構造を完全に中身の詰まった「ソリッド体」として可視化する「3D地球断面・マントルスライスモード」を開発しました。本記事では、WebGLにおけるクリッピングプレーン技術、中空化(Hollow)を防ぐ多層断面キャップ生成、そして地形遮蔽(Occlusion)のグラフィックス設計を解説します。
1. WebGLハードウェア・クリッピングプレーンによる任意断面カット
3Dメッシュを物理的にCPU上で切断(CSG: Constructive Solid Geometry演算)すると、ポリゴンの再分割や頂点再計算に膨大な負荷がかかり、リアルタイムな60fps操作が不可能になります。
そこでQuakeViewer3Dでは、WebGLのGPUハードウェア機能であるクリッピングプレーン(Clipping Planes)を採用しました。切断平面を法線ベクトル $\vec{n} = (n_x, n_y, n_z)$ と原点からの距離定数 $w$ で表現する平面方程式 $\vec{n} \cdot \vec{x} + w = 0$ として定義し、Three.jsのマテリアルへ注入します:
// クリッピング平面の有効化と平面オブジェクトの定義
renderer.localClippingEnabled = true;
// 震源地の経度(longitude)に合わせて回転する鉛直切断プレーン
const clipPlane = new THREE.Plane(new THREE.Vector3(0, 1, 0), 0);
const earthMaterial = new THREE.MeshStandardMaterial({
map: earthTexture,
clippingPlanes: [clipPlane],
clipShadows: true
});
GPUのフラグメントシェーダー段階で、切断平面の外側にあるピクセルは discard(破棄)され、CPUに一切の負荷をかけることなく一瞬で地球の半分を削ぎ落とすことができます。
2. 中空化(Hollow Artifact)を防ぐ5層ソリッド断面キャップの動的生成
しかし、単に球体メッシュをクリップしただけでは、地球は「薄いゴム風船」のように中身が空っぽの中空体として見えてしまい、リアルな地球科学の断面図にはなりません。
切断面に穴が空いて見えるのを防ぐため、QuakeViewer3Dでは切断平面と完全に一致する向き・位置に、地球内部構造モデル(PREM: Preliminary Reference Earth Model)に厳密に基づいた5層の同心円ディスクメッシュ(Concentric Disc Caps)を自動生成して配置しています:
- 地殻(Crust): 深さ 0 〜 35 km(外径 6,371 km 〜 内径 6,336 km、茶褐色)
- 上部マントル(Upper Mantle): 深さ 35 〜 410 km(外径 6,336 km 〜 内径 5,961 km、濃赤・かんらん岩質)
- 遷移層・下部マントル(Lower Mantle): 深さ 410 〜 2,890 km(外径 5,961 km 〜 内径 3,481 km、赤褐色・高密度ケイ酸塩鉱物)
- 外核(Outer Core): 深さ 2,890 〜 5,150 km(外径 3,481 km 〜 内径 1,221 km、溶融した液体鉄・ニッケル、発光イエロー)
- 内核(Inner Core): 深さ 5,150 〜 6,371 km(半径 1,221 km の中心円盤、超高圧固体鉄、白金色)
切断プレーンが回転・移動するたびに、これらのディスクメッシュの姿勢クォータニオンを切断平面の法線ベクトル $\vec{n}$ に自動同期させることで、どの角度から地球をカットしても完全に中身の詰まったソリッド断面が破綻なく描画されます。
3. 大陸側の完全地形深度遮蔽(Occlusion)とZバッファの最適化
ソリッド断面と半球を描画する際、次に立ちはだかる難所が「反対側の大陸の裏面が透けて見えたり、手前のソリッド断面と前後関係が反転する」という深度ソートの破綻です。
QuakeViewer3Dでは、徹底した多層レンダリングパス制御を構築しました:
- 背面カリング(Back-face Culling)の厳格化: 半球メッシュの裏面ポリゴンが描画されないよう、
THREE.FrontSideを指定。 - レンダリング順序(Render Order)の固定: ソリッド断面キャップ(不透明オブジェクト)を最優先でデプスバッファ(Z-Buffer)に書き込ませることで、切断面の奥にある地球の反対側メッシュをハードウェアレベルで完全にOcclusion(遮蔽)します。
- 対数デプスバッファ(Logarithmic Depth Buffer): 地球半径(約6,371km)から地殻の厚み(わずか35km)という極端なスケール差を同時に描画する際、通常の16bit/24bitデプスバッファではZ-fighting(ポリゴンのチラつき)が発生します。これを防ぐため、Three.jsのレンダラー初期化時に
logarithmicDepthBuffer: trueを有効化し、極薄の地殻レイヤーも美しく分離描画させています。
4. スラブ(沈み込む海洋プレート)と震源球体の立体プロファイル
このソリッド断面の真価は、過去に発生した震源球体(InstancedMesh)や、沈み込む太平洋プレートの形状モデルと同時に重ね合わせた瞬間に発揮されます。
切断面に沿って眺めると、日本海溝から深さ410km〜660kmのマントル遷移層へと冷たいスラブが突き刺さり、そのスラブの上面に沿って深発地震が整然と並んでいる様子や、遷移層の境界面でスラブが水平に折れ曲がる「スタグナント・スラブ(滞留プレート)」の幾何学形態が、あたかもCTスキャンで地球を輪切りにしたかのように手にとるように理解できます。
5. まとめとデジタルアースの科学的到達点
最新のWebGL技術と地球物理学のPREMモデルを融合させたことで、QuakeViewer3Dは教科書の静止画イラストを遥かに超越した「生きた地球の動的解剖図」を実現しました。
学校教育や大学の地学・地球惑星科学の講義、そして防災リテラシーの普及において、地球深部への直感的な理解を促す次世代のデジタル教材として広く活用されることを期待しています。