How can I blend biomes?

So over the past little bit I’ve been experimenting with different procedural generated terrains and have run into a few issues. So basically, biomes in this case will refer to terrain that has different colors and its own unique height map. At first I used noise to select the biomes but ran into the issue as the world looks super repetitive and lame. Basically if you declare which biome should spawn at which noise level ex (Plains = .2, Arctic = .5, Lava = 1) then every biome will be surrounded with the center biome as noise incrementally increases from one to another.

The fix was to do what Minecraft does and give the world a moisture level and a temperature and decide the biomes based on this. That way the biomes give much seemingly random generation. However the issue becomes that the height maps do not blend well, and given that 2 different numbers decide which biome is picked, its super hard to blend them.

A solution is reading through multiple positions on the map and making sort of “averages” between 2 different points. Given that theres about 3600 blocks I’d like to not iterate through all that extra data.

What I was trying earlier is instead of assigning each point a biome, assign every point a mixture of surrounding biomes. So if the point is on the cusp of being another biome, assign it to the average of those height maps. The issue I had with this is it was extremely hard to implement with the biomes being a 2d table.

3 Likes


Through extremely sketchy code I’ve been able to highlight the areas that would need to be blended but I’m just unable to find the code to figure out their values

It is 4:33 AM

No clue how you might implement this into code but here is some theory:

I’m also not entirely sure how you’ve gone about highlighting these regions but if you’re able to access where these strips of intersecting biomes are then you can try interpolating the edge of the two biomes between eachother.

Here is a crude drawing:
image

(Red section represents the left exterior strip, and the blue section represents the right exterior strip, and the region in between the purple dots / purple line represents the region that needs to be interpolated / was interpolated)

You take the strip of where two biomes intersect, then you get the position of the strips lining that intersecting strip, then you set the size of the parts within the intersecting strip to be some interpolation between the two exterior strips. (Hopefully that wasn’t too confusing…)

I skimmed this video and it appears to do what you might want:

2 Likes

I ended up doing a similar thing to that, the only issue with my system is that only the x-i and z-i positions are checked to be averaged out, so depending on the order of which biomes generate it could make them smaller/larger.


But it works!! :smiley: There can be slight issues when 4 biomes collide as seen in the green section, but honestly its okay.

2 Likes