TL;DR

  1. NeRF is slow because it queries an MLP for every sample along every ray. 3D Gaussian Splatting (Kerbl & Kopanas et al., SIGGRAPH 2023) represents the scene explicitly by millions of 3D Gaussians, without any neural network.
  2. Each Gaussian has a mean , a covariance (rotation as a quaternion + 3 scales, so it always stays valid), an opacity and a color (RGB or spherical harmonics).
  3. To render, the Gaussians are projected to 2D (), sorted by depth and alpha-blended: with . The same image formation as NeRF, only is computed differently.
  4. Real time through GPU rasterization: tiles and one global depth sort. Training: initialize from SfM points, optimize with an + D-SSIM loss, and clone / split Gaussians (adaptive density control).
  5. Limitations and follow-ups: high storage → compression (EAGLES); static scenes → Dynamic 3D Gaussians; no clean surface → SuGaR.

Exam relevance

Exam task 4: the NeRF and 3DGS rendering formulas were given; explain every symbol and compare the two. See Image Formation: NeRF vs. 3D Gaussian Splatting and the full comparison in Lecture 7.

Outline: problems of NeRF · point-based rendering · 3D Gaussian Splatting · applications and limitations (dynamic scenes, compression, surface reconstruction).

Problems of NeRF

Slide 3

  • NeRF suffers from slow training and rendering.
  • We have to query a neural network to get color and density for each point sampled along each ray.

Gaussian splatting instead places a few explicit primitives along the ray.

NeRF samples many points along a ray, Gaussian Splatting has a few Gaussians
Slide 3: NeRF (many MLP queries per ray) vs. Gaussian Splatting (a few explicit Gaussians).

Point-Based Rendering

Slides 4-6

One way around NeRF is to revisit point-based rendering, which is based on alpha blending: the color of a pixel is a blended combination of the colors of the points that fall into that pixel.

Surface splatting vs. volume splatting

How do we blend points in screen space?

Opacity for each point allows us to make points disappear:

: how much of the pixel the (projected) Gaussian covers; : how visible the Gaussian’s color is.

Surface splattingVolume splatting
Input datapoint cloud (surface)volumetric grid / voxel data
Rendering targetvisible surfaces onlythe full 3D volume, including internal structures
Appearanceopaque surfacestranslucent effects (fog, tissue, gas, clouds)
Projectionoriented disks or elliptical Gaussiansspherical or isotropic kernels
Compositingoften depth-buffer basedalpha blending with accumulation along rays
Use casereal-time surface renderingmedical / scientific volume visualization
3DGS blending formula compared with the NeRF formula
Slide 6: the 3DGS blending formula next to NeRF's. The product is the transmittance (probability that Gaussian i is not occluded).

Why not use alone as opacity?

is purely view-dependent: it changes with the camera angle and distance. The opacity is learned and view-independent: it encodes density, material (glass vs. wood) and boundaries. Separating the two makes the model more expressive (semi-transparency, fade-outs) and helps with correct compositing and anti-aliasing.

3D Gaussian Splatting

Goal and Overview

Slides 7-10

Goal: given images or videos and their camera poses, reconstruct the 3D world, and then render it from new (ideally unseen) views at high speed: novel view synthesis.

Slide 8: a scene reconstructed with 3DGS, explored from new views in real time.

3D Gaussian Splatting (Kerbl & Kopanas et al., 2023)

  • a splat-based representation
  • uses 3D Gaussians instead of points or a mesh (unlike points, Gaussians have a volume)
  • does not include any neural network
flowchart LR
  S["SfM points<br/>(COLMAP)"] --> I["Initialization"] --> G["3D Gaussians"]
  G --> P["Projection<br/>(camera)"] --> R["Differentiable<br/>tile rasterizer"] --> IMG["Image"]
  IMG -. "gradient flow" .-> G
  G <--> A["Adaptive density<br/>control"]
Method overview: SfM points, initialization, 3D Gaussians, projection, tile rasterizer, adaptive density control
Slide 10: method overview.

Initialization: run an SfM method (e.g. COLMAP) on the images. The SfM points give the 3D positions of the first Gaussians, optionally with a color.

Parametrization of a 3D Gaussian

Slides 11-12

Parameters of one 3D Gaussian

  • mean : the position
  • covariance : shape and orientation of the ellipsoid
  • opacity : a sigmoid maps the parameter to
  • color : 3 values (RGB) or spherical harmonics (SH) coefficients (view-dependent color)

How to Optimize the Covariance Matrix

Slides 13-14

A 3D Gaussian can be an ellipsoid rotated and stretched in any direction. Why not optimize the 9 entries of directly?

  • Not all symmetric matrices are covariance matrices, and gradient updates can easily make them invalid.
  • describes the configuration of an ellipsoid; it only has a physical meaning if it is positive semi-definite. This constraint is hard to enforce with gradient descent.

So we factorize it:

Covariance from rotation and scale

: diagonal scaling matrix (3 parameters). : rotation matrix, expressed analytically by a quaternion (4 parameters). This is the eigendecomposition of a covariance matrix; the result is always a valid (rotated, stretched) ellipsoid.

(Rotations as quaternions: Lecture 2.2.)

Projection of the Covariance into 2D

Slides 15-16

Projected 2D Gaussian

: viewing transformation (world → camera). : Jacobian of the affine approximation of the projective transformation. : the resulting covariance on the image plane (from the result, the third row and column are dropped).

Covariance RSS^TR^T projected to 2D with the Jacobian and viewing transformation
Slide 16: projection of the covariance matrix into 2D.

Intuition

Perspective projection is not linear (division by , see Lecture 2.1), so a projected Gaussian would not be a Gaussian anymore. Linearizing the projection around the Gaussian’s center (the Jacobian ) keeps it Gaussian, and the 2D covariance can be computed in closed form.

Image Formation: NeRF vs. 3D Gaussian Splatting

Slides 17-19

Point-based -blending and NeRF-style volume rendering share essentially the same image formation model.

NeRF (Slide 17)

Samples along the ray through the pixel, with density and color from the MLP and intervals .

3D Gaussian Splatting (Slide 18)

Blending the depth-ordered Gaussians that overlap the pixel .

SymbolMeaning
color of the pixel
the Gaussians overlapping the pixel, sorted front to back
color of Gaussian (from its spherical harmonics and the viewing direction)
learned opacity of Gaussian
the projected 2D Gaussian (mean , covariance ) evaluated at the pixel
how much Gaussian contributes at this pixel
transmittance: probability that Gaussian is not occluded by the Gaussians in front
Same formula C = sum T alpha c, alpha from density in NeRF and from opacity times 2D Gaussian in 3DGS
Slide 19: the image formation model is the same; only α differs.

Same formula, drastically different speed

The only difference in the equations is how is computed. In practice it matters enormously:

  • NeRF is a continuous, implicit representation of empty/occupied space. Finding the samples needs expensive random sampling along each ray, with noise and heavy compute.
  • Points (Gaussians) are an unstructured, discrete, explicit representation, still flexible enough to create, destroy and move geometry. Each pixel aggregates an ordered list of projected 2D Gaussians.

Why Is It Fast? A Special Case of Alpha Blending

Slides 20-21, 25-26

This maps directly onto the GPU graphics pipeline, which runs massively in parallel:

StageFor 3DGSRuns
1. Vertex shadertransform the center to screen spaceper vertex
2. Geometry shaderbuild a screen-space quad around the ellipse per primitive
3. Fragment shaderevaluate for every covered pixelper fragment
4. Blendingper pixel
Vertex shader, geometry shader, fragment shader and blending for a Gaussian splat
Slide 20: Gaussian splatting as a special case of alpha blending on the GPU.
A train rendered with 3DGS next to the visualized ellipsoids
Slide 21: the rendering (left) and the underlying 3D Gaussians (right).

How to go from 5 FPS to 100+ FPS (using the GPU efficiently):

  1. Tiling: split the image into tiles, so threads can work together. Each Gaussian is only checked against the tiles it overlaps, not against every pixel; much less overdraw.
  2. Single global sort: instead of sorting per tile or per pixel, sort all visible Gaussians once by depth (GPUs sort millions of primitives fast). Each tile then streams the sorted list and takes only the Gaussians that intersect it.
flowchart LR
  A["project all 3D Gaussians<br/>to 2D (screen bounds)"] --> B["one global<br/>depth sort"] --> C["assign Gaussians<br/>to 16×16 tiles"] --> D["render each tile<br/>independently, in parallel"]

Adaptive Control of the Gaussians

Slides 21-23

The SfM initialization only gives a sparse point cloud, but scenes are dense. So 3DGS adaptively controls the number of Gaussians during optimization:

  • Under-reconstruction (small geometry is insufficiently covered): clone the Gaussian.
  • Over-reconstruction (small geometry is covered by one large splat): split it into two.
Clone for under-reconstruction, split for over-reconstruction
Slide 23: adaptive density control.

Optimization

Slides 24-29

The Gaussians are optimized so that renders of the scene closely match the known dataset images:

Loss

between the rendered and the ground-truth image, plus a structural similarity term (D-SSIM). Gradients flow back through the differentiable rasterizer to all Gaussian parameters.

Slide 27: real-time rendering of a 3DGS scene
Slide 28: the bicycle scene
Comparison with ground truth, Mip-NeRF360, InstantNGP and Plenoxels
Slide 29: 3DGS vs. Mip-NeRF360, Instant NGP and Plenoxels on held-out views.

Limitations and Follow-Up Works

Slides 30-33

LimitationFollow-up
High storage costcompression (e.g. EAGLES)
Novel view synthesis of mostly static scenesextending to dynamic scenes (Dynamic 3DGS)
Unlike meshes, no clean / compact surfacesurface reconstruction (e.g. SuGaR)

Storage Cost and Compression

Slides 34-38

One Gaussian needs 59 × 4 bytes: mean (3) + scale (3) + rotation (4) + SH color (16 × 3 = 48) + opacity (1) = 59 floats. A scene has millions of them.

A 3DGS scene is stored as transforms plus a point cloud of Gaussian attributes
Slide 34: storage cost of a 3DGS scene.

Follow-up works on compression: Compact3D (vector quantization), EAGLES (ECCV 2024), LightGaussian (NeurIPS 2024, 15x reduction, 200+ FPS), Compact 3D Gaussian Representation (CVPR 2024), Compressed 3DGS (CVPR 2024), Reducing the Memory Footprint of 3DGS (I3D 2024).

EAGLES: Efficient Accelerated 3D Gaussians with Lightweight Encodings (ECCV 2024). Key components:

  • quantized embeddings: the Gaussian attributes are stored as quantized latents and decoded by a learned decoder, then projected and rasterized
  • coarse-to-fine training
  • influence pruning: remove Gaussians that contribute little
EAGLES: quantized latent attributes, decoder, projection, tile rasterizer, influence pruning
Slide 37: EAGLES.
Slide 38: 36 MB instead of 357 MB
Slide 38: 81 MB instead of 768 MB

Dynamic Scenes: Dynamic 3D Gaussians

Slides 39-42

Dynamic 3D Gaussians: Tracking by Persistent Dynamic View Synthesis (3DV 2024). The same Gaussians persist over time:

  • fixed / consistent over time: 3D size, color, opacity
  • changing per timestep: 3D center, 3D rotation

Because every Gaussian keeps its identity, following its center over time gives dense 3D tracks for free.

Tracks of Gaussians on a person swinging a racket
Slide 41: Dynamic 3D Gaussians
Slide 42: tracking 3D Gaussians over time

Surface Reconstruction: SuGaR

Slides 43-47

Mesh extraction: the naive way to get a mesh from Gaussian splatting is to run TSDF fusion or marching cubes. Problem: the reconstructed surfaces are not smooth, so the extracted meshes are very noisy (the scene is a fog of overlapping, semi-transparent Gaussians).

SuGaR: Surface-Aligned Gaussian Splatting for Efficient 3D Mesh Reconstruction and High-Quality Mesh Rendering (CVPR 2024). A density constraint aligns the Gaussians with the true surface:

  • Gaussians should have limited overlap and be well spread on the surface.
  • Gaussians should be fully opaque or fully transparent (otherwise iso-surfaces are meaningless).
  • Gaussians should be as flat as possible: one of the three scaling factors should be close to zero.
SuGaR scenes and extracted meshes
Slide 46: SuGaR
Flat Gaussians aligned with the surface
Slide 47: aligning Gaussians with the surface

Summary

NeRF3D Gaussian Splatting
Representationimplicit, an MLPexplicit, millions of 3D Gaussians, no network
Parametersnetwork weightsper Gaussian: , (quaternion), , , SH color (59 floats)
, computed, learned opacity × projected Gaussian
Renderingray marching, many MLP queriesrasterization: project, global sort, tiles, blend
Speedslow training, not real timefast training, 100+ FPS
Initializationnone (random weights)SfM points
Weaknessesspeed, editingstorage, static scenes, no clean surface

Self-Test

Why is NeRF slow, and how does 3DGS avoid it?

Which parameters does a 3D Gaussian have?

Why is factorized as ?

How is a 3D Gaussian projected to the image?

Write down the 3DGS image formation model and explain every symbol.

What is the same and what is different between the NeRF and 3DGS rendering equations?

Why does 3DGS render in real time?

What is adaptive density control?

What loss is used?

Name the three limitations of 3DGS and a follow-up for each.