Download PDF
Normal Map Workflow
This tutorial will explain
my workflow when making a normal map for a character. I'll be using
3DSMax though most of it will transfer to any program. As with everything
I write, take it with a grain of salt, compare it to what you know,
and figure out what you want to use from it for yourself.
First I'm going to explain
what a normal map is and does, from an artists perspective. Imagine
a styrofoam head that is faceted and chunky. This is like our low
poly model. Then imagine coating it in clay and sculpting a much more
detailed face on top of it. Then you slit this clay from the back,
and pry it off. Lay it flat on the table, and you will see that it
is thick in some places, and thin in others where the edges of the
chunky head (the low poly model) came close to the surface. This layer
of clay is what gives the definition to the sculpture, whereas it
was featureless and flat before the clay was added. This is what a
normal map does, though it is virtual and doesn't change the actual
silhouette. It tells the engine how to display the light hitting the
object. Current hardware can only handle a certain number of polygons
still, but normal maps give us more detail without actually stressing
the processors as much as trying to render the high poly models that
the normal map comes from.
Next I'll explain how the
"bake" works. The low poly casts "rays" out from
it's surface, using it's smoothing groups to determine the direction
the rays are cast. You can enhance and tweak the rays in some programs
by using a "cage" which I'll explain further later on. If
you apply smoothing groups to a model, it will not only display a
razor sharp crease in the model in game, going against the look of
the other defined edges in the normal map, but the "bake"
will also miss portions of the high poly. This image should help explain.
The first thing I do when
making an asset that will have a normal map, is to make a "sketch"
model. I make this model quickly, trying to hit my target polycount
for the in game model. I pay attention to silhouette and meshflow
as well. This is so that I can know how much detail my low poly will
"hold". If you make a high poly model, without any regard
to the polycount you have for the low poly version, you might find
that you made it too detailed, with too many things breaking the silhouette,
and then you'll have to go and delete portions of your high poly,
wasting valuable time. Normal maps work best on large smooth planar
surfaces. The rounder and smoother your low poly, the better the normal
maps will catch and hold. Whenever you have to make too many quick
changes in surface direction, the normal map won't work as well. I
try to keep my low poly one solid mesh, with one smoothing group.
The reasons I make my meshes watertight, is that when you have intersecting
elements, the normals don't average. This means when the normal map
displays it won't average either, and you will have a hard intersect.
I didn't save that state of this model, so imagine that this model
is rougher and doesn't match up with the high poly so well.

Layers are
extremely important when creating normal maps in max. These are the
most commonly used buttons for my workflow. I encourage you to learn
the other buttons as well, but this should give you a crash course
in the layer panel. In order to bring this layer manager up, click
this button.


I keep my
sketch model on a layer called "low". I make a new layer
named after whatever part I'm working on. In this case it was "body"
and I merged in a body I'd made before and started altering it to
fit this project. I'm not going to cover high poly asset creation
here, I'm going to assume you've made your high poly in your package
of choice, be it zbrush, XSI, Modo, or others, and merged it back
into max. Try to keep all your chunks as organized as possible on
different layers. This is especially important if you don't have a
great video card, as you can speed up your viewport manipulation by
only having one layer visible at a time.

Now comes
time to tighten up your sketch model to match up with the high poly.
I like to put the low poly on X-ray mode (alt+x) so I can see the
high poly inside it. To speed up your view, only show wireframe on
selected object, as displaying the wireframe on your high poly slows
the scene down a lot. To do this, right click perspective in the upper
right corner of your viewport and go to Configure at the bottom. Then
in the Rendering Method tab, tick the display selected with edged
faces button. This way when you have edged faces turned off, whatever
you select still gets edged faces. Try to match the surface of your
low poly as closely as possible to the high poly. The goal is to capture
the silhouette and volume of the high poly. Pay particular attention
to parts that break the silhouette. There is a script on Scriptspot
called "Tim's Scripts" that has a conform macroscript in
it. If you have a solid mesh as your high poly, you can use this script
to pop the verticies of your low poly to the surface of your high
poly.
