fx_noise.shaderModule
Procedural noise for effect shaders, as WGSL other shaders include with `#include "fx_noise"`: integer hashes, value and gradient noise in 2D and 3D, fBm and ridged fBm over them, curl noise, and worley (cellular) noise that returns the distance to the nearest feature point and t…
fx_noise
Procedural noise for effect shaders, as WGSL other shaders include with #include "fx_noise":
integer hashes, value and gradient noise in 2D and 3D, fBm and ridged fBm over them, curl noise, and
worley (cellular) noise that returns the distance to the nearest feature point and that cell's id.
The functions are pure math over their arguments, so a material's fragment shader and a compute
shader can both include it and read the same field. Every generator takes an explicit seed, so one
shader draws several uncorrelated fields from the same coordinates. The hashes mix integers, so a
value is the same bit pattern wherever it runs; the float entry points hash a float's bit pattern,
with 0.0 and -0.0 folded together.
#include "fx_noise"
| Function | Returns |
|---|---|
fx_hash11(x), fx_hash21(p), fx_hash31(p) | a stable value in [0, 1) for a number or point |
fx_value_noise2(p, seed), fx_value_noise3(p, seed) | smooth value noise in [0, 1) |
fx_gradient_noise2(p, seed), fx_gradient_noise3(p, seed) | gradient (Perlin-style) noise in [-1, 1], exactly 0 at every integer point |
fx_fbm2(p, octaves, lacunarity, gain, seed), fx_fbm3(...) | fractal sum of gradient noise in [-1, 1]: clouds, smoke, rock |
fx_ridged_fbm3(p, octaves, lacunarity, gain, seed) | ridged fractal noise in [0, 1]: cracks, crags, veins |
fx_curl_noise3(p, seed) | a divergence-free flow vector: swirling smoke and dust |
fx_worley2(p, seed), fx_worley3(p, seed) | { dist, cell, id } of the nearest feature point: foam cells, stone, sparkle |
fx_worley_fbm2(p, octaves, lacunarity, gain, seed) | fractal cellular noise in [0, 1] |
Arguments
pis anf32,vec2forvec3fcoordinate, matching the function's dimension.seedis au32.octavesis au32, clamped to 1 throughFX_FBM_MAX_OCTAVES(12). Each octave multiplies the frequency bylacunarityand the amplitude byabs(gain), and the fBm functions divide by the summed amplitudes, which keeps the stated range for any gain. Octaveiuses seedseed + i * 1013.
Building blocks
The module also exports the pieces the generators are built from:
| Function or item | What it is |
|---|---|
fx_hash_u32(x), fx_hash_u2(x, y), fx_hash_u3(x, y, z) | Integer avalanche hashes of one, two or three u32 words, returning a u32. |
fx_unorm(h), fx_snorm(h) | A hashed u32 as an f32 in [0, 1) or [-1, 1), from its top 24 bits. |
fx_bits(x) | The u32 bits of an f32, with negative zero folded onto positive zero. |
fx_hash22(p), fx_hash33(p) | Two or three decorrelated values in [0, 1) for a 2D or 3D point. |
fx_lattice_u2(cell, seed), fx_lattice_u3(cell, seed) | The hashed u32 a seeded integer lattice corner (vec2i or vec3i) carries. |
fx_lattice21(cell, seed), fx_lattice31(cell, seed) | That corner's value in [0, 1); fx_value_noise2 at an integer point equals fx_lattice21 of that point. |
fx_fade(t) | The quintic fade t^3 * (t * (6t - 15) + 10) used to interpolate across a cell. |
fx_gradient2(cell, seed), fx_gradient3(cell, seed) | The unit gradient a seeded lattice corner carries; the 3D one is spread evenly over the sphere. |
fx_curl_potential3(p, seed) | The three-component potential fx_curl_noise3 takes the curl of, by central differences over FX_CURL_EPSILON (0.05). |
fx_cell_point2(cell, seed), fx_cell_point3(cell, seed) | Where a cell's feature point sits inside the cell, in [0, 1) per axis. |
fx_cell_id2(cell, seed), fx_cell_id3(cell, seed) | The id in [0, 1) a cell is tinted by. |
FxWorley2, FxWorley3 | The worley result: dist (f32), cell (vec2i or vec3i) and id (f32). |
FX_TAU | 2 pi. |
fx_worley2 searches the 3 by 3 cells around the sample and fx_worley3 the 3 by 3 by 3 cells.
fx_worley_fbm2 sums 1 - dist, clamped to [0, 1], over its octaves, so feature points read as
peaks.
Used by
The waterfall (wf_particle, wf_pool, wf_rock, wf_sheet) and wall blast (blast_puff,
blast_shock, blast_stone) shaders in this package draw their foam, mist, rock, dust and debris
from it, and so does the Procgen Effects Showcase world's blast_ground.
Scoped to this part · feeds back into the world's score.