Next: 6.21.2 Generating Noise Functions Up: 6.21 Procedural Texture Generation Previous: 6.21 Procedural Texture Generation   Contents

### 6.21.1 Filtered Noise Functions

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 [28], some of which are:

• It is a repeatable pseudorandom function of its inputs.
• It has a known range, typically -1 to 1.
• It is band-limited, with a maximum frequency of about 1 per domain unit.
Given such a function, we can build a more interesting function by making dilated versions of the original such that each one has a frequency of 2, 4, 8, etc. These are called the octaves of the original function. The octaves are then composited together with the original noise function using some set of weights. The result is a band-limited function which gives the impression of controlled randomness in each frequency band.

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 [28]. Gradient noise is similar to the noise function implemented in the RenderMan shading language.

Lattice noises can exhibit axis-aligned artifacts. Lewis [61] describes sparse convolution, a way to avoid such artifacts by distributing the impulses using a stochastic process, and van Wijk [100] describes a similar technique called spot noise.

Although the noise functions described in [28] 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.

Next: 6.21.2 Generating Noise Functions Up: 6.21 Procedural Texture Generation Previous: 6.21 Procedural Texture Generation   Contents
2001-01-10