next up previous contents
Next: 6.21.9 Generating 2D Noise Up: 6.21 Procedural Texture Generation Previous: 6.21.7 Example: Image Warping

6.21.8 Generating 3D Noise

Using the techniques described above for generating a 2D noise function, we can generating a 3D noise function by making 2D slices and filtering them. A 2D slice spans the s and t axes of the lattice, and corresponds to a slice of the lattice at a fixed r.

Suppose we want to make a 64x64x64 noise function with a frequency of 1 per domain unit, using the same filtering (but one that now takes 2x2x2 input samples) as in the 2D example above. We first create 2 slices, one for r= 0.0 and one for r =1.0. Then we create the 62 slices in between 0 and 1 by interpolating the two slices. This interpolation can take place in the color buffer using blending, or it can take place in the accumulation buffer. Functions with higher frequencies are created in a similar way. Widening the filter dramatically increases the number of passes; going from a 2x2x2 filter to 4x4x4 requires 16 times as many passes.

To synthesize a function with different frequencies, we create a 3D noise function for each frequency, and composite the different frequencies using a set of weights, just as we do in the 2D case. It is clear that a large amount of memory is required to store the different 3D noise functions. These operations may be reordered so that less total memory is required, perhaps at the expense of more interpolation passes.


next up previous contents
Next: 6.21.9 Generating 2D Noise Up: 6.21 Procedural Texture Generation Previous: 6.21.7 Example: Image Warping
David Blythe
1999-08-06