はじめに
最近360度動画からのローカルでの3DGS生成に取り組んでいます。
スマホ動画からの生成に比べて、撮影も生成も大変な割に成功確率が低いのが悩みです。
本記事では、試行錯誤した生成方法を記録します。
2026/10/14追記:SpirulaStudioを使えばほぼすべての工程が簡単にできたのでこちらがおすすめです。
360Gaussian/360 Video Still Cropper+COLMAP
まず試したのは、360° GaussianでのSphereSfM + LichtFeldStudioです。
以下の記事に書いています。
COLMAPの点群数が少ない場合は、360 Video Still Cropperで空や床を排除したcubemapにしてからCOLMAP + LichtFeld Studioで処理しています。この方法だと特徴点は増えましたが、ぼやぼやするのは変わりませんでした。
ぼやけた生成結果
アライメント自体はきれいにできるのですが、生成するとぼやぼやした結果になってしまいます。
遠景はきれいなのに近い場所が汚いという場合もあります。
点群数が少ないのが原因かと思いましたが(上の画像は160万点群)、経験上LichtFeldStudioのMRNFで生成するときは点群数が少なくてもこうはなりません。それとも360度動画からの広域だと100万~500万点ぐらいではこうなってしまうのでしょうか。
また、初期点群が少ないこともあります。こうなると500万点群を生成しようとしても100万ぐらいにしかなりません。
機材の検証
解像度が足りないのかと思い、複数のカメラで撮影してみました。
- 6Kカメラ:Insta360 ONE RS 1-Inch 360
- 8Kカメラ:Insta360 X4
しかし8Kで撮影しても、書き出し時のビットレートを上げても、あまり変わりませんでした。
レンズについた指紋のせいかと思い、拭きなおして撮影したところ、これはある程度効果がありました!
Splaticaで生成検証(オンラインツール)
撮影が悪いのか、生成方法が悪いのか切り分けるために、Insta360と提携しているSplaticaという最近リリースされたオンラインの生成ツールを使ってみました。
Insta360, Splatica Partner to Democratize 360-to-3D Gaussian Splatting
私が使った時、最初の1000人のユーザー向けに600ポイントがもらえるキャンペーン中で、何回か無料で生成できました(5分ほどの動画から2つ生成して、80ポイント残りました)。
insvファイルをそのままアップロードできます。mp4のアップロードには対応していません。
生成結果
結論から言うと、上の方法よりローカルも格段にきれいにできました。
以下から見られます。
ローカルで生成したものと比較するとこの通りです。(まあこれは人間のマスクをしていないのも大きいですが・・・)
細かいところは完璧ではないですが、ローカル生成よりはきれいです。
データ
ply形式でデータのダウンロードもできるため、点群数を確認したところ600万~700万ほどでした。
軌跡表示機能
Splaticaでは撮影で歩いた軌跡が表示される機能もありました。いいですね!生成から表示まで一環でするプラットフォームならではの表示ですね~
利用規約(2026/5/8現在)
Splaticaで生成したものを商用利用できるかはプランによるようですが、プラン側にその説明が載っていないためよくわかりません。
https://app.splatica.com/terms より引用
プラン情報:
https://app.splatica.com/account/plans より引用
撮影方法のガイド★
Splaticaには360度カメラでの3DGS用の撮影方法や推奨設定について詳しく載っていました。
Splaticaできれいに生成できたことで、撮影方法や機材に重大な問題があるわけではないと分かり安心しました。ローカル生成の手法やパラメーターに改善の余地がありそうです。
参考:他のオンラインツール
オンラインで360度動画から3DGS生成できるツールとして、他に以下を把握しています(どちらも未使用)。
- Scaniverseビジネス版(有料のみ)
- FreeGaussian
FreeGaussianは無料でやろうとすると様々な権利をツール側に渡すことになるようです。insvファイルからの生成もできるようで、やはり8Kないと十分ではないとのこと。
https://www.freegaussian.ai/upload より引用
位置情報をマッピングする機能もあります。おもしろそう
Metashapeでのローカル生成
Splaticaで撮影データ自体は問題ないことが分かったので、次はMetashapeを使ったローカル生成に挑戦しました。
こちらの記事を参考にしています。
Metashapeは360度画像のままアライメントできることが特徴です。
Metashapeのインストール
初めて使います。30日間フル機能で無料体験できます。
公式サイト:
トライアルでもインターネットを介した認証が走りますが、私の環境ではプロキシ設定が必要でした。
Check Proxy Settings画面で、Use Proxy serverにチェックを入れてプロキシを設定したら無事進みました。
日本語化はツール>Preference>Generalからできます。
アライメント
360度動画を切り出した画像をインポートします。360Gaussianで生成を試したときに切り出していたものを使用しました(5分ほどの動画で323枚)。
ツール>カメラキャリブレーション>カメラタイプを「球」に設定します。
ワークフロー>写真のアライメントを実行します。
360度画像は情報が多いので、キーポイント制限を80000、タイポイント制限を15000と上げるとよいようです。こうすると初期点群の数が増えます。
参考記事:
生成中はCOLMAPのように生成過程が表示されません。
処理の流れ:
ペアを選択
ポイントをマッチング
カメラ位置を計算
200枚ほどで5分ほどで処理が完了しました。
処理が終わったら結果が表示されます。Shiftを押しながらマウスのホイールを回すと球体の大きさが変わります。Altだと点の大きさが変わります。
このあと不要な点群をタイポイント条件選択で減らすといいようです。
ツール>タイポイント>タイポイント条件選択

そのあとカメラ最適化。1分ぐらいで終わる
いまいち点群の様子を見ていても何がよくて何が悪いのかが分からなくて、あまりちゃんとやらなかったのですが、こちらの記事を読むと大事な工程なようなので、機械的でもいいのでやったほうがよさそうです。
書き出し
最初こちらのスクリプトを使おうとしましたが、ツール>スクリプト実行でpyを選ぶとnumpyがないと言われました。
こちらのスクリプトは動きました。
transform.jsonが生成されました。
また、Export>pointcloudでply形式で点群も書き出します。
次の工程のLFSでよみこんだ時に、点群の向きがおかしい場合、CloudCompareで向きを変えます。
編集>変更を適用
軸/角度でZに1が入っているので消して0にし、Yに1をいれ、回転角180で変換。
そのあとさらに、Xに1をいれ、回転角180。これで合いました。
LichtFeldStudioで生成(360度画像のまま)
読み込み時、そのままドラッグすると存在しないsparse/0を読み込もうとします。
これだと点群が読み込まれず、謎の立方体の点群が表示されます。この初期点群のない状態でも10分ぐらいしたら、無から形が作られていきます。
でも時間もかかるので、初期点群はあったほうがよいでしょう。
Init fileで手動でplyを指定します。
これで画像と点群が読み込まれました。
画像はちゃんと360度画像として認識されています。
GUTにチェックを入れます
360度画像のまま読み込んでいるため、画像が重くて私のPCでは耐えられないと思うのでMaxWidthを2048にしたり、tileを4にして負荷を下げます。
生成を実行しましたが、しばらく放置しているとLFSごと落ちてしまい成功せず...
カメラ画像が空間に表示されない古いバージョンのLFSで生成したら上下反転したうえ、こちらでも落ちました。
Cubemap化
アライメントは360度画像で行いつつ、3DGS生成に使う画像は360度画像をcubemapに分割したものを使うと、1枚当たりの画像のサイズが小さくなるので、私のPCでも生成できそうです。
参考:
こちらのツールでMetashapeの結果をcubemap化して、さらにアライメント結果(カメラ位置)と画像の結びつきも変換します。
xmlはMetashapeのExport>Cameraから出力できます。
この出力結果をLFSに読み込みます。
今度は360度画像ではないので、GUT等は不要です。デフォルト設定で500万点群で生成しました。落ちずに前回よりもきれいにできました!
生成し始めはきれいだと思いましたが、終わってみるとシャギシャギ感が出てしまいました。
他の手法と比較するとこのような感じです。文字などは角度によってはsplaticaよりきれいになりました。
ただこの方法でも、別の屋内のちょっと広い部屋の動画では相変わらずエッジがぼけたような感じになりました。特に近づくとぼけていて、遠くから見ると比較的きれいに見えます。
カメラ最適化というのをするべきなのかもしれません。もしくはタイポイントのクリーニングが足らないのか
フロー図(一部)
いろいろ工程があることが分かったので、記事を見ながら勉強も兼ねてdraw.ioで図を作成してみました。
黄色がまだあまりちゃんとできていない部分です。
どのツールがどの処理をカバーしているかまで書こうかと思いましたが、日々変わっていきそうなので省略します。
大事なのは何の処理をすべきかですよね・・・
そしてこうやってみるとオンライン生成の手軽さに感動しますね。
参考
まとめ
360度動画からの3DGS生成はあまり成功とは言い難いですが、時間切れになったので記事にまとめました。
機材も必要ですし、生成も大変ですが、屋外の360度埋まっている広い範囲の生成できたときは、スマホ動画では難しかったことなので感動しました!
次回からは、生成物のフローター消去や、大きさの正しい3DGS生成などに取り組んでいく予定です。
おまけ(360Gaussian翻訳)
アライメントのAccuracy Settings(精度設定)を全部翻訳&AI解説追加しました。
Features(特徴)
Affine(アフィン不変)
Affine-invariant SIFT (CPU only, slower).
アフィン不変SIFT(CPUのみ、遅い)
Detects elliptical regions instead of circles.
円ではなく楕円領域を検出する。
More robust to perspective distortion.
透視歪みに対してより堅牢。
AI解説:
通常のSIFTは画像から円形の特徴領域を探すが、Affine SIFTは楕円形の領域も検出できる。360度パノラマ画像をキューブマップに展開する際の歪みや変形に対してロバスト。特に、キューブマップの端や角の領域で特徴点のマッチングが改善される。
トレードオフ:
- ✅ チェックON → マッチング精度向上(特にキューブマップの歪み領域)/ 処理速度低下
- ❌ チェックOFF → 処理速度向上 / マッチング精度やや低下
Domain(ドメインサイズプーリング)
DSP-SIFT: Domain Size Pooling (CPU only, slower).
DSP-SIFT:ドメインサイズプーリング(CPUのみ、遅い)
Averages descriptors across multiple scales.
複数のスケールにわたって記述子を平均化する。
More discriminative features, better matching.
より識別力のある特徴、より良いマッチング。
AI解説:
特徴点の「記述子」(特徴を数値で表したもの)を、複数のサイズで計算して平均化する手法。360度動画でカメラが移動しながら撮影する場合、被写体との距離が変化するためマッチング精度が向上。
トレードオフ:
- ✅ チェックON → マッチング精度向上 / 処理速度低下
- ❌ チェックOFF → 処理速度向上 / マッチング精度やや低下
BA Iterations(Bundle Adjustmentイテレーション)
Local(ローカル)
Local BA iterations (mapper only).
ローカルBAイテレーション数(マッパーのみ)
Optimizes recent cameras + nearby 3D points.
最近のカメラと近くの3Dポイントを最適化する。
Higher = more accurate, slower.
高い値 = より正確だが遅くなる。
Default 25, High: 30, Ultra: 40
デフォルト:25、高:30、ウルトラ:40
AI解説:
Bundle Adjustment(BA)は、カメラ位置と3D点の誤差を最小化する最適化処理。Local BAは、直近に追加されたカメラとその周辺の3D点だけを対象に最適化を行う。マッピング中に逐次実行されるため、処理がリアルタイムで進行する(画像が追加されるたびに部分的に最適化)。
「リアルタイム性」とは?
マッピング処理中に、新しい画像を追加するたびに即座に最適化が行われること。Local BAのイテレーション数が少ないほど、1枚の画像を処理する時間が短くなり、全体の処理がスムーズに進む。
トレードオフ:
- 25(デフォルト) → バランス型
- 30(高) → ローカル精度向上 / 処理速度やや低下
- 40(ウルトラ) → ローカル精度最大化 / 処理速度低下(特徴点が少ない環境(白い壁など)で推奨)
Global(グローバル)
Global BA iterations (mapper + post-process).
グローバルBAイテレーション数(マッパー + 後処理)
Optimizes ALL cameras + ALL 3D points.
すべてのカメラとすべての3Dポイントを最適化する。
Higher = better overall accuracy, slower.
高い値 = 全体的な精度が向上するが遅くなる。
Default 50, High: 75, Ultra: 100
デフォルト:50、高:75、ウルトラ:100
AI解説:
Local BAとは異なり、Global BAはすべてのカメラとすべての3D点を同時に最適化する。マッピング完了後の後処理として実行されることが多く、全体的な一貫性と精度を大幅に改善できる。100枚以上の画像を扱う場合、デフォルト値で十分な精度が得られることが多い。
トレードオフ:
- 50(デフォルト) → バランス型、100枚以上の画像で推奨
- 75(高) → 全体精度向上 / 処理時間増加
- 100(ウルトラ) → 全体精度最大化 / 処理時間大幅増加(長い動画や広い空間で推奨)
Refinements(改良パス数)
Number of global BA refinement passes.
グローバルBA改良パスの回数。
More passes = better optimization but slower.
パス数が多い = より良い最適化だが遅くなる。
Default 2 (good for 100+ images).
デフォルト:2(100枚以上の画像に適している)
Higher values (5-7) only for small datasets.
高い値(5-7)は小規模データセットのみに推奨。
AI解説:
Global BAを繰り返し実行する回数。1回のGlobal BAだけでは収束しきれない誤差を、複数回のパスで段階的に削減していく。大規模データセット(100枚以上)では2回で十分だが、小規模データセット(数十枚程度)では5〜7回実行することで精度が向上する場合がある。
トレードオフ:
- 2(デフォルト) → 100枚以上の画像で推奨、バランス型
- 5-7(高) → 小規模データセット向け、収束精度向上 / 処理時間増加(短い動画や狭い空間(画像数が少ない)で推奨)
Filtering(フィルタリング)
Reproj(再投影誤差)
Max reprojection error in pixels.
最大再投影誤差(ピクセル単位)
Distance between projected 3D point and detected 2D point.
投影された3Dポイントと検出された2Dポイントとの距離。
Lower = fewer but more accurate points.
低い値 = ポイント数は減るが、より正確。
Default 4.0, High: 3.0, Ultra: 2.0
デフォルト:4.0、高:3.0、ウルトラ:2.0
AI解説:
再投影誤差とは、3D復元された点をカメラに投影し直したときに、元の2D画像上の検出点とどれだけズレているかを示す指標。この値が小さいほど、3D復元の精度が高いことを意味する。閾値を低く設定すると、誤差の大きい不正確な点が除外されるため、各点の精度は向上するが、点群の密度は低下する。
点群密度が低下すると?
- 3D復元がスパース(疎)になり、3DGS生成時に穴が開いたり、表面が粗くなる可能性がある
- ただし、残った点の品質は高いため、ノイズやアーティファクトは減少
トレードオフ:
- 2.0(ウルトラ) → 各点の精度最大化(ノイズ最小) / 点群が疎になり3DGSに穴が開く可能性(特徴点が豊富な環境で推奨)
- 3.0(高) → バランス型(全般的に推奨)
- 4.0(デフォルト) → 点群が密になる / ノイズや不正確な点が混入(特徴点が少ない環境(壁や天井が多い)で推奨)
Tri Angle(三角測量角度)
Min triangulation angle in degrees.
最小三角測量角度(度単位)
Angle between viewing rays from two cameras.
2つのカメラからの視線の間の角度。
Higher = better depth accuracy, fewer points.
高い値 = より良い深度精度だが、ポイント数は減少する。
Default 1.5, High: 1.75, Ultra: 2.0
デフォルト:1.5、高:1.75、ウルトラ:2.0
AI解説:
三角測量では、2つのカメラから同じ点を観測し、その視線の交わりから3D位置を計算する。視線の角度が小さい(ほぼ平行)と、わずかな誤差が深度方向に大きく影響してしまう。閾値を高く設定すると、十分な角度差がある場合のみ点を生成するため、深度精度が向上するが、生成される点の数は減少する。
点群密度が低下すると?
- 点の数が減り、3DGS生成時に表面の再現が粗くなったり、細部が失われる
トレードオフ:
- 2.0(ウルトラ) → 深度精度最大化(各点の位置が正確) / 点群が疎になる(広い空間・カメラが大きく移動する場合に推奨)
- 1.75(高) → バランス型
- 1.5(デフォルト) → 点群が密になる / 一部の点の深度がやや不正確(狭い空間・カメラの移動が小さい場合に推奨)
Min Inliers(最小インライア数)
Min Inliers(最小インライア数)
Min 2D-3D matches to register an image.
画像を登録するために必要な2D-3Dマッチングの最小数。
Higher = only accepts images with strong matches.
高い値 = 強いマッチングを持つ画像のみを受け入れる。
Lower = registers more images, less reliable poses.
低い値 = より多くの画像を登録するが、ポーズの信頼性は低下する。
Default 30, High: 40, Ultra: 50
デフォルト:30、高:40、ウルトラ:50
AI解説:
インライアとは、既存の3Dモデルと整合性のある2D-3D対応点のこと。新しい画像を3D復元に追加する際、最低限必要なインライア数を設定する。
登録画像数の影響:
- 登録画像数が増える(低い値) → 多くの画像が3D復元に使われるが、一部の画像のカメラ位置が不正確になり、全体の精度が低下する可能性
- 登録画像数が減る(高い値) → 信頼性の高い画像のみが使われるためカメラ位置が正確だが、3Dモデルのカバレッジが不足し、欠損や穴が生じる可能性
トレードオフ:
- 50(ウルトラ) → カメラポーズの精度最大化 / 登録画像数減少でモデルに欠損が生じる可能性(特徴点が豊富な環境で推奨)
- 40(高) → バランス型(全般的に推奨)
- 30(デフォルト) → 登録画像数最大化(カバレッジ確保) / 一部カメラポーズの精度低下(特徴点が少ない環境や広い空間でカバレッジ重視の場合に推奨)
Post-process(後処理)
Run bundle adjuster(バンドル調整実行)
Run extra global BA pass after mapping.
マッピング後に追加のグローバルBAパスを実行する。
Uses 'Global' iterations setting above.
上記の「Global」イテレーション設定を使用する。
Refines all camera poses for better accuracy.
すべてのカメラポーズを改良し、精度を向上させる。
AI解説:
マッピング処理が完了した後に、もう一度全体のBundle Adjustmentを実行するオプション。マッピング中は逐次的にカメラが追加されるため、初期に登録されたカメラのポーズが後から追加された情報を反映できていない場合がある。後処理として全体を最適化し直すことで、全カメラの位置・姿勢の一貫性が向上し、全体的な精度が改善される。
トレードオフ:
- ✅ チェックON → 全体的な一貫性・精度向上 / 処理時間増加
- ❌ チェックOFF → 処理時間短縮 / 全体的な一貫性やや低下
Cubemap quality(キューブマップ品質)
Realign cubemaps(キューブマップ再配置)
Refine cubemap poses with bundle adjustment.
Bundle Adjustmentでキューブマップのポーズを改良する。
Optimizes camera poses based on actual cubemap image features.
実際のキューブマップ画像の特徴に基づいてカメラポーズを最適化する。
AI解説:
キューブマップ(360度パノラマ画像)のカメラポーズを、画像内の実際の特徴点に基づいて最適化する処理。通常のカメラと同様に、Bundle Adjustmentを適用することで、キューブマップの位置・姿勢の精度を向上させることができる。特に、複数のキューブマップ間の相対位置関係が重要な場合に有効。
トレードオフ:
- ✅ チェックON → キューブマップの位置精度向上 / 処理時間増加
- ❌ チェックOFF → 処理時間短縮 / 位置精度やや低下
Refine focal(焦点距離改良)
Allow BA to refine cubemap focal length (experimental).
Bundle Adjustmentがキューブマップの焦点距離を調整できるようにする(実験的機能)
May improve close-object alignment.
近接オブジェクトの位置合わせが改善される可能性がある。
Could destabilize if intrinsics drift too much.
内部パラメータが大きくずれると不安定になる可能性がある。
AI解説:
通常、カメラの内部パラメータ(焦点距離など)は既知として扱われるが、このオプションを有効にすると、Bundle Adjustmentが焦点距離も推定・調整するようになる。近くの物体との位置合わせが改善される可能性があるが、実験的機能のため不安定になるリスクもある。特に、入力されたカメラパラメータが不正確な場合や、推定が大きくずれると、全体の復元が崩壊する可能性がある。
トレードオフ:
- ✅ チェックON → 近接オブジェクトの精度向上可能性 / 安定性リスク増加(実験的)(近くの物体の位置合わせに問題がある場合のみ試験的に使用)
- ❌ チェックOFF → 安定性確保 / 焦点距離固定(通常はこちらを推奨)
🎯 処理速度を気にせず、とにかくきれいに生成したい人向けの最高品質設定
処理時間は長くなりますが、最高品質の3DGSを生成するための推奨設定です。
Features(特徴)
- Affine: ✅ ON
- Domain: ✅ ON
BA Iterations(Bundle Adjustmentイテレーション)
- Local: 40
- Global: 100
-
Refinements:
- 画像数100枚以上: 2
- 画像数数十枚: 5-7
Filtering(フィルタリング)
-
Reproj(再投影誤差):
- 特徴点が豊富な環境: 2.0-3.0
- 特徴点が少ない環境: 3.0
-
Tri Angle(三角測量角度):
- 広い空間・カメラが大きく移動: 2.0
- 狭い空間・カメラの移動が小さい: 1.5
Min Inliers(最小インライア数)
- 特徴点が豊富な環境: 50
- 特徴点が少ない環境: 30
- 広い空間でカバレッジ重視: 30
Post-process(後処理)
- Run bundle adjuster: ✅ ON(必須)
Cubemap quality(キューブマップ品質)
- Realign cubemaps: ✅ ON
- Refine focal: ❌ OFF(安定性のため通常はOFF推奨)
広めで特徴少ない空間用の設定(処理時間は気にしない)を考えてみました。時計マーク⏰はトレードオフが処理時間が延びるもの。時間を気にしないのであればこの設定でいいはず。密度はバランス型に。
そもそも狭くて特徴が多いのであればスマホなどで撮影したほうがきれいにできる気がする




















































