NORMAL MAPS: PART II - page 2: Tips for Creating Models
Tips for Creating Models
As I've discussed, the whole goal of normal mapping is to make a low poly model look like a high poly model. This is usually achieved by creating both a low poly model and a high poly model and then using the detail of the high poly model to create a normal map for the low poly model. So we've got two models involved. This page contains tips for creating both the high and low res models that will help you to achieve better final results. First, we'll discuss the order of creation for the models.
Which Model Do I Create First?
So if you have to create a low poly model and a high poly model, which one do you create first? The honest answer is, which ever one you want! Here are a couple of options:
There are other options, but this is probably enough to get you going. Once you get started you'll probably settle on a method that you're most comfortable with.
- Create the High Poly Model First
If you are used to creating high poly models for non-real-time rendering, you might want to create your high poly model first. Once you've created a beautiful model with lots of detail, make a copy of the model. This copy will become your low poly model - you just need to reduce the poly count. Most 3D programs come with a feature to simplify a model. In 3DS Max, the MultiRes modifier works pretty well. Just crank the poly count down to a number that fits in your budget. If the model is a character that needs to deform, be sure that you leave enough detail in the joint areas for realistic deformation.
- Create the Low Poly Model First
A lot of artists in the game industry are more comfortable creating low poly models. If that's you, you'll probably want to create the low poly model first. This gives you very fine control over the low poly mesh. (Sometimes resing down a high poly model, like in the previous method, gives you a very messy mesh.) Once you've got a low poly model you're happy with, make a copy of it. This copy will become your high poly version. Just subdivide it several times. The Mesh Smooth modifier in 3DS Max works well for this. Now go in and add all the detail that you've always wanted to add but couldn't because of your polygon budget.
Tips For Creating the Low Poly Model
The low poly model is the version that will actually get used in the game. It needs to have a poly count that fits in your engine's budget. Creating a low poly model that uses a normal map is a little different from creating a regular model. Here are some tips for getting good results from your normal map:
Tips For Creating the High Poly Model
- Only One Smoothing Group, No Hard Edges
Up until now, smoothing groups (or hard edges) have been a good way to accentuate features of a low poly model and make the details more clear and readable. It used to be important to use smoothing groups carefully to create a good model. Throw all of that out the window. Smoothing groups are an enemy to normal maps. Your low poly model should have one smoothing group (no hard edges). Here's why:
This image illustrates the process of generating a normal map. For every pixel in the normal map, a ray is cast from the surface of the low poly model outward along the normal where the ray started. The high poly model surface normal is recorded at each ray intersection. (A more detailed explaination is available in my first normal mapping tutorial here.) If your model has a hard edge, all of the rays on the polygons that share that edge will be uniform (go in the same direction). This will leave a gap in the rays between the two polygons. No data from the high res model will be recorded in this gap and an ugly seam on your final model will result.
This image illustrates the same case but with a soft edge. Here we see that with a soft edge, the low poly normals are interpolated (smoothed) from one polygon to the other. There is no gap in the rays that are cast from the low poly model to the high poly model. No high poly model data is left out.
There is a similar principle with regards to the high poly model. Be sure to check it out below in the high poly model tips section.
- Avoid Extremely Sharp Angles
Because you're using one smoothing group, as mentioned above, if your model has sharp angles (greater than 90 degrees or so) you will get bad artifacts in your normal map. These are caused by the large difference between the angle of the faces and the vert normals. Round off your sharp angles with extra faces for better results, or if you need sharp angles, go ahead and use smoothing groups/hard egdes to create them.
- Hide UV Seams Well
The low poly model needs to have UV coordinates applied. You should already be familiar with this process. There are a few things to keep in mind when laying out the UVs. The first is to hide your UV seams as best you can. Put them on the insides of arms, in the back of the head, where the neck meets the shirt, around the waist, etc. Try to find spots on the model were a seam makes sense. UV seams are much more pronounced in a normal map than they are on a regular diffuse texture. There is one method that you can use to erase them. I discuss that on page 4.
- Flipped UVs Issue
In order to save space on the texture map and to achieve a high texel density, most character modelers will unwrap half of the model and then mirror that half for the other side. You can also do this during the unwrap process by selecting a group of UVs and flipping them horizontally or vertically and then laying them down on top of the coresponding set of UVs from the other side of the model. This is a great technique, but it causes some problems when creating normal maps. Here's the issue:
The lighting on a normal mapped model is dependant on the surface direction (normal) of the polygons, but also on the normal direction of the UVs. It's as if the UVs have a normal also. When you flip the UV coordinates horizontally or vertically, the effect on the lighting is the same as if you flipped the polygon from front facing to back facing. Suddenly, the lighting looks like it's coming from the opposite direction.
If you work for a game company, you can ask your engineers to add some additional code to your model exporter, so that when your models are exported from Max or Maya, etc, the exporter will recognize cases were the normal of the polygon and the normal of the UV coords don't match. In those cases, the exporter can flip the UV normal back the right way for you without effecting the unwrap at all. If they need help figuring out how to do that, this is a good place to start.
If you don't work at a game company or have access to programmers that can just whip up stuff like that, your best bet is just to avoid using mirrored texture coordinates all together. That's probably not what you wanted to hear since you'll have to use a lot more texture space to get the results you want, but that's the best you can do.
- Overlapping UVs
Often when applying UVs to a model there are several parts of the model that share the same part of the texture, so the UV coordinates of those pieces are all on top of each other. This will work, but requires some special handling. Generally, programs that create normal maps, like NormalMapper, get all confused if you have overlapping UVs - so the trick is to make a special copy of your low res model that's used only for generating the normal map. On that copy, delete all of the polygons that have overlapping UVs except for one set. That way, when you generate the normal map using the copy, there are no overlapping UVs, but you can then apply the normal map to the original model that has overlapping and evething will work fine.
- Splitting Up Your Model
Many models require more than one normal map. In these cases make a copy of the original low res model, break the copy into multiple pieces, one for each normal map. Put all of the polygons that will be using the first normal map in the first piece, all of the polygons that will be using the second normal map in the second piece, and so on. Then generate the normal maps using the seperate pieces as if each piece was its own model. Once the normal maps are created, you can apply them to your original model.
Sometimes it is also necessary to split up a complex model into several different peices even when it's just using one normal map. If you try to generate the normal map for your whole model and it comes out very messy looking with high res details in the wrong places and lots of errors, you can often fix the problem by making a copy of your low res model and breaking it up into pieces along the UV seams. Generate a normal map for each piece seperately and then put all of the parts of the normal map together in a paint program to create a single normal map for your original model.
The high poly model will only be used to create your normal map. Since it won't be rendered in real-time, you can use as many polyons as you want - even millions! You can model every rivet and every nail head, every skin wrinkle and every pore. You can sub-divide the model until the wireframe is do dense it looks like one solid color. (This kind of modeling is very gratifying for those of us who've been stuck in low poly land for many years.) The only practicle limitation is the amount of time it takes to generate the normal map. Here are some tips to keep in mind when creating your high poly model:
- You Don't Need UV Coordinates
That's right! The high res model does not need UV coordinates. It's just a high detail mesh. Only the low res model needs UV coordinates. Optionally, you can apply UV coordinates to the high res mesh and then apply a bump map to it. Then when the normal map gets created, all of the detail from the high res mesh AND the bump map will go into the normal map (I'll get into more detail about how this is done on page 3 of the tutorial), but this is not required.
- Be Careful With Straight Extrusions
Details that extend straight out from the surface of the mesh don't translate to the normal map very well. If you select some faces on the high res mesh and extrude them straight out from the surface, the detail won't show up in the normal map or it will not look very good because the normal map contains surface direction, not surface height. Consider extruding the faces and then scaling them down a little at the top so that the sides are slightly sloped. Rounded details always translate into the normal map better than sharp grooves and ridges.
- Remember Your Normal Map Resolution
Keep in mind that all of the detail in the high res model is being created for the purpose of creating a normal map. The normal map will be created at a limited resolution (256x256, or 512x512, etc). If you put details on the surface of your high res mesh that are smaller than the pixel size of your normal map, you're wasting your time because they won't show up, they won't be clear. Remember that as you add small details to your high res mesh.
I hope that these modeling tips help you get better results when creating your normal maps. This is certainly not a complete list of tips for creating the high and low res models. If you know of additional information that I need to add, please email me!
Page 1: Introduction
Page 2: Tips for Creating Models
Page 3: Methods for Creating Normal Maps
Page 4: Tips for Editing Normal Maps
Page 5: Tips for Applying and Using Normal Maps