New video out! This one is all about placing settlements on the map. Some new algorithm design in here that I'm really excited about. Things are looking a lot more lively now that we can start seeing where the cities would go.
DEAR READER
Aqua Utopia|海の底で記憶を紡ぐ
tumblr dot com

roma★

ellievsbear
Keni
No title available
Cosmic Funnies
PUT YOUR BEARD IN MY MOUTH

No title available
cherry valley forever
trying on a metaphor
NASA

No title available
YOU ARE THE REASON
Peter Solarz

Love Begins

JBB: An Artblog!
h
Show & Tell
seen from United States

seen from Türkiye
seen from United States

seen from United States

seen from United States

seen from Singapore

seen from Canada
seen from Azerbaijan
seen from United States

seen from United States

seen from United Kingdom

seen from Canada
seen from Italy

seen from Guernsey

seen from Canada
seen from Venezuela
seen from United States

seen from Brazil
seen from Brazil
seen from Brazil
@multiversal-maproom
New video out! This one is all about placing settlements on the map. Some new algorithm design in here that I'm really excited about. Things are looking a lot more lively now that we can start seeing where the cities would go.
Working on settlement placement and yeah this is the part of the whole fantasy mapmaking software that I've wanted to get to the whole time. The dots are potential settlement locations and the rings are the radius around them they need to control to be viable.
I got OBS working again so here's another video! This one is about biomes, but it's really about clustering algorithms, and also the worldbuilding iceberg. Let me know what you think!
Also, this is the last video where I'll be talking about physical geography. From here on out its going to be cities and polities and trade routes for the next couple months at least. That's the part of the project I've been excited to get to this whole time.
This week's video is all about adding lakes and rivers! Every possible error happened while recording this, so it took about half a dozen tries. I think the lakes and rivers are looking pretty solid, though.
Got inland lakes working! Took a really brute-force approach of finding inland low points and filling them up from there until precipitation plus evaporation didn't provide enough water to go any deeper. This turned out to run way faster and be way more robust than anything more elegant I tried. I'm not sure yet how it's going to look with rivers, though, and I worry that the brute-force approach is going to create some nonphysical river structures? So the next step is going to be trying that out.
In between videos I've been putting in some time fixing parts of the basic terrain map that had been bothering me (especially edge oceans and island generation) and it's still not perfect but this is way closer to what I'd originally envisioned.
This week's video is all about using real-world data to inform climate generation for a fantasy world. I really wanted to post more about the process on Tumblr during the week, because the goal here is more documentation and giving myself a diary of the process, but putting this video together ended up being way too much of a heads-down scramble for any coherent posting about it along the way. This next week is going to be less real-world data and statistics than this, and I'm hoping that'll give me some time to post more conceptual plans.
In this week's video, I get into the process of labelling features like mountains and islands. This is one of those steps that's going to make things way smoother further down the line for this project. Looking forward to hearing what people think of this!
update on terrain generation and the corresponding magic flows generation
Yeah I think this is a good place to leave terrain generation for now while I work on other things.
Got another video out about what I'm trying to do here! Spent an embarrassing amount of time over this past week trying to upload a gif of the slime mould growth I talk about in this video, but they've all been over Tumblr's gif size limit. Anyway, managed to get it all in the YouTube video.
trying to model ley lines in a way that doesn't just feel like boring straight geodesics
Using the algorithm that computational biologists use to model slime moulds. Currently playing around with parameters:
I think this is kind of a promising direction?
Made a video to try to describe what I'm doing here with the map generation. I've never done any video editing (or video recording) before, and so this took about times as long to make as the underlying terrain generation code. So I'm not sure I'll do this again. But also it feels like a decent way to advertise the project? Anyway, I'd be really grateful for any feedback on this.
tweaking the coastlines
So at this point we have somewhat realistic looking coastlines - but I wanted to make a couple more changes to get us a little closer to interesting fantasy maps.
First, I wanted to fix up the coastlines so that they weren't all such gradual slopes towards the ocean. Because the Perlin noise we're using to get the overall structure of the terrain doesn't know where the ocean starts, the ocean shoreline has the same gradual continuous slope from land to sea as any other elevation on the map. This isn't the worst approximation, but it does mean that we don't get any differentiation between steep rocky coastlines and gradual coastal marshes.
Fixing this up just means increasing the gradient along the coastline in the direction away from the ocean. This is a subtle change, but it does give some more variety right along the shorelines. Here are some before and after comparisons:
Next, I wanted a few more islands on the map. The baseline Perlin noise terrain generation does give us some islands, but I thought a few more isolated landmasses would be cool. When we think of a fantasy world with larger-than-life geography, we should probably have some islands, right?
This ended up being much trickier than expected. Getting a bunch of small islands of a reasonable size and placement is actually kind of tough. I think part of the problem here is that I don't have real metrics for the islands other than what looks cool?
In the end, I ended up randomly generating new sizes and locations for islands as echoes of the islands that the Perlin noise already generated. Here are some before and after comparisons. You might have to click to zoom in, because the islands are pretty small in these pictures:
From here, I think the next step is going to be adding some less-realistic more-fantasy forms of elevation and experimenting with that. This might also require some amount of labelling beyond just elevation and ocean. Expect another blog post about that soon.
I'm also probably going to have to figure out how to share this project off Tumblr. I'm dreading that just a bit, because it's easy and comfortable to write a long blog post on Tumblr and kind of awful to write something snappy and optimized anywhere else. But given how much effort this project is starting to take, I'd like to be able to show it off to a wider audience.
building oceans and coastlines
So previously we used Perlin noise to build terrain maps that looked plausibly smooth but also noisy. This worked surprisingly well! It gives us maps that look like this:
Our brains don't really parse this as a map, of course. It doesn't have the right colours, and also it doesn't have the large-scale delineation of land and water that's the most basic part of what we imagine when we think of a map. But we can fix that by slapping a nicer colour scheme on the whole thing and declaring that the lowest-elevation 50% of pixels are ocean:
This is a huge improvement! Unfortunately, the way we're declaring the location of the ocean is kind of limiting. Saying "the lowest-elevation 50% of pixels is ocean" doesn't guarantee that the ocean is all connected together. However, it does guarantee that no land is ever below sea level. Both of these feel like really limiting restraints! A natural-looking ocean is all connected, and some of the most interesting places on Earth (like Dallol and Death Valley) are below sea level.
We can do a little better by finding the largest contiguous area below a given elevation, declaring that to be ocean, and then adjusting the elevation until the map has the right average water coverage. (Throughout, I'm going to refer to average water coverage as the map's wetness.) This gives us a somewhat more interesting ocean:
Looking a contiguous low-elevation area gives us an ocean with narrow straits, small islands, and land depressions below sea level. To see those depressions, here's the same map with a contour drawn at sea level:
The contour makes the map kind of hideous, but broadly speaking I'm really pleased with how this turned out. The maps above use a 50% wetness, but here's how things look at 20%, 40%, 60%, and 80%:
This looks pretty map-like at a wide range of wetness levels! We can also do the same thing for a different random seed:
And a different random seed (check out those narrow straits!!!):
And a different random seed:
Overall, I think this code is finally at a point where it generates plausible-looking elevation maps with no hyperreal larger-than-life fantasy elements. That is a very low bar! But I'm excited that I was able to get this all done myself.
From here, I think the next step is going to be tweaking the coastline generation to promote more islands and some areas with steep shorelines, because islands are interesting for storytelling and steep shorelines are both realistic and interesting. After that, I think we can start adding in on-land water features like lakes and rivers. This does feel like an extremely promising start, though.
building a gallery of coastline inspiration
Right now I'm coming up with metrics for what makes a coastline look like it comes from a fun and interesting fantasy world - because part of the goal here isn't just to build a map generator, but to build a map that actually looks like an interesting fantasy world. Which I realize is kind of subjective! But the goal is to build maps that look hyperrealistic and larger-than-life where you could imagine some kind of epic fantasy story happening, which is a subjective goal.
(Also, I realize there's way more to an interesting map than just the coastline! But the goal is to start out with the coastline, and then fill it in from there. And it'll be much easier to do that if the coastline looks cool.)
Anyway, in terms of coastline inspiration, I think the Clayoquot Sound is top tier for fantastic hyperrealistic coastlines:
Look at those islands! Those straits! Those long glacial lakes! This is the kind of map where adventurers could go on a quest and discover remote secrets. The kind of map where you can imagine crystalline bridges or fantasy paddlewheelers or barges pulled by giant tortoises. Excellent geography, even if it's going to be basically impossible to simulate with Perlin noise or anything like it.
The Virgin Islands and this chunk of the edge of Puerto Rico is also excellent coastline design:
Look how the islands trail off from the mainland! Great design for complex political intrigue, a campaign that takes you all the way from the mainland in the west to the end of the archipelago in the west, an overall direction and flow that even St Croix way to the south runs parallel to. Also tricky to think about how to get these long parallel flows from something like Perlin noise, but it's definitely a feature of satisfying-looking island chains.
Auckland has such a ridiculous coastline for a metropolitan city it does not even seem plausibly realistic:
Big deep harbours on both sides, with a city on the isthmus in between. So many opportunities for naturally delineated districts, and multiple ports and wharves with wildly different vibes. Rangitoto right there north of the city just hanging out as a giant obvious volcano in the middle of all of this.
Lombok, Sumbawa, and this whole stretch of the Lesser Sunda Islands is also a prime archipelago:
Look at all those volcanos! Look at those narrow straits, those tiny islets, those isolated geographies - great for fantasy worldbuilding with a ton of complex polities, or a narrative that requires visiting a bunch of nearby locations that are plausibly very different in vibe. The coastlines also have very different fractal roughness in different places, which makes this map look like it could be 100 km across or it could be the whole world.
fantasy map generation and what we're trying to do here
So this blog is documenting my project to build new fantasy map generation software. I love maps, and I love TTRPGs and fantsay fiction, and so I spend a lot of time either staring at maps or trying to build my own, and I've realized I just need to do some math and write some code to get the kind of map generator I'd want to use. There's plenty of cool fantasy map generators out there right now, but none of them do some of the things that I'd like to be able to do:
Hyperrealistic and fantasy terrain
I get the appeal of thoughtful principled geophysics-based map generators that generate terrain that looks like the real world topography! And I think these are genuinely impressive! But personally, for me, when I'm looking at a fantasy map, I want to see improbably tall escarpments and island-choked bays and volcanic mountain ranges and dammed rivers and damned rivers - and so the map generation should build maps that look more like the most impressive real-world geographies.
Shapefile outputs for editing and overlays
A high-resolution map image with a thoughtful colour scheme can be really immersive and visually appealing! But I'd like to generate topography, and political boundaries, and biomes, and placenames, and have a way to overlay and compare these - and also edit them as e.g. the party finds out new information in a long-running TTRPG campaign. This means outputting everything in a shapefile format that I can open with e.g. QGIS for editing and visualization.
Locally consistent and interesting naming
Most map generators kind of ignore the problem of naming the hamlets and forests and mountains on the map (or give everything flavourless fantasy names) even though that can be a relatively time-consuming part of building an immersive fantasy map. The goal for the software is naming that's both interesting and locally consistent in terms of phonology and meanings. And since all the outputs come in shapefile format, if you don't like the outputs, you can change them.
Ideally, if I can get this all working nicely, I'll release the whole thing as open-source software with a lot of configuration options so that people can download it and mess around with the setup and generate their own maps. That's a long ways away, though, and there's a lot of vector calculus and linear algebra and wrestling with Python packages between here and there.
As a very first step to getting any of this working, I'm using Perlin noise, which is a fairly standard route to generating random terrain. (And then overlaying a ton of other stuff on this! But Perlin noise is the first step.) I'm implementing this all myself from scratch, because I want to actually understand how this all works and also I'd like to be able to reconfigure it myself. After reading a bunch of explanations, I finally wrote something, and oh no this doesn't look like terrain at all:
But it turns out that one layer of Perlin noise is always going to look more like brain coral than like terrain, and when you overlay a bunch of layers of it at varying resolution, you get something that has more long-range order to it in a way that starts to look more like a map of highs and lows:
And then if you switch out the colours for ones that look more terrain-like and also add some contour lines, your the output ends up looking even more terrain-like:
So this is a promising (if very preliminary) start! Obviously this isn't the hyperrealistic fantasy terrain I'd want, and obviously terrain alone is not a complete fantasy map, and also this is still just a static PNG file that shows nothing but elevation, so plenty of work to go. I'll keep working away to get this closer to the long-run goal over the next few weeks, and hopefully this will end up producing some cool maps.