はじめに
3D Gaussian Splatting(3DGS)は高品質なリアルタイムレンダリングを実現しましたが、「きれいなメッシュを取り出す(表面再構成)」のは苦手です。一方、2D Gaussian Splatting(2DGS)は表面再構成に強い反面、曲面や立体的な部分が過度になめらかになってしまいます。
今回紹介する DDGS(Dual-Dimensional Gaussian Splatting) は、「平らな所は2D、立体的な所は3D」とガウシアンの次元を自動で使い分けることで、両者の弱点を補う手法です。
この記事では、論文の内容に加えて、読んでいて疑問に思った数式(3DGSの共分散の投影、レイとガウシアンの交点計算、損失関数)を具体的な計算例つきで解説します。
対象読者:3DGSの基本(ガウシアンの集合でシーンを表す、αブレンディングで描画する)を知っている人
論文情報
| 項目 | 内容 |
|---|---|
| タイトル | Dual-Dimensional Gaussian Splatting Integrating 2D and 3D Gaussians for Surface Reconstruction |
| 著者 | Jichan Park, Jae-Won Suh, Yuseok Ban(忠北大学) |
| 掲載 | Applied Sciences, Vol. 15, No. 12, 6769(2025年6月) |
| DOI | https://doi.org/10.3390/app15126769 |
| ライセンス | CC BY 4.0(オープンアクセス) |
本記事の数式・内容は上記論文(CC BY 4.0)に基づいています。
一言でいうと
最初はすべて3Dガウシアンで学習し、途中で「ぺったんこになったもの」だけを2Dガウシアンに変換する。 さらに、エッジ部分の過平滑化を防ぐ勾配ベースの損失を追加する。これによりDTU・Tanks and Templesで3DGS、SuGaR、2DGSより高い表面再構成精度を達成しています。
1. 背景:3DGSと2DGSの弱点
3DGSの弱点
- ガウシアンが楕円体(体積を持つ)なので、平らな面をきれいに表現しにくい
- 3Dガウシアンを画面に投影するとき、透視投影をアフィン変換で近似しているため、ガウシアンの中心から離れるほど誤差が大きくなる。これが再構成メッシュの穴などの原因になる
2DGSの弱点
- ガウシアンを楕円ディスク(厚みゼロ)にし、同次変換で正確に投影することで幾何精度を上げた
- しかし深度や法線の正則化が効きすぎて表面が過度になめらかになる。また平らなディスクでは立体的なディテールを表現しきれない
DDGSはこの2つを「適材適所で使い分ける」発想です。
2. 前提知識:3DGSの共分散と投影(式(2)を具体的に)
DDGSが解決しようとしている「アフィン近似の誤差」を理解するため、まず3DGSの投影を具体的に見ていきます。論文の式(2)は次の通りです。
\Sigma = \mathbf{R}\mathbf{S}\mathbf{S}^T\mathbf{R}^T, \qquad \Sigma' = \mathbf{J}\mathbf{W}\Sigma\mathbf{W}^T\mathbf{J}^T
① 回転行列 R(クォータニオンから)
学習パラメータは正規化したクォータニオン $q=(w,x,y,z)$ で、これを回転行列に変換します。
\mathbf{R}=\begin{bmatrix}
1-2(y^2+z^2) & 2(xy-wz) & 2(xz+wy)\\
2(xy+wz) & 1-2(x^2+z^2) & 2(yz-wx)\\
2(xz-wy) & 2(yz+wx) & 1-2(x^2+y^2)
\end{bmatrix}
② スケーリング行列 S
3次元のスケール $(s_x,s_y,s_z)$ を対角に並べます(実装では対数で持ち、$\exp$ で正の値にします)。
\mathbf{S}=\mathrm{diag}(s_x,\ s_y,\ s_z)
③ ワールド空間の共分散 Σ
$\mathbf{R}$ の列ベクトル(楕円体の主軸方向)を $\mathbf{r}_1,\mathbf{r}_2,\mathbf{r}_3$ とすると、次のように書けます。
\Sigma = s_x^2\,\mathbf{r}_1\mathbf{r}_1^T + s_y^2\,\mathbf{r}_2\mathbf{r}_2^T + s_z^2\,\mathbf{r}_3\mathbf{r}_3^T
「主軸 $\mathbf{r}_i$ の方向に分散 $s_i^2$ だけ広がった楕円体」という意味です。$\Sigma$ を直接学習せずに $\mathbf{R}$ と $\mathbf{S}$ に分解するのは、常に有効な共分散(半正定値)になることを保証するためです。
④ ビュー変換 W
ワールド座標からカメラ座標への変換です。共分散は平行移動の影響を受けないので、共分散の変換には回転部分(3×3)だけを使います。ガウシアンの中心はカメラ座標 $\mathbf{t}=(t_x,t_y,t_z)$ に移しておきます。
⑤ ヤコビアン J(透視投影の線形近似)
透視投影 $u=f_x\dfrac{x}{z}+c_x,\ v=f_y\dfrac{y}{z}+c_y$ は $1/z$ を含む非線形な変換です。そこでガウシアン中心 $\mathbf{t}$ で偏微分して線形化します。
\mathbf{J}=\begin{bmatrix}
\dfrac{f_x}{t_z} & 0 & -\dfrac{f_x t_x}{t_z^2}\\
0 & \dfrac{f_y}{t_z} & -\dfrac{f_y t_y}{t_z^2}
\end{bmatrix}
⑥ 画面上の共分散 Σ'
$\Sigma'$ は2×2の行列で、画面上の楕円を表します。実装では対角成分に0.3を足して極端に小さな楕円を防ぎ、その逆行列を使って各ピクセルの不透明度を計算します。
\alpha(\Delta u,\Delta v)=o\cdot\exp\left(-\frac{1}{2}\begin{bmatrix}\Delta u & \Delta v\end{bmatrix}\Sigma'^{-1}\begin{bmatrix}\Delta u\\ \Delta v\end{bmatrix}\right)
数値例
$\mathbf{R}=\mathbf{I}$、スケール $(0.1,\ 0.05,\ 0.01)$、$\mathbf{W}=\mathbf{I}$、中心 $\mathbf{t}=(1,0,5)$、$f_x=f_y=500$ とすると、
\Sigma=\mathrm{diag}(0.01,\ 0.0025,\ 0.0001),\qquad
\mathbf{J}=\begin{bmatrix}100 & 0 & -20\\ 0 & 100 & 0\end{bmatrix}
\Sigma'=\begin{bmatrix}100^2\cdot 0.01+20^2\cdot 0.0001 & 0\\ 0 & 100^2\cdot 0.0025\end{bmatrix}=\begin{bmatrix}100.04 & 0\\ 0 & 25\end{bmatrix}
画面上では標準偏差が横約10ピクセル・縦5ピクセルの楕円になります。横の $0.04$ は、中心が光軸から横にずれているため奥行き方向の広がりが漏れ込んだ分です。
なぜ誤差が出るのか
$\mathbf{J}$ はガウシアン中心の1点で微分した近似なので、中心から離れた部分では本当の透視投影とずれていきます。これが「中心から離れるほど近似誤差が蓄積する」の意味であり、2DGSやDDGSがこの近似を使わず、同次変換とレイとの交差計算で正確に描画する理由です。
3. 提案手法 DDGS
3.1 2Dと3Dを統一する同次変換行列
2DGSの同次変換行列に3本目の軸(w軸)を追加し、2Dと3Dのガウシアンを同じ形で表します。
\mathbf{H}^*=\begin{bmatrix} s_u\mathbf{t}_u & s_v\mathbf{t}_v & s_w\mathbf{t}_w & \boldsymbol{\mu}\\ 0 & 0 & 0 & 1\end{bmatrix}=\begin{bmatrix}\mathbf{R}\mathbf{S} & \boldsymbol{\mu}\\ \mathbf{0} & 1\end{bmatrix}
- 3つのスケール $s_u, s_v, s_w$ がすべて非ゼロ → 3Dガウシアン
- ちょうど1つがゼロ → 2Dガウシアン
この行列は局所座標 $(u,v,w)$ の点をワールド座標に移します。局所空間では、ガウシアンは「原点中心・半径1の等方的なガウシアン」になっているのがポイントです。
G=\exp\left(-\frac{u^2+v^2+w^2}{2}\right)
3.2 2D/3Dの自動切り替え
- すべてのガウシアンを3Dとして初期化する
- 100イテレーションごとにスケールを比較し、最小のスケールが2番目に小さいスケールの1/10以下ならそれを0にして2D化する
- この切り替えは学習の最初の40%(30,000中12,000イテレーション)だけ行い、その後は構造を固定する
閾値の比率を5〜30で変えても精度の差はわずかで、10が最良だったと報告されています。つまり閾値にはそれほど敏感ではありません。
3.3 レイとガウシアンの交点計算(式(5)〜(7))
2Dと3Dの両方を正確に描画するため、Hahlbohmら(原論文の参考文献[33])の方法にならい、dual Plücker表現で「ピクセルのレイ」と「ガウシアン」の交点を求めます。
ステップ1:ピクセルのレイを2枚の平面で表す(式(5))
スクリーン空間の同次座標 $(x',y',z',w')$ では、ピクセル座標は $x=x'/w'$ です。したがって「ピクセル列が $x$ である点」は次の平面上にあります。
x' - x\,w' = 0 \iff (-1,\ 0,\ 0,\ x)\cdot(x',y',z',w')^T = 0
これが $\mathbf{h}_x=(-1,0,0,x)^T$ で、同様に $\mathbf{h}_y=(0,-1,0,y)^T$ です。この2平面の交線が、ピクセル $(x,y)$ を通るレイになります。
次に平面をガウシアンの局所空間へ持っていきます。局所座標の点 $\mathbf{q}$ はスクリーンでは $\mathbf{M}\mathbf{q}$($\mathbf{M}=\mathbf{W}\mathbf{H}^*$)になるので、
\mathbf{h}_x^T(\mathbf{M}\mathbf{q})=(\mathbf{M}^T\mathbf{h}_x)^T\mathbf{q}=0
つまり局所空間での平面は $\mathbf{h}_u=\mathbf{M}^T\mathbf{h}_x$ です(論文では「$(\mathbf{W}\mathbf{H}^*)^{-1}$ と等価」と書かれていますが、正確には「点を $\mathbf{M}$ で移すとき、平面は転置で引き戻せる」という意味です)。
重要なのは、2Dガウシアンでは $s_w=0$ なので $\mathbf{H}^*$ は逆行列を持たないことです。転置なら常に計算できるので、2Dと3Dを同じ式で扱えます。
ステップ2:交線をPlücker座標で表す(式(6))
平面を $\mathbf{h}=(\mathbf{n},D)$($\mathbf{n}\cdot\mathbf{p}+D=0$)と書くと、2平面の交線は次の2つのベクトルで表せます。
\mathbf{d}=\mathbf{n}_u\times\mathbf{n}_v\quad(\text{方向}),\qquad
\mathbf{m}=D_u\,\mathbf{n}_v-D_v\,\mathbf{n}_u\quad(\text{モーメント})
モーメント $\mathbf{m}$ は、直線上の任意の点 $\mathbf{a}$ に対して $\mathbf{m}=\mathbf{a}\times\mathbf{d}$ を満たすベクトルで、直線が原点からどれだけ離れているかを表します。
ステップ3:ガウシアン中心に最も近い点を求める(式(7))
局所空間ではガウシアンは原点中心の等方的な形なので、レイ上で値が最大になるのは原点に最も近い点です。
\mathbf{p}=\frac{\mathbf{d}\times\mathbf{m}}{\|\mathbf{d}\|^2},\qquad
\|\mathbf{p}\|^2=\frac{\|\mathbf{m}\|^2}{\|\mathbf{d}\|^2}
($\mathbf{d}$ と $\mathbf{m}$ は直交するので $\|\mathbf{d}\times\mathbf{m}\|=\|\mathbf{d}\|\|\mathbf{m}\|$ となります。)
数値例
局所空間で平面 $u=1$($\mathbf{h}_u=(1,0,0,-1)$)と $v=2$($\mathbf{h}_v=(0,1,0,-2)$)の交線、つまり点 $(1,2,t)$ を通る直線を考えます。
\mathbf{d}=(1,0,0)\times(0,1,0)=(0,0,1)
\mathbf{m}=(-1)(0,1,0)-(-2)(1,0,0)=(2,-1,0)
\mathbf{p}=(0,0,1)\times(2,-1,0)=(1,2,0),\qquad \|\mathbf{p}\|^2=5,\qquad G=e^{-5/2}\approx 0.082
直線 $(1,2,t)$ 上で原点に最も近い点 $(1,2,0)$ が正しく求まっています。
2Dガウシアンでも同じ式でよい理由
$s_w=0$ のとき $\mathbf{M}$ の第3列はゼロなので、$\mathbf{M}^T\mathbf{h}$ の第3成分(法線のw成分)は常に0です。すると $\mathbf{d}$ はw軸方向になり、$\mathbf{p}$ のw成分は0、つまりディスク平面 $w=0$ 上の点になります。これは2DGSのレイとディスクの交点計算と一致します。一つの式で2Dと3Dの両方を正しく扱えるのが、この表現を採用した理由です。
深度は、求めた $\mathbf{p}$ を $\mathbf{W}\mathbf{H}^*(\mathbf{p},1)^T$ でスクリーン側に戻して得ます。
3.4 損失関数(式(8)〜(11))
深度歪み損失(2DGSから継承)
\mathcal{L}_d=\sum_{i,j}\omega_i\,\omega_j\,|z_i-z_j|
1本のレイ上で寄与するガウシアン同士の深度差を、ブレンディング重み $\omega$ で加重して足し合わせます。例えば重みがどちらも0.5の2つのガウシアンの場合($(i,j)$ と $(j,i)$ の両方を数える)、
- 深度が2.0と2.1:$2\times0.5\times0.5\times0.1=0.05$
- 深度が2.0と3.0:$2\times0.5\times0.5\times1.0=0.5$
深度がばらつくと損失が大きくなるので、ガウシアンが1枚の表面付近に集まるように学習されます。
勾配考慮型の法線一貫性損失(提案)
\mathcal{L}_n^*=\sum_i\omega_i\,\omega_{grad}\,(1-\mathbf{n}_i^T\mathbf{N}),\qquad \omega_{grad}=\exp(-\|\nabla I\|)
\mathbf{n}_i=\mathbf{R}\cdot\mathrm{OneHot}(\arg\min(s_u,s_v,s_w))
- $\mathbf{n}_i$(ガウシアンの法線):一番薄い軸が法線です。例えば $(s_u,s_v,s_w)=(0.3,\ 0.2,\ 0.01)$ なら $\mathrm{OneHot}=(0,0,1)$ で、$\mathbf{R}$ の第3列が法線になります
- $\mathbf{N}$(深度から求めた法線):深度マップの各ピクセルを3D点 $\mathbf{P}$ に逆投影し、隣接点の差の外積から求めます
\mathbf{N}=\frac{(\mathbf{P}_{x+1,y}-\mathbf{P}_{x-1,y})\times(\mathbf{P}_{x,y+1}-\mathbf{P}_{x,y-1})}{\left\|(\mathbf{P}_{x+1,y}-\mathbf{P}_{x-1,y})\times(\mathbf{P}_{x,y+1}-\mathbf{P}_{x,y-1})\right\|}
- $1-\mathbf{n}_i^T\mathbf{N}$:2つの法線のなす角を $\theta$ とすると $1-\cos\theta$。向きが揃うと0、直交すると1です
- $\omega_{grad}$:色が平坦な場所では $\|\nabla I\|\approx0$ で重みは約1、エッジで $\|\nabla I\|=2$ なら約0.14に下がります
エッジでは深度が急変するため $\mathbf{N}$ が不正確になりがちです。そこで法線の一致を強制しすぎないようにして、過平滑化を防ぐ狙いです。これが2DGSからの差分です。
1次・2次の勾配損失(提案)
\mathcal{L}_{g1}=\|\nabla I-\nabla\hat{I}\|_1,\qquad
\mathcal{L}_{g2}=\|\nabla^2 I-\nabla^2\hat{I}\|_1
$I$ は正解画像、$\hat{I}$ はレンダリング画像です。論文には差分演算子が明記されていませんが、一般的には次のように計算します。
\nabla I\approx(I_{x+1,y}-I_{x,y},\ I_{x,y+1}-I_{x,y})
\nabla^2 I\approx I_{x+1,y}+I_{x-1,y}+I_{x,y+1}+I_{x,y-1}-4I_{x,y}
レンダリング画像のエッジがぼやけると勾配が小さくなり、$\mathcal{L}_{g1}$ が増えます。ラプラシアン(2次)は輝度の「曲がり具合」を見るため、角や曲面の細部のずれを捉えます。
全体の損失
\mathcal{L}=\mathcal{L}_c+\lambda_d\mathcal{L}_d+\lambda_n\mathcal{L}_n^*+\lambda_{g1}\mathcal{L}_{g1}+\lambda_{g2}\mathcal{L}_{g2}
$\mathcal{L}_c$ について、論文では「PSNR損失とSSIM損失を0.8と0.2で加重」と書かれていますが、元の3DGSの定義は L1損失とD-SSIM です。おそらく誤記だと思われます。
\mathcal{L}_c=0.8\,\|I-\hat{I}\|_1+0.2\,(1-\mathrm{SSIM}(I,\hat{I}))
4. 実験
実験設定とハイパーパラメータ
| 項目 | 設定 |
|---|---|
| 総イテレーション | 30,000(密度化は15,000まで) |
| 2D/3D判定 | 最初の12,000イテレーション、100イテレーションごと |
| $\lambda_d$ | 1000(非有界)/ 100(有界360度)/ 0(Mip-NeRF 360) |
| $\lambda_n$ | 0.05 |
| $\lambda_{g1}$, $\lambda_{g2}$ | 0.3, 0.7(大規模シーンは0.1) |
| メッシュ抽出 | TSDF(ボクセル0.004、切断閾値0.02) |
| 環境 | RTX 3090 1枚、1/2解像度(Mip-NeRF 360屋外は1/4) |
- 比較手法:3DGS、SuGaR、2DGS
- データセット:DTU(小物体)、Tanks and Temples(大規模360度シーン)、Mip-NeRF 360(屋内・屋外、画質評価用)
- 評価指標:表面はChamfer Distance(小さいほど良い)とF1スコア、画質はPSNR・SSIM・LPIPS
結果
- DTU:平均Chamfer Distanceが最良。すべてのシーンで2DGSより改善した(ただし学習時間はやや増加)
- Tanks and Temples:平均F1スコアが最良で、特にTruckシーンで高精度
- Mip-NeRF 360:画質(PSNR等)は3DGSより低いが2DGSと同程度。表面精度を優先した結果のトレードオフ
- 速度:3DGS・2DGSより遅いが、リアルタイム描画は維持。メッシュ抽出時間は2DGS・3DGSと同程度
可視化では、机や壁のような平面に2Dガウシアン、複雑な立体部分に3Dガウシアンが自動で割り当てられている様子が示されています。具体的な数値は原論文のTable 1〜6を参照してください。
アブレーション
DTUの15シーンの平均Chamfer Distanceで、提案した3つの正則化($\omega_{grad}$、$\mathcal{L}_{g1}$、$\mathcal{L}_{g2}$)をそれぞれ外すと、どれを外しても精度が落ちました。最も影響が大きかったのは2次勾配損失 $\mathcal{L}_{g2}$ で、曲率レベルでの整合が重要だとわかります。
補足:「実装の詳細」節について
論文の4.1節「Implementation Details」には、性質の異なる2つの内容が混ざっています。
- 本当の実装の詳細:イテレーション数、切り替えのスケジュール、損失の重み、TSDFの設定、GPUと解像度(上の表の内容)
- 評価方法の説明:比較手法、データセット、評価指標とその定義式(一般的な定義で、この論文独自の情報はほぼない)
また、再現しようとすると書かれていない情報もあります。
- 勾配・ラプラシアンの具体的な差分演算子
- 各パラメータの学習率、球面調和関数の次数
- 正則化項をどのイテレーションから有効にするか(2DGSの実装では途中から有効化している)
- コードの公開リンク(データセットのリンクのみ記載)
5. 限界と今後
半透明な面や鏡面ハイライトの再構成は依然として難しく、メッシュに穴や欠けが生じることがあります。原因は、Gaussian Splattingが高周波で視点依存の反射をうまくモデル化できないことです。著者らは、シェーディング関数の導入による反射表現の改善を今後の課題として挙げています。
6. 読んでいて気になった点
- $\mathcal{L}_c$ の説明が「PSNR損失」になっているが、3DGSの定義に従えばL1損失の誤記と思われる
- 式(5)の「$(\mathbf{W}\mathbf{H}^*)^{-1}$ と等価」は表現が雑で、実際には平面を転置で引き戻している。2Dガウシアンでは逆行列が存在しないので、転置で計算できることが本質
- 実装の詳細の一部が不足しており、コードも公開されていないため、論文だけで完全に再現するのは難しい
まとめ
- DDGSは「平面は2D、立体は3D」とガウシアンの次元を自動で使い分けるハイブリッド手法
- 同次変換行列にw軸を追加し、dual Plücker表現によるレイとの交点計算で、2Dと3Dを同じ式で正確に描画できる
- 勾配考慮型の法線損失と1次・2次の勾配損失で、2DGSの過平滑化を抑える
- 画質は3DGSにやや劣るが、表面再構成精度では3DGS・SuGaR・2DGSを上回る
アイデア自体はシンプル(スケールの比で2D化するだけ)ですが、それを破綻なく実装するための交点計算の工夫が面白い論文でした。
参考文献
- J. Park, J.-W. Suh, Y. Ban. Dual-Dimensional Gaussian Splatting Integrating 2D and 3D Gaussians for Surface Reconstruction. Applied Sciences, 15(12), 6769, 2025. https://doi.org/10.3390/app15126769
- B. Kerbl et al. 3D Gaussian Splatting for Real-Time Radiance Field Rendering. ACM TOG (SIGGRAPH), 2023.
- B. Huang et al. 2D Gaussian Splatting for Geometrically Accurate Radiance Fields. SIGGRAPH, 2024.
- A. Guédon, V. Lepetit. SuGaR: Surface-Aligned Gaussian Splatting for Efficient 3D Mesh Reconstruction and High-Quality Mesh Rendering. CVPR, 2024.