Normal Maps

Normal maps are cool. They are blueish textures which work like (but are more accurate than) bumpmaps… apply them to a model and they add bumpy textures & displacement to the surface. This makes it possible to have a low resolution model look like it is a high resolution model, but without the major strain on CPU resources.

http://img72.imageshack.us/img72/1953/examplept8.jpg

In this tutorial, you will how to make a Normal Map of a high resolution model, and apply it to a lower resolution model so that it looks like the high resolution version.

I am assuming you know the basics of Blender, including how to UV unwrap and also Sculpt mode. The tutorial would be too long if I explained those parts so it’s better for you to follow other tutorials on those areas until you are ready for this one.

So then; the workflow is you are going to start with a low poly model, make a hi-poly copy of the mesh, sculpt in detail and then create a Normal Map to display the high definition detail on your low-poly character.

First, we need a low resolution model. I’m going to use Suzanne (monkey head) for the images here, although she’s not ideal because her eyes are separated polys which form nearly overlapping faces against her face, which will likely be troublesome for Normal Mapping. Where possible use a simple base mesh without sandwiched faces.

STEP 1: UV unwrap the low poly model.

I shouldn’t need to tell you how to do this. Add seams, Unwrap, and then rearrange the islands on your UV layout. Don’t rush this stage. Normal Maps are affected by the quality of your UV layout.

http://img515.imageshack.us/img515/361/uvlayoutda3.jpg

Make sure the low poly mesh has an image associated with it from the UV editor. While in EDIT mode, assign a “new image” in the UV editor as needed (and presave it). This new UV image is now set up and ready for baking, a process which comes shortly.

STEP 2: Create low and high poly versions.

Make a copy of your mesh. Name one “Suzanne_high” and then the other “Suzanne_low”. Move Suzanne_low to a different layer out of the way, but don’t change the physical (x,y,z) position as they will later need to be in the same location when making the Normal Map.

http://img93.imageshack.us/img93/943/lowresty5.jpg

STEP 3: Sculpt the high poly details.

As with UV mapping, Sculpt mode should be familiar to you. Be careful on excessive use of the “grab” function (you can’t normal map hooks). You should be looking to add fine details like muscle bulges, cloth wrinkles, skin textures and so forth. Save as you go, and allow yourself to detail as much as your computer will allow.

http://img261.imageshack.us/img261/268/hisculptpb8.jpg

STEP 4: Create the Normal Map

At last you are ready.

SHIFT-select both the high and low poly models (the low poly should be selected last). You could move the low poly model to the same layer as the high poly version to do this, but SHIFT-enabling both layers also works just as well and keeps them easily separate.

Now you need to bake (Scene (F10) => Bake options) with the following settings…

http://img257.imageshack.us/img257/1294/bakeoptionsiy9.jpg

  • The Bake should be set to “normals” (not “full render”)
  • Make sure “Selected to Active” is activated. This compares the high poly one mesh against the low poly mesh in order to work out surface displacements.
  • Normal space should be set to “tangent”. This will generate a Map that allows for the object to be animated (e.g. change rotation). Older methods could only make Normal Maps for stationary objects where only the lighting positions could change.

Now hit the big “BAKE” button and you should see your new and blue UV map generate. (I like using 1024 sized maps for reasonable resolution)

http://img186.imageshack.us/img186/1639/bluenormalsdq5.jpg
Save the map when you are done.

STEP 5: Apply the Normal Map to a low poly figure.

This is easy. Simply apply the newly saved image as a texture.

Under Shading (F5) => Materials (red ball icon)

http://img252.imageshack.us/img252/6000/mapinputlb5.jpg

Under “Map input” change the projection setting from “Orco” to “UV”.

http://img355.imageshack.us/img355/4171/maptoxu9.jpg

Under “map to” the default is “Col” (diffuse colour). Change this to “Nor” (normal, or bump).

http://img413.imageshack.us/img413/3112/leopardskinud1.jpg

To make the Map work as a Normal Map instead of a Bump Map, under Shading (F5) => Texture (F6) (the leopard skin icon), under “Map image” panel, hit “Normal Map” and select “Tangent” from the next droplist.

Your render should now show the low res model with all the bumps that the high resolution sculpt has. For a better result, you may want to apply a Subsurf modifier to the model, and turn off “hard edges”.

http://img388.imageshack.us/img388/7492/finalresultiw9.jpg
As you can see, this low poly mesh now looks very similar to the higher poly sculpted version.

A small note: Yes, I did cheat a little on this final image. Observant readers would note that my final result has a smoother outline than the original low-poly version. This is because I added a Subdiv modifier to the final resulting mesh. Depending on your model, or the context (still shot, game or animation) this is not always necessary.
Another small note: Normal maps are super sensitive and will even pick up on subtleties like “set smooth” versus “hard edges”… I’ll lead the reader to experiment with these options and keep this tutorial as an outline of the base process. For most purposes, you should have the low poly mesh edges as “set smooth”.

There may be areas where the mesh needs to be tidied up (some show as patches in the UV editor). There are probably various ways to do this, from rehashing the sculpt, to hacking the texturemap in Photoshop / Gimp. I wanted to show the technique for now, may troubleshoot solutions for those at a later time.

http://img76.imageshack.us/img76/1563/glslscreenshotmx4.jpg

As a bonus in the new Blender (2.48) you can go to the top menu “Game => GLSL materials” and show a 3D window as “textured” to show the textured mesh in close-to final render quality in your 3D view. The surface also looks good in game mode, but be sure to delete the high res model before hitting P to activate game mode, or you could hang up the computer trying to calculate the high poly mesh.

So that’s it. Now you can use Normal Mapping to give your low resolution meshes some high resolution punch, without compromising heavily on animation render times.

Thank you so much for this tutorial! now i might be able to make something usefull with this!!

Thank you very much. This tut is very helpful. Is the displacement map work the same way?

Sort of. I haven’t used displacement maps much, though I think the difference is that a displacement map pushes the existing geometry by moving the vertices during render time. It’s slow, and you need to have a high resolution object to apply it to. Useful context would be to have an animated cloud texture causing waves in a grid (plane with lots of vertices).

Someone might correct me on that… I think I may have seen someone using a displacement map recently on a low poly mesh and it seemed to work fine (???)

A “normal” on the other hand, is more bump map; each face stays as one face but shines light as though it was bent. Ordinary grey scale bump maps basically affect specular highlights etc as the light flashes past. A “normal” map like in this tutorial is like adding another dimesion to the old greyscale bump maps. Because these new ones are in colour, you can separate the chanels in to red, blue and green, each showing the height influence from a new direction (x,y and z). Therefore, the blueish normal maps are much more accurate than the older greyscale bump maps.

Thanks! This will help me a lot the day i’ll start to unwrap without making a complete mess out of it! :wink: ;o :wink:

Thanks Lancer. I know exactly mhat you mean when you speak about displacement. My idea is to work as I work with max and Vray and create microdisplacement on my object to get a verry good result. But this is not the subject of this thread. So if I need to use that I will search after that before posting her and certainly give some explanation if I found the solution by myself.

:wink:

Edit:

Your tutorial work fine for me. All the test give me a good result.

Thank you. Really well explained.

A little detail you forgot to mention, or maybe it was just my own ignorance, is that both objects (low and high), MUST be in the same place, if not the normal baking will be made really strange (like some kind of reflection).

Thanks for the feedback everyone. :slight_smile:

I did say that, in step 2: but don’t change the physical (x,y,z) position as they will later need to be in the same location when making the Normal Map.

I might have made it a little clearer by explaining that the geometry does not have to be the same. It can even be completely different. For example, you can make a Normal Map from a monkey mesh to a cube… it still works to “close proximity” of the shapes.

that gives me an idea of how to sculpt then normal bake then reply it to my low polygon mesh ah ha !

Hey logunwhite321.

Yes, that is the workflow. You start off with a low poly one, make a duplicate of it and then sculpt the copy as hi-res. Then, you make a normal map of one against the other (SHIFT-selecting them both). The Normal Map creates a UV layout of the differences. When this is applied to the low-res map… it ends up looking like the hi-res one.

Side note: Aha! Another Kiwi Wellingtonian.

Thanks for this it was really clear, and I’d been wondering how it was done for a while.

I did say that, in step 2: but don’t change the physical (x,y,z) position as they will later need to be in the same location when making the Normal Map.

TRUE! XD
Sorry my bad.

Good tutorial Lancer, thank you!

So then; the workflow is you are going to start with a low poly model, make a hi-poly copy of the mesh, sculpt in detail and then create a Normal Map to display the high definition detail on your low-poly character.

First, we need a low resolution model. I’m going to use Suzanne (monkey head) for the images here, although she’s not ideal because her eyes are separated polys which form nearly overlapping faces against her face, which will likely be troublesome for Normal Mapping. Where possible use a simple base mesh without sandwiched faces.

Thanks for this tutorial, very handy stuff to know.

Its a very simple and easy to follow tutorial, im now making normal maps very easily, they look great!

Normal maps ARE bumpmaps. They are not bluish by all means. Tangent space versions are. They are usable for animated objects, and they can be compressed well, that’s why they are used most commonly by the game industry. They don’t add displacement to the surface at all. You can use separated surfaces in the lowpoly mesh by generating the normal map separately for the parts and mixing the results in a paint program (with Blender’s stencil maps + bake, or the new clone stamp in recent builds you can do the same inside Blender) When unwrapping the lowpoly mesh, you should take care of the UV islands. Seams HAVE TO be hidden as possible, because most realtime engines can’t remove the glitches generated by different UV edge angles. The vertex normals of the lowpoly version SHOULD be smoothed as possible. It affects the generated map. Don’t forget that normal maps have only sense together with known vertex normals!

Normal maps are fine for realtime usage but for quality rendering use displacement maps!

In order for this to work you have to save your simply low polygon character and then do all the detail bake it then go back to the simple model and then place it on the uv for the low poly that’s something i have to do?where can we find tutorials?

I want to do this for games not animation.

i suspec that i cannot do normal maaping with the graph card i have and the bug on the video driver i have on my pc

do you have a small test file that you could upload with a pic showing before and after effect so tht i can make a test to see if normal mapping is working on my pc

i did the example in the wiki but it did not worl and there was another tut on normal mapping on CG smething and it also fail to show any normal mapping as shown in the tut!

so i would appreciate a lot

happy blendering

Thanks

Ok I’m a little bit suspicious here. My understanding is that even with a bump map, an objects silhouette will remain the same. So why is it that in your final image, it has a smoother silhouette than the low poly one did?