Bump mapping [9], like texture mapping, is a
technique to add more realism to synthetic images without adding a lot
of geometry. Texture mapping adds realism by attaching images to
geometric surfaces. Bump mapping adds per-pixel surface relief
shading, increasing the apparent complexity of the surface by
perturbing the surface normal. Surfaces that have a patterned
roughness are good candidates for bump mapping. Examples include
oranges, strawberries, stucco, wood, etc.

An intuitive representation of surface bumpiness is formed by a 2D
height field array, or bump map. This bump map is defined by
the scalar difference between the flat surface and
the desired bumpy surface along the normal at each
point . Typically the function is modeled
separately as polygons or parametric patches and is modeled as a
2D image using a painting program or other image processing tool.

Rather than subdivide the surface into regions that are
locally flat, observe that the shading perturbations on such a surface
depend more on perturbations in the surface normal than on the
position of the surface itself. A technique perturbing only the
surface normal at shading time achieves similar results without the
processing burden of subdividing geometry. (Note that this technique
does not perturb shadows from other surfaces falling on the bumps or
shadows from bumps on the same surface, so such shadows will retain
their flat appearance.)

The normal vector at can be calculated by the cross
product of the partial derivatives of in and . (The notational
simplification is used here to mean the partial derivative
of with respect to , sometimes written
.)
The chain rule can be applied to the partial derivatives to yield the following expression of in terms of , , and derivatives
of :

If is assumed to be sufficiently small, the final terms of each of
the previous expressions can be approximated by zero:

Expanding the cross product
gives the following
expression for :

Which evaluates to:

Because
yields the normal and yields 0, we
can further simplify the expression for as follows:

The values and are easily computed through forward
differencing from the 2D bump map, and and can be computed
either directly from the surface definition or from forward
differencing applied to the surface parameterization.