Red Faction Soldier – Making Of
Creating the model
These are in-progress screen shots of the riot soldier. I’ve numbered each step in order to walk you through my process. There are probably a zillion different ways to create a model like this, but this is my workflow.
1. I had an old human figure I was able to use as a reference. I appended a sphere and converted it to dynamesh. Using the move brush and periodically updating the dynamesh, I created a very rough mesh to cover the head, torso, and legs. I used a similar method to cover the arms. I did the arms separately to make working on the large overhanging shoulder pads easier.
2. Once the rough mesh was in place, I started blocking out the large forms. Keep it loose. Don’t get too far ahead on one part before completing the rest of the model to the same level. This takes some self control, but the point is to get everything blocked out. It’s normal to have to make major adjustments during this phase. I used move, dam standard, flatten with a tight fall off and the square alpha, and clay tubes for this phase. You may also notice the shoulder and leg armor are mirrored here, though in the final model they are different. I repeated the process for the unique geo later on.
3. This is what the finished block out looks like. Nothing is carved in stone, the detail is loose, but the overall proportions are resolved, and I can see how everything is going to fit together. At this point, there are only three separate subtools. Two dynameshes (arms and everything else) and one reference mesh. This is arguably the most difficult part of the entire process, because its where the bulk of the sculpting happens.
4. Once the base mesh is done, its time for retopology. I go into more detail about this process a little further down. I retopo each piece of armor with skin thickness, crease the correct edges, and subdivide with a crease level around 3 or 4, depending on how sharp I want the edges. I make a polygroup out of each section of the original dynamesh geo as I finish and hide it. This helps keep the scene clean. Some work flows call for using extraction instead of retopology, but in my experience extracted geo is messy, way heavier than it needs to be, and precisely clipping irregular curved edges is a lot harder to control than creasing a retopolgized low poly mesh. Also, doing the retopology up front saves doing it later. You might not be able to use all of it in the low poly, but you might save yourself some work down the road.
5. This is the geo after subdividing. Notice how bland it looks. I don’t add any detail until the whole thing is done. It’s important to finish each phase completely before moving forward. This prevents loosing work if you need to make big changes.
6. This is the final model. It might look like a pretty big step between 5 and 6, but its really just the same thing over and over again. For the hard surface stuff, its just retopo, crease, subdivide. To add smaller panel work, I like to mask off sections and apply a little inflate from the deformations submenu. Eat3D has a good tutorial on hard surface modeling that include some really cool mech stamps, like bolts and latches. I use the heck out of them : ) While the vast majority of the geo is built completely in zbrush, some of it was built in 3DS Max. These include the grenades, the shoulder light, the pistol and holster, and the knife. It was all detailed in zbrush. Generally, if a thing can be cobbled together using primitives like cylinders, I’ll do it in Max. For the pouches, I deconstructed the polysphere tool (located in the lightbox) down to its cube level. Then I creased it and started sculpting. For the cloth areas, there’s nothing fancy. It’s just good old fashioned sculpting. I find the standard brush with lazy mouse to be pretty effective at making folds in cloth.
1. This is the base retopo. Notice how light it is. The resulting geo will be easy to manipulate, and not overly dense at higher subdivision levels.
2. I set the preview density to 1 so the resulting mesh matches my retopo exactly. I guess there’s some reason zbrush defaults to two, but I have no idea what it is.
This is resulting polymesh.
4. Using the selection lasso (cntl + shft) , I’ll hide the geo I don’t want to share a smoothing group and
5. hit the crease button. It works by creasing the exterior edges of whatever geo is visible. Be careful though – if you have any faces that exceed the angle set in the CTolerance slider, they’ll crease too. You may need to adjust the value higher. If no geo is hidden, it will autocrease the mesh according to the CTolerance slider, but for a mesh as simple as this, I just do it by hand. Zbrush will automatically crease the edges of the inside, outside, and depth faces.
6. These are my crease groups.
7. The next thing you need to do is set the crease level to 3 or 4. What this does is tell zbrush to preserve the creased edges for that number of subdivisions. The higher the number, the tighter the edge.
8. This is the resulting mesh.
Now for some detail!
9. Mask off an area to make a lip, panel work, or whatever. You may need to smooth and sharpen the mask to even it out. You can do this in the masking menu. Use the mask curve to draw the mask, so you get nice clean lines.
10. Go to the deformations submenu in the tool menu and enter in a value that works. I get pretty good results with 4 or 5. It doesn’t work that well with negative values in the corners, but you can get a similar effect by inverting the selection and inflating the other part.
11. Add some mech stamps and call it good!
Once the high poly model is finished, it’s time to retopologize it (again). This time though, we aren’t going to worry about creasing or subdividing. The object now is to create the low poly mesh that will ultimately end up in game. The three things you have to juggle when planning your retopo is poly count, silhouette, and baking. Polycount should be a pretty obvious concern – I’ll usually go as dense as I feel is necessary, then cut out as much detail as I need to to get down to the target (assuming the resulting mesh is too heavy, of course). This was a personal project, so I didn’t worry too much about the final count. At 12.5k, this would be fine for a console game, and ok for an MMO. Lower poly versions, called LODs (for level of detail) would definitely be required.
Silhouette is important as well – you need enough geo to capture the shapes. Spend your polys on round surfaces, as they’ll show the polygonal faceting the most. Don’t worry about small detail, like chamfering or seams, as it’s expensive to capture in the low poly, and shows up in the normal and ambient occlusion (AO) maps just fine.
Baking clean maps is a tricky process, and requires practice. The actual baking process is kind of complex, at least at first, but there’s an additional level of difficulty when it comes to predicting how the design of your low poly mesh affects the process. When you have two things sitting on top of each other, the top thing has a tendency to show up projected into the texture of the bottom thing. For example, if you have a wrist with a bracelet, and you baked the whole thing in one pass, the bracelet would probably look ok, but the wrist would have a bracelet tattoo’d on it. For this reason, it’s a good idea to keep these meshes separate, bake each item individually, then composite the maps in photoshop. An important thing to mention is that when you’re baking AO, you want the target high poly geo to be included in the projection, but the rest of the geo should be visible, so it can be included in the AO. Going back to the bracelet example, even though you don’t want the bracelet tattoo’d on the wrist, you definitely want it casting shadow on the wrist.
Retopologizing each item individually can potentially (but not always) increase poly count, as well the likelihood of bad deformations during animation. For an example, consider a cylinder with a cube crashed into it. To make it one mesh, you’d need to included extra loops around the cylinder to support the cube. As individual objects, each can be described using the fewest possible faces. However, if the cylinder is an arm, destined for a lot of bending, and the cube is a pocket that needs to follow the arm’s deformations exactly, you definitely want to make it one mesh. The image below is a shot from Zbrush with the polygroups visible. Each individual piece of geo has its own color.
The next step is to lay out the UVs. This process is like if making a bear skin rug and loading the dishwasher had a baby. Everything has to be flattened out with as little distortion as possible while using the space as efficiently as possible. I usually do a quick unwrap in Zbrush using the UV Master plugin, then recut the seams and polish the layout in Max. Deciding where to put the seams is important. They should be concealed as much as possible. This is what I decided on:
The UV Master plugin is great at laying out complex geo – amazing, really – but it can result in fairly distorted UVs. For this reason I like to relax the UVs in Max. Once the UVs are laid out, they need to be arranged. My workflow is to place the largest UV elements first, then work my way down to smaller pieces. I also like to snap the center line (where it exists) vertically, freeze those UVs, then relax the element. I prefer to relax by face angles, as it gives a consistent result across symmetrical geometry. One last thing to keep in mind – if your model includes any kind of text or insignia that shouldn’t be distorted, pay special attention to relaxing those sections of the UVs. Later on, you can just drop the decal in Photoshop without having to fix stretching.
Here are the finished UVs:
Once the UVs are done, it’s time for bakes. There’s a great tutorial about this process here. I think it’s limited to baking normal maps only, but to include ambient occlusion you need to add a skylight, turn its shadows on, and add a shadows map in the output section of the RTT menu. Then turn off cast shadows for your low poly geo. Right mouse button click on the geo, select object properties from the menu, then turn off Cast Shadows in the rendering control section. Once your normal map is generated, take it into xnormal (available for free online), convert the normal map into a cavity map, and combine it with the AO map in photoshop. The resulting image will form the foundation of your diffuse texture. Here’s the low poly model with just the normal map and the AO/cavity map:
Texture creation is a fairly complex process. There are several individual maps that, when combined with lighting in a real time environment, result in the final surface. The diffuse map provides the color and transparency information. The color comes from the RGB channels, and any transparency comes from the alpha channel. The normal map describes surface detail. The specular map controls the color, intensity, and sharpness of the shine on a surface. Color and intensity come from the RGB channels, and sharpness (also called specular power) comes from the alpha channel. With spec power, brighter pixels yield tighter highlights. Emissive maps control self illuminated objects, like lights or display panels, that always need to be bright. It can get even more complex – every engine is different – but these are the main components you’re likely to see.
Below is a rough breakdown of my texture creation process.
I start with the ambient occlusion, generated using RTT in 3DS Max, combined with the cavity map. Then I create a color block-in.
This image is an approximation – it’s combined with the previous textures in Photoshop using various layer blends, effects, and opacities. This is where I add color variation, dirt, scratches, decals, and any other detail necessary to get the diffuse map as close to the concept as possible.
Once the diffuse is finished ( or close to it), I’ll start on the spec map. Different engines handle color in the spec map differently. Sometimes its better to use a desaturated map, and other times a little color helps pop the materials. Metals are unique among materials in that they have a colored highlight. For this reason, you’ll always want to make sure you use the actual metal color from the diffuse. The specular alpha controls the tightness of the high lights. Metal has a tighter highlight than cloth or leather, so it needs a brighter value in the specular alpha. It’s a good idea to use ambient lighting and grime in the specular color map, as that will have a direct impact on specular behavior. However, it’s specular power should be consistent across its surface.
I use Marmoset for all my real-time renders. It’s really affordable, easy to use, and gives great results. Its possible to preview materials in 3DS Max or Maya, but they don’t come close in terms of replicating state-of-the-industry game shaders that Marmoset does. It’s a must have tool. Anyway, that’s about it – feel free to shoot me an email if you have additional questions. My contact info is available here. Thanks!