Download PDF
Normal Map Workflow Page 2
After you
have matched your low poly to the high poly, it's time to layout UV's.
When making UV layouts for use with normal maps, there are a couple
things to be mindful of. The first is what your target engine is capable
of. Also, keep in mind that UV chunks can be facing "forward"
or "backwards". The way to tell, is to apply a texture with
some text on it. If the text displays correctly, it's facing forwards.
If the text displays in reverse, it's backwards. Whenever you use
the Planar map function in the Unwrap UVW editor, with it set to average
normals, it will map them facing "forwards" Likewise if
you use the UVhelp script (www.microcan.nl) when you relax something,
it will relax them so that they face forwards. There are generally
three types of engines:
1) Everything
must have unique UV space. No mirroring, no flipping. Everything must
be facing forward in the UV area.
2) Mirroring
is allowed, but only directly down the center of the object.
3) Creative
mirroring and flipping is allowed, and the engine can adjust using
the winding rules and the facing direction of the UVW chunks. As of
this writing, very few engines allow this type. If you are working
on a game in mid development, try to push your programmers to make
this work if possible, as it allows the best use of texture space
versus unique details. This method allows you to layout UV's as you
normally would for a non normal mapped model.
Regardless
of your engine type, there are some rules to making good UV layouts.
The first is to have as few seams as possible. No matter what the
engine, seams always seem to show up. Hide your seams in non visible
areas. Be twice as anal about hiding seams as you would be on a color
map only model. Try to keep things as relaxed as possible so that
if you apply a checker map, the squares all appear uniform and straight.
Use the UVhelp script till max 8 comes out (max 8 has a working relax
function) UVhelp and documentation can be had from www.microcan.nl
Whenever possible have seams lie on the same axis, either horizontal
or vertical. The best example I can give is a cylinder. Don't let
it curve in the UV layout, straighten it so that each seams is parallel
to each other. If your engine type is number 1 or 2, this is twice
as important. This is because of the way that a normal map is stored
in RGB. In the below example, I created this model as if I had access
to engine type 2 (which is how max displays things). The arms are
mapped so that the seam is parallel to itself on either side. Same
with the head seams. The head is welded to the torso and the pants,
to eliminate as many seams as possible.

If you are
using 3DSMax as your baker (baking normal maps is only available in
max 7 and up) you may not have any UV chunks overlapping. Grab the
offending chunks (in the above example, both legs and feet grabbed
from the same chunk). Then using Unwrap tools (available at www.chuggnut.com
and YES it does work in max 7 despite him claiming it only works for
5) offset those chunks a value of 1.0 in either U or V direction (I
prefer U). What this does, is moves it out of the way so that the
max bake doesn't error (it ignores chunks outside of the UV square)
but when a texture is applied, because the texture tiles, those chunks
still get the exact texture area that their in-the-square counterparts
get. This is why it's so important to offset it exactly 1.0 and nothing
more or less. If you were to leave the chunks overlapping, your render
would have a wireframe overlay of reversed normals, and in the color
map, you'd have sparkly colors or a wireframe overlay.

After your
UV's are finalized be sure to reset Xforms on your low poly. Make
sure your Smoothing groups are set up correctly (I put all of mine
on SG 1) Now press the zero key to bring up the Render to Texture
dialog box. Alternatively you can get to it under the render menu.

Above outlined
in pink is the options box. clicking it brings up the below dialog
box.

Don't render
yet. You still need to set up your cage. A cage is very powerful.
Without a cage, all the rays cast in the bake will travel the same
distance. This will almost always result in it grabbing from areas
you don't want it to. The cage lets you not only vary the length,
but also the direction the rays are cast. This is very powerful. I
always set up a cage for my objects.

When you bring
up the render to texture dialog box, and add the high poly pieces,
it automatically applies a projection modifier to your low poly. You
can also add this manually using the modifier list.

The first
thing I end up having to do to my cage is reset it. It tries to auto
fit it, but it has never worked so far. I reset the cage, then I put
a push on the entire cage till it encompasses the entire model.

After putting
on a universal push, I go into the point sub object selection, and
grab the problem areas, then I reset them.


Then I do
a smaller push on them so that it's more appropriate for those areas.
You will only be able to do certain areas using the push. Some areas
are just too problematic, and will need custom tweaking. Go into point
mode, and using the move rotate and scale gizmos, tweak the cage to
encompass the high poly model without overlapping areas you don't
want to pull from.
Remember how
I said that the cage can control the direction the rays are cast?
Here is how that's immensely beneficial.

With the unedited
cage, the high poly is grabbed unevenly. Where the low poly surface
is closer to the high poly, it grabs the edge, but as it gets further
away from the hig poly surface, it grabs the top of the high poly
first, because of the angle the cage is facing. If you go in and manually
edit the cage, so that it is as close to the high poly surface as
it can be while still encompassing it, you will get a smooth normal
map rendered. This works well on gun barrels, shorts, shirt sleeves,
anything that is round, but you don't have enough polys to make it
as round as the high poly is. I edited the cage on my skater, so that
it would grab from the shorts like the cylinder above on the right.
this gave me a nice smooth edge for the shorts normals.
Once your
cage is set up, you can render using the render button in the render
to texture dialog box.