Building a low-poly character mesh in Blender

Walk through building a low-polygon human mesh from scratch with Blender 2.37a... using no external resources.

We're going to start building character models, so it's time to:

1. Install blender2crystal. Depending on if you already have Python installed and what platform you'll be running Blender on, you might have to install some additional Python modules or install an isolated version of Python that's Blender-centric.

Building a Character Mesh in Blender

Building an animated, texture-mapped character for use in a 3D engine can be a daunting task. Here we're going to walk through building a low-polygon human mesh from scratch... using no external resources. We'll build the wireframe itself, map it with textures of our own design, animate it to our liking and export it for use in Crystal Space.

Creating Reference Images

Before you actually create a mesh in Blender, you need to create reference images that we can use to judge size and proportion. If you're an artist and have the ability for figure drawing, do a brief sketch of your character. This is where concept art really comes into play; the better initial concept art you have to draw from, the better your resulting image is.

If, as is my case, you can't draw a freakin' cube to save your life, you can instead use reference images. [1] is one repository for human photo references, and if you need detailed modeling for tons of human mesh targets then this is a great one-stop shop (especially for those pesky hands, feet and heads). Of course you could always take the old-fashioned route and take the reference photos yourself; just make sure that the camera is about chest level to the subject and they are wearing either form-fitting clothing or none at all (otherwise we'll be tracing the outfit instead of the actual human form).

Subjects should have their arms out, parallel to the ground. Feet should be a relaxed distance apart, as if they just stopped walking. Head should be looking straight forward, spine should be straightened. A few examples are provided in the following illustration where I grabbed images from some random sources, removed the negative space around them and then created a border around the figure itself in GIMP. Sometimes it helps just to have the border so you can define the bounds of a mesh, sometimes it's helpful to show all the detail of the image so you can define individual features. Experiment with either one and see if you find the additional detail distracting or not.

No matter if you sketch or photograph, you'll need at least one hand, one foot, one front full body view, one side profile full body view, one front head view and one side profile head view.

Building the Torso and Limbs of the Mesh

Now that you have reference images you can start defining your base mesh. Wipe your slate clean of any initial objects Blender may load up so that we're starting with no items. Click on View->Background Image in the drop-down menu list of the 3D Window you are currently using. Load up your forward-facing reference image into Blender so it loads in the background. Units really aren't all that important at this stage in the game, but I usually scale the image down to be two units high and move the Y Offset up so the image's feet are right at the Z axis.

Now that we have a reference image to work off of, we can start adding objects. Our method of building character a mesh will be a lot like how figure drawing is done on paper or canvas; we'll start with some primitive shapes, join them together then individually tweak them to resemble or background image.

Let's start by adding 8-sided cylinders for our torso, arms and legs. Go to top view (Num7) add add a cylinder in Edit mode using Space->Add->Cylinder. Change the vertex value to 8 so Blender will drop in an eight-sided cylinder. Place the center of the cylinder directly at the intersection of the X and Y axis (if it's not there already), and scale it until it is approximately the size of our reference image's torso.

Switch to a front view (Num1) and scale the cylinder again so that it's the same height and width of our subject's torso. Your object should be as wide as the shoulders and reach from the neck to the hips.

Once your torso is set and while still in Edit Mode, add a cylinder for the left arm (we'll worry about the right arm later). Switch to side view (Num3) and add yet another 8 vertex cylinder, this time about the girth of the subject's arm. Switch back to front view, then move the cylinder to the middle of the subjects arm. Scale along the X and Z axis as needed until your cylinder is about the length and width of your image's arm.

Perform the same type of operations to create a cylinder for the left leg as well. Once you have both left limbs created as cylinders alongside the torso, switch to a wireframe view (Drawtype->Wireframe) so you can view the reference image underneath your object primitives.

Now we can start subdividing the mesh and have more vertexes to play with. Use CTRL-R to perform a loop subdivide anywhere on the cylinder and basically cut a line between vertexes in half. Make these cuts whenever your reference image tends to need additional definition such as around the biceps, around joints and after the ribcage.

Before you start tweaking individual vertexes, however, join the shoulders and the hips together at the torso. Find the flat end of the cylinder that is closest to the torso. Select the center vertex of the circle that exists at the end of the arm and leg cylinders, then delete them. This will delete all the surrounding faces and leave you with an open-ended cylinder that has an open end on one side, a closed end on the other.

The next illustration shows how a corresponding entry point into the torso is created: we pick two faces close to our shoulder joint, then delete them in order to open up our mesh. Now we should have two open meshes; one open-ended cylinder for the arm and one matching open-faced polyhedron at the side of the torso. We need to close both of these meshes and leave no empty faces by joining them together.

Scale the vertexes that surround the open end of your cylinder until they overlap the opening in the torso's shoulder joint. While keeping in a strictly front or side view in your 3D window, grab and move individual arm vertexes onto the shoulder so that each point in the arm overlaps with a corresponding vertex on the torso. Don't use freelook when trying to get vertexes to match up â€“ your depth perception can be completely off when you're moving things around in 3D coordinate space. Stick to your front, side or top views only. Once you've subdivided your mesh correctly, you should have exactly eight vertexes on your arm placed right on top of eight vertices on the torso.

Once the vertexes have been perfectly placed on top of each other, border select all 16 of them. Once they have all been selected and are currently highlighted, use the Rem Doubles button in Blender to fuse them together. You may need to experiment with the Limit: parameter that sets the threshold on how close two vertexes must be before they can be joined together; just try Rem Doubles and then use CTRL-Z to undo the action if you removed too many or too few vertexes. You'll know your two meshes have been correctly joined if you see a message saying Removed: and your mesh looks otherwise identical.

Let me forewarn you: you don't want to have any open faces in your mesh... otherwise you can get some very nasty leaks. These problems will become evident later on in the process as you encounter all sorts of rendering and animation bugs, so do your best to avoid them now and ensure all your meshes are joined together. If you leave any open faces or holes in your mesh, you may be headed for disaster down the road.

Once you are confident that your arm has been fused with the torso, perform the same action with the leg. Delete the for four faces on your figure's left side where the torso will meet the leg, then join the two sets of vertexes together. Remember to scale your open vertexes to match up with your torso, then only grab and move vertexes while strictly in front, side or top view modes. Be sure to save your file up to this point; and slap yourself if you forgot to do so yet. Even Blender's undo feature has limits.

Now that we've joined together our limbs, we can start tweaking the individual subdivisions in our mesh. You can change any vertex you like on the left side of your mesh â€“ but don't tweak the X coordinate orientation of your center-most vertexes of the torso. Be sure you don't shift your central â€œlineâ€ of vertexes either left or right; keep them dead center.

To tweak our allowed vertexes, use Blender's border select key (B key) in a wireframe edit mode, grab the rings which subdivides one of our original cylinders and start scaling it to better match the scale of your background image. Also feel free to rotate these rings of subdivision so they better match the creases and curvature of your subject. You should move from a blocky, three-cylinder mesh to something much more akin to a human layout. Bear in mind we're only focusing on the left side of the body right now, and we are skipping the hands and feet for the time being.

Be sure and switch to a side view as well, so your constraints also apply to the subject's profile. In this instance it's very handy to have a side-view reference image, since spine curvatures can sometimes be tough to mimic without your corresponding background image to help you.

Now that we have our basic trunk finished, let's go ahead and delete all the extraneous vertexes on the right side of the mesh. Border select the vertexes that exist solely on the right side of the body, then delete them with the X key.

Building the Hands

Hands, feet and heads are tough subjects, so we'll cover them separately. In fact, we should even create them separately. Switch to Object Mode and change to another layer in your scene. This new layer should be a blank slate with which we can focus entirely on creating a left hand.

Going back to using primitives to describe our more organic meshes, we're going to be using two different types of shapes: a cylinder and a disc. Our disc is, in fact, just a really flat cylinder oriented on a different axis... so we will be sticking to the same methodology we used earlier.

While in Edit Mode, create your disc. It should be a flat, ten sided cylinder that's about one tenth of a unit thick and have a one unit diameter (although it ultimately doesn't matter; we'll scale it later). Next, add an elongated, eight sided cylinder right beside it. The disc should have its flat, broad side facing you, while the elongated cylinder should be running parallel to the X axis. This flat disc will be the palm of our hand, while the cylinder will be a finger joined to it.

Now we have a unique problem: we need weld an eight-sided polygonal face from the end of our cylinder onto a four-sided square face on the edge of our disc. To do that, we'll need to pinch two adjoining vertexes together around the circumference of our cylinder, so we'll have eight edges on one side, four on the other.

First, select two adjacent vertexes on an edge. Next, scale the two vertexes using S key to scale them towards each other. We don't want to grab the vertexes and move them toward each other; otherwise we're likely to go chasing our vertex all over the X, Y and Z planes. Scaling the two vertexes together moves them appropriately across all of our axis.

Once the vertexes are overlapping, use our handy Rem Doubles tool in our editing buttons (F9). This should eliminate one edge and merge our two vertexes into one. Perform this same operation to join all adjacent vertexes together, until we just have four edges to one side of our cylinder.

Once you've squared the adjoining edge of your finger, get rid of the four faces at the end of the finger and the single face at the end of the palm where the two will meet. This will give you a single digit to reuse for each of your five fingers. Use Shift-D to duplicate the finger four times, and place them around the palm.

Now we need to create empty spaces on the palm to join our fingers to. Find five strategic faces on the edge of your palm, then delete those five faces. Scale the remaining four vertexes down to an approximate square, about the size of the open end of your finger meshes. With each of your five fingers, join the two open ends together and delete their duplicate vertexes to make them part of a single mesh.

Once we have all of our cylinders joined together, load up your reference image and match proportions of your mesh to the image. You'll need to do some scaling and tweaking, but eventually you'll have something that resembles a hand ready to go. Don't forget to look at your model from top and from the side; that way you can ensure all your fingers are in line with each other.

Now we can join our hand to the wrist we created on our earlier mesh. Highlight all your hand vertexes in edit mode, then switch into object mode. Select both the layer that our body mesh exists on and the Blender layer that our hand exists on. Switch back into edit mode. Scale and rotate the hand mesh appropriately so it looks in proportion to the fully body reference image we use. You hand is probably still rather flat, so inflate it a bit so it meets the proportion of the wrist and our reference image.

Once you have fleshed out your hand, delete a couple of faces where the hand will meet the wrist. We will join these open vertexes to our arm after preparing our main mesh. Move the vertexes surrounding your deleted faces so that they overlap the vertexes of our wrist. You may need to do some subdivisions between vertexes so they line up; remember, our wrist has eight vertexes, but the opening in your hand mesh may only have for our six vertexes.

The same warning I made earlier concerning how to overlap two sets of vertexes still applies; stick to front, side or top views only. Trying to get vertexes to meet in freelook mode is, at best, frustrating. It may look like your vertexes are right on top of each other, but the moment you switch back to looking down the X, Y or Z axis you may notice that you are completely off.

Once you are happy with the wrist, switch to object mode. Select your main body mesh, then jump back into edit mode. Delete the faces at the end of your wrist, so the arm has a circle of eight empty vertexes at the end. You should now have two open meshes; one on the arm perfectly matched with the hand, one on the hand perfectly matched with the wrist.

Jump back into object mode, then Shift-Click on both hand and body meshes. Join them together as one using Ctrl-J. Switch back into edit mode, and highlight the overlapping vertexes of your wrist and your hand. Merge them together by performing a remove doubles, just as you have when joining two meshes at their vertexes previously.

Building Feet

We're just going to create easy sock feet for our mesh; we aren't going to go into any great detail for the toes. Since we're assuming most of our characters are going to have shoes (or even toes) that largely act as one unit, we'll let our texture mapping take care of any digit detail.

Our foot is going to be a simple 12-sided cylinder. Move to a new layer in Blender, load up our foot reference image, then plop a new cylinder with twelve sides onto our scene in edit mode. Move vertexes to look in proportion to our reference image, then join it to our main body mesh the same way we joined the hand.

Creating the Head

Creating the head can be the most tedious and time-consuming. Facial features are often the most distinguishing characteristic in human meshes and have to be built with care. Faces are also really bumpy and seemingly disproportionate, so building a low-vertex model that can follow the curvatures of a face is tough. Noses can be especially tough.

First, let's start with a cube. Select all the vertexes, then hit W key->Subdivide Smooth->25% to do a 25% smooth subdivision on our cube. This will divide each line on our cube in half, and then smooth out the edges. Load up your front-facing head reference image, and scale your new mesh to be approximately the same size.

The front of our face is going to need additional detail. Select the nine front-facing vertexes of our face, then do yet another subdivision on them.

We're dealing with a bigger grid of vertexes now, and we need to make sure we're not creating any sharp angles along the faces of our mesh. So far we've managed to keep things smooth with our subdivisions, but we'll need to do the same when we're moving vertexes around.

Use the O key to jump into proportional editing mode. This will move adjoining vertexes along with the vertex we're grabbing; much like points a rubber sheet will move when an adjacent point is moved. A smooth falloff works well for some work with the proportional editing tool, but you may need a sharp falloff for more pronounced features such as noses or eyebrows. Experiment and see which one works best for you.

First, let's create a nose. Switch to a side view, and then load our head profile reference image. Using the sharp falloff setting for the proportional editing tool, grab the center most vertex and move it in proportion to the nose of your background image.

Your nose needs a more defined origin. Switch back to a front view in Blender's 3D Window, then grab the two vertexes on either side of the nose vertex. While still using the proportional editing tool, scale the two vertexes along the X axis towards the center nose. This will pinch the side of our nose together.

Continue doing similar operations for the remainder of the face. Whenever possible, do not grab vertexes; instead grab the corresponding vertex on the other side of your mesh and scale them together. This will keep all of your vertexes more uniform and smooth. For example, when creating a chin it is much easier to grab the bottom three vertexes, use the proportional editing tool and scale/move the vertexes together to create more symmetrical features.

Keep using proportional editing, scale whenever possible and tweak your vertexes to match your front and side reference images as much as possible.

To join the mesh to our body we'll use the same method as with the hand and the foot. There's one catch of course: we've only done one side of our body... but we have both sides of our head. Let's chop off the right half of the head, then join the two meshes together. Since we did a subdivision on a cube, we should be able to neatly halve our head mesh before joining it to our body object.

You may also notice that we don't have a neck... you can subdivide a few vertexes above the shoulders and at the bottom of the head to create two or three contact points, then fuse those vertexes together. That should give us something to work with in order to create a small neck.

Finishing The Mesh

Lessee... neck, hands, feet, arms, legs, body... check. Now we have a complete half of our human mesh. We just need to create the other half!

Our human mesh is meant to be symmetric, so we only created one half of the body up to this point. If we did both halves at the same time, we could have very easily made a tweak on one side that wasn't exactly mirrored on the other side. This can lead to big headaches, especially with texture mapping and animation.

Before you continue, be sure you're happy with your mesh up to this point. Double-check with your reference image. Does everything look proportional? Do you follow the same sizes and ratios as your reference image? Does anything look out of place? If so, now is the time to fix it.

In fact, you might want to keep this mesh in a separate file and back it up elsewhere at this point. Making mesh changes to one half of the body is much easier than trying to alter both sides in the exact same way.

Now let's make this guy whole again. Select all of your vertexes in edit mode, hit Shift-D to duplicate them and then drag your duped vertexes off to the side. Hit M key to mirror your newly duplicated vertexes, and mirror them along the global X axis. Move your new half so that the two have overlapping vertexes exactly at the median of our mesh; this should give us two sets of overlapping vertexes. One set will correspond to the left half's open side, the other half will correspond to the right half's open side. Once the open sides overlap, select the vertexes in the middle and do a remove doubles to join them together. Experiment with the limit on the remove doubles button to ensure you join all your vertexes but don't remove adjoining vertexes; for me an acceptable value was 0.025.

Now that you've joined your meshes together, you can double-check to ensure everything looks correct. In my instance, my hips were way to bootylicious and the neck wasn't quite thick enough. Luckily, this can easily be fixed by scaling both sides of vertexes symmetrically.

As an example, let's work on the neck. In the middle of my neck I had two vertexes I chose not to join with my remove doubles command; I de-selected them from all the other vertexes that ran along the median of my mesh. After I joined the two sides of my mesh together, I grabbed these two vertexes and scaled them along the X axis (the S key followed by the X key Scales the vertexes along the X axis). This allowed me to widen them out a bit and create a broader neck.

Same sort of technique applies to my mesh's overly broad hips; I simply selected the midsection, then scaled it along all axis.

Tweak your mesh until you're happy with the results. You should now have something roughly human-like weighing in around only 800-850 polygons. Nice!

During our mesh operations, it is very likely that some of our faces' normals were flipped and are now facing inward. This will cause our mesh to render very strangely; all mesh faces are one-sided, so we need to make sure the appropriate side is showing. If they don't face the right direction, we won't be able to see our mesh.

Switch to solid shading using the Z key. Click the Draw Normals button in the Editing buttons window (F9). The cyan lines will be pointing in the direction of the normals; all of your lines should be facing outwards. Chances are they're not, and instead your left with an inconsistent mix of inward and outward facing polygons.

Luckily this is an easy fix. Hit Ctrl-A to select all of your vertexes in edit mode, then hit Ctrl-N and select Recalculate normals outside to make all of the faces point outward. Double-check your mesh and ensure all of your normals are in fact pointing outside.

To finish up, we just need to make sure all of our transformations are applied. In object mode, hit Ctrl-A, Alt-G, Alt-R and Alt-S to apply and clear your object's location, rotation and scale. This will ensure our object is located at its origin and later exported correctly.