Zenn
🌟

3D Gaussian Splatting 徹底解説

2025/02/05に公開

導入(背景・概要)

近年、Neural Radiance Field(NeRF) 系手法が登場し、複数視点の写真から新たな視点の画像を合成する「Novel View Synthesis」が大いに進歩しました。しかし、高品質な映像を得るには大量のサンプリングや大規模なニューラルネットワークを要し、学習や推論(レンダリング)が比較的遅いという難点がありました。

そこで注目を集めているのが 「3D Gaussian Splatting」 です。この手法は、NeRF 的なボリュメトリック表現の発想をうまく取り入れながら、ポイントベース描画の高速性を兼ね備え、リアルタイム(30fps以上)でのレンダリング と短時間の学習を両立する画期的なアプローチとして登場しました。実際、数分〜数十分の学習で従来の高速 NeRF 系手法(InstantNGP など)と同等の速度を実現しながら、高品質なモデルは Mip-NeRF360 クラスと同等か一部上回るという評価が報告されています。

本記事では、「3D Gaussian Splatting がなぜこれほど注目されているのか?」を 初心者にもわかりやすく、かつ 一般的に疑問に思われがちなポイント を中心に整理します。NeRF との比較、ガウス分布を使う利点、学習や推論の流れなど、話題の論文に触れたい方・実際の実装イメージが欲しい方の一助になれば幸いです。

参考リンク


本文(詳細解説)

1. なぜ「3D Gaussian」なのか?

1.1 ボリュームレンダリングとポイントベース描画の融合

  • NeRF は、シーンの「密度」と「放射輝度(Radiance)」を連続的な MLP などで表現し、レイマーチングで積分して画像を合成します。高品質ですが、サンプリング数が多く計算コストが大きいです。
  • 一方、従来の ポイントベース描画 は、点群を投影してアルファブレンディング(スプラット)するのみで高速ですが、MVS(Multi-View Stereo)に依存したり、点の密度が低いと穴が開きやすいという弱点がありました。

1.2 3D Gaussian の利点

  • 各点を 「3D 空間上のガウス分布(密度場)」 として扱うことで、
    • ボリュームレンダリング同様に 連続的な勾配計算 ができ、シーン形状を微分可能な形で最適化できる。
    • 「投影→スプラット描画」で高速にレンダリングできる。
  • さらに、ガウス分布を 楕円体(異方性ガウス) として扱えば、曲面や細い構造を少ない個数で表現しやすいです。

1.3 SH(球面調和関数)による視点依存色

  • 色を単に “単色” ではなく、Spherical Harmonics(SH) で方向依存を持たせます。
  • これにより、弱い鏡面反射や角度による色の変化もある程度表現できます。

2. モデル構成:大量の 3D Gaussians

2.1 1ガウスあたりのパラメータ

  1. 位置μR3\mu \in \mathbb{R}^3
  2. 形状:スケール + 回転(共分散行列)
    • スケールは 3 次元、回転はクォータニオン(4 次元)などで表現 → 合計 7 次元程度
  3. 不透明度 α\alpha(1 次元)
  4. 色(SH 係数)
    • たとえば 4 バンドの SH を RGB で持てば 48\sim 48 次元ほど

まとめると、1ガウスあたり 30〜60 パラメータ が典型的です(設計による)。

2.2 シーン全体でどのくらい?

  • 複雑な屋外シーン だと 数十万~数百万個 のガウスが必要になるケースがあります。
  • 1ガウスあたり 30 パラメータ × 100 万ガウス = 3000 万パラメータ と聞くと大きく感じますが、NeRF の大規模 MLP と大差ない、あるいはそれ以上になる場合もあります。
  • しかし、投影ベースのレンダリング によりレイマーチングを回避しているため、数百万ガウスでもリアルタイム合成が可能という点が特徴です。

3. 学習(トレーニング)フロー

3.1 必要データ

  1. 複数の写真
    • シーンを様々な角度から撮影した画像が必要。
  2. 各写真のカメラパラメータ
    • 内部パラメータ(焦点距離など)と外部パラメータ(位置・向き)。
    • SfM(Structure-from-Motion)で推定するのが一般的。
  3. 初期の 3D 点群(オプション)
    • SfM で得られたスパースな点群を初期配置にすると、学習がスムーズ。
    • ランダムに配置しても学習は可能だが、収束が不安定になりやすい。

3.2 勾配降下と密度制御

  1. 投影によるレンダリング
    • 3D Gaussian の集合をカメラに向かって投影し、タイルごとにソート→α\alpha ブレンディングして 推定画像 を生成。
  2. 損失関数
    • 推定画像と実写画像を比較(たとえば L1 + D-SSIM)して誤差を計算。
  3. パラメータ更新
    • 勾配(Adam など)を計算し、ガウスの「位置・回転・スケール・不透明度・色」パラメータを一括更新。
  4. 増やす/減らす
    • 「Clone / Split / Prune」によりガウス数を適応的に制御。
      • Clone: 表現しきれていない細部にガウスを複製
      • Split: 大きすぎるガウスを分割して精密化
      • Prune: 不要 or 役に立っていないガウスを削除
  5. 上記を繰り返す
    • 数千~数万回のイテレーションでシーンが収束し、数分〜数十分の学習で高品質になる事例が多い。

4. 推論(レンダリング)フロー

4.1 レンダリング時に必要なデータ

  • 学習済みガウス集合
  • 新規視点(カメラ)のパラメータ

4.2 手順

  1. カメラパラメータをもとに「各ガウスが画面上のどこに投影されるか」を計算。
  2. タイル(16×16 など)ごとに、ガウスを 深度順(Zソート)で並べる(Radix ソートなど)。
  3. 画素ごとにガウスを前から順に α\alpha ブレンディング し、最終色を求める。
    • このときカラー計算に「ビュー方向 → SH を評価」して視点依存色を出す。
  4. 全画素の合成が終われば 新視点画像 が完成。

レイマーチングを行わない分、数百万ガウスでも 30fps 以上 を叩き出せる、というのが大きな特徴です。


5. NeRF との比較

  1. 学習・推論速度

    • NeRF(MLPベース)はレイマーチング+MLP の評価が重く、学習・推論どちらも時間がかかりがち。
    • 3D Gaussian Splatting は投影 + スプラット描画のため、高速な学習(数分〜数十分)と リアルタイム推論(30fps以上@1080p)を実現。
  2. 画質

    • Mip-NeRF360 など最新手法は非常に高画質だが学習に数時間〜数十時間を要する。
    • Gaussian Splatting は同等品質を短時間で達成可能と報告されており、「速さ × 品質」 の両立が評価されている。
  3. モデルサイズ

    • NeRF(特にハッシュグリッドなど)だと数MB〜数百MB、場合によっては数GBになることも。
    • Gaussian Splatting も複雑シーンでは数百万ガウス→数千〜数億パラメータ級になる場合がある。
    • しかし、タイルベースの並列ソートソフトウェアラスタライザ によって高速化でき、実用上問題ないとされる。
  4. 一般化

    • NeRF と同様、「シーン専用モデル」 であり、未知のシーンにそのまま使えるわけではない。
    • 新しいシーンでは改めてカメラ画像を集めて学習する必要がある。

6. よくある疑問まとめ

Q1. 「本当にガウスのパラメータが収束するの?」

  • NeRF 同様、「レンダリング画像 vs. 実写真」の誤差を最小化する勾配をとれば、ガウス分布の位置・形状・色が調整される。
  • さらに 初期点群の利用学習率スケジューリングガウスの増減制御 などで、学習が安定しやすい工夫がされている。

Q2. 「結局ガウスの数が増えすぎるのでは?」

  • シーンが複雑なら多くなる傾向はある。ただし Prune で不要ガウスを削除し、無秩序に肥大化しないよう管理。
  • GPU 並列化で大量ガウスをリアルタイム処理できるよう設計されており、「多いから遅い」という単純図式にはならない。

Q3. 「NeRF とどう違う?なぜ流行る?」

  • 最大の強み「高速学習 × リアルタイム描画」 で、NeRF 的な高品質をほぼ保持している点。
  • NeRF 研究コミュニティの成果を踏まえたうえで「ボリュームレンダリング→ガウススプラット描画」へ転換し、効率化を実現しているところが斬新。

まとめ(考察・結論)

3D Gaussian Splatting は、

  • 「NeRF がもたらした高品質なボリューム表現」と「ポイントベース描画の高速性」を両立
  • 学習時:不要ガウスを削除しつつ細部を分割・複製して形状を緻密化する適応アルゴリズム
  • 推論時:ソート & スプラットによる高速な可視化(リアルタイム)

という構成により、「高画質×高速」として注目を浴びています。特に、

  • 数分〜数十分の学習で十分高品質を得られる
  • 1080p で 30fps 以上のリアルタイム描画が可能
    という点が大きなインパクトです。

一方で、

  • シーンが複雑だと数百万ガウスに達し、メモリ利用も増える
  • 汎用的な「未知シーンへの一般化」はなく、シーン単位で学習が必要
  • いくつかの領域外の視点(未観測領域)ではアーティファクトが出る可能性もある

などの課題は、まだ今後の研究で改善される余地があります。

総じて、NeRF の「画質重視で重い」イメージを払拭しつつ、NeRF の良さを継承する次世代アプローチとして、研究者・実務者から大きく期待されているのが 3D Gaussian Splatting です。もし「NeRF は興味あるけれど、学習時間や推論速度がネック…」という方は、この手法が真っ先に候補になるでしょう。


参考リンク

「NeRF vs. 3D Gaussian Splatting」の全体像や実際のデモを見たい方は、上記リンク先をぜひ参照ください。実写シーンや大規模データセットで、短時間学習&リアルタイムレンダリングを実証している映像が公開されています。今後もさらなる最適化や圧縮技術が加わり、より使いやすくなると期待されています。

Discussion

ログインするとコメントできます