📷
3DGSについて
目的
NeRF 時代で時間が止まっていたので,簡単に 3DGS についてまとめてみる.
3DGS とは
3D Gaussian Splatting の略.高品質なリアルタイムでの新規ビュー合成(Novel View Synthesis)の手法の一つ.
これまでは NeRF(空間の各点に色と密度が連続的に分布する関数として表現)が使われていたが,
- 計算が重い
- リアルタイムでは困難という課題があった.
NeRF のように,連続関数を直接評価する代わりに,シーンを多数の 3D ガウス分布の集合で近似する.
各ガウスが持つ情報
従来の Multi-View Stereo 再構成を必要とする点群ベースの手法とは異なり,SfM 点のみ必要とする.
- 位置(3D 座標)
- 形状(異方性共分散,スケール+回転,3 次元スケール,クォータニオン回転 ⇨7 次元)
- SH 係数(色,球面調和関数)
- 不透明度
ガウス分布の異方性により,薄い構造などの複雑な形状をより表現できる.
これらのガウスと,カメラから見た時の投影面に,ぼかした点(光の粒,スプラット)として高速にレンダリングする.(Splatting)
GPU での並列化が容易で、1080p で 30fps 以上を達成。
[補足] 球面調和関数とは
球面調和関数(Spherical Harmonics, SH)は,球面上で定義される関数を表現するための直交基底関数の集合.
フーリエ級数が 1 次元の周期関数を三角関数の和で表現するのと同様に,球面調和関数は球面上の任意の関数を加重和で近似・表現することができる.これにより、各点から見える方向ごとの色(輝度)を効率的に近似できる.特に低次の球面調和関数を使うことで、少ないパラメータで滑らかな照明や色の変化を表現できるため、リアルタイムレンダリングなどで重宝。
課題点
- 動的シーンには対応できていない
- メモリ要件:複雑なシーンでは大量のメモリ消費
- 極端な境界反射面
3DGS を軽量に試すための準備
以下を準備すればいける.時間が出てきたら試したい.
- SfM 用:COLMAP
- 3DGS の動作用:OpenSplat
- 編集用:supersplat
- 環境:LibTorch(C++で PyTorch が使えるライブラリ)
3DGS に関するサービス
-
LumaAI
-
Scaniverse
-
Polycam
-
KIRI Engine
-
3DGS Render Blender Addon by KIRI Engine
- SDGS ファイルのインポートからペイント、編集、メッシュの 3DGS への変換、複数の 3DGS の統合(マージ)、レンダリング、エクスポートまで
Discussion