I'm using this post https://notch.tumblr.com/post/1409584546/some-work-on-biomes as a reference for what I'm doing.
The real thing of interest is: https://66.media.tumblr.com/tumblr_lax4dmDT2W1qzb7ox.jpg. As you can see, this is a Whittaker diagram that takes into account the temperature and the rain.
So, is that the algorithm that he uses?
rain def (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 problem with this is that if I guess the noise FBM Perlin is in the range [0,1] for both, this algorithm only covers the lower left half of the diagram. What is the upper right half?
And also, perlin noise tends to make short "incursions" to the extreme ([0.9,1.0]), so that the smallest and rarest biomes would have small dots scattered on the map. An example would be tundra: tundra is very rare and when this happens, it probably only occurs in a small area. But what is really happening in Minecraft is that the smallest and rarest biomes are very rarely encountered, but that they always have a normal size.
I've tried something like this:
rain def (x, z): return hash (the closest_voronoi_point (x, z)) def temp (x, z): returns a hash (the closest_voronoi_point (x, z))
But this poses a new problem: a triangle: the hash function, by definition, is incoherent, which means that it could set a desert next to a snowy mountain, because there are no constraints.
How does Minecraft fills the final triangle and not tiny half-biomes everywhere, while maintaining the consistency of the biome?