Biomes

Biomes are regions with differing foliage, terrain etc.

  1. Biome List
  2. Lookup table
  3. Biome Noise
    1. Noise Octaves
    2. Biome map
  4. Further reading

The seed used throughout all of these examples is 3257840388504953787, the seed behind pack.png.

Biome List

There exist 13 distinct Biomes in Beta 1.7.3. They each have unique properties, mainly if they can show rain particles, if it can snow in them, and what their respective foliage and map colors are.

Name Top Block Filler Block Rain Snow Foliage Color Map Color
Rainforest Grass Dirt #1FF458 #8FA360
Swampland Grass Dirt #8BAF48 #7F9B20
Seasonal Forest Grass Dirt #4EE031 #9BE023
Forest Grass Dirt #4EBA31 #566210
Savanna Grass Dirt #4EE031 #D9E023
Shrubland Grass Dirt #4EE031 #A1AD20
Taiga Grass Dirt #7BB731 #2EB153
Desert Sand Dirt #4EE031 #FA9418
Plains Grass Dirt #4EE031 #FFD910
Ice Desert Grass Sand #C4D339 #FFED93
Tundra Grass Dirt #C4D339 #57EBF9
Hell Grass Dirt #4EE031 #FF0000
Sky Grass Dirt #4EE031 #8080FF

Lookup table

A 64x64 lookup table is generated to more quickly calculate the appropriate biome to use.

Biome GetBiome(float temperature, float humidity) {
    humidity *= temperature;
    if (temperature < 0.1) {
        return tundra;
    }
    if (humidity < 0.2) {
        if (temperature < 0.5) {
            return tundra;
        }
        if (temperature < 0.95) {
            return savanna;
        }
        return desert;
    }
    if (humidity > 0.5 && temperature < 0.7) {
        return swampland;
    }
    if (temperature < 0.5) {
        return taiga;
    }
    if (temperature < 0.97) {
        if (humidity < 0.35) {
            return shrubland;
        }
        return forest;
    }
    if (humidity < 0.45) {
        return plains;
    }
    if (humidity < 0.9) {
        return seasonalForest;
    }
    return rainforest;
}

If mapped to an image, using the foliage/map colors, we get this.

Foliage Colors Map Colors
Foliage Colors Map Colors

Temperature is X, Humidity is Y. Range is from 0 to 64 (or 0.0 to 1.0) on both axes. Notch drew this graph back in 2011.

Biome Noise

The function which determines what biome is use in a chunk is relatively simple. It mainly uses 3 Octave Simplex Noise Generators.

Noise Octaves

The current Chunk Coordinate, scaled to Block-Space (multiplied by 16), is passed in, alongside how many values the generator should return (16x16 for one chunk) and a scaling factor.

Generator Octaves Scale
Temperature 4 (0.025, 0.025, 0.25)
Humidity 4 (0.05, 0.05, 1/3)
Variation 2 (0.25, 0.25, 0.5882352941176471)

Each of these return a 16x16 array of 64-Bit floating point numbers, which’re that chunks’ temperature, humidity and variation values.

Temperature Humidity Variation
Temperature map Humidity map Variation map

Temperature, humidity and variation values from chunk -1,-1 to 1,1. These values are in the 0.0 - 2.0 range.

Biome map

The final biomes for each section are determined by iterating over the 16x16 array and performing the following actions for each entry.

for (int i = 0; i < 16*16; i++) {
    double vari = variation[i] * 1.1 + 0.5;
    double scale = 0.01;
    double max = 1.0 - scale;
    double temp = (temperature[i] * 0.15 + 0.7) * max + vari * scale;
    scale = 0.002;
    max = 1.0 - scale;
    double humi = (humidity[i] * 0.15 + 0.5) * max + vari * scale;
    temp = 1.0 - (1.0 - temp) * (1.0 - temp);
    // Limit values to 0.0 - 1.0
    if(temp < 0.0) temp = 0.0;
    if(humi < 0.0) humi = 0.0;
    if(temp > 1.0) temp = 1.0;
    if(humi > 1.0) humi = 1.0;

    temperature[i] = temp;
    humidity[i] = humi;
    // Get the biome from the lookup
    biomeMap[i] = GetBiomeFromLookup(temp, humi);
}

The returned biome map can look something like this over a 3x3 chunk area.

Foliage Colors Map Colors
Biomes with foliage colors Biomes with map colors

The temperature and humidity values are changed by this function, resulting in a different set of values, to be used in later generation stages.

Temperature Humidity Variation
Temperature map Humidity map Variation map

Temperature, humidity and Variation values from chunks -1,-1 to 1,1 after being modified by this function. These values are in the 0.0 - 2.0 range. Variation is not affected.

This is then passed to the World Generator.

Further reading

Check out the page for the World Generator.