Paper Breakdowns  /  3D Gaussian Splatting
Paper 67~11 min readSIGGRAPH 2023worked math + runnable code
Paper Breakdown

Gaussian splatting,
explained.

NeRF proved you could turn a handful of photos into a photorealistic 3D scene you could fly through — beautiful, and painfully slow, because rendering each frame meant marching a neural network along thousands of rays. Gaussian Splatting kept the photorealism and threw out the slowness by changing what a scene is: not a neural network to query, but a cloud of millions of fuzzy 3D blobs you paint onto the screen back-to-front. The result renders in real time, over 100 frames a second. Here's the representation, and the blending math that makes it fast.

Video breakdown
The animated walkthrough is in production.
Read the full breakdown below in the meantime ↓
01

NeRF's speed problem

Neural radiance fields (NeRF) represent a scene implicitly: a small neural network that, given a 3D point and a viewing direction, returns a color and density. To render one pixel you cast a ray into the scene and march along it, querying that network at many sample points and integrating the results. Gorgeous quality — but that's dozens or hundreds of network evaluations per pixel, per frame. Rendering is seconds per image, nowhere near interactive.

Gaussian Splatting asks: what if the scene were explicit — a concrete geometric thing you could draw directly, the way GPUs love to draw triangles — instead of a function you have to probe? Then rendering becomes rasterization, which hardware does astonishingly fast. The trick is choosing a primitive that's explicit and drawable, yet soft enough to represent fuzzy real-world appearance and be optimized smoothly. That primitive is the 3D Gaussian.

The one-sentence version

Represent the scene as millions of 3D Gaussian blobs and render by projecting and alpha-blending them front-to-back — fast rasterization instead of slow ray-marching through a network.

02

A scene of Gaussians

The scene is a collection of 3D Gaussians, each a soft ellipsoidal blob defined by four things: a position (its center), a covariance (its shape and orientation — how stretched, in which directions), a color (view-dependent, via spherical harmonics), and an opacity. A single Gaussian is a smooth lump of colored, semi-transparent fog; a million of them, arranged in space, can reconstruct a whole scene in fine detail.

The softness matters. Because each Gaussian falls off smoothly from its center — its footprint is densest in the middle and fades outward — the representation has no hard edges to alias, and every parameter is differentiable. That means the whole scene can be optimized by gradient descent (section 04), which a mesh of hard triangles can't be nearly as gracefully. Explicit enough to rasterize, soft enough to optimize: that combination is the whole design.

03

Splat and composite

To render a view: project every 3D Gaussian onto the image plane (a "splat" — a 2D Gaussian footprint), sort them by depth, and blend them front-to-back with alpha compositing. A pixel's color accumulates each Gaussian's contribution, weighted by how much light is still unblocked by everything in front of it — the transmittance:

C = Σi ci · αi · Ti  ,  where Ti = Πj<i (1 − αj)

Transmittance Ti is the running product of "what got past" all the nearer, more opaque splats, so a fully opaque Gaussian in front (α = 1) drives T to zero and occludes everything behind it — exactly as physical over-painting should. It's the same volume-rendering equation NeRF integrates, but applied to a sorted, discrete set of Gaussians you can rasterize in one fast pass, not sampled along rays through a network. The runnable version below computes this compositing and shows why depth order matters.

04

Fitting to photos

How do you get the millions of Gaussians in the first place? You optimize them to reproduce your input photos. The pipeline is fully differentiable, so gradient descent can tune every Gaussian's position, shape, color, and opacity to minimize the difference between rendered views and the real photos:

Building a splat scene
InitializeStart from a sparse point cloud (structure-from-motion over the photos); one Gaussian per point.
RenderRasterize + composite to produce a view; compare to the real photo.
OptimizeBackprop the image error into every Gaussian's parameters.
DensifyAdd Gaussians where detail is missing, prune transparent/redundant ones.

That last step — adaptive density control — is what lets the scene allocate detail where it's needed: splitting Gaussians in under-reconstructed regions, removing ones that contribute nothing. After a few minutes of optimization you have a scene that renders novel viewpoints in real time. Training is fast, rendering is faster.

RUN IT YOURSELF

Alpha compositing, splat by splat

The rendering equation is a few lines. This composites depth-sorted splats front-to-back — pixel color = Σ cᵢ·αᵢ·Tᵢ with transmittance Tᵢ the running product of (1−α) in front — so two semi-transparent splats blend to 0.75, and a fully opaque front splat (α=1) occludes everything behind it. It also shows a Gaussian's footprint peaking at its center and fading with distance, and why depth order matters: the same two splats give a different color depending on which is in front, because it's occlusion, not a plain sum. Change the colors, opacities, or order and watch it composite.

CPython · WebAssembly
05

Real-time results

The headline is the combination of quality and speed that had never coexisted:

PropertyGaussian Splatting
Real-time rendering100+ FPS at high resolution — interactive, unlike NeRF's seconds-per-frame.
Top-tier qualityMatches or exceeds NeRF-class methods on novel-view synthesis benchmarks.
Fast trainingMinutes to fit a scene, versus hours for many NeRF variants.
Explicit & editableThe scene is a concrete set of primitives you can move, cull, or composite — not an opaque network.

That last point is quietly important: because the scene is explicit geometry, it plays well with existing graphics pipelines and can be edited, animated, and combined in ways an implicit network resists. Real-time speed plus an explicit, malleable representation is why it moved so fast from paper to product.

06

Why it took off

Gaussian Splatting spread through graphics and vision almost overnight, spawning a huge wave of follow-ups: dynamic and animatable scenes, avatars, SLAM, compression, generative 3D. The reason is the same one that made it fast — an explicit, differentiable, GPU-friendly primitive sits at a sweet spot the field had been circling, and once someone showed it worked at real-time speed with NeRF-level quality, everyone could build on it.

Its deeper lesson is about representation choice. NeRF's implicit network was a beautiful idea whose cost was baked into the representation itself — you couldn't make querying-a-network-per-sample cheap. Switching to an explicit set of soft primitives didn't just optimize the old approach; it changed the computational character of the problem from "evaluate a function millions of times" to "rasterize millions of things," which is exactly what graphics hardware was built for. Sometimes the biggest speedup comes from picking a representation the hardware already loves.

Worth knowing

The front-to-back sorting is the one part that isn't free — correctly ordering millions of splats per frame is a real engineering challenge, handled with fast GPU radix sorts and approximations, and it's where much follow-up work focuses.

Frequently asked

Quick answers

What is Gaussian Splatting?

A real-time novel-view method that represents a scene as millions of 3D Gaussians and renders by projecting and alpha-compositing them front-to-back — fast rasterization, not ray-marching.

Why is it faster than NeRF?

NeRF queries a neural network many times per pixel; Gaussian Splatting rasterizes explicit primitives, which GPUs do extremely fast — reaching 100+ FPS.

How is the pixel color computed?

C = Σ cᵢ·αᵢ·Tᵢ over depth-sorted splats, where transmittance Tᵢ = Π(1−αⱼ) of the nearer ones — so opaque front splats occlude what's behind.

How is a scene made?

Initialize Gaussians from a sparse point cloud, then optimize their positions, shapes, colors, and opacities by gradient descent to match input photos, densifying where needed.

3D Gaussian Splatting for Real-Time Radiance Field Rendering · Kerbl, Kopanas, Leimkühler, Drettakis · SIGGRAPH 2023 · read the original paper on arXiv → · Vibe Engines · 2026
Finished this one? 0 / 101 Paper Breakdowns done

Explore the topic

See this alongside everything else on the same subject — handbooks, system designs, challenges and tools, in one place.

More Paper Breakdowns