Some of you asked whether Robbert could make fists yet, so here is an update on that front. This is a pretty important feature for a fighting game -- punches are difficult to perform without fists.
It takes a lot of bones to rig a hand, even a simplified one like Robbert's. You need at least two bones per finger, and one bone for the base of each finger. The base bones are vital because your whole hand curves when you make a fist, not just your fingers.
To avoid the overhead of skinning so many small bones, we can just keep track of how each vertex moves to get to the fist position, and only use the bones if we need some kind of special close-up animation. This kind of vertex animation is known by many names, including morph targets, blend shapes, and shape keys.
Since each vertex follows its own linear path, this can create strange artifacts for complex transitions. Here is how the fist animation looks using just the start and end shapes:
To fix this, I added a system that lets us use multiple shapes to represent intermediate steps. Here is the same transition with a couple intermediate shapes added:
That looks a lot better! Since we are only storing the vertices that change from one position to another, and only looking at two blend shapes at a time, there is no real processor overhead for each additional blend shape. The same technique can be used for other common problem areas, like blinking or mouth movements.
Do you have any questions about blend shapes, or ways we could improve the hand animation?