🌊

3DGS、3DGRT、3DGUT についてのメモ

2025/01/31に公開

Graphics Programming Weekly で 3DGUT という手法が言及されていて、3DGS について何も知らなかったのでついでに調べてみよう、ということでちょっとだけメモ。

https://research.nvidia.com/labs/toronto-ai/3DGUT/

3DGS (= 3D Gaussian Splatting) とは

これを読めばばっちりです(変に説明するとボロが出そうなので省略!)。

https://qiita.com/nokonoko_1203/items/2ce965620a630481ff03

3DGS の弱点

3DGUT のペーパーで主張されていることとして、3DGS には以下の弱点があるそうです。

  • 理想的なピンホールカメラを前提としたモデルになっていて、魚眼レンズなどでは誤差が大きい
  • secondary ray が使えない(つまり反射や影などが表現できない)

1点目に関しては、Fisheye-GSのように特化した手法も考え出されていますが、カメラに合わせて都度モデルを作って学習しないといけないので 3DGUT の方が汎用性が高い、と主張しています。

3DGRT (3D Gaussian Ray Tracing) とは

去年7月ごろ?に公開された手法で、Nvidia の研究者によるものです。SIGGRAPH Asia 2024 で発表されています。

https://gaussiantracer.github.io/

詳しくは↑のリンク先にある図を見てもらうといいと思いますが、3D点群を近似してBVH (Bounding Volume Hierarchy)をつくって、そこに ray を飛ばします。「k 回衝突したらその結果で色を更新する」みたいなあたりがよくわからなかったんですが、以下の Spatial AI 勉強会のスライドを見たらなんとなくわかった気になれました(わかったわけではない)。

https://speakerdeck.com/spatial_ai_network/lun-wen-du-mi-3d-gaussian-ray-tracing-fast-tracing-of-particle-scenes

3DGUT (3D Gaussian Unscented Transform)

3DGUT は、去年の12月ごろに公開された手法で、3DGRT と同じく Nvidia の研究者によるものです。Unscented transform というのは sigma point という分布の重心のようなもの?を計算するために使われる変換です。非線形のカルマンフィルタで用いられるものらしいです。

https://research.nvidia.com/labs/toronto-ai/3DGUT/

以下の図は↑のURLからの抜粋ですが、左が 3DGRT、真ん中が 3DGS、そして 3DGUT です。理論的なところはあまり理解できてないんですが、3DGS はいちど 2D に投影した値に対して学習を行っているのに対し、3DGUT は sigma point に対して 3D 空間で行っているので、非線形の投影変換になるカメラでも誤差が小さいし secondary ray からの光も計算できる、ということのようです。強みは 3DGRT と同じで、計算が 3DGRT より軽い、というのが売りみたいです。

ちなみに、unscented は「無臭の」みたいな意味らしいですが、なぜこの名前なのかというと、これを考案した Jeffrey Uhlmann さんが「Uhlmann filter」と呼ばれるのを嫌って、同僚の机の上にあった制汗剤から適当に取った単語らしいです(以下の wikipedia の references のひとつめ参照)。

https://en.wikipedia.org/wiki/Unscented_transform

よくわからない点

3DGRT がどれくらい重いのか

まずよくわからないのは、3DGRT のパフォーマンスがどれくらい問題になるのか、という点です。まあ ray tracing って言うくらいなので重いんだろうな、とは思うんですが、中の人は「100fpsで動くよ!」と言っています。

https://x.com/ashmrz10/status/1833124234890981845

まあデバイスによるんだろうと思うんですけど、3DGRT で実際どれくらいパフォーマンスが出るか知りたいところです。

どういう実装なのか

そのためには手法を試したりしたいところですが、3DGRT も3DGUT も参考実装はなさそうなので、今のところ気軽に試せる感じではなさそうです。

3DGS ではだめなのか

3DGS の弱点として挙げられていた点は、実際どれくらい問題になるのでしょうか。

  • 1点目の「魚眼レンズなどでは誤差が大きい」ということについて言えば、通常のレンズでも魚眼レンズでも使える汎用性はどれくらい必要なんでしょう。実は同じデータを両方で使うケースあまりなかったりしない?

  • 2点目の「secondary ray が扱えない」について言えば、たしかに反射とかはそうですけど、影は別でつけてなんとかなってる感じもします。そんな感じで、3DGS 単体では弱点あるけど、他のテクニックと組み合わせれば実質あまり差がないことも割と多かったりする?

Discussion