A filtered noise function is simply a function created by filtering impulses of random amplitude over the domain. There are a variety of ways to distribute the impulses spatially and to filter those impulses; these methods determine the character of the function and, in turn, the character of the procedural texture created from the function. Regardless of the method chosen, a filtered noise function should have certain properties [13], some of which are:
One way of distributing noise impulses is to space them uniformly along the coordinate axes, as in a lattice. In value noise , the function itself interpolates the values at the lattice points, while in gradient noise the gradient of the function interpolates the values at the lattice points [13]. Gradient noise is similar to the noise function implemented in the RenderMan shading language.
Lattice noises can exhibit axis-aligned artifacts. Lewis [29] describes sparse convolution , a way to avoid such artifacts by distributing the impulses using a stochastic process, and van Wijk [47] describes a similar technique called spot noise.
Although the noise functions described in [13] are generally 3D, we first discuss how to generate a 2D noise function, because it is more straightforward to construct in a 2D framebuffer and because some simple interesting effects can be created with it.