← Back

Learning Gaussian Splatting

A ground-up interactive journey through the math and algorithms needed to understand 3D Gaussian Splatting — from collision geometry to projections and beyond.

📐

SAT Collision Detection

The Separating Axis Theorem — projections, edge normals, overlap detection, and the Minimum Translation Vector. Interactive draggable demos.

SAT · Projections · MTV · Physics Response
🟦

Oriented Bounding Boxes

How OBBs represent anisotropic Gaussian blobs. Covers the rotation matrix convention, 4-axis SAT, and deriving an OBB from a covariance matrix.

OBB · Rotation Matrix · Gaussian Covariance
〰️

smoothStep & Differentiable Parameters

Hermite interpolation for keeping optimisable parameters in valid ranges. Covers the formula, zero-derivative endpoints, automatic differentiation, and gradient descent simulation.

Calculus · Autodiff · Optimisation
🎨

Alpha Blending & the Rendering Pass

How sorted Gaussian blobs are composited into a final pixel using premultiplied alpha. Includes the forward blend, the termination condition, and the backward undo pass for gradients.

Alpha · Compositing · Forward · Backward Pass
🔵

The 2D Gaussian: Evaluation & Bounds

The bivariate Gaussian formula, covariance matrix shapes, inverse covariance, and extracting an oriented bounding box via eigendecomposition.

Gaussian · Covariance · Eigenvalues · OBB
⚙️

GPU Parallel Algorithms

Three workgroup-level algorithms: binary tree reduction for gradient accumulation, compare-and-swap floating-point atomics, and bitonic sort for depth ordering.

GPU · Bitonic Sort · CAS · Reduction
🔲

Tile-Based Coarse Rasterization

How the GPU divides the image into tiles and uses strided workgroup iteration to build a per-tile short-list of Gaussians via bounding-box intersection tests.

Tiles · coarseRasterize · calcUV · Strided Loops
🎬

The Render Pipeline — splatBlobs

How the four pipeline stages chain together using phantom types to enforce order, which stages are differentiable and why, and the fineRasterize forward blend.

splatBlobs · Phantom Types · fineRasterize · Pipeline

Differentiable Rendering & Training

Why the blending loop needs a custom backward pass, the state-undo trick that avoids O(N) memory, Slang's auto-diff vocabulary, and the Adam optimizer.

Auto-diff · State Undo · bwd_diff · Adam