The Starfish Rig
by Andreas Normand Grøntved, 2014
This article is also available as PDF. Get it here: StarfishRig.pdf
There are many ways of optimizing a humanoid character for game purposes. One of the most severe forms of optimization is to simply have a billboard which just consists of a flat plane with a drawing of the character on it.
However if the goal is to greatly optimize a rigged humanoid - to a level where almost no more optimization is possible the artist will have to go creative.
Humanoid rig with 6 bones
The first step in optimization is obvious: polygonal count ~ the amount of triangular faces the character visually consists of. Every artist knows this, and almost all games rely on ways to keep the poly-count to a minimum. There are different ways to keep the poly-count minimal, I’ll not dive into that, since that is well practiced among developers and artists.
The rig however can be a powerful way to keep the character simple. The engine that the game is running on needs to take care of the skinning of the characters on screen. Each character consists of a geometrical representation, known as a mesh, a skeletal rig, and the skinning of said mesh to the bones of the skeleton.
Usually a main character is made up of 20 bones for a simple rig, and 30 bones for a rig with smaller details such as one skeletal bone for each of the clusters of toes, maybe an extra spinal bone, and some bones for rigging some hair or clothing. If fingers is part of the rig, add 10 bones to the mix. Toes?
The computer needs to take care of all these skeletal bones and skinning of the mesh each frame of the game. Furthermore each point on the mesh, called a vertex, can be weighted onto more than one bone, which takes even more time to process. So there is a good reason to take it down a nodge. Maybe not on the main character, but with crowds it is an absolute necessity.
What to cut away to make this rig simpler?
Bones which can be deleted from a rig without really hurting it’s plausibility is wrists (hands) and a couple of spine bones. Feet is hard to get rid of because they constantly have direct contact with the ground. To optimize further one could delete all (or almost all) spinal bones, clavicle bones and the neck. Many would stop there. Retaining the major and most important bones of the human body in the skeleton; Head, a couple of spinal bones, upper arms, lower arms, hip(root), upper legs, lower legs and feet. That would be a greatly optimized humanoid rig. However there is more to be gained.
What is the most needed features of the human skeleton? Well we, the human being, have two legs and two arms, each separated into two large bones. There is no way we can get rid of those. Feet and hands we might be able to cut away, since they are quite small and are not really used for unimportant characters. Of course it would be nice to know that the characters’ feet always visually nails it to the ground, but it is also two extra computational cycles of rigging and skinning per frame, and I reckon that those cycles are well saved to be well spend somewhere else. The neck is gone, and the spine is not needed either. Yes the character will be a bit stiff in the back ~ but long live optimization!
We’re down to this:
10 bones in total is pretty good. This is a completely ordinary piece of optimization. Nothing to get all too excited about though. To optimize this even further there has got to be something drastic for us to do. And there is. Of course there is. Polygons can create a much needed illusion. Polygons is a flat piece of geometry that consists of triangles. Those pieces of geometry form the surface of the character like paper would in a piece of origami. Each triangle is made up of three points also called vertices. Each of those vertices is attached to a bone. So if one vertex is attached to your hip, and the other two vertices are attached to your knee, that triangle will stretch, like a rubber membrane, when you move your knee. This can be exploited, not to say cold bloodedly utilized to our advantage. So the stretching of polygons is only good for between bones. Which means that extremities cannot be tampered with. That means lower arms and lower legs. However upper arms and upper legs could be visualized by stretching polygons between shoulder/elbow, hip/knee only. Cutting away the shoulders and hip bones is definitely the answer we were looking for to make this rig super optimized.
It looks weird I’ll admit that, but the functionality is outstanding. It now looks like a starfish as well. There is a Root bone in the middle of it all, that bone makes sure that the torso, shoulders and hip does not move out of place. Then there are 5 bones, one for each extremity. The bones in the arms take care of the elbow and out, including the hands. The same goes for the knee bones. The head has been spoiled with it’s own bone - this can be debated, but I’d argue that having no spine requires something on the spine to be animated to give the illusion that there is spinal activity. The head can fake that, not perfectly, but enough to keep the character alive.
To make the rig usable it is of course constrained and driven by a normal rig with inverse kinematics for both arms and legs, and all sorts of bajingle. Animation goes as smoothly as it would with other characters.
Some shortcomings present themselves in the mesh. With no bones to keep track of the upper legs and arms, the mesh has a tendency to flatten out. Like a balloon being twisted.
Bending the knee with no upper leg bones to keep the width of the leg, results in an unacceptable flattened leg. However making sure that the edge going around the knee is angled from low behind the leg to high above the knee on the front of the leg, some of the flatness can be avoided. That will take care of the most critical misformation. When the leg is bent even further back to a 120 degree angle, the upper leg is completely flattened anyway. Originally I thought there was no way to deal with this. However a couple of days of testing and using this rig made me realize that there actually was something that could be done.
Knees and the width of the legs have a hard time when it is being bent. To somewhat deal with that we have to create a vertex inside the leg, right above the knee. Like so: The vertex is of course fully skinned to the only bone available in that region, which is the knee, and when bent the vertex just pops out creating an illusion of a knee. This can be applied to the elbows as well. While it doesn’t fix the problem entirely, the flat legs become a minor flaw.
The starfish rig is super simple to create and very easy to maintain. It might suit a flat shaded aesthetic more, where the dent in the knee and the elbow will not show at all. But for crowds a fully textured character would wear this fashionably.
Floating feet is a critical shortcoming, but acceptable when taking into account that two bones is saved. With some vertex shading, a clever shader might be able to take care of the feet. The artist will never miss the wrists in my experience - given that this starfish character is not used for complicated interactions. One will learn to live and overcome the stiff spine in clever ways. Head animations can fake alot of the liveliness originally provided by the spine.
Motion capture data applied to the starfish rig. It really shows that with the right data these simple almost abstract human figures can move naturally even though they only contain 6 bones.
Here the bones show the actual "extents" of the bones, meaning what parts of the body the bones are affecting. The green shapes are the membranes between the bones - membranes which effectively replace the upper arms and upper legs.