1998 Gamasutra Article Companion

This material is copyright 1998 Darwin 3D, LLC. All rights reserved.

Who doesn't love a game that incorporates cool real-time 3D characters? You do, right? Everyone wants the most amazing characters possible for their game. So why doesn't everyone have them? Because, it's not that easy. There are so many options available for the artist and programmer that it can be truly overwhelming. On that account, here is a guide to help you plow through these choices.

Now as far as which decisions you should make, well that really is up to your production team. I assure you that while the information included is not all-encompassing, you will be able to make well-educated decisions. There is no definitive "right" answer because so much depends upon budget, time, manpower, target platform etc. But, do allow me to step on my soapbox for my two cent(ence)s worth. Early planning must be done! These decisions need to be carried through the entire production because once you head down any of the paths, the time and money spent to change is most likely just not worth it. (Yeah, so I do preach a bit.)

Mesh construction techniques:

The first and largest fork in the road comes early on. How am I going to handle the character mesh? While there are many ways of designing 3D real-time character engines, the character meshes themselves are usually one of two types:

Hierarchy of Separate objects

Characters of this type have a separate object for each body part in the character. These separate objects are connected together in some form of hierarchy. Then, by applying rotations and translations to each body part, you can create fluid motion. You see this type of character in many games, but some classic examples of this techique include Virtua Fighter and Tomb Raider.

Figure of Separate Objects
Frame 1: A character created from separate objects

Benefits of this method:

Drawbacks of this method:

Figure 2
Figure 2: A sample character hierarchy

Single Mesh Characters

A single mesh character is not made of separate parts. As the name implies, the character is one single mesh. The character is animated by changing the position of the vertices in the mesh directly. This can be done by having a table of positions or offsets for each frame or just by switching meshes as the character animates. Quake characters are the classic single mesh characters.

Frame 1: A character created from a single mesh

Benefits of this method:

Drawbacks of this method:

"Okay, but what is lurking further along the path?" you say. As you have journeyed thus far and acquired the foundation, you are ready to embark with me to a greater horizen; the future. Could it be possible to incorporate the flexibility of a hierarchy of objects with the good looks of a single mesh? As always, we want more! And much to our delight and fancy, we can have more. With 3D hardware becoming more common and ripping processors' speed, the sky is the limit (well, at least until we think of something else we want). Thus we get:

Deformation and realtime skinning of skeletons

To demonstrate, let us take a look at a character's arm...

Separate objects in a hierarchy look like this:

(Keep in mind the gap has been exaggerated to make it clear.)

Deformation Box Example: Scene 1

The simplest method to make this arm look better would be to cover the gap by connecting vertices at the end with a few extra polygons.

While this looks better, it tends to stretch badly and look a bit deformed as the arm moves.

Deformation Box Example: Scene 2

The real key to making things look better is to add a series of vertices that are influenced by the rotation of both bones. If we add a single set of vertices and weight them so they are influenced 50/50 between the two bones, the look is improved.

Deformation Box Example: Scene 3

This helps with the stretching problem, but the pinching at the joint is still pretty noticable. By allowing the bones to influence the end vertices of the objects, the character looks much better. In this image, the vertices are weighted 33%/66%, 50%/50%, and 66%/33%, around the joint. Deformation Box Example: Scene 4

Level of detail (LOD) management and realtime tesselation
Physical engine properties

a. Collision detection
b. Realtime inverse kinematics (IK)
c. Dynamics including physical interaction with the world (e.g. gravity)

View of Dagger