Volume Rendering and Splatting
NeRF と 3D Gaussian Splatting は、どちらも multi-view image から scene を再構成し、新しい view を rendering するための表現です。両者は見た目には似た結果を出しますが、rendering の計算の仕方が大きく違います。NeRF は ray 上の連続的な volume density を積分し、3DGS は明示的な Gaussian primitive を画像平面へ splat して alpha compositing します。
NeRF の volume rendering
Camera ray を次のように書きます。
ここで、 は camera center、 は ray direction、 は ray 上の距離です。NeRF は位置と方向から density と color を出します。
Ray の色は volume rendering equation で表されます。
各項の意味は次の通りです。
- はその位置で ray がどれくらい吸収・散乱されるかを表す density です。
- はその位置から見える色です。
- は ray が距離 まで遮られずに届く透過率です。
この式の気持ちは、「camera から ray を飛ばし、手前から奥へ進みながら、まだ透過している分だけ各位置の色を積分する」というものです。
実装では、連続積分を sample 点の和で近似します。
3D Gaussian Splatting の alpha compositing
3DGS では、scene を Gaussian primitive の集合として持ちます。Gaussian は中心 、共分散 、opacity 、色 を持ちます。
Rendering では、Gaussian を画像平面に projection し、pixel に対する寄与を計算します。Depth 順に並べた Gaussian の色は、NeRF と同じ形の alpha compositing で書けます。
ここで、 は pixel における Gaussian の不透明度です。この式の気持ちは、「ray 上を細かく sample する代わりに、画像平面に投影された楕円 Gaussian を手前から順に重ねる」というものです。
両者の比較
| 観点 | NeRF volume rendering | Gaussian splatting |
|---|---|---|
| 表現 | 暗黙 neural field | 明示 Gaussian primitive |
| rendering | ray marching / sampling | rasterization / splatting |
| 色の合成 | volume rendering integral | alpha compositing |
| training | scene ごとの neural optimization | scene ごとの primitive optimization |
| 強み | 滑らかな連続表現 | 高速 rendering、編集しやすい |
| 弱み | rendering が遅い | primitive 管理、aliasing、surface 抽出 |
重要なのは、どちらも最終的な色合成は という形に近いことです。ただし、NeRF では が ray 上の sample 点であり、3DGS では が投影された Gaussian primitive です。この違いが速度、memory、編集性、surface extraction の違いにつながります。
関連ページ
主なソース
- NeRF paper: https://arxiv.org/abs/2003.08934
- 3D Gaussian Splatting paper: https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/
- 3D Gaussian Splatting survey: https://arxiv.org/abs/2401.03890