Filtered noise functions are typically implemented as continuous functions that can be sampled at an arbitrary domain value. However, for some applications a set of uniformly spaced samples of the function may suffice. In these cases, a discrete version of the function can be created in the framebuffer using OpenGL. In the following, we do not distinguish between the terms noise function and discrete noise function .
A simple way to create lattice noise is to create a texture with random
values for the texels, and then to draw a textured rectangle with a bilinear
texture filter at an appropriate magnification. However, bilinear
interpolation produces poor results, especially when creating the lower
octaves, where values are interpolated across a large area. Some OpenGL
implementations support bicubic texture filtering, which may produce results
of acceptable quality. However, a particular
implementation of bicubic filtering may have limited subtexel precision,
causing noticeable banding at the lower octaves.
Both bilinear and bicubic filters also have the limitation that they produce
only value noise; gradient noise is not possible. We suggest another approach.