4D Gaussian Splatting
4D Gaussian Splattingでは、時間とともに変化するガウス表現として動画から動的なシーンを再構成し、任意の時点で任意の視点からリアルタイムにレンダリングします。
4D Gaussian Splatting(4DGS)は、動画から動的なシーンを再構築し、任意の時点で新しい視点からリアルタイムにレンダリングできるようにします。静的なシーンを、画面に投影・合成する何百万もの柔らかな3D楕円体で表現する3D Gaussian Splattingを拡張し、ガウスを時間とともに移動・回転・変形させたり、出現・消失させたりします。2023年10月に発表された2本の論文が、異なる設計でこの名称を導入しました。華中科技大学とHuaweiのGuanjun Wuらによるリアルタイム動的シーンレンダリングのための4D Gaussian Splatting(CVPR 2024)は、学習した変形フィールドを使って1組の3Dガウスを変形させます。復旦大学のZeyu Yangらによる4D Gaussian Splattingによるリアルタイムのフォトリアリスティックな動的シーン表現とレンダリング(ICLR 2024)は、空間と時間上で定義されたネイティブ4Dガウスを使用します。どちらも動的な新規視点合成の手法であり、自由視点映像とも呼ばれます。
4D Gaussian Splattingの仕組み#
最適な入力は、シーンを取り囲むカメラで撮影した同期動画です。たとえばNeural 3D Videoデータセット(Plenoptic Videoとも呼ばれます)には、18~21台のカメラで撮影した10秒間、30 FPSの録画が含まれ、カメラ姿勢はStructure from Motionで復元されています。移動するカメラ1台でも利用できますが、深度と動きの分離が難しくなります。学習方法は3D手法に従います。ある時刻のシーンを学習用カメラの1台からレンダリングし、実際の動画フレームと比較して、微分可能レンダラーを通じた勾配降下法ですべてのパラメーターを更新します。2つの設計は、指定した時刻のガウスを生成する方法が異なります。
- 変形フィールド:Wuらは、1組の標準3Dガウスを保持します。各時刻について、HexPlaneと同様に平面へ分解された、学習済みの空間・時間特徴を持つコンパクトなグリッドが各ガウスの特徴を提供し、軽量MLPが移動距離、回転、伸縮を予測します。この手法はRTX 3090 GPUで800×800の解像度を82 FPSでレンダリングします。
- ネイティブ4Dガウス:Yangらは、各プリミティブにx、y、z、時間にわたる4D平均と共分散を与え、2つのクォータニオンから4D回転を構成します。視線方向と時間による色の変化は、球面調和関数に時間のフーリエ級数を掛け合わせた4D球円筒調和関数で表します。Neural 3D Videoベンチマークでは、論文は114 FPSを報告しています。変形フィールド方式は36 FPSです。
時刻tでネイティブ4Dガウスをスライスする処理は、ガウス条件付けです。tを固定すると、中心が移動し共分散が小さくなった3Dガウスが得られ、時間方向の1D周辺分布によってガウスの不透明度がスケーリングされます。時刻tで時間方向の重みが無視できるガウスは、ラスタライズ前にスキップします。このPyTorchコードは、1つの4Dガウスを3つの時刻でスライスします。
import torch
torch.manual_seed(0)
# One 4D Gaussian over (x, y, z, t): a mean and a covariance that couples position with time
mean = torch.tensor([0.0, 0.0, 0.0, 0.5])
factor = torch.randn(4, 4) * 0.3
cov = factor @ factor.T + 0.01 * torch.eye(4)
# Slicing at time t conditions the 4D Gaussian on t, leaving a 3D Gaussian to rasterize
for t in (0.1, 0.5, 0.9):
center = mean[:3] + cov[:3, 3] / cov[3, 3] * (t - mean[3])
cov_3d = cov[:3, :3] - torch.outer(cov[:3, 3], cov[3, :3]) / cov[3, 3]
# The temporal marginal fades the Gaussian in and out around its mean time
opacity_scale = torch.exp(-0.5 * (t - mean[3]) ** 2 / cov[3, 3])
print(f"t={t}: center {center.numpy().round(2)}, opacity x{opacity_scale:.2f}, volume {cov_3d.det().sqrt():.4f}")出力される中心は、t=0.1における[0.23 -0.15 0.16]、t=0.5における[0. 0. 0.]、t=0.9における[-0.23 0.15 -0.16]です。不透明度係数は0.74から1.00へ上昇して再び0.74に戻り、その間も体積は0.1030のままです。条件付き共分散はtに依存しないため、各4Dガウスは形状が固定された3Dガウスとなり、直線上を滑るように移動して徐々に現れたり消えたりします。複雑な動きは、寿命の短い多数のガウスによって表現されます。
再構築誤差の大部分は移動する物体に起因するため、多くのパイプラインでは静的な背景と動的な前景要素を分離し、移動物体ごとに専用のガウス群を割り当てるものもあります。Ultralytics YOLO26のインスタンスセグメンテーションモデルをトラッキングモードで実行すると、動画全体で維持されるIDのもと、各フレームの人物や車両ごとにマスクが生成され、各移動物体に属するピクセルが示されます。
4D Gaussian Splattingと関連手法の比較#
- フレームごとの3D Gaussian Splatting:各フレームを個別に再構築すると、フレームごとにシーン全体を保存する必要があり、フレーム間でちらつきが発生します。4DGSは時間方向でガウスを共有するため、静的な背景は一度だけ保存され、動く部分の時間的一貫性も保たれます。
- 動的NeRF:D-NeRF、HexPlaneなどの動的なニューラルラディアンスフィールドも、標準シーンを各時刻に対応付けます。しかし、各カメラレイ上の多数の点でニューラルフィールドを評価するため、ガウスのラスタライズより大幅に遅くなります。変形フィールド方式の4DGSは、ラスタライズしたガウスを使い、標準表現と変形を組み合わせる同じ考え方に基づいています。
- 動的3Dガウス:Jonathon Luitenらは、各ガウスの色、不透明度、サイズを固定し、局所剛性の制約を設けながら位置と回転だけを変化させます。シーン内の全要素を高密度に追跡する6自由度のポイントトラッキングが、再構築の結果として得られます。
- 動画生成:動画生成モデルは、プロンプトから新しい映像を作り出します。4DGSはカメラで撮影された出来事を再構築し、新しい視点や時点から再レンダリングします。
実際のアプリケーション#
- VR・AR向けボリュメトリックビデオ:カメラリグで撮影したパフォーマンス、スポーツの瞬間、インタビューを、視聴者がヘッドセットやブラウザーで周囲を見回せる自由視点映像に変換します。
- テレプレゼンスとアバター:複数のカメラで人物を撮影し、遠隔コミュニケーションやデジタルツインに利用できる、動きのあるフォトリアリスティックな3D表現を生成します。
- 運転シミュレーション:自動運転車のチームは、交通の動きを含めて記録された運転シーンを再構築し、カメラを移動させて再レンダリングすることで認識システムをテストします。Street Gaussiansは、追跡した各車両を、最適化済みの追跡姿勢に従って移動する専用のガウス群としてモデル化します。学習は約30分で完了し、1066×1600の解像度で街路シーンを135 FPSでレンダリングします。










