Noise generator

Minecraft uses several different types of noise generators, specifically those making use of gradient noise, for the generation of terrain alongside other features.

Specifications
Noise generators can be defined by the following parameters:


 * Octaves: The amount of different copies of this noise generator, each scaled down from the last by a factor of 2. Fewer octaves result in an unnatural appearance. More octaves added with lacunarity result in a rougher fractal appearence reminiscent of proper terrain.
 * Frequency:
 * Factor: A value the noise is multiplied with after processing (lacunarity). To make the set of values more or less extreme.
 * Offset: A value added to the noise after processing. To shift the resulting set of values by this value.

These values are displayed and calculated differently in the code.

Terrain noise generators
These are used for defining the shape of generated terrain itself.

A table of default/hardcoded settings, as well as values resulting from these, is as follows.

Low noise
Low noise is one of the two main noise generators used for defining terrain shape. This noise generator, which uses Perlin noise, is one which is actually used as a heightmap.

High noise
This is effectively identical to low noise, but is only used when selector noise is above a given threshold value.

Selector noise
Selector noise is a third important noise generator used for terrain generation. Selector noise, using Perlin noise, dictates which of either low noise or high noise is used for generating terrain at a given position - above 1 high noise is used, below 0 low noise is used, and values between 0-1 are linearly interpolated between the low and high noise values.

Depth noise
A rather insignificant noise generator, this uses Perlin noise to make terrain slightly more nuanced in general. The possible values it can have are tightly clamped to a thin set of values. It is also only defined for the X and Z axes.

Other noise generators
These noise generators are oriented to the generation of other world features.

Soil thickness
Upon generation, a top layer block (e.g. dirt, sand) will be placed to a certain thickness to replace the bare stone heightmap. The thickness of this dirt may possibly rely on a noise generator in vanilla.

Biome distribution
Ocean biome variants are distributed using a Perlin noise function.

The Multi Noise Biome Source (used for the nether) also uses perlin noise.

Swamp noise
Swamps use a noise generator for two purposes: for the generation of marshy areas composing a mixture of water and grass blocks, and for the variation of the two different grass colors used.

Flower noise
The placement of flowers, most prominently in flower forest biomes but possibly also elsewhere, is controlled via a noise function. Flowers generated naturally will be in different positions from those grown via bone meal, and those grown via bone meal may not be seed dependent.

Removed noise generators
These are no longer used in the current version of the game.

Floating island carver noise
During Indev, floating islands were produced by using an extra noise generator to carve out air into existing terrain.

Overflowing
Noise generators are capable of overflowing once hitting the integer limit for their given data type, producing spectacular results. The most notable of these are the Far Lands, resulting in noise generator overflows being referred to as types of Far Lands as a result.

The distances each roughly overflow at by default, for a 32-bit integer, are as follows:


 * Low noise: ±12,550,824 (x/z axis), ±25,101,648 (y axis)
 * High noise: ±12,550,824 (x/z axis), ±25,101,648 (y axis)
 * Selector noise: ±1,004,065,920 (x/z axis), ±2,008,131,840 (y axis)
 * Depth noise: ±42,949,672 (x/z axis)
 * Soil noise: ±34,359,738,368 (x/z axis)
 * Badlands noise pillar: ?
 * Badlands clay band offset noise: ?
 * Swamplands noise: ?
 * Flower distribution noise: ?
 * Biome distribution noise: ?
 * Main terrain noise before Infdev 20100327: ±33,554,432 (x/z axis)
 * Floating island carver noise: ±933,688,542 (x/z axis)