A concept used in the implementation of bump mapping.

When bump mapping a surface, you have to apply the illumination equation at every pixel. This is very expensive, in part because it means that you have to transform the normal into world coordinates, the same as the light source. One way to avoid this is to do the opposite: to transform the light source into the "local" space. But what's the "local" space in this case?

Answer: You form the local space. You take the tangent, to the surface and the normal to the surface ... these are guaranteed to be orthogonal. You take the cross product of these two vectors to get the binormal, and now you have three orthogonal vectors. Normalize them, and hey presto, you have a basis. These three vectors are the local tangent space.

Once you have the basis, you can easily form a matrix which will transform from world space to tangent space. What's more, in the local tangent space, the unperturbed normal is (0,0,1). To perturb the normal (which is what you have to do in bump mapping), you have use an offset map, which consists of pairs (a,b), which can now be substituted directly into the normal as (a,b,1).

This allows you to very efficiently apply the illumination equation, with perturbations to the normal, which is what bump mapping is all about.