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.