A single layer of noise is too smooth and cloud-like to read as a mountain. To look like real terrain, you sum multiple octaves — fBm (fractal Brownian motion) roughly doubles the frequency and halves the amplitude each pass, adding the noise together repeatedly. Low frequencies shape the big rolling hills; high frequencies add rippling detail.
This demo calls three.js’s THREE.SimplexNoise addon on the CPU, four octaves per vertex of a PlaneGeometry, to set each vertex’s height (y), then interpolates vertex color by elevation band — green (lowland) → grayish-brown (midslope) → white (snowcap). Calling geometry.computeVertexNormals() afterward to recompute normals for lighting is essential too.
The difference from vertex-displacement is where the math runs: that entry computes noise inside the shader every frame to animate a moving surface (waves, say); here it’s computed once on the CPU when the geometry is built, producing a static terrain. If nothing needs to move in real time, computing it once like this is far cheaper.
When to use
Game worlds, map-visualization backgrounds, any static terrain that needs "natural randomness."