A landscape from a noise function

In the early 2000s, putting a believable 3D landscape on screen was a studio job. An asset team would hand-sculpt terrain in Maya or 3ds Max, paint texture splatmaps, run normals through a baking pipeline, and ship the output as a heavyweight static mesh. Weeks of work per environment.

The shortcut, even then, was procedural noise. Ken Perlin had published Perlin noise in 1985; Stefan Gustavson cleaned up its successor Simplex noise in the 2000s. You sample noise at a point, you get a smoothly-varying number. You sample it at decreasing amplitude and increasing frequency and sum the results — fractal Brownian motion — and you get something that looks remarkably like a real landscape. The technique was known. What was missing was the hardware to run it in real time at any meaningful resolution.

This is sixty-five thousand vertices being displaced every frame by six octaves of Simplex noise plus a ridge component for the peaks, with surface normals estimated by sampling four neighbours per vertex, height-banded shading (water, grass, rock, snow), and atmospheric haze blending toward the horizon. A noise function and a vertex shader. The asset team is the GPU.

— fps

Want to bring WebGL to your site?
Let's talk about what it would take.

Book a discovery call →