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

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