The Hot Air Balloon — Drift Across a 60-Kilometer World
First-person view from a wicker basket. You drift over a procedural landscape. 5 altitude wind layers carry you. Mountains visible from 50 km. Other balloons follow the same currents. Sun arcs over 5 minutes.
What this is
You're in the wicker basket of a hot-air balloon. The world below is a procedural simplex-noise heightmap with biomes — forests, mountains, rivers, fields. Hold space to fire the burner; release to descend. Wind layers at 5 altitudes drift you laterally — smoothstep interpolation between them means changing altitude smoothly hands you to a different current. Tab toggles wind streamline visualization (colored arrows at each layer). 8 other balloons drift on the same wind function. Birds fly past. Mountains loom 38km out, visible to 50+. The sun arcs over a 5-minute day. The world feels enormous because it is — 60km sky dome, chunked LOD terrain, near/far clip from 1m to 80km.
Why this is mind-blowing
"Vast" is a feature you can engineer. The trick is layering: huge visibility, distant detail (the mountain ring), parallax-correct other agents (the balloons), and a slow time scale (5-minute day cycle). Hit all of them and the world reads as enormous. The model laid down all five layers from one paragraph.
Build a first-person hot-air balloon simulator in Three.js. Endless
procedural landscape below — simplex-noise heightmap with biome-based
coloring (forests, mountains, rivers, fields). Hold space to fire the
burner — flames roar audibly, the balloon climbs. Release to descend.
Wind currents at different altitudes drift the balloon laterally;
visualize wind as faint streamlines. Other balloons float in the
distance. Birds fly past at altitude. Sun arcs across the sky over a
5-minute day cycle. Mountains visible from 50km out.
Paste this into Claude, Cursor, or Copilot. Change one thing that matters to you.
What I learned shipping it
- Chunked LOD terrain (3 rings: 96/32/16 segments around the player) gives you effectively infinite world at 60 fps. The world streams as you drift.
- 5 wind layers at altitudes 50/250/600/1200/2400m with smoothstep interpolation between them models real atmospheric circulation simply enough to be playful — climb to find the wind that takes you where you want to go.
- Same getWindAt(y) function carries player AND 8 other balloons. They all genuinely follow the same currents. The world feels coherent because it IS coherent.