Paint mountains, valleys, and oceans on the map! It will simulate evaporation, wind, and rainfall to determine biomes and rivers.
Treat this as a tool. Everything you create with it is yours to do with as you please. Credit is appreciated but not required. Download a high resolution version:
- Chrome/desktop, Safari/desktop, Safari mobile:
- Chrome/mobile, Firefox/mobile, Firefox/desktop: I haven’t gotten this to work (also see)
Goals for this project:
- A hand-drawn inspired look. If you look at maps from Lord of the Rings and other fantasy settings, you’ll see the rivers and coastlines are top-down but the mountains and trees are side view. The map above is rendered in full 3D (try the rotate_deg and tilt_deg sliders!) but I used a custom projection and outline to more closely match a hand-drawn map.
- Being able to paint your own features on the map. With procedural generation we usually let the system generate everything. I wanted to generate something (mountains, valleys, oceans), then let you change those things, and then generate the rest (biomes, rivers). Maybe in a future version also let you paint the biomes. Making the map paintable also meant I needed to make it fast.
Status of the project: Finished for now. I have a series of blog posts about how I made these maps:
- History of the project
- Elevation to match the desired look instead of tweaking the look to match the elevation
- Distance fields for elevation
- Multithreading to make it run acceptably fast
- Fixing the appearance of rivers
- Revisiting distance fields, which didn’t work out like I hoped
- Rainfall, biomes, evaporation, wind
- Rendering with an oblique projection, not the standard rotate+translate+scale
- Rendering outlines
- Some bug fixes
- River representation with binary trees
Also see my project from 2010, where I started developing these techniques. I have a long list of things I’d like to add, but I’m not actively working on them. I’d like to improve the UI, and also add trees, more biomes, towns, seasons, and lots more. Someday. Maybe that’ll be mapgen5.