I'm using this post as a reference for what I'm doing.
The real thing of interest is this:
As you can see, this is a Whittaker diagram, with temperature and rain considerations.
So would this be the algorithm he uses?
def rain(x,z): return some_fbm_perlin_noise(x,z) def temp(x,z): return some_fbm_perlin_noise(x,z) def biome_at_point(x,z): return diagram_at_point(rain(x,z),temp(x,z))
The issue with this is that if I assume the fbm perlin noise to be in the range [0,1] for both of them, then this algorithm only covers the bottom left half of the diagram. What is the top right half?
And also, perlin noise tends to make "short forays" into extreme ([0.9,1.0]) values, so the smaller, rarer biomes would have little tiny dots scattered around the map. An example would be the tundra: the tundra is very rare, and when it happens it probably only happens for a small area. But what actually happens in Minecraft is that the smaller, rarer biomes are very rarely come across, but they still have a normal size.
I've tried something like this:
def rain(x,z): return hash(nearest_voronoi_point(x,z)) def temp(x,z): return hash(nearest_voronoi_point(x,z))
But this runs into the triangle problem, and a new one: the hash function, by definition, is incoherent, which means that it could put a desert next to a snowy mountain, because there are no constraints.
How does can I fill in the final triangle and not half tiny biomes everywhere, while maintaining biome coherency?