# @suaveplan/noise - Seeded spatial noise fields: Perlin, Simplex, Value, Worley, fBm and Blue-noise sampling for procedural generation ## Summary Seeded spatial noise fields for procedural content generation. Provides six field types — Perlin, Simplex (2D/3D/4D), Value, Worley/cellular (F1/F2/F2-F1 modes), fBm (fractal Brownian motion compositor), and Poisson-disk Blue noise sampling — all seeded with `Sfc32Rng` for byte-identical, reproducible output. Every generator is available as both a functional API and a stateful class. Use this package for terrain heightmaps, texture generation, cloud simulation, vegetation scattering, and any procedural system that needs spatially-coherent randomness. For non-spatial random values (UUIDs, shuffles, distributions) use `@suaveplan/random`; for seeded integer/float sequences use `@suaveplan/pseudo-random`. ## Documentation tree - [blue](./src/blue/blue.md) — _(no submodules)_ - [blue](./src/blue/blue.md) — _(no submodules)_ - [errors](./src/errors/noise-error.md) — _(no submodules)_ - [noise-error](./src/errors/noise-error.md) — _(no submodules)_ - [fbm](./src/fbm/fbm.md) — _(no submodules)_ - [fbm](./src/fbm/fbm.md) — _(no submodules)_ - [perlin](./src/perlin/perlin.md) — _(no submodules)_ - [perlin](./src/perlin/perlin.md) — _(no submodules)_ - [simplex](./src/simplex/simplex.md) — _(no submodules)_ - [simplex](./src/simplex/simplex.md) — _(no submodules)_ - [utils](./src/utils/permutation.md) — _(no submodules)_ - [permutation](./src/utils/permutation.md) — _(no submodules)_ - [value](./src/value/value.md) — _(no submodules)_ - [value](./src/value/value.md) — _(no submodules)_ - [worley](./src/worley/worley.md) — _(no submodules)_ - [worley](./src/worley/worley.md) — _(no submodules)_ - [blue](./src/blue/blue.md) — _(no submodules)_- [errors](./src/errors/noise-error.md) — _(no submodules)_- [noise-error](./src/errors/noise-error.md) — _(no submodules)_- [fbm](./src/fbm/fbm.md) — _(no submodules)_- [fbm](./src/fbm/fbm.md) — _(no submodules)_- [perlin](./src/perlin/perlin.md) — _(no submodules)_- [perlin](./src/perlin/perlin.md) — _(no submodules)_- [simplex](./src/simplex/simplex.md) — _(no submodules)_- [simplex](./src/simplex/simplex.md) — _(no submodules)_- [utils](./src/utils/permutation.md) — _(no submodules)_- [permutation](./src/utils/permutation.md) — _(no submodules)_- [value](./src/value/value.md) — _(no submodules)_- [value](./src/value/value.md) — _(no submodules)_- [worley](./src/worley/worley.md) — _(no submodules)_- [worley](./src/worley/worley.md) — _(no submodules)_- [blue](./src/blue/blue.md) — _(no submodules)_- [errors](./src/errors/noise-error.md) — _(no submodules)_- [noise-error](./src/errors/noise-error.md) — _(no submodules)_- [fbm](./src/fbm/fbm.md) — _(no submodules)_- [fbm](./src/fbm/fbm.md) — _(no submodules)_- [perlin](./src/perlin/perlin.md) — _(no submodules)_- [perlin](./src/perlin/perlin.md) — _(no submodules)_- [simplex](./src/simplex/simplex.md) — _(no submodules)_- [simplex](./src/simplex/simplex.md) — _(no submodules)_- [utils](./src/utils/permutation.md) — _(no submodules)_- [permutation](./src/utils/permutation.md) — _(no submodules)_- [value](./src/value/value.md) — _(no submodules)_- [value](./src/value/value.md) — _(no submodules)_- [worley](./src/worley/worley.md) — _(no submodules)_- [worley](./src/worley/worley.md) — _(no submodules)_- [blue](./src/blue/blue.md) — _(no submodules)_- [errors](./src/errors/noise-error.md) — _(no submodules)_- [noise-error](./src/errors/noise-error.md) — _(no submodules)_- [fbm](./src/fbm/fbm.md) — _(no submodules)_- [fbm](./src/fbm/fbm.md) — _(no submodules)_- [perlin](./src/perlin/perlin.md) — _(no submodules)_- [perlin](./src/perlin/perlin.md) — _(no submodules)_- [simplex](./src/simplex/simplex.md) — _(no submodules)_- [simplex](./src/simplex/simplex.md) — _(no submodules)_- [utils](./src/utils/permutation.md) — _(no submodules)_- [permutation](./src/utils/permutation.md) — _(no submodules)_- [value](./src/value/value.md) — _(no submodules)_- [value](./src/value/value.md) — _(no submodules)_- [worley](./src/worley/worley.md) — _(no submodules)_- [worley](./src/worley/worley.md) — _(no submodules)_- [blue](./src/blue/blue.md) — _(no submodules)_- [errors](./src/errors/noise-error.md) — _(no submodules)_ - [noise-error](./src/errors/noise-error.md) — _(no submodules)_- [fbm](./src/fbm/fbm.md) — _(no submodules)_ - [fbm](./src/fbm/fbm.md) — _(no submodules)_- [perlin](./src/perlin/perlin.md) — _(no submodules)_ - [perlin](./src/perlin/perlin.md) — _(no submodules)_- [simplex](./src/simplex/simplex.md) — _(no submodules)_ - [simplex](./src/simplex/simplex.md) — _(no submodules)_- [utils](./src/utils/permutation.md) — _(no submodules)_ - [permutation](./src/utils/permutation.md) — _(no submodules)_- [value](./src/value/value.md) — _(no submodules)_ - [value](./src/value/value.md) — _(no submodules)_- [worley](./src/worley/worley.md) — _(no submodules)_ - [worley](./src/worley/worley.md) — _(no submodules)_ ## Install ```sh bun add @suaveplan/noise ``` ## Features - **Perlin noise** — `perlin2` / `perlin3` (functional) + `PerlinNoise` (class) - **Simplex noise** — `simplex2` / `simplex3` / `simplex4` + `SimplexNoise` - **Value noise** — `value2` / `value3` + `ValueNoise` - **Worley/cellular noise** — `worley2` / `worley3` with `F1`/`F2`/`F2-F1` modes - **fBm compositor** — `fbm2` / `fbm3` wrap any base field into a multi-octave sum - **Blue noise sampler** — `blueNoiseSample` via Bridson's Poisson-disk algorithm - Every field is seeded with `Sfc32Rng` — byte-identical output for equal seeds - Zod schemas for every option bundle ## Quick start ```ts import { PerlinNoise, fbm2, blueNoiseSample } from "@suaveplan/noise"; const p = new PerlinNoise("terrain"); const height = fbm2((x, y) => p.noise2(x, y), 10, 20, { octaves: 6 }); const trees = blueNoiseSample({ width: 512, height: 512, radius: 16, seed: 1 }); ``` ## Subpath exports - `@suaveplan/noise/perlin` - `@suaveplan/noise/simplex` - `@suaveplan/noise/value` - `@suaveplan/noise/worley` - `@suaveplan/noise/fbm` - `@suaveplan/noise/blue` - `@suaveplan/noise/errors` ## Module docs See the co-located `.md` next to each implementation.