はじめに
3D Gaussian Splatting(3DGS)を触っていると、「見た目はきれいなのに、深度や表面がぐちゃぐちゃ」という問題によく当たります。一方で2D Gaussian Splatting(2DGS)を使うと形状はきれいになるものの、今度はテクスチャがぼやけてしまいます。
この記事では、この2つを1つのシーンの中で混ぜて使い、さらに学習中に2D⇔3Dを入れ替えられるようにした手法 EGGS(Exchangeable Gaussian Splatting) を解説します。論文を読んでいて自分が引っかかった箇所(ラスタライザの式、$s_z$ の挙動、周波数分離最適化)は、特に丁寧に説明しています。
対象論文
Yancheng Zhang, Guangyu Sun, Chen Chen. "EGGS: Exchangeable 2D/3D Gaussian Splatting for Geometry-Appearance Balanced Novel View Synthesis." NeurIPS 2025.
- arXiv: https://arxiv.org/abs/2512.02932
- コード: https://github.com/Fobow/EGGS
- ライセンス: CC BY 4.0(https://creativecommons.org/licenses/by/4.0/)
本記事は上記論文の内容をもとに、筆者の理解に基づいて再構成・解説したものです。解釈の誤りがあれば筆者の責任です。
前提知識:3DGSの基本(ガウシアンの中心・スケール・回転・不透明度・SH色、αブレンディング)を知っているとスムーズに読めます。
1. 背景:3DGSと2DGSのトレードオフ
| 3DGS | 2DGS | |
|---|---|---|
| プリミティブ | 3Dの楕円体 | 3D空間に浮かぶ平たい円盤(サーフェル) |
| 描画方式 | 画面へのアフィン射影 | レイと円盤の交差計算 |
| 見た目(PSNRなど) | ◎ 細部まで出る | △ 細部が平滑化される |
| 形状(深度・表面) | △ 多視点で不整合が出やすい | ◎ 多視点で一貫している |
3DGSは楕円体が厚みを持ち、しかも視点によって見え方が変わる(異方性)ため、表面の位置がはっきりしません。2DGSは「表面は薄い」という前提で円盤を使うので形状は正確ですが、高周波の細部を表現するのが苦手です。
既存研究にも2Dと3Dを両方使うもの(HybridGS、HorizonGSなど)はありますが、どちらも特定のタスク向けで、1つの放射輝度場を2Dと3Dの混在で表現するという形にはなっていません。
2. EGGSの全体像
EGGSは次の3つの要素で構成されています。
- Hybrid Gaussian Rasterization:2Dと3Dのガウシアンを1回の描画処理でまとめて描く
- Adaptive Type Exchange:学習中に各ガウシアンが2D⇔3Dを切り替える
- Frequency-Decoupled Optimization:画像を低周波と高周波に分け、2Dには形状、3Dには細部を優先して学習させる
初期化はSfM(COLMAP)の点群から行い、各ガウシアンのタイプ(2Dか3Dか)はランダムに割り当てます。
3. Hybrid Gaussian Rasterization
ポイント:違うのは「距離の測り方」だけ
3DGSのラスタライズは、ピクセルごとに以下の3ステップを行っています。
- ピクセルが各ガウシアンの中心からどれだけ離れているか(距離 $d_i$)を測る
- 距離から寄与 $\tilde\alpha_i$ を計算する
- 手前から順に重ねて色を合成する
EGGSでは、ステップ1だけをタイプ別に分け、ステップ2と3は共通化しています。各ガウシアンには、タイプ指定子 $t_i \in {0, 1}$(0が2D、1が3D)を持たせます。
d_i = \begin{cases} u_i(x_p)^2 + v_i(x_p)^2 & (t_i = 0:\ \text{2D}) \\ (x_p - \mu'_{3d,i})^T \Sigma_i'^{-1} (x_p - \mu'_{3d,i}) & (t_i = 1:\ \text{3D}) \end{cases}
3Dガウシアンの場合は通常の3DGSと同じです。楕円体を画面に投影して2Dの楕円(中心 $\mu'$、共分散 $\Sigma'$)にし、ピクセルとのマハラノビス距離を取ります。楕円の縁で $d \approx 1$ になるイメージです。
2Dガウシアンの場合は、画面に投影せず、カメラからピクセルを通るレイを飛ばして円盤の平面との交点を求めます。$(u, v)$ はその交点の、円盤のローカル座標(スケールで正規化済み)です。そのため $u^2 + v^2$ は、3D側のマハラノビス距離と同じ意味を持ちます。
Unityで例えるなら、3D側は「オブジェクトをスクリーン座標に変換してから判定」、2D側は「Raycastで平面との交点を取り、ローカル座標で判定」という違いです。
なぜ2Dを投影で描いてはいけないのか
3DGSの投影は、透視投影をガウシアンの中心付近で線形近似したもの(アフィン近似)です。中心から離れるほど誤差が大きくなり、特に薄い円盤を斜めから見たときに形状が狂います。論文のアブレーションでも、2Dと3Dを混ぜて全部を3DGSのラスタライザで描くと、素の3DGSより性能が落ちています(PSNR 26.12 → 26.01)。
距離を揃えたら後は共通
$d_i$ がどちらの方法で求められたかに関係なく、寄与は同じ式で計算します。
\tilde{\alpha}_i = \alpha_i \, e^{-\frac{1}{2} d_i}
色の合成も通常のαブレンディングと同じです。
C(x_p) = \sum_{i} c_i \tilde{\alpha}_i \prod_{j=1}^{i-1} (1 - \tilde{\alpha}_j)
2Dと3Dが混ざっていても、奥行きソートと合成は1回で済みます。実装はCUDAで、ガウシアンごとに距離計算だけ分岐させる形になっていると考えられます。
4. Adaptive Type Exchange
動機
学習が進むと、ガウシアンの形は初期状態から変わっていきます。
- 3Dガウシアンが表面を表現するためにペタッと平らになる
- 2Dガウシアンが半透明な領域を表現するために厚みを欲しがる
そこで、「実際の形に合わせてタイプを切り替えよう」というのがこの仕組みです。
判定指標:実効ランク(erank)
スケール $(s_x, s_y, s_z)$ の2乗を正規化した分布のエントロピーを使います。
\mathrm{erank} = \exp\left( -\sum_{k} p_k \log p_k \right), \quad p_k = \frac{s_k^2}{s_x^2 + s_y^2 + s_z^2}
- 完全な球:erank = 3
- 完全に平らな円盤:erank = 2
閾値 $\theta_e = 2.05$ を下回った3Dガウシアンは2Dに、上回った2Dガウシアンは3Dに切り替えます。判定は500イテレーションごとに行います。
感覚的な目安として、$s_x = s_y = 1$ の円盤なら、$s_z \approx 0.1$(円盤の1割程度の厚み)でerankが約2.06になり、閾値を超えます。
3D → 2D:スケールの並べ替え
2Dガウシアンは $s_z$ を無視するので、3Dから2Dに変換するときは $s_z$ を捨てることになります。しかし、$s_z$ が一番小さい軸とは限りません。そこで、共分散 $\Sigma = RSS^TR^T$ を変えないように、置換行列 $P$ を使って一番小さい軸をz軸に移動させます。
S^* = P S P^T, \quad R^* = R P^T
$P$ は行列式が1の巡回置換なので、$R^*$ も正しい回転行列(クォータニオンで表現可能)のまま保たれます。
2D → 3D:$s_z$ の動き(個人的に一番わかりにくかったところ)
問題:2Dガウシアンは描画に $s_z$ を使いません。描画に使われないパラメータには勾配が流れないので、$s_z$ は初期値の0から動かず、erankも2を超えません。つまり、このままでは2Dガウシアンは永遠に3Dになれません。
解決策:$s_z$ を「厚み」ではなく「透け具合」として描画に参加させます。
s_z^* = \mathrm{sigmoid}\left( \frac{s_z - \theta_z}{T_z} \right) s_z, \qquad \alpha_i^* = \alpha_i \, e^{-\lambda_z s_z^*}
- sigmoidの部分はスイッチの役割です。論文の設定は $\theta_z = 1.05$、$T = 0.001$ で、ほぼオン/オフの階段関数になります。
- 有効な厚み $s_z^*$ が大きくなるほど、不透明度が下がります。
学習中の流れは次のようになります。
- 半透明な領域(葉の隙間、髪、煙など)を担当する2Dガウシアンは、不透明な円盤ではうまく再現できない
- 損失が「もっと透けて」という勾配を出し、それが $s_z$ に届いて $s_z$ が増える
- $s_z$ が増えるとerankが上がり、閾値を超えたら3Dに切り替わる
- 以降は $s_z$ が本物の厚みとして投影描画に使われる
**「平面で表現できずに透けたがる場所こそ、体積が必要な場所」**という発想です。
読んでいて引っかかった点
$T = 0.001$ だとゲートがほぼ階段関数になり、$s_z < \theta_z$ の領域ではsigmoidの傾きもほぼ0になります。そのため、$s_z$ がどうやって閾値に到達するのかが本文だけでは読み取れませんでした。また、erankで見ると $s_z \approx 0.1$ で3Dに切り替わるはずなのに、$\theta_z = 1.05$ という値とどう整合するのかも不明です。$s_z$ を3DGSの実装と同様に対数スケールで保持している可能性などが考えられますが、確かめるには公開コードを見る必要があります。
5. Frequency-Decoupled Optimization
画像の「周波数」とは
画像の周波数は、「明るさがどれくらい細かく変化しているか」を表します。
- 低周波:ゆっくりした変化(全体の形、明暗、グラデーション)。ぼかしても残る情報。
- 高周波:急激な変化(エッジ、模様、細部)。ぼかすと消える情報。
DWT(Haarウェーブレット)で分解する
Haarウェーブレットは、画像を2×2ブロックごとに見て「平均」と「差」を取るだけのシンプルな変換です。
| 成分 | 中身 | 意味 |
|---|---|---|
| LL | 4画素の平均 | 低周波 |
| LH | 上下の差 | 水平方向の変化 |
| HL | 左右の差 | 垂直方向の変化 |
| HH | 対角の差 | 斜めの変化 |
例えば、真っ平らなブロック $\begin{bmatrix}100 & 100\100 & 100\end{bmatrix}$ はLLだけが値を持ち、差の成分はすべて0になります。縦エッジのあるブロック $\begin{bmatrix}100 & 0\100 & 0\end{bmatrix}$ では、左右の差を見るHLが大きな値になります。
EGGSでは、LLを低周波 $\mathcal I_l$、残りの3つを高周波 $\mathcal I_h$ として扱い、正解画像と描画画像のそれぞれで誤差を取ります。
\mathcal{L}_{low} = \| \hat{\mathcal{I}}_l - \mathcal{I}_l \|_2^2, \qquad \mathcal{L}_{high} = \| \hat{\mathcal{I}}_h - \mathcal{I}_h \|_2^2
役割分担
論文では、学習の序盤に低周波(全体の形)が先に合い、高周波(細部)は後半で詰められていくことが観察されています。これはガウシアンの得意分野とよく対応しています。
- 2Dガウシアン → 形状担当 → 低周波を重視
- 3Dガウシアン → 細部担当 → 高周波を重視
勾配の競合と射影
素朴に全損失を足して全ガウシアンに適用すると、うまくいきません。
\mathcal{L} = \mathcal{L}_{color} + \lambda_{low}\mathcal{L}_{low} + \lambda_{high}\mathcal{L}_{high}
低周波の勾配 $\mathbf g^{low}$ と高周波の勾配 $\mathbf g^{high}$ が逆向きになる(内積が負になる)ことがあり、両者が打ち消し合ってしまうからです。付録によると、このような「競合」は学習序盤で約45%、収束時でも約20%のガウシアンで起きています。
2次元ベクトルの例で考えてみます。
- $\mathbf g^{low} = (1, 0)$、$\mathbf g^{high} = (-1, 1)$ → 内積は $-1$ なので競合しています
- 素朴に足す:$(0, 1)$ → 低周波が進みたかった方向が消えてしまう
- EGGS(2Dガウシアンの場合):$\mathbf g^{high}$ から $\mathbf g^{low}$ に逆らう成分だけを取り除きます
\mathbf{g}^{high} \leftarrow \mathbf{g}^{high} - \frac{\mathbf{g}^{high} \cdot \mathbf{g}^{low}}{\|\mathbf{g}^{low}\|^2} \mathbf{g}^{low} = (0, 1)
これを足すと $(1, 0) + (0, 1) = (1, 1)$ となり、低周波の方向は守られ、高周波の有益な成分も残ります。3Dガウシアンの場合は逆に、高周波を優先して $\mathbf g^{low}$ の方を射影します。
この射影の考え方は、マルチタスク学習の PCGrad と同じです。EGGSの工夫は、**ガウシアンのタイプによってどちらを優先するかを変える(非対称にする)**点にあります。
上の射影式は本文の説明とPCGradの定義から筆者が書き起こしたものです。論文中の正確な式(式9、10)は原論文で確認してください。
6. 実験結果
見た目(PSNR↑)
| 手法 | Mip-NeRF360 | LLFF | Tanks&Temples |
|---|---|---|---|
| 2DGS | 26.81 | 24.93 | 22.96 |
| 3DGS | 27.43 | 26.12 | 23.85 |
| GaussianPro | 27.92 | 26.53 | 23.92 |
| EGGS | 27.96 | 27.34 | 24.41 |
SSIMとLPIPSでも、全データセットでEGGSが最良の結果になっています。
形状(DTU、平均Chamfer距離↓)
| 手法 | mCD | PSNR |
|---|---|---|
| 3DGS | 1.96 | 32.82 |
| 2DGS | 0.80 | 32.43 |
| GOF | 0.74 | 32.58 |
| EGGS | 0.91 | 33.65 |
形状の精度は2DGSやGOFに少し及びませんが、3DGSからは大きく改善しており、見た目は最も良い結果です。論文でも、**「形状で一番を狙うのではなく、トレードオフを改善する手法」**と位置づけられています。
効率(Tanks&Temples)
| 手法 | ガウシアン数 | 学習時間 | FPS |
|---|---|---|---|
| 3DGS | 1502K | 13分 | 158 |
| 2DGS | 416K | 15分 | 59 |
| EGGS | 754K | 11分 | 125 |
ガウシアン数は3DGSの約半分で、学習時間は最短です。描画速度は3DGSには及ばないものの、2DGSの約2倍出ています。
アブレーション(LLFF、PSNR)
| 構成 | PSNR |
|---|---|
| 3DGS | 26.12 |
| 2D+3Dを混ぜて、3DGSのラスタライザで描画 | 26.01 |
| + ハイブリッド・ラスタライザ | 26.23 |
| + タイプ交換 | 26.58 |
| + 周波数分離最適化(フル) | 27.34 |
面白いのは、周波数分離最適化を素の3DGSに足してもほとんど効果がない(26.19)のに、ハイブリッド表現と組み合わせると大きく効いている点です。2種類のガウシアンがあってこそ、非対称な教師付けが意味を持つということだと思います。
few-shot(3視点)やOOD(学習時と大きく異なる視点)の設定でも、3DGSと2DGSの両方を上回っています。
7. 限界と今後
論文で挙げられている限界は以下の通りです。
- ガウシアンのタイプの初期化がランダムで、点群の構造(平面っぽいかどうかなど)を利用していない
- 暗所、強い反射、動く物体が多いシーンなどは未検証
個人的には、SfM点群の局所的な平面性(PCAの固有値など)から初期タイプを決めるのは、比較的簡単に試せそうだと感じました。
8. 論文を読んでいて気になった点
- 実装の節でハイパーパラメータが「$\lambda_{low}=0.2$、$\lambda_{low}=0.4$」と書かれていますが、2つ目は $\lambda_{high}$ の誤植だと思われます。
- 汎化性能の説明で参照されている「表11」は、内容から見て表5のことだと思われます(表11は推論FPSの表)。
- $s_z$ のゲートとerank閾値の関係(4章の注意書き)は、コードで確認したいところです。
まとめ
- EGGSは、2DGS(形状が得意)と3DGS(見た目が得意)を1つのシーンに混在させ、学習中に入れ替えられるようにした手法
- ラスタライズは「距離 $d_i$ の測り方」だけをタイプ別に分け、それ以降の処理は共通化している
- タイプの切り替えは実効ランク(erank)で判定し、2D→3Dでは $s_z$ を不透明度経由で学習させる
- 画像を周波数で分解し、2Dには低周波、3Dには高周波を優先して教える。勾配が競合したら、優先度の低い方のぶつかる成分だけを射影で取り除く
3DGS系の手法を使っていて「見た目と形状のどちらかしか取れない」と感じている人には、発想として参考になる論文だと思います。
参考
- Y. Zhang, G. Sun, C. Chen. "EGGS: Exchangeable 2D/3D Gaussian Splatting for Geometry-Appearance Balanced Novel View Synthesis." NeurIPS 2025. arXiv:2512.02932(CC BY 4.0)
- B. Kerbl et al. "3D Gaussian Splatting for Real-Time Radiance Field Rendering." SIGGRAPH 2023.
- B. Huang et al. "2D Gaussian Splatting for Geometrically Accurate Radiance Fields." SIGGRAPH 2024.
- T. Yu et al. "Gradient Surgery for Multi-Task Learning (PCGrad)." NeurIPS 2020.
- O. Roy, M. Vetterli. "The Effective Rank: A Measure of Effective Dimensionality." EUSIPCO 2007.