Biome Blending w/ 3d noise

Hi everyone,

I’m using a Java 3d Perlin FastNoise library to generate terrain for me, and I’m now going to have biomes. I’m using the blocks library. I am generating biomes by the chunk. If a random number picker decides a certain value, the current biome switches. However, this has lead to drastic terrain height differences. If one biome was a flatland, the other a mountain region, it would appear to be a chunk error, as the mountains abruptly went up. Does anyone know a way to combat this? I tried to create a buffer terrain that had basically half the octaves and gain as the mountain region to act as a bridge, but that was still pretty abrupt. Sometimes the chunks still didn’t lineup with that. I also considerd having rivers wherever biomes end but I’m not sure if that will be smooth either(I also dont know how to add rivers yet) Thanks in advance!

Just an idea: Instead of a RNG to select the biome, you could use a 2D noise function to determine the biome type/height. Values 1.0-0.8 would mean mountains, 0.8-0.6 = hills, 0.6-0.4 = flatland, 0.4… = ocean.
That should prevent abrupt changes in height. Mountains would be less likely to be adjacent to flatland and more likely to have hills around them.
Basically, you’d have a global 2d noise function that acts as y-scale or limit.

You could separate the biome-type selection into different noise functions and for example have one that selects height and a second function that selects environment (tundra, jungle, desert…). A smooth function would also prevent ice adjacent to deserts.
Or have 3 functions for height, temperature, rainfall…

Voronoi noise is usually better for biomes because you’ll end up with donut shaped biomes otherwise, but for sure noise is the way to go.

My apologies for the late response, I was away for quite a bit

1000ml, that seems like a great idea! (though I would have to switch to 2d noise). So I could have a “master” 2d perlin noise, and use that to determine what the current biome type is. Then, based on biome type, I’d set the settings of the noise generator to different values (different layers, ect…) I’m not too sure about implementing the moisture / heatmaps yet, that will probably be for later.

Jayfella, how would I be able to use voroni noise for the biomes? Would I have one giant 2d perlin generator? Wouldn’t that make all the terrain uniform then?

I think I’ve decided that even gradually changing (scaling) the output value from perlin noise will still leave very noticable boundaries… I think some kind of interpolation is the way I will have to go, but I’m not sure about that. Currently, I mutliply value from perlin by strength, which i decrease by one on every right click. This still leads to noticeable gaps.