We have described a method for creating 2D noise functions. In the case of lattice noise, these 2D functions correspond to a 2D slice of the lattice. There are cases where we want to model a 3D noise function and where such a 2D function is inadequate. For example, to draw a vase that looks like it was carved from a solid block of marble, we cannot use a lattice 2D noise function.
However, we can create a 2D noise function that approximates the appearance
of a true 3D noise function, using spot noise [47]. We take
into account the object space coordinates of the geometry, and generate only
spots that are close enough to the geometry to make a contribution to
the 3D noise at those points. The difficulty is how to render the spot in
such a way that at each fragment the value of the spot is determined by the
object space distance from the center of the spot to that fragment.
Depending on the complexity of the geometry, we may be able to
make an acceptable approximation to the correct spot value by distorting the
spot texture. One possible way to improve the approximation is to
compensate for a nonuniform mapping of the noise texture to the geometry.
Van Wijk describes how he does this by nonuniformly scaling a spot.
Approximating the correct spot value is most important when
generating the lower octaves, where the spots are largest and errors
are most noticeable.