Learn — what is gaussian splatting?
No triangles. No texture maps. A gaussian splat is millions of oriented ellipses hanging in space — each one holding a position, a size, a tilt, a color, and how solid it is. Together they carry the light your camera saw, and the room comes back exactly as it stood.
Drag the rail: same scene, more gaussians. The right end is nine thousand of them. A real capture runs into the millions, and keeps getting sharper the whole way.
Step · 01 — the loop
Nothing measures a splat into existence. MacSplat solves where your camera stood, scatters a rough cloud of ellipses into the scene, renders a guess from one of those viewpoints and holds it against the real frame. The difference tells every ellipse exactly how to improve— a little left, a little wider, a little greener, a little more solid. Then it goes again. Tens of thousands of times, until the render and the photograph are the same picture.
Why — the renderer runs backwards
Splatting a gaussian onto a pixel is a smooth bit of arithmetic, so it can be differentiated: for every pixel that came out too red, you can compute exactly how much each ellipse's position, size, tilt, color and opacity contributed to that redness. Slide all of them a hair down that slope and the next render is closer. That's the whole trick — the picture is the supervision, and nobody has to model anything.
Nine fat ellipses, one target image, and gradient descent doing the rest — running here, not a video. Watch the error panel drain and the fit climb past 35 dB. A blob flashes green when it splits: an ellipse too coarse for the detail it covers gets cut in two, invisible ones get deleted. That is how a splat gets from a few thousand to a few million without anyone deciding where they go.
Structure from motion matches features across your frames, solves the camera path, and drops a sparse point cloud. Every one of those points becomes a gaussian — that's the guess training starts from.
An ellipse that is blurring over real detail gets cloned and shrunk; one that ended up transparent or enormous gets thrown away. The count is never fixed — the scene decides it.
Each gaussian stores its color as spherical harmonics — a little function over directions — so a wet floor or a chrome kettle brightens as you move, instead of staying a flat painted patch.
Step · 02 — two approaches
Photogrammetry and splatting start from the same footage and the same solved cameras, then part ways. A mesh commits to geometry: it decides where the surface is, stretches triangles over it and bakes color into them — something you can edit, collide with, animate, print. A splat never builds a surface at all; it fits translucent ellipses until the render matches the photograph — the light of the place, kept as it was. Different logic, different technology, different answers. Which one is right depends entirely on what you plan to do next.
Move your pointer across to slide the divider; drag to orbit. Same frames, same cameras. On the left, geometry gets decided: clean, solid, light enough to hand to a game engine — and the curve of the handle, the rim of the glass and the glaze on the jug all get resolved into faceted surface, because surface is what a mesh has. On the right, nothing gets decided: the ellipses simply agree on what the frames showed, reflections and all.
Step · 03 — the ecosystem
Since the 2023 paper, splatting has grown its own editors, renderers and trainers. A few worth knowing:
The SIGGRAPH 2023 paper that started it all.
Open-source, in-browser editor for cleaning up and sharing splats.
Open-source CUDA library for training splats.
Splat trainer for Windows and NVIDIA GPUs.
Gaussian splatting renderer for three.js.
The tiny WebGL viewer that put splats in the browser.
Community forum — coming soon. Share your own splats there.