3DGS実用化への道⑥ Google Earth Studioから3DGSへ|Blenderアドオン『SkySplat』で"江の島"の空撮を3Dガウス化する方法

こんにちは、STUDIO55技術統括の入江です。
「3Dを作る」という行為は、いつの間にか “モデリングする” から “空間をそのまま取り込む” 方向へと変わり始めています。
1年ほど前、
「衛星データとかを 3DGS にできたりしないんですかね?」
といった意見を耳にしたことがありました。

理論的には不可能ではないように思えましたが、当時はまだ、それを現実的な選択肢として語れる段階ではありませんでした。
ガウシアン・スプラッティング(3DGS)は非常に優れたスキャン生成技術である一方、空撮利用を前提とした SfM/カメラアライメントが本当に成立するのか という点に、率直な違和感があったからです。
しかし今、そうした発想が、いよいよ技術として実現可能なものになりつつあります。
本記事では、空撮データからのガウス化に特化した設計思想を持つ 2つの先進的技術を、今週と来週の2回にわたって取り上げます。
今回は、Blender アドオン『SkySplat(スカイスプラット)』 について、実際のワークフローを交えながら詳しく解説していきます。
❓「地上スキャン」と「空撮スキャン」はなぜ別物なのか
まず、通常の「地上スキャン」と「空撮スキャン」が、なぜ別物として扱われるのかについて整理しておきます。
地上スキャン と 空撮スキャン は、スケール・視点・光学条件・データ処理方法が異なるため、別物として扱うのが自然です。
以下に、その違いとなる 4つのポイント を箇条書きにします。
1️⃣ 視点・スケールの違い

地上スキャン
人間の目線〜低高度で撮影
小〜中規模の範囲(建物1棟、室内など)をカバー
細部まで高精細なオブジェクト表現が可能
空撮スキャン
上空数十〜数百メートルの高さから撮影
大規模の範囲(都市、地形、街区など)をカバー
広域俯瞰中心で、細かいオブジェクトはぼやけることがある
ポイント: 視点やスケールの違いにより、必要な解像度やカメラ設定、処理方法が大きく変わります。
2️⃣ カメラ配置と重複の取り扱い

地上スキャン
物体を中心に、周回または複数角度から撮影
被写体との距離が近く、カメラ間の重複が少ない場合もある
空撮スキャン
高度が高く、俯瞰から広域をカバー
道路・建物・地形などを効率的にスキャンするため、画像間の重複(オーバーラップ)が多くなる
広域のカメラ配置を想定した補正が必要
3️⃣ 光学的・幾何学的課題

地上スキャン
屋内外での陰影や反射の影響を受けやすい
三角測量(SfM)やレーザースキャンでも比較的精度が取りやすい
空撮スキャン
太陽光・影・大気条件の影響が大きい
高低差のある地形では、俯瞰の画像だけだと奥行き情報が不足することがある
4️⃣ データ処理・生成の違い

地上スキャン → 3DGS
オブジェクト単位での高精細生成に向く
空撮スキャン → SkySplat / 3DGS
広域・俯瞰シーンの生成に最適化されている
データ量が多く、大規模シーンを効率的に扱うための圧縮・レンダリングが必要

「SkySplat」が他の 3DGS 系ツールと明確に異なるのは、こうした違いを踏まえ、最初から 「空から撮る」ことを前提に設計されている点 にあります。
SkySplat の設計に見る特徴
・ドローン映像・写真を前提としたカメラ配置
高高度・斜め視点・広域カバー
地形・都市・ランドスケープ向き
・大規模シーンに強い設計
建物群、街区、地形など
局所スキャンではなく「空間全体」を一気に捉える用途
・SfM/アライメントの思想が空撮向け
上空からの視点変化
高低差のある地形データを想定
具体的にどのようなガウス処理が行われるのかは、実際のチュートリアルを通しながらご紹介します。
まずは、「地上スキャン」と「空撮スキャン」では処理の仕組みが異なる という点だけを念頭に置いておいてください。
🐱Github『SkySplat_blender』
Blender 用アドオン 『SkySplat_blender』 の初期リリース(v0.1.0)は、2025年5月28日です。
その後、v0.2.0、v0.3.0、v0.3.1、v0.4.0、そして 2025年11月29日公開の最新リリース v0.4.1 まで、昨年中に計6回のアップデートが行われています。

SkySplat の公式サイト(ランディングページ)
GitHub ユーザー名「kyjohnso」こと、Kyle Matthew Johnson 氏が提供しているもので、100以上スターが付いている人気リポジトリです。

GitHub ページ はこちら。

ここでは、リポジトリの構成上の前提条件として Zola 0.17.0 以上 が必要とされています。
この環境が整っていれば、https://skysplat.org のウェブサイトをローカルで開発・プレビューすることができます。
具体的には、Markdown ファイルなどのコンテンツを Zola が自動的に HTML ページに変換する仕組みです。
SkySplat の公式サイトを編集したり、ドキュメントに貢献したりする場合以外は、わざわざローカル環境を構築する必要はありませんので、ここでは Blender で「SkySplat」を使用する方法について解説していきます。
🔩Blender アドオン設定
GitHub のリポジトリページにある最新リリース 「v0.4.1」 から、使用環境に合った Zip ファイルを選んでダウンロードします。
※ダウンロードページへのリンクは、以下に貼っておきます。

ダウンロードができたら、Blender にそのまま Zip インストール。
すると、このようなツールタブが追加されます。

🌏Google Earth Studio で空撮をレンダリング
ドローン映像など、手元に空撮素材をお持ちの場合はそちらを使用すると良いですが、ここではお試し用として Google Earth Studio を使い、仮の空撮素材を用意します。

クィックスタートの「軌道」を使用します。

「江の島」を場所に指定。

江の島のシーキャンドルを中心にぐるりと旋回するカメラアニメーションにします。

mp4 でレンダリング。

~『SkySplat』チュートリアル~
では、Blender で作業していきます。
Blender の「SkySplat」パネルの上から順に構成をおこなっていく形です。

① SkySplat Video Loader
② SkySplat - Structure from Motion (COLMAP)
③ SkySplat - Gaussian Splatting (Brush)
① SkySplat Video Loader
「Video Instances」の「+」ボタンをクリックして、新規「Video_1」を作ります。

「Video & Metadata Files」の「Video File」にあるフォルダアイコンから、動画素材を読み込みます。

👉 日本語が含まれないフォルダ直下に配置することをおすすめします。
ビデオが読み込まれると、「Frame Extraction(フレーム抽出)」の内容が表示されます。

今回 GES でレンダリングしたビデオは 1501 フレーム あります。
これを Frame Step 10 で Output Folder に .png として書き出す設定になっています。
(20 ステップ程度でも問題ありません)
「Extract Frames」ボタンをクリックすると、書き出しが開始されます。
書き出された連番画像は、元のビデオがあるフォルダ内に自動生成されたサブフォルダに格納されます。

② SkySplat - Structure from Motion (COLMAP)
基となるビデオの読み込み作業が終わったら、次は COLMAP の設定に進みます。
COLMAP は、写真や動画から 3D のカメラ位置や特徴点を自動で再構成してくれるツールです。
📥COLMAP ダウンロード
COLMAP は、以下のサイトからダウンロードします。

ページをスクロールして、こちらのデータを選んでください。

「COLMAP Setting」にある「COLMAP Executable(COLMAP 実行可能ファイル)」のフォルダアイコンをクリック。

COLMAP\bin\ フォルダ内の「colmap.exe」を選択して Accept します。

これで、COLMAPの実行可能ファイルが選択されました。
下の「Run COLMAP」ボタンをクリックして、このプロジェクト用に実行します。

👉 COLMAP の実行には少し時間がかかるので、しばらくの間は休憩タイムです(笑)。
👉 Toggle System Console を起動しておくと、万が一エラーが出た場合にログを確認できます。
Window → Toggle System Console
完了の目安はおおよそ 20 分ですが、マシンスペックによって前後します。

COLMAP の実行が終わると、output フォルダ が生成され、その中に各種データが格納されています。

「Load COLMAP Model」 をクリックします。

これで、COLMAP によってアライメントされた 3DGS モデルが読み込まれます。

回転ツールを使って、モデルをワールド座標に合わせます。


「Export Transformed Model」をクリックします。

これは、COLMAP でアライメントされた sparse 点群(特徴点だけの 3DGS 元データ)を ワールド座標などの座標系に合わせて変換(トランスフォーム) するためのエクスポートです。
_colmap_output\transformed\sparse\0 に、座標軸を合わせた sparse データが作成されます。
※この操作によって、次に Brush で Gaussian を配置する段階で、正しい座標・向きの基礎データが準備されます。

次に、「Create Camera Animation」をクリック。

完了した作業内容が→青の状態の箇所です
これで、GES で設定したカメラアニメーションが SfM によって再現されます。

COLMAP の設定項目の最後、「Prepare Brush Dataset」 ボタンをクリックします。

COLMAP データフォルダ内に 「brush_dataset」 フォルダが作成されます。

フォルダの中を開くと、「images」 と 「sparse」 の 2 つのフォルダが入っているのが確認できます。

これは、Brush用に整備された sparse データです。
💡 ポイント
「Export Transformed Model」の sparse → 準備段階
「Prepare Brush Dataset」の sparse → Brush 用の利用段階
同じ「sparse」という名前でも役割が違う ので、注意が必要です。
COLMAP Output
└─ transformed
└─ sparse\0 ← 座標変換済み、Brush未使用
Brush Dataset
└─ sparse ← Brush用に整備済み、Gaussian配置可能
💡補足.「Sparse」について
「sparse(まばら)」は、空撮映像から SfM によって推定された疎な3D特徴点と、各フレームのカメラ位置・姿勢をまとめた再構成データの事です。
これはガウスを配置するための「空間の骨格」として使われます。
つまり、SfM(Structure from Motion)によって再構成された「疎な3D特徴点+カメラ姿勢」の集合データ(空間を理解するための最小構成データ) となるものです。

通常は dense reconstruction(密な3D再構成) を経て depth や mesh、NeRF、3DGS が生成されます。
SkySplat ではこのステップを省き、疎な構造(sparse)を足場に brush で直接ガウスを配置します。
この「dense を作らず、疎な構造+人の判断でガウス化する」という設計が、SkySplat の空撮向け思想の特徴 となっています。
③ SkySplat - Gaussian Splatting (Brush)
最終フェーズは、「Brush」によるガウススプラッティングの構築です。
ここにもっとも SkySplat の空撮専用ガウス生成の特徴が見られます。
「Gaussian Splatting (Brush) 」の 項目を展開すると、これまで何も表示されなかった部分に、先ほど「Prepare Brush Dataset」で準備されたデータの各設定が表示されています。
内容を確認したら、下部の 「Run Brush Training」 ボタンをクリックします。

すると、「Brush」画面が別起動します。

🖌 Brush – 空撮専用 3DGS 生成の特徴
SkySplat における「brush」は、空撮スキャン分野に既存する SfM や点群生成の考え方を土台にしながら、3D Gaussian Splatting を空撮用途で扱うために、開発者が独自に設計した生成インターフェースです。
つまり、空間のどこに、どのような密度でガウスを配置するかを指定するための操作で、「brush」という名称 はその操作感から来ています。一点ずつ厳密に自動生成するのではなく、一定の領域・条件に対してまとめてガウスを生成・配置する感覚が、まさに「絵を塗るブラシ」に似ているためです。
空撮スケールでは、対象空間が広大で視点差が大きく、特徴点も疎になるため、従来の自動最適化だけでは正確な 3D 構造を作るのが難しい状況が発生しやすくなります。

SkySplat では、この問題を回避するために brush による手動生成 を採用。疎な特徴点を足場にしながら、安定してガウスを配置できる設計になっています。
💻 Brush 画面構成について
COLMAP によって SfM(Structure from Motion)で再構成された疎な特徴点群とカメラ位置を足場に、Brush が 3D Gaussian を配置していきます。
配置の進捗やガウスの密度などは Stats(ステータス) で可視化されるため、現在の状況を直感的に確認することができます。

✅ Splats: 133,674個の Gaussian Splatが生成中
✅ Train step: 165
✅ Training time: 15秒経過
完了の目安は、Train step の最大値(通常は 30,000ステップ)に到達するまでです。
以下が、完了した Stats 画面です。

✅ Train step: 30000 完了!
✅Splats: 1,059,384個
✅Training time: 29分22秒
💡補足.「Train step」について
Train step(トレーニングステップ)は、Gaussian Splatting の最適化処理の回数を表します。
1ステップごとに、以下の処理が行われています。
カメラ視点からのレンダリング
実際の画像との比較
誤差の計算
Gaussian のパラメータ(位置・色・サイズ・回転など)の微調整
100万個以上の Gaussian を最適化するには、少しずつパラメータを調整して徐々に画像に近づける必要があります。
進行のイメージは以下の通りです。
Step 1,000 → まだぼやけている
Step 5,000 → 形が見えてきた
Step 10,000 → かなり鮮明
Step 20,000 → ほぼ完成
Step 30,000 → 最終調整完了 ✅
🖱 Brush でのガウス生成操作
上下に分かれた画面表示では、
下の画面が Dataset(データセット)、つまりトレーニングに使用された元の写真やフレームです。
上の画面は 3DGS の表示で、Gaussian Splat の生成状況が確認できます。
上(3DGS)と下(Dataset)を見比べることで、トレーニングの品質や元画像との再現度を直感的にチェックできます。

下(Dataset)
また、カメラアニメーションでコマ送りにして確認したり、画面を自由に操作して生成状態を360°確認することも可能です。


元画像と連動して 3DGS を確認できる仕様は、非常に便利で工夫の光るポイントです。
画面は、以下の操作で自由にカメラを動かすことができます。

・左クリック + ドラッグ : オービット(視点を回して周囲を確認)
・右クリック + ドラッグ : 回転
・中ボタンクリック + ドラッグ : パン(平行移動)
・中ボタンスクロール : ズームイン/ズームアウト
・W/A/S/D : フライモードで前後左右に移動
・Q / E : 上下移動
・Z / C : 回転、X : 回転リセット
・Shift : 移動速度を高速化
生成が完了したら、3DGS 画面の 「Export」 ボタンからデータを取り出すことができます。
出力されるデータ形式は .ply です。

🎨SuperSplat で編集
エクスポートした .plyファイルを Super Splatで編集します。

不要な範囲を選択して 削除 していきます。

この状態まで編集できたら、再度 .ply ファイル としてエクスポートします。

✨Blenderで3DGSを利用した表現
編集した .ply を Blenderに読み込んで表現していきます。

簡単に水面を設定して、レンダリングします。


Cyclesの レンダリング ビューポートです。

このように、Google Earth Studio(GES)の映像をもとに、空撮映像からモデルアセットを抽出し、それらを Blender の CGワークフローで扱えることが確認できました。
⚠️ 利用に関する注意点
Google Earth / Google Earth Studio の映像や画像は、Google の利用規約に基づく制限 があります。
基本的に、個人利用や教育目的での使用は認められていますが、商用利用や再配布には制限がある 点には注意が必要です。
実務で 3DGS を活用する場合は、
自作の空撮映像 や ライセンスフリー素材 など、権利をクリアした素材に置き換えて運用すること が、安全かつ現実的な選択となります。
🚀ゼロから作らない3D制作──SkySplatが実現する新しいワークフロー
空撮映像から直接 3DGS を生成できる技術が実用化されることで、建築や都市計画、映像制作など、さまざまな分野で新しい活用アイデアが次々と生まれる可能性があります。
こうした技術の進化により、もはや 3D モデルを「ゼロから作る」時代は終わりつつあります。
空間をそのまま取り込み、短時間で高精度な 3D データを生成する──SkySplat が示すのは、まさにこの新しい制作フローの可能性です。
今後は、このようなワークフローを活かした具体的なプロジェクトや実務活用がますます広がっていくでしょう。
