Enter the "normal map". While a height map only contains 1 plane of information - the "Z" (height) plane, a normal map contains 3 vectors of information - "X" direction, "Y" direction and "Z" direction. Thus, each pixel in a normal map encodes which direction that particular point is facing - the "normal vector" of the surface. Each pixel in a normal map has meaningful information, so details can be rendered more crisply than with bump maps alone. This allows modern game engines (Doom III) to more realistically portray the lighting on a surface. A properly constructed normal map can fool the eye into perceiving much more complex 3D geometry on a simple surface. Theoretically, normal maps on a cube can make it appear spherical, at least in terms of shading properties (the outline remains unchanged).

Normal maps use three channels of information to encode their information. This can be conveniently mapped to a standard RGB image. The red channel is used to encode normal vectors in the X direction. 100% red indicates a vector facing right - an X normal direction of +1. 0% red indicates a vector facing left - an X normal direction of -1. A 50% value in the red channel indicates an X normal component of 0. Similarly, the green channel encodes normal vectors in the Y direction. 100% green indicates a vector facing up - a Y normal direction of +1. 0% green indicates a vector facing down - a Y normal direction of -1. 50% value in the green channel indicates a Y normal component of 0. The blue channel encodes normal vectors in the Z direction. 100% blue points straight out of the surface. 0% blue points straight behind the surface. A value of 50% in the blue channel indicates a Z normal component of 0. Normal maps don't contain values below 50% in the blue channel since these would be pointing behind the surface.
______________________
Hope this helps - just for information