Postshotが実質有料化
ガウシアン・スプラッティングによる3Dモデルの作成、3DGSってやつ。2025年9月26日にpostshotが正式バージョンになってply形式での書き出しが出来なくなりました。plyで書き出すにはIndieの課金が必要。2025年10月4日時点の為替レートで年間36,000円くらい。

機能的には払ってもいいかなと思ってましたが、結構高い。ということで無料でできる方法を調べてました。
とりあえずフリープランになる前に、pshtフォーマットとplyフォーマットのバイナリデータを比較確認して自前で変換できないか調べてました。左がpsht、右がply。データの構成はなんとなくわかったんだけど、どこからデータが開始されるのかとか、スプラット数が多い場合にどういうブロックで分割されているかよくわからず諦めました。

課金するかなーと思ってましたが、とりあえず代替ツールがないか探すことに。
代替ソフト候補
Nerfstudio

python環境を構築して使う感じ。一応、pipインストールはできるらしいが、面倒なので不採用
LichtFeld Studio
これもpython環境の構築が必要。面倒なのでこれも不採用。
Brash(今回はこれ)
ビルド済みのバイナリが提供されている。弱点は画像最大サイズが2048なことくらい?
説明らしい説明が見つからなかったので、ここではBrashでモデル作成するまでの手順を説明します。
前準備
Brashの取得
gitのリリースページからファイルをダウンロードして解凍するだけ。Windowsはexeファイル起動するだけでOK。ウェブブラウザ上でも動作するらしい。

RealityScanのインストール(Postshotで代替可能)
brushにはカメラの姿勢推定の機能がないので、他ソフトでカメラの姿勢推定をしてcolmapというデータを作る必要がある模様。これにRealityScanを使う。(Postshotでもcolmap出力可能)
RealityScanは、Epic Games Launcherからインストールするので、先にEpic Games Launcherをインストールする。結構前に入れたのでよく覚えてないが、ユーザ登録とか必要と思う。

Epic Games Launcherを起動したら、RealityScanタブか、ライブラリからRealityScanをインストールする。
カメラの姿勢推定とCOLMAPのエクスポート(RealityScan)
カメラ姿勢推定
RealityScanを起動する

起動すると以下のような画面。Inputsがemptyになっている。

姿勢推定する画像をドラッグ&ドロップする。

Inputsにデータが登録され、2Dにプレビューが表示される。
姿勢推定する
メニューから「ALIGNMENT」を選択して「Align Images」を実行


姿勢推定中は何もできないので待ち。PostShotと比べてクソ速い。
コンポーネントの確認

全部の画像が1つのコンポーネントに入っていない場合、設定変更して再度姿勢推定する。もしくは、ちゃんと撮影密度を上げて撮りなおす。1つになっていればエクスポートに進んでOK。

カメラ推定のパラメタ変更は、メニューから「ALIGNMENT」を開き、Settingsを表示。Alignment Settingsが表示される。
色々設定があるだろうが、とりあえず以下を変更
(1)「Max feature reprojection error」を2から10とかに増やす
(2)「Image overlap」をMiddle→Lowにする(画像は元からLowになってる)
再度、メニューから「ALIGNMENT」を選択して「Align Images」を実行

少し改善したが、まだ分かれてる。不要なコンポーネントは削除する
====
結局うまくいかなかったので撮影し直した。
設定のリセットは以下のボタン。

====

自室内で撮影しているので、真っ暗にして背景が映らないようにしているので姿勢推定しにくいと思われるが、なんとか1周つながったのでこれでカメラの姿勢推定は完了とする。
COLMAPのエクスポート

RealityScanのアイコンからExportを選択。

Camera AlignmentからColmap Text Formatを選択

colmapを保存する新規フォルダを作成し、保存するテキスト名を指定して保存。ここで作るフォルダを後でbrushに指定する。

Exportの設定
- 「Undistortion settings」 → 「Max count of pixels」に画像のピクセル数を指定する。brushは現在最大2048ピクセルなので、2,048×2,048=4,194,304を指定しておけばOKと思われる
- 「Export Images」をYesに変更する
- 「Export image settings」 → 「Image format」 を好きな形式に変更する
Exportの失敗パターン

画像ファイルがcomponentの件数分出てない場合は失敗。RealityScanでコンポーネントの全カメラポーズを選択してexportをやり直す。(何も選択してないときはたぶん勝手に全画像出力される)

カメラポーズ数分の画像が出力されていればOK。各画像は謎リサイズorトリミングされたデータになっている

カメラの姿勢推定とCOLMAPのエクスポート(Postshot)
Postshot(フリー版)でもCOLMAPの出力が可能。RealityScanに比べて速度は遅いけど精度は高い気がします。
普通に学習を開始する。

姿勢推定が完了して学習が開始したら、COLMAP保存可能。

Sceneタブ→ImageSet→Actionsタブ→Export COLMAP database…
保存する場所を指定するとcolmapフォルダが作成され画像以外が出力される。
ExportImages…を選択して、上記で作成されたcolmapフォルダを指定する。
Brushで学習
brush_app.exeを実行して起動。

Directoryを選択して、保存したCOLMAPのフォルダを指定する
設定が開くので設定してスタート

- Traingのstepsはデフォルト30000
- Max image resolutionはデフォルト1920になっている。最大2048に上げられる。
- Export設定がply保存設定
- 学習中に勝手にplyが保存される
- デフォルトは5000ステップ毎にカレントパスに出力される
学習中

上(Sceneタブ)が学習中のモデルの様子。カメラの操作性は悪い(PostShotで出力したCOLMAPだとちゃんと動く)
下(Datesetタブ)が教師画像。教師画像側切り替えでアングルを変えられる。
タブ位置はドラッグで移動出来て左右に並べたりできる。

Training:学習を途中で停止/再開できる
Live update:Sceneタブの画像の更新ON/OFF切り替え。これをOFFにするとGPUメモリが上限張り付きになってTrain Stepが極端に遅くなるのでONのままがよさそう
Export:plyファイルを保存する
学習結果
Exportボタンを押さなくても学習ステップに応じた出力がされるのでそれで充分

実行ステータスは以下の通り

RTX2080Ti、画像は1800×1000くらい(画像によって違う)で16分半。カメラ姿勢推定含めてPostShotより速い。アップデートされて4K画質まで対応できたら完璧じゃないか?
plyの結果
フローター消したデータ。
ViruSweetsの新作が今月また出ますね。
エディタ
postshotのエディタ良かったんですが、結局データをエクスポートできないので代替手段が必要。
SuperSplatのエディタをもとから使ってたけどリング表示が便利。


このエディター、htmlファイルで書き出せるのも便利。上のモデル表示はこれで出力したhtml viewerを埋め込んだもの。
動画書き出し
上記エディタでも動画書き出しできるのだが、自分は両目の動画を出力したいので複数カメラを設置したい。フリー版postshotだとウォーターマークが付くらしいんで何か探さねば。Blenderとかかな?