静岡県の指定文化財『浜松城』を3Dデジタルアーカイブしてみました。
広域な3D Gaussian Splatting × フォトグラメトリ。
それぞれの得意分野を活かしミックスした3D空間を構築。
- 地面、銅像、看板等 → フォトグラメトリ
- 植栽、空等 → 3D Gaussian Splatting
以下簡単なメイキングです。
機材と使用ソフト
出張で浜松へ行ったついでの撮影だったので、機材は最低限。
- カメラ:ソニー α7RV
- レンズ:ソニー FE 14mm F1.8 GM
- フォトグラメトリ処理:RealityCapture
- 3D Gaussian Splatting処理:gaussian-splatting
撮影時間と足運び
炎天下しんどかったので10分ごとに休憩を挟みつつ、そして人が来た時も待機しつつで、1時間半ほどで撮影。
撮影枚数は1367枚。
フォトグラメトリ足運びはこんな感じ。
いつも通りループクローズを意識。
カメラの高さは普通に手で構える位置。
アライメント精度を高めたい場合はロッドを使って頭上から微俯瞰で撮影したりもするが、今回は機材も持っていってなかったのと猛暑でそんな気力もなかったので普通に手持ちの高さで撮影。
フォトグラメトリ処理
メッシュ化やテクスチャ生成はいつもどおりの流れ。
3D Gaussian Splatting処理
フォトグラメトリのメッシュと3DGSのSplatを統合したかったのと、規模が大きくなると3DGSのCOLMAP等では写真位置推定がうまくいかない場合が多いので、RealityCaptureでアライメントした結果を書き出し3DGS処理を行った。
これによってフォトグラメトリと3DGSのそれぞれのデータも同じ座標になるので綺麗に統合出来る。
ワークフローは以下の通り。
- RealityCaptureからbundle.outファイルと歪み補正画像を書き出す
- RealityCapture-to-Postshotを使いbundle.outをCOLMAP形式に変換する
- 変換したCOLMAPデータを使って公式3DGSで処理する
なぜGUI操作可能で便利なPostshotを使っていないの?
現状ではPostshotでは広域、規模の大きなシーンの処理を行うと細部の再現精度が大きく落ちてしまうため。
細部の再現精度を上げるにはSplatの密度も上げる必要があるか現時点ではここのコントロールがうまく行えず、公式3DGSの方で各種パラメーターを最適化して生成した方が良好な結果をなったため。
以下その比較。
・Postshot (ADC)
・Postshot (MCMC)
・公式3DGS
フォトグラメトリと3DGSの統合処理
まずそれぞれのデータの状態を確認。
フォトグラメトリのデータ
フォトグラメトリは動く物体や形状の細かな物体の生成は得意ではなく、かつ地上からのみ撮影を行っていた場合はこのように樹木周りに品質の低いバリ状のメッシュが生成されてしまう。
3D Gaussian Splattingのデータ
こちらは植栽の表現がとても綺麗。
しかし一方で地面の砂利は十分な解像度が得られておらず、3DGS特有の複数の楕円体の重なりで構成されている様子がわかる状態になってしまっている。
※Splatの密度を上げることで再現可能ではあるがデータ容量や処理コスト的にあまり現実的ではない
フォトグラメトリと3DGSの2つのデータをそのまま合体
そのまま合体させるとフォトグラメトリのメッシュに3DGSの暗めのモヤが乗った状態となり、あまり見栄えの良いものにならない。
なので「フォトグラメトリで使いたい部分のみのデータ」と「3DGSで使いたい部分のみのデータ」をそれぞれ用意する。
フォトグラメトリを採用するエリアのみのデータに調整
地面と銅像のみのメッシュにした。
3D Gaussian Splaatingを採用するエリアのみのデータに調整
地面と銅像部分のSplatを削除した。
今回はレンダリングにはUnityGaussianSplattingを使用したのでこの機能で不要な部分のSplatを非表示に編集した。
編集した2つのデータを統合
フォトグラメトリと3DGSのそれぞれの利点を活かした、いいとこ取りのデータに出来た。
Unityでブラッシュアップ
看板の文字はフォトグラメトリや3DGSで表現するのはデータが重くなってします、現地で別撮りしておいた写真を板ポリにはりつけて表現した。
3DGSだと細部の再現精度が低い状態。
ここにフォトグラメトリのモデルを配置すると、
メッシュとSplatが重なって汚い状態になってしまう。
なのでこの部分のSplatを削除する。
(前項目で解説したのと同様の手順)
そしてこの部分にフォトグラメトリのメッシュモデルを配置。
しかしこれでもまだぼやけていて文字を読むには解像度が足りないので、別撮りしておいた写真を板ポリに貼り付けたものを配置。
これで寄りでも見れるものにできた。
お好みでコンテンツ化
今回はThirdPersonのアセットを入れて歩けるようにしたり、
UnityRecorderで4k動画60fpsレンダリングを行った。
キャラクターが歩き回るためにはコライダーが必要だが、これはフォトグラメトリのメッシュを大幅にリダクションしたものを使用。
以上!
フォトグラメトリも3D Gaussian SplattingもまずはRealityCaptureで写真位置推定するワークフローは共通なので、今後はこのいいとこ取りハイブリッド版を活用したコンテンツも色々作ってみたいな。
浜松城を3Dデジタルアーカイブ!
広域3D Gaussian Splatting × フォトグラメトリ
植栽や空は #GaussianSplatting
地面や銅像、看板等は #Photogrammetryそれぞれの得意分野をミックスした3D空間構築。
作り方はつづきに。 pic.twitter.com/ygSXlQYvLP— 龍 lilea (@lileaLab) August 7, 2024