MLエンジニアへの道 #69 - 3D Gaussian Splatting

Last Edited: 10/16/2025

このブログ記事では、コンピュータビジョンにおける3D Gaussian Splattingについて紹介します。

ML

前回の記事では、ボリュームレンダリング方程式を利用し、オブジェクトやシーンのradiance fieldsをニューラルネットワークで近似することで、 高品質な3D再構成と新規ビュー合成を実現するNeRFsについて紹介しました。しかし、NeRFsには長いレンダリング時間などの課題がありました。 そこで本記事では、レンダリング時間をリアルタイムアプリケーションに十分な短さにしただけでなく、新規ビュー合成の品質も向上させた、 3D表現とレンダリングに大幅に異なるアプローチを利用する3D Gaussian Splattingについて説明します。

ラスタライゼーション

NeRFsで使用されるボリュームレンダリングは、コンピュータグラフィックスの伝統的なレンダリング手法であるレイトレーシングと類似しています。 レイトレーシングは、ピクセルに対応する光線を3Dシーン(多くの場合3Dメッシュで表現)に投射し、光源を考慮してピクセルの色を計算します。 レイトレーシングは、光源と光の反射物理学を考慮した高品質な画像を生成できますが、レンダリング時間が遅いという代償があり、 映画の3Dグラフィックスなどの非リアルタイムなシナリオで使用されてきました。 NeRFsのボリュームレンダリングは基本的に同じ特性を持ちますが、NeRFsは本質的に光の反射物理学をモデル化できず、光源の変更も許可しません。 したがって、NeRFのレンダリングは、レイトレーシングの最大の利点である高品質な視点合成を享受せずに、 遅いレンダリング時間を持つという欠点を受け継いでいると言えます。

Traditional Renderers

代替のレンダリング手法として、ゲームエンジンなどのリアルタイムアプリケーションで伝統的に利用されているラスタライゼーションがあります。 これは3Dメッシュの可視部分を画像平面に変換し、高度に最適化されたシェーディングとアンチエイリアシングアルゴリズムで色とエッジを調整します。 また、Zバッファを使用して深度と遮蔽を処理します。ラスタライゼーションの詳細については深く掘り下げませんが、 本質的には3D表現を直接画像に変換し、光と深度を考慮するためのヒューリスティックを利用して品質を向上させ、 リアルタイムレンダリングのための高速なレンダリング速度と適度に高いレンダリング品質を実現します。 NeRFsが抱える遅いレンダリング速度を改善するには、微分可能で効率的なラスタライゼーションレンダリング手法とそれに適した3D表現を探すことが合理的です。 (ハードな頂点とエッジを持つ3D三角メッシュは最適化が困難なため、代替表現を用いることが望ましいです。)

3D Gaussian Splatting

代替の3D表現には、平均(位置)、共分散行列(ガウシアンの形状とサイズ)、透明度α\alphaを持つ3Dガウシアンを利用できます。 ガウシアンの視角依存色を表現するために、球面調和関数を利用できます。 (これは基本的に球面関数のコンパクトなパラメータ化であり、シグナルに対するフーリエ変換に類似しています。 球面調和関数の係数が多いほど、球面上の複雑な色のパターンを表現できます。) 3Dガウシアンを使用する利点は、完全な球や点よりも高い表現力を持つこと、扱いやすく最適化しやすいソフトな位置とエッジを持つこと、 そして最も重要なのは、それらの投影が2Dガウシアンになることです。 視点変換WWと投影変換のアフィン近似のヤコビアンJJが与えられた場合、 カメラ座標系における共分散行列Σ\SigmaΣ\Sigma'Σ=JWΣWTJT\Sigma' = JW \Sigma W^TJ^Tによって決定できます。 (最初の2行2列が2D分散行列を形成し、投影後のガウシアンの形状とサイズを表します。)

ここで、画像を使ってΣ\Sigmaを直接最適化するのは直感的ですが、Σ\Sigmaは正半定値でなければならず、これは維持するのが困難な制約です。 そこで、Σ\Sigmaの代替表現として楕円体の構成(伸縮された球)を使用できます。これはスケーリング行列SSと回転行列RRから構成され、 3軸の伸縮係数と3軸の回転をエンコードします。したがって、Σ\SigmaΣ=RSSTRT\Sigma = RSS^TR^Tとしてモデル化し、 3Dガウシアンの他のパラメータとともにSSRRを最適化できます。このガウシアンに対し発明されたレンダリングはタイルベースラスタライゼーションで、 画像を16×16のタイルに分割し、99%信頼区間で各タイルの視錐台と交差する3Dガウシアンを取得し、 深度に基づいて高速GPU基数ソートを実行し、α\alphaブレンディング(累積α\alphaが1に達するまで色の重み付き和を計算する)で各タイルを着色します。 このタイルベースラスタライゼーションは高度に並列化可能で、リアルタイムレンダリングに効率的であり、 微分可能であることが証明されており、真の画像とレンダリング画像を使用して3Dガウシアンのパラメータに対して勾配降下法を実行することが可能です。 (ラスタライゼーションの詳細や3Dガウシアンのパラメータへの勾配の流れについては、元の論文を参照してください。)

3D Gaussian Splatting

初期の3Dガウシアンは等方的(完全な球)にでき、ランダムに、またはカメラキャリブレーション用のSfMから生成された点群から取得できます。 その後、ガウシアンのパラメータは勾配降下法を用いて勾配により最適化できます。 しかし、多くの場合初期のガウシアンの初期セットは少なすぎるので、ガウシアンの密度化または追加が必要です。 密度化が必要なシナリオは主に2つに分類できます:構築不足(ガウシアンが小さすぎて体積をカバーできない)と構築過多(ガウシアンが必要な特異性に対して大きすぎる)で、 実験的に両方とも大きな勾配を持つことが明らかになっています。そこで、100反復回ごとに、ガウシアンの勾配が事前定義された閾値(τpos=0.0002\tau_{\text{pos}}=0.0002)を超える場合に、 高分散の大きなガウシアンを2つの小さなガウシアンに分割し、小さなガウシアンを複製して勾配方向にクローンを移動させることで密度化します。 また、フローター(入力カメラ近くのほぼ透明な体積で、NeRFでも品質を悪化させる問題となっている)を避けながらガウシアンの数を適度に増やすため、 3000反復回ごとにすべてのα\alphaを0に設定し、最適化で必要に応じてα\alphaを増加させ、 100反復回ごとに事前定義された閾値(ϵα\epsilon_{\alpha})より小さいα\alphaを持つガウシアンを除去します。

3Dガウシアン(その共分散行列は楕円体の構成として表現される)を使用したこの巧妙な3D表現、効率的で微分可能なラスタライザー、 上記の適応密度制御を伴う思慮深い訓練スキームを利用するこの技術は3D gaussian splattingと呼ばれ、 高解像度(1080p)での高度に複雑なシーンのリアルタイムレンダリングを実現しただけでなく、 複雑で解釈不可能なMLPなしにNeRFのレンダリング品質を上回りました。NeRFに対する優れた性能により大きな認知を受け、 Nerfstudioに実装され、今日に至るまでに多くの産業応用にライセンスされています。 これらの成功は目覚ましいものですが、光反射物理学に関する本質的な制限は解決されるべき課題として依然残っています。 リライティングのための異なる照明設定を持つデータセットの作成や、合成ビューをシェーディングするための深層学習アプローチの取り組みがありますが、 これは根本的な問題に取り組んでいません。 光の跳ね返り効果をモデル化するより一般的なレンダリング方程式(Torralba, A., Isola, P., & Freeman, W. (n.d.)の記事で示されたもののような)の使用を提案する人もいるかもしれませんが、 適切な3D表現と効率的で微分可能なレンダラーの作成と設計は、言うは易く行うは難しです。

結論

この記事では、ラスタライゼーションと3D gaussian splattingの基本概念を紹介しました。 これは新規ビュー合成の現在の最先端技術と言っても良いでしょう。 ラスタライゼーションプロセスと勾配計算の詳細に興味がある場合は、 以下に引用されたリソースをチェックすることをお勧めします。(元の論文とGitHubリポジトリをチェックすることを強くお勧めします。) このトピックの研究を追求することに興味がある場合は、コンピュータグラフィックスの分野と今までカバーしてきた概念に用いられる数学により深く取り組むことを強くお勧めします。

リソース