Normal Maps

I’m having a problem understanding the concept of Normal Maps. Can anyone please explain them to me? :o

Its a texture that fakes displacement. If you have a rough surface, you could just model every single tiny pore, or grain of sand, but no ones every going to do that, right? So we fake it with normal maps.

It apears to displace the mesh acording to the texture, to simulate added detail.
The orange is just a sphere, but with a normal map, it looks rough and bumpy.

Bump map is the same ( to my knowlage ) only it uses black and white to store the hight values, where normal maps use red green and blue to store X Y and Z data.

Displacement maps are the same, only it actually moves the faces of the mesh rather than simulating that. Normal maps bump maps and displacement mapping.

First of all, think of normal as a the direction a face points to. Therefore, for a sphere, all normals are pointed outwards, etc.

Normals are directly related to the way lights fall and reflect off the object. Think of an apple of having a relatively uniform normal and a pineapple as having a very complicated normal pattern.

A normal map forces the computer to disregard the derived normal and instead, use the normal directions stored in a bitmap. And each of the RGB channel is conveniently mapped to an axis, and since most normals are pointing “up” (relative to a face), a normal map is predominantly purple.

A normal map tells the ‘slope’ of the face(derivitive for the calculus types …), contrary to popular belief, it does not directly store the height of the surface. However it is entirely possible to reconstruct the height map(which is usually represented by a grayscale image) based on the normal map.

Think of it this way, Normal maps effect how the light bounces off an object in order to simulate depth. So, if you have a normal map that creates spaces between bricks, the bricks won’t actually be there, but it will look like they are. Normal maps can also be used to make something look smoother by making the light reflect as if the object is smooth, therefore the object looks smooth, even if its not :).

hope I helped


Thanks guys :slight_smile: . I now have a much better understanding of normal maps. I was kind of confused before because I only knew of relief maps which used the grayscale images to show depth, the part that confused me was the RGB images whenever I tried to research normal maps.

Also, if not too much trouble. What does each color of the RGB represent in a normal map? and How do you create a normal map? :smiley:

I know that there are some tutorials out there about normal maps in blender, I just can’t find the time to sift through my collection of 100+ links to Blender tutorials because of High School. :frowning:

Dokumentation Normal Maps:

A simple explanation.

A “normal map” is usually a grey scale image.

In a 3D program, it does not show ANY color, just an embossed surface.

For example:
Black and dark shades are concave.
White and light shade are convex.
Grey is neutral.

Any image can be used as a Normal Map, but you get best results when you design one specifically for your own project.

My understanding is that a normal map is NOT the same as a black and white height map. It is a RGB bitmap which stores the ‘normal’ vectors, which can be seen as the slope derivitive of a B&W ‘height map’. Most new games utilize normal maps as oppose to height maps because they are easier to work with in shaders (better performance). However a BnW heightmap is much easier to work for artists.

Yes, as much as I know now, I think you have Normal maps confused with bump and relief maps.:smiley:

With that cleared up…
Here’s an example of that color normal map:


2 more questions.

In normal maps, the more red something is the more dark it is and vice versa except with blue.

Also, if normal maps emulate depth, why aren’t normal maps just a variance of Blue since blue represents the Z (depth) axis?

you have it wrong

first: only in tangent-space normal maps [the ones blender doesn’t support… but nearly every game does] is the blue channel anything like depth

tangent space normal maps are mostly blue in color. Increased blue means the surface is facing more directly outward [relative to the texture]. Increased Red when the surface faces more to the right, and increased green when the surface faces up [relative to the texture]

in object or world space normal maps [the rainbow color ones] the color represents the direction faces in world or or object space. So more red would mean facing along the X axis, more Green along Y, more blue along Z.

[of course, there’s no reason why you can’t have the channels in a different order or corresponding to a different axis… but that’s not my point]

Blender doesn’t support tangent based normals?

Wooooo! Normal maps are a cornocopia of confusion. I gotta a lot of practice ahead of me.

How would one go about reconstructing a height map bassed off of the normal map?


Blender doesn’t support tangent based normals?

I think Ton committed tangent-space normal maps to CVS about a month ago.

Edit: Here is the new feature description.

Practically, probably not at all :slight_smile:
Creating a normal map from a heightmap simply means differentiating the texture, that’s the very same the renderer does with the bump map at render time anyway. Only that you encode the normal as RGB value.
Doing the opposite means integrating…the whole image. But because of the very limited precision of this process, you’d likely end up somewhere way off after integrating a few hundred pixels in one dimension…

I have been trying to get a detailed heightmap from a high count mesh. The only results that I have gotten are zbuffer dumps and Normal maps. The Normal Maps look great but the zdumps are poor. I was hoping to get the detail of the normal map but make a bump map type of image.