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.