やること
写真群から3Dモデルを再構築する手法として、過去に「フォトグラメトリ」と「NeRF(Neural Radiance Fields)」を比較しました。また、最近になって「3D Gaussian Splatting」という手法も出てきました。
NeRFはニューラルネットワークを使用しているためGPUの恩恵が大きく、3D Gaussian Splattingはニューラルネットワーク不使用ですが激しい計算がGPUで高速化します。やはり最近の手法はGPUが実質的に必須です。古典であるフォトグラメトリは光沢や透け感のある物体が苦手なので、これらの新手法の実力がどれほどのものか改めて3つの技術を比較してみたいと思います。
使用した写真
質感が異なる5つの物体を撮影しました。
- ねこのぬいぐるみ(もふもふ)
- ACアダプタ(真っ白、ツヤツヤ)
- 水の入ったガラスコップ(透明、反射)
- ステンレス製ピッチャー(金属光沢、反射)
- 鏡(反射)
低い角度から一周、高い角度から一周、合計108枚の写真を撮りました。自分の影や映り込みがないように注意しました。
フォトグラメトリの得手・不得手
復習としてフォトグラメトリの得手・不得手をまとめておきます。これらがNeRFと3D Gaussian Splattingで改善するかどうかに注目です。
結果
フォトグラメトリ
処理時間:14分
CPU: Ryzen 5 5600G, GPU: RTX A4500
※GPUも一応使っているようですが、CPUの比率が圧倒的
床とぬいぐるみの品質は非常に良いです。真っ白・ツヤツヤは苦手、透明・金属光沢は崩壊ぎみです。そして鏡の中に亜空間ができています!w
NeRF
処理時間:35分
使用サービス: Luma AI
※Luma AIのサービスは最近、NeRFに加えて3D Gaussian Splattingを行うようになったようです。内部ではおそらく別系統に分かれているので、おそらくNeRFのみの結果だとおそらく思います。
※ローカル処理しても同構成で30~40分程度と見積もっています(ソースなし)
こちらもフォトグラと似た傾向のようです。質感御三家はしっかり崩壊しているのですが、フォトグラのほうが輪郭がシャープに出た分ややマシか?といった印象。
3D Gaussian Splatting
処理時間:44分(convert 8分、train 36分)
CPU: Ryzen 5 5600G, GPU: RTX A4500
※GPUが唸ります。
※3D Gaussian Splattingの結果を見るには専用のビューアーが必要です。見えているリアルな点群データを取り出すことは(今のところ)できません。
さすがに写真ベースで表示しているだけあって(?)細部までくっきりです。真っ白、ツヤツヤ、透明、金属光沢もこれまでの常識を遥かに超えるクオリティ。鏡はややキツいですが崩壊はしていません。
この手法は撮影した角度とその中間の角度は十分に推定・補間されて高品質で見えます。しかし、そこから遠い角度に回すと急に視野にモヤがかかったようになります。点群データを取り出して後処理するといったことができないため、このモヤを取り除くことができません。
まとめ
見た目の再現だけなら3D Gaussian Splatting、点群データが欲しいならフォトグラメトリが良いのかなと思いました。よければ記事のシェアをお願いします。お疲れさまでした。