LichtFeld Studioで360度画像のまま3DGS生成

LichtFeld Studioなら360度カメラで撮影した全天球画像のまま3DGS (3D Gaussian Splatting ガウシアンスプラッティング) が出来てしまいます!

透視投影分割(キューブマップ化や8方向等に切り出し)処理する必要なしです。
以下のようなシンプルなフローで3DGS生成出来てしまいました。

  1. Metashapeで360度画像 (全天球画像 Equirectangular) のまま写真位置推定
  2. アライメント結果をtransforms.jsonへ変換
  3. transforms.jsonと全天球画像一式をLichtFeld Studioで読み込み3DGS処理

以下に具体的な手順をまとめました。

Metashape編

Metashapeへ360°カメラの動画もしくは事前に連番画像化した360°画像を読み込む。

カメラキャリブレーションを開く。

読み込んだ360度画像を「スフェリカル/球」に設定する。

「写真のアライメント」を選択。

アライメントを実行する。

アライメントが完了したらずれがない事を確認する。

transforms.json作成編

transforms.jsonの作成方法はいくつかのアプローチがあります。

A) MetashapeからCOLMAPへ書き出し colmap2nerf.py でtransforms.jsonへ変換
B) Metashapeからxmlを書き出し agi2nerf でtransforms.jsonへ変換
C) Metashapeからxmlを書き出しnerfstudioの ns-process-data でtransforms.jsonへ変換
D) Metashapeから直接transforms.jsonへ書き出すスクリプトを作成する (スクリプト実行にはMetashape Proが必要)

今回は私はDの手法を取ったので、A~Cの手法については未確認です。
全天球画像に対応したtransforms.jsonを作成するには上記ツールを変換してそのままではなくcamera_modelをEQUIRECTANGULARに設定しておく等の調整も必要になります。

"camera_model": "EQUIRECTANGULAR",

transforms.jsonのフォーマット詳細はこちら

Dのフローについては自作したスクリプトを公開しました!
使い方を下記で紹介します。

追記) 2026/1/12
grade eternaさんも同様のスクリプトを公開されました!
https://github.com/gradeeterna/metashape_360_lfs
grade eternaさんのは点群も一緒に書き出せるし座標系も一致してるのでより使いやすいものになってます。Metashape Pro版も不要!

もはやこちら使えばいいじゃないかという気持ちですが、一応せっかく作ったので私がつくったスクリプトについては↓以下の通りです。

『Metashape Spherical to Transforms.json Converter』

https://github.com/lileaLab/MetashapeSphericalToTransformsJson
※Claude Codeを用いて作成したものです
※Osmo360の動画から書き出した画像で動作確認してます

詳しい使い方はGitHubのREADMEに書きましたが、Metashapeでこのスクリプトを実行するのみです。
(Metashape上でスクリプトを実行するにはPro版が必要です)

上記GitHubから「metashape_spherical_to_transforms_json.py」をDL。

メニュー > ツール > スクリプト実行 を選択。

ダウンロードしたPythonスクリプトを選択し「OK」をクリック。

書き出し先を指定するとtransforms.jsonが書き出されます。

images:ここへ全天球画像を一式コピーして入れる

初期点群を使用する場合

同じフォルダに「pointcloud.ply」を入れておくとLichtFeld Studioが自動で初期点群として読み込んでくれます。

Metashapeで「ポイントクラウド構築」しておきこれを初期点群として使うのも便利。

※注意
Metashapeの謎仕様で書き出すとカメラの座標系と点群の座標系が違っていまして、書き出した点群はCloudCompareであればY軸180度回転させるとカメラ座標系と一致します

マスクを使用する場合

同じフォルダに「masks」フォルダを作成し、images内の画像と対応した同じ名前同じサイズのマスク画像を入れておけばLichtFeld Studioがマスク画像として読み込んでくれます。

上記は全天球画像直下とスティッチング部分をマスクした画像の例。

LichtFeld Studio処理編

用意したデータ一式をLichtFeld Studioへ読み込みます。

全天球画像が読み込まれました。
全天球画像の中央に写る景色が正面の向く方向で空間に並びます。

GUTを有効にします。

全天球画像を処理するにはこの設定が必須です。

あとはいつも通りお好みでパラメーターを調整してトレーニングを実行です。

LichtFeld Studioの使い方については↓こちらにもまとめています。

LichtFeld Studioの使い方をまとめてみました。 公式サイト: GitHub: 「postshotが有償化!」「けど今後も無料で3DGSしたい!」 という方は gsplat と併せてこちらのLichtFeld Studioも検討してみると良さそうです...