wavelet noise

2025-12-05 cgitextures

wavelet noise is commonly used to create textures that are robust to aliasing effect caused by stacking up octaves of noises sampled from different slices of band frequency. wavelet noise solves aliasing by constructing the final signal from distinct, mathematically isolated frequency bands (layers of detail) rather than interpolating random gradients like perlin noise. mathematically, perlin noise’s interpolation functions (like 5-degree polynomial smoothstep) leak high-frequency energy that, when sampled at a distance (undersampling), clashes with the pixel grid to create "shimmering" artifacts (aliasing).

Creating band-limited part by subtracting R" from the original image R

wavelet noise avoids this by allowing the renderer to explicitly compare the frequency of each band against the screen's pixel resolution (the Nyquist limit); this is essentially a low pass filter on the band, removing the details that are too small by setting its contribution to 0 before summation. this creates band-limited smooth textures.

multiband noise use signed sum of noises. it creates smoothing effect on terrain with hills and valleys. I created fractals with different starting noises and all of them looked mostly the same and wasn’t interesting to play with. now perlin noise uses absolute sum of noise to create the multiband noise.

using absolute value gives perlin the characteristic marble-like sharp creases. they call it turbulence. replacing value += weight * noise with value += weight * abs(noise) in multiband step and replacing standard normal value (0.265) for the gaussian input used in the Pixar paper with new calculated std for different starting noises (cauchy, uniform, binary) produced interesting fractals.

NOTE: these changes does not break the orthogonality assumption, provided the samples are generated randomly and independently. they change the amplitude distribution which is adjusted by using new std.