Skip to main content

What is a Generator?

A generator in Iris controls the height and shape of terrain using mathematical noise functions. Generators take X/Z coordinates and output a height value, determining where land rises into mountains or dips into valleys. Generators are the foundation of terrain creation:
  • Simple generators create basic terrain (plains, hills)
  • Composite generators blend multiple noise layers for complex landscapes
  • Styled generators apply different noise algorithms (perlin, simplex, cellular)
Generators define “how high” the terrain is at each coordinate. Biomes use generators to create their terrain shape, and multiple biomes can share the same generator.

Generator Structure

Basic Generator

generators/plains.json
{
  "name": "Plains Terrain",
  "composite": [
    {
      "style": {
        "style": "SIMPLEX",
        "zoom": 0.5,
        "fracture": {
          "style": "SIMPLEX",
          "zoom": 0.1,
          "multiplier": 25
        }
      },
      "opacity": 1.0,
      "multiplier": 8
    }
  ]
}
name
string
required
Human-readable generator name
composite
IrisShapedGeneratorStyle[]
Array of noise layers that are blended together. Each layer contributes to the final height.

Noise Styles

Available Styles

Iris supports multiple noise algorithms (from NoiseStyle.java):
SIMPLEX - Organic, flowing terrain
{
  "style": "SIMPLEX",
  "zoom": 0.5
}
Best for: Natural hills, valleys, organic shapes

Common Style Parameters

style.style
NoiseStyle
required
The noise algorithm to use (SIMPLEX, CELLULAR, FRACTAL_BILLOW_SIMPLEX, etc.)
style.zoom
number
default:"1.0"
Noise frequency. Lower values = larger features, higher values = smaller features.
  • 0.1-0.5: Large continental-scale features
  • 0.5-2.0: Regional hills and valleys
  • 2.0+: Fine detail and variation
style.fractalOctaves
integer
default:"1"
Number of noise layers for fractal noise types. More octaves = more detail but slower generation.
style.seed
integer
Custom seed for this noise layer. If not set, uses world seed.

Composite Layers

Blending Multiple Noise Layers

Generators can combine multiple noise patterns:
{
  "composite": [
    {
      "style": {
        "style": "SIMPLEX",
        "zoom": 0.3
      },
      "opacity": 1.0,
      "multiplier": 15
    },
    {
      "style": {
        "style": "FRACTAL_RIGID_MULTI_SIMPLEX",
        "zoom": 0.8
      },
      "opacity": 0.6,
      "multiplier": 25
    }
  ]
}
composite[].opacity
number
Layer blend strength (0.0 = invisible, 1.0 = full strength). Controls how much this layer influences the final height.
composite[].multiplier
number
Height multiplier for this layer. Final height = noise_value × multiplier.

How Layers Combine

Given two layers:
  1. Layer A: multiplier: 10, opacity: 1.0, noise = 0.5 → contributes +5 blocks
  2. Layer B: multiplier: 20, opacity: 0.5, noise = 0.3 → contributes +3 blocks
Final height = base + (5 + 3) = base + 8 blocks

Advanced Features

Fracture (Domain Warping)

Fracture distorts the noise coordinates, creating organic warping:
{
  "style": {
    "style": "SIMPLEX",
    "zoom": 0.5,
    "fracture": {
      "style": "SIMPLEX",
      "zoom": 0.1,
      "multiplier": 30
    }
  },
  "multiplier": 12
}
style.fracture
IrisGeneratorStyle
Nested noise that warps the coordinate space before sampling the main noise. Creates flowing, organic patterns.
style.fracture.multiplier
number
Strength of the domain warping. Higher values = more distortion.
Fracture is excellent for making terrain feel more natural. Use it sparingly (multiplier 10-40) to avoid chaotic results.

Interpolators

Smooth transitions between generators:
{
  "interpolationFunction": "HERMITE",
  "interpolationScale": 1.5
}
interpolationFunction
IrisInterpolator
Smoothing function: LINEAR, HERMITE (smooth), BEZIER (very smooth)
interpolationScale
number
Multiplier for interpolation distance

Example Generators

Gentle Plains

generators/gentle-plains.json
{
  "name": "Gentle Plains",
  "composite": [
    {
      "style": {
        "style": "SIMPLEX",
        "zoom": 0.4
      },
      "opacity": 1.0,
      "multiplier": 5
    }
  ]
}

Rolling Hills

generators/rolling-hills.json
{
  "name": "Rolling Hills",
  "composite": [
    {
      "style": {
        "style": "FRACTAL_BILLOW_SIMPLEX",
        "zoom": 0.35,
        "fractalOctaves": 3
      },
      "opacity": 1.0,
      "multiplier": 18
    },
    {
      "style": {
        "style": "SIMPLEX",
        "zoom": 1.2
      },
      "opacity": 0.4,
      "multiplier": 6
    }
  ]
}

Jagged Mountains

generators/jagged-mountains.json
{
  "name": "Jagged Mountains",
  "composite": [
    {
      "style": {
        "style": "FRACTAL_RIGID_MULTI_SIMPLEX",
        "zoom": 0.5,
        "fractalOctaves": 5,
        "fracture": {
          "style": "SIMPLEX",
          "zoom": 0.15,
          "multiplier": 25
        }
      },
      "opacity": 1.0,
      "multiplier": 60
    },
    {
      "style": {
        "style": "CELLULAR",
        "zoom": 0.8
      },
      "opacity": 0.3,
      "multiplier": 20
    }
  ]
}

Using Generators in Biomes

Reference generators in biome files:
biomes/mountain-peaks.json
{
  "name": "Mountain Peaks",
  "generators": [
    {
      "generator": "jagged-mountains",
      "min": 90,
      "max": 200
    }
  ]
}
The min and max clamp the generator output to prevent extreme values.

Performance Considerations

Complex generators impact performance:
  • Each composite layer adds computation
  • Fractal octaves multiply noise calculations
  • Fracture adds additional noise sampling
For production worlds:
  • Limit composite layers to 2-4
  • Keep fractal octaves under 6
  • Use fracture sparingly (1-2 layers max)

Best Practices

  • Start simple: Single-layer generators for testing
  • Layer gradually: Add complexity one layer at a time
  • Vary zoom levels: Mix large-scale (0.2-0.5) with detail (1.0-2.0)
  • Test in-game: Screenshots don’t show terrain feel
  • Reuse generators: Many biomes can share the same generator with different min/max

Next Steps

Noise Styles

Deep dive into noise algorithms

Create Custom Terrain

Apply generators in biome creation

Build docs developers (and LLMs) love