Building character: a brief look into the 3D process


Hi there, and welcome to the first entry in a series regarding the 3D process.

In this post, I will be giving a high-level overview of the steps involved in my own 3D workflow. To do this, I'll be giving you a glimpse at an upcoming character from the world of Dr. Gearbox. In future entries, I will be going into further depth regarding each step in the asset development process. Just as well, please note that this is not meant to be a tutorial. Rather, it is simply a glimpse behind the curtain.

With that, let's get started with a look at the completed character:

This is a relatively simple character, all things considered. She has four limbs: two arms and two legs, which lets us use many techniques applicable to humanoid characters. The main challenges in her design stem from the large eyes positioned on either side of her head. With large scale, stylized features such as these, we have to be careful in the way we plan the character. Just as well, her long prehensile tail presents a challenge with regards to animation.

Let's take a peek at Etch's original concept to get an idea of the starting point:

From this we can get a good idea of the sort of character she is. She has a bubbly appearance, all soft rounded shapes with starry eyes and a constant smile. Uniquely, her tail is designed to mimic the appearance of a cat-tail. This gives us a good impression of her as a bit of a sneaky character. Perhaps a bit skittish, but always excited.

So, with that, we begin in 3D.

Typically, I will begin a character by building a very rough proxy in my modelling software of choice: Autodesk 3DS Max. If you are interested in starting with 3D, try Blender for a free alternative. Proxying allows me to match the proportions of the concept art closely, and provides a solid base mesh to sculpt over. Typically this will only take thirty minutes or so, as the goal is to keep things as basic as possible while still hitting the overall silhouette.

Once this proxy is complete, I bring it into a sculpting program. My tool of choice is Autodesk's Mudbox, though many prefer Pixologic's ZBrush. Both are valuable tools, but come at a high price. If you would like a free alternative to get started in sculpting, Pixologic also offers Sculptris. This program is highly simplified and can be learned relatively quickly.

Sculpting involves using digital clay and wax to shape the character, and carve in details in a highly detailed mesh. The goal is to create a shape that is visually interesting and accurate to the concept art. I typically take a bit of artistic license with regards to details. You may note the ridges I added on the character's nose region, as well as the creases and folds in the ears.

Given the art style of the game, tremendous amounts of detail are not necessary at this stage. When sculpting a human character for a realistic FPS game like Call of Duty, one might add a variety of wrinkles and skin details at this stage. However, given that we are running on mobile devices at a fairly low texture resolution, these kinds of details would only cost valuable development time.

Now that this sculpt is completed, seems like we should be good to go, right?

Unfortunately, the fun part is over and now the tedious work begins. A sculpt like the one above contains too much detail to be used in a game engine. You may have heard of "polygons," which are the flat shapes that comprise a 3D model. Even at this relatively low level of detail, a sculpt can have millions of polygons. Modern game characters typically remain under 100,000 polygons even at their most detailed. For a mobile game, we want to stay under 10,000 if we can. Mandi is around 1.3 million in the above image.

So, what we want to do is maintain the level of crisp detail while reducing the number of polygons in the mesh. How do we do that?

The next step is called retopology. Essentially, what I am doing is rebuilding the model overtop of itself using a smaller number of polygons. This can be done by hand-placing the polygons, allowing the computer to generate them, painting loops onto the character, or any number of other techniques.

I tend to prefer the control that 3DS Max's Extend tool offers, which essentially allows us to draw polygons while conforming them to the shape of the sculpt. When the retopology is done, we end up with a result that you may be familiar with: the wireframe geometry of the character.

Mandi is now only around 3,000 polygons. A significant reduction!

Now, how do we transfer that nice sculpted detail onto this low-poly mesh? Well, the answer is texturing. However, we can't quite jump to that just yet. First, what we have to do is create a UVW unwrap. This is essentially the act of unfolding the 3D model's polygons into a 2D image. Imagine it like unwrapping a chocolate and spreading the foil out flat.

Now, many folks may think me crazy for this, but I tend to prefer using 3DS Max's unwrapping tools. Many in the 3D world use programs like Roadkill that further automate the process, but I tend to prefer the level of control that manually unwrapping offers. I like to lay out my UVs in sensible order, and make heavy use of Max's Peel and Relax functions. If you are not a 3D artist, the past few sentences may have sounded like jargon to you.

Here's a look at Mandi's UVW unwrap:

If this looks like a bunch of random shapes to you, that's good, you're having the correct reaction. Now, the goal with these unwraps is to place the "seams" of the texture in areas they will not be so noticeable, and also to avoid distortion and overlap. To get an idea of what I mean, here's a look at Mandi showing her texture co-ordinates and seams:

You can see that I place seams at the base of each limb, and split the legs on their interior. This puts the seam mostly out of view, save for areas where it is unavoidable. The majority of other seams are placed along the small edges of surfaces, where they are least noticeable. The most difficult part about Mandi's unwrap were the large eye-stalks on either side of her head. I had to compromise and place a seam along where they connect to the head in order to avoid distorting the texture too much.

Now that the unwrap is done, we can move on to texturing.

The first step in creating textures is to "bake" detail from the high-poly mesh into the low-poly mesh. Essentially, the computer will look at the angle of each polygon in the low-poly and capture detail from the high-poly sculpt. It isn't something we are meant to understand, but the result is that we get a series of textures according to our settings. I will give a quick rundown of the ones I used for Mandi, and one that I didn't.

So, those are some pretty arrangements of purple hues, and grayscales, but what purpose do they serve? Well, each of these maps tells the computer something about the texture as it is applied to the model. Particularly, they will be used in my texturing program of choice: Allegorithmic's Substance Painter. I will give a quick explanation of each:

Ambient Occlusion tells the computer where areas of shadow will be on the model

Material ID creates large blocks of colour that can be used to mask out different materials.

Worldspace Normals calculate where light will strike the model in "object space."

Thickness represents how thin or thick each area of the model is.

Curvature highlights convex edges in white, and concave edges in black.

Normals calculate how light will strike the model in "tangent space."

Position tells the computer where each part of the texture is in X, Y and Z co-ordinates.

These textures (save for normals and ambient occlusion) will not actually be used on the final character texture, but are used to speed up the process of texture generation. For example, I can create a mask that applies redness in the concave areas of the curvature map, or apply dirt that only strikes the character from the bottom. Using Substance Painter, I can now create the final character materials.

In physically-based lighting systems, like the one used in Unity, there are a few things we need to define about the character's material. First: what is the color? This is stored in an albedo map, and defines the color of each pixel before any lighting is applied.

Next, we typically define the metalness of the object, but Mandi has no metal parts! The metalness map is typically only black and white, with white representing areas that are metal, and black representing areas that are not. So, we have to define the roughness or smoothness of the character. Both maps are essentially the same, but inverted depending on the setup we are using.

In this case, Mandi uses a roughness map. This would typically have more detail on a larger character, but in our case, we had to keep things simplified for mobile devices. The areas of white represent completely rough surfaces, while black represents completely smooth surfaces. In our case, the eyes are very smooth, while her skin was defined as being somewhat plastic looking. You may notice her tail transitions to become more rough as it moves toward the leafy texture.

Finally, we use a normal map and ambient occlusion map to define how light will hit the model. These are generated based on the maps we created before, but with the addition of details we painted in Substance.

With all these put together, we get the final result:

Now that the texturing is done, we can now move on to the next tedious part of the 3D process. We must now create a rig for the character, which essentially defines where bones and joints are in the body. Next, we create morph targets for any pieces we want to have deform. Then, we have to skin the character, which defines how geometry deforms in relation to these bones.

For Mandi, I was lucky in that she used a relatively human-shaped skeleton. I used 3DS Max's built in Biped system to create the basis of her rig, then added bones for her tail, ears, and antenna.

You can see that I've also created controls for her eyelid and mouth, These are used to control the morph targets of the model, which essentially blend between two different versions of itself. In this case, I kept her fairly simple, and made it so her mouth and eyes could open and close. For a human character that would speak and emote, there would typically be a number of morph targets for eyes, lips, cheeks, brows and jaw.

Now we have to define how each part of the geometry will follow each bone. Luckily, 3DS Max does a pretty good job of giving us a base to work off of. However, it still takes a few hours to get everything looking natural. The goal is to avoid strange deformations, or pieces of the mesh collapsing on itself. Ideally the mesh should deform in a way that real musculature would.

Now that we've skinned the character, we can finally begin animating. The process of animation is actually quite simple, comparatively speaking. All we need to do is move bones, right? Well, yes, but the actual practice of it is quite hard. We want to follow the twelve principles of animation as closely as possible, and create movements that look natural and exciting. As well, some of these animations have to loop in order to naturally play for as long as needed.

Here's a preview of Mandi's idle animation, rendered without all her textures:

And here's a look at her attack animation:

As you can see, the movements of her tail are quite complicated. To achieve this I used a combination of hand-keyed animation and Si-Chung Yuan's Spring Magic script. Using a combination of handcrafted and procedural elements, I was able to make a much more convincing animation much more quickly.

After all her animations were done, all that was left was to import her into Unity and get her set up in our game engine.

Thanks for reading everyone. I hope this post has given you some insight into the process that goes into making our characters live and breathe. In future posts, I'll be going much more in-depth on each step of my process, including longer video demonstrations. Again, these are not meant to function as tutorials in their own right, but will help you get a better grasp on the world of 3D.

For a great resource on modelling and sculpting, check out Arrimus 3D on YouTube. If you want to learn more about texturing, check out the Substance YouTube channel. For a look at the principles of animation, check out Alan Becker's YouTube series.

See you next time!