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.
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.
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.
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.
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…
- 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)
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)
Under “Map input” change the projection setting from “Orco” to “UV”.
Under “map to” the default is “Col” (diffuse colour). Change this to “Nor” (normal, or bump).
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”.
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.
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.