๐Ÿ“Fractal noise

Fractal noise is a technique of getting a more interesting noise by layering multiple gradient noises. Each gradient noise is called an octave and each consecutive octave decreases in amplitude and increase in frequency to add smaller details on top of previous larger noises.

The algorithm usually has 3 extra parameters:

Most common values are:

Sample implementation

import type Simplex from 'rot-js/lib/noise/simplex';
import * as ROT from 'rot-js';

export type FractalNoiseOptions = {
  seed: number;
  octaves: number;
  lacunarity: number;
  persistence: number;
};

export class FractalNoise {
  options: FractalNoiseOptions;
  simplex: Simplex;

  constructor(options: FractalNoiseOptions) {
    this.options = options;

    const storedState = ROT.RNG.getState();
    ROT.RNG.setSeed(this.options.seed);
    this.simplex = new ROT.Noise.Simplex();
    ROT.RNG.setState(storedState);
  }

  get(x: number, y: number): number {
    let value = 0;
    for (let i = 0; i < this.options.octaves; ++i) {
      const amplitude = this.options.persistence ** i;
      const frequency = this.options.lacunarity ** i;

      value +=
        amplitude *
        this.simplex.get(
          (x + i * 1000) * frequency,
          (y + i * 1000) * frequency
        );
    }

    return value;
  }
}

Backlinks