ludic/docs/language/noise/noise-simplex2.md
Orkuncakilkaya a4f1494a04
All checks were successful
docs / build-and-deploy (push) Successful in 2s
feat(stdlib): add Noise.* — deterministic fixed-point procedural noise (#3)
A Noise.* namespace for procedural generation, implemented entirely in Q16.16
fixed point over an integer permutation hash so a seed reproduces the exact same
field on every platform and run (native/headless/wasm) — the determinism edge
over float noise that drifts across CPUs.

  - value2 / perlin2 / simplex2  — value, gradient, and simplex noise -> [-1,1]
  - fbm2(x,y,seed,octaves)       — fractal Brownian motion (octaves of simplex)
  - cellular2 / cellular2_id     — Worley F1 distance + nearest-cell id
  - unit(n)                      — remap [-1,1] -> [0,1]

Covers issue phases 1–2 fully plus cellular from phase 3; domain warp, ridged/
billow, and sample1/sample3 remain as follow-ups. Pure integer IR, C-free;
cellular/fbm reuse the math prelude's fx_sqrt.

- examples/library/noise.ludic: asserts the invariants a fixed-point generator
  must hold (Perlin == 0 at lattice points, every sampler within [-1,1],
  reproducibility, seed sensitivity, non-negative cellular distance). Wired into
  `x test` (now 52 passed).
- docs: a new Noise section + per-symbol pages; inventory and coverage pass.
- seed regenerated; `x bootstrap-cfree` fixpoint holds.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-30 21:50:50 +03:00

1.1 KiB

id name category kind tokens sig tip order ns member
noise-simplex2 Noise.simplex2 noise namespace-method Noise.simplex2 Noise.simplex2(x, y, seed) -> fixed 2D simplex noise, the organic default, in [-1, 1]. 3 Noise simplex2

Samples 2D simplex noise at (x, y) for the given seed and returns a fixed in [-1, 1]. Simplex noise sums contributions from the three corners of a skewed triangular cell, which gives it fewer of the axis-aligned directional artifacts that gradient noise can show — making it the recommended default for organic fields like terrain height and biome masks.

Deterministic in fixed point across platforms and runs, and the generator that Noise.fbm2 layers by default. Scale the coordinates to set feature size.

Parameters:

  • x, y — the sample coordinates (fixed)
  • seed — the field selector
program Simplex {
  entry {
    let seed = 1337
    let n = Noise.simplex2(fixed(4) / fixed(9), fixed(6) / fixed(9), seed)
    print(Math.floor(Noise.unit(n) * fixed(100)))
  }
}