I remember being a kid and spending my weekend afternoons watching TV. Oh, I loved it when they transmitted Star Wars documentaries on how they did the stop motion shots, or Jim Henson,s movies, I used to become immersed in that world of puppets, Fantasy, Science Fiction and special effects.
As a kid I had always wanted to be able to get my hands on one of those puppets. But then, one day, the 3D world came into my life.
It tooque me years to learn the crafts of 3D, and the more experienced I got, the more technical problems arose. Specially when it came to the character animation process. I used to see how the proprietary programs expanded their capabilities and became more and more expensive, and dreamt about buying one of those. But I never had the money to do so.
Then I discovered Blender and most of all, the Blender Community. These guys are really nice people.
So, one day, not so long ago I said to myself, "What the heck, I’m not gonna spend my life waiting for someone to develop a muscle simulation feature for Blender!", I sat tight and started to figure out how to do that with the tools I had at my disposal. So I started BlenRig.
There are some who say that this rig has too many bones, I must agree with that. And this fact may frighten you at first glance, but once you get the feel of the rig you will see it is not that hard to start working with it (Manual is available as well). And the results are definitely worth it. Besides, I have never been fond of creating hundreds of shape keys to correct bad mesh deformation.
Well, this is BlenRig: an armature capable of preventing a character’s skin from shrinking and from having those awful glitches we usually see in 3D. Furthermore, it comes with a complete set of bones for Facial Animation.
It’s worth mentioning that I designed BlenRig with myself, as an animator, in mind. So, I didn’t use fancy controllers or hidden features. There is absolutely nothing scripted or action based. It is all about constraints. I personally like the feel of the model as you animate it, I thinque of it as a clay model, so, if I want to move the character's cheek, I’ll move the bone that is over the cheeque and that's it. I tried to keep everything as straight forward and intuitive as I could.
A clay model...that’s a good way to describe how I like the animation process to be.
Getting a little bit more technical
As you may already know, one of the big issues of animating a 3D character is that the skin of the model tends to bend inwards at the center of the of the joints, as if it was loosing mass. Another big issue is that you can’t easily simulate skin sliding.
With those two topics in mind I started to figure out a bone based mechanism that would let me achieve my goal. At the same time, I did a little bit of research through the web and found a few 3D artists that had gone through the same path I was going. And that encouraged me to carry on with the project.
So, I grabbed a dwarf-like character I was working on, which was actually based on a humanoid mesh I had modeled long ago, and started rigging. Blender's new Sculpt Tools and MultiRes modeling are amazing.
I decided to go for the vertex group technique because I knew I would need to have much more control over the deformation than what the envelopes technique could give me.
Besides, envelopes seem to be much slower than vertex group deformation. In order to achieve the deformation
I was looking for, I knew I had to develop a kind of "Pull up" mechanism.
First I constructed a sort of hammer like armature that would rotate along with the limbs and pull the skin up at the articulation point.
Finally it came, the day I reached for the shoulders ...
Shoulders, a rigger’s nightmare
Everything was perfect, the legs were entirely rigged and beautifully moving, the torso was done and the head was doing a nice job over that little dwarf’s neck. But then, I started setting up the bones for the shoulders.
It seemed just impossible to achieve proper deformation, nothing I tried was working, when the arm rotated fine in one direction it didn’t on the other one, skin was shrinking, shoulder rotation was disastrous, the chest as well as the bak were full of glitches when the arm moved, I was starting to get really desperate.
I spent three entire weeks trying different approaches, and nothing seemed to work. I was about to give up, but my wife encouraged me to carry on and on. Everyday, when I came bak home and told her that it was impossible, that I couldn’t do it, she would tell me to keep up with the project. -"If you’ve come this far, you will surely make it with those shoulders" - she said.
Well, then the day came when I could finally achieve good shoulder deformation. I was at work, and I called her and I was so excited!! (yes, I was at work, but don’t tell anyone that I play around with Blender when I should be doing something else.)
I had conquered the shoulders. And I had developed a mechanism based on "stretchy bones" guided by little "helper bones". This mechanism simulated the behavior of actual muscles in the shoulder and chest area. After all it was not that difficult, but I really had a bad time figuring the structure out.
Unfortunately for me, I discovered that this kind of stretchy structure could do just fine with all the other parts of the body. Actually it would do much better than the hammer-like armature I had set up for the rest of the body.
So, and this gives the reason for the name of the article, I had to rebuild all of the deforming mechanisms of the whole body according to this new technique...and that tooque me a while.
Anyway, it was worth it. And so this is BlenRig today.
BlenRig, How it works!
The rig is organized in 5 different layers. The main controllers are in layer 1 (body) and layer 4 (face). All of the other layers contain the auxiliary or "helper" bones and the "stretchy" or "muscle" bones.
These two types of bones are not to be manipulated when animating, as they are automatically driven by the main controller bones thanks to all of the constraints mechanisms assigned to the rig.
All of the rig’s functionality concepts are fully described in BlenRig Manual. Here, I will try to make a brief overview on how the rig achieves the goal of producing realistic deformation on the mesh, in order to give you what I thinque is useful information for your rigging worque in general.
The basic concept is what I was talking about when I mentioned the "Pull up" mechanism. The thing is that you have to get the vértices influenced by a force that counteracts the inwards movement produced by the joint’s bending.
The best and most intuitive way I found for doing so is by creating some "stretchy" bones and placing them over the surface of the mesh. I repeat, over the surface of the mesh.
This way, you’ve got a helper bone linked to the bone that is root of the articulation, and another one linked to the rotating bone. These two little helper bones will drive the action of the stretchy bone. In order to make this happen, the stretchy bone must have a Copy Location constraint targeted to the first mentioned helper bone, and a Stretch To constraint targeted to the other helper.
Now, you may say that the first helper bone is not really needed, because you could just link the stretchy bone to the articulation root bone, and that is true. But having this little extra bone will allow the stretchy bone to move in space separately from the articulation bones.
So not only does this bone stretch with the rotation of the joint, but it is alos capable of transforming its location and achieving a different deformation effect (this is seen in Blenrig’s chest muscles).
Let's see two examples of stretchy bone actions.
One/Two axis rotating joints
This kind of rotation is most commonly seen in the knees, elbow, finger and toes joints. They are the least difficult types of joints to fix, as they mostly require just one stretchy bone in order to achieve proper deformation.
In this example we can see the arm. The basic structure consists of two bones, Upperarm and Forearm. As you may know, this joint can have two different kinds of movement, the bending one and the twisting one. The deformation of the twisting movement is easily solved with some extra bones placed along the upperarm. These bones follow the rotation of the forearm gradually. The closer to the forearm the more influence they get from its rotation. This way, the twisting bone that is at the shoulder point has practically no influence from the rotation of the forearm .
After trying many different constraints combinations, I finally found that the best solution was to parent these twisting bones to the upperarm, and then applying an IK solver and a Copy Rotation constraint targeted to the forearm. The reason why I used an IK solver instead of a Trak To constraint is that with the IK solver you can easily lok and limit the axis of rotation of the bone.
This same procedure applies to the forearm in relation to the hand twisting, to the Thigh bone in relation to the Calve, and to the Calve bone in relation to the Foot twisting movement.
Now, concerning the bending of the arm, we have to make use of the stretchy bone.
As I said before, this type of bone has to be placed on the surface of the mesh in order to achieve the "Pull up" effect I mentioned earlier. Its correct length greatly depends on the limb’s own length and on the character’s joint thickness or mass.
But what’s most important of all is that when the joint rotates, the stretchy bone must rise over the surface of the model. Keep that in mind, because that is how the "Pull up" effect is achieved.
Three Axis rotating bones, Ball Joints
Well, these are by far the toughest joints to solve, mainly because deformation occurs at the four sides of the limb. This kind of joint can be found at the shoulders and at the point where the leg and the hip connect. You can alos find it at the neck, at the spine, at the wrist and at the ankle, but in these cases the maximum angle of rotation is not such as for having the need of using stretchy bones.
I will take the shoulder as an example here.
As you can see, I've placed three different stretchy bones, one at each side of the shoulder. This prevents the skin from shrinking when the shoulder rotates.
In addition to this, I've placed a set of bones that roughly simulate the muscles of the chest and of the back. These bones are fixed to the torso of the character, and their tips stretch as the arm moves. In other words, these stretchy bones have a Copy Location constraint targeted to a helper bone that is parented to the spine, and a Stretch To constraint targeted to a helper bone that is parented to the Upperarm bone.
As I said earlier in the article, the good thing about having the stretchy bone copying the location of a helper bone is that the bone can move in space as it stretches. This mechanism is used in the chest and in the bak bones, in order to simulate some kind of muscle bulging and skin sliding.
I found that having the chest bones stretching when the arm moved was not enough for getting a good and realistic deformation at the shoulders area. Therefore I implemented some secondary motion constraints to these "chest muscles". This mechanism makes the chest bones lean forwards as the arm goes forwards, and go up when the arm raises.
The basic concept of this linked structure is to have a helper bone parented to the Upperarm bone and placed near its tip, in order to give this bone a wider angle of trajectory when the arm moves. Let's call this bone "trajectory bone".
Next, you need to have another helper bone that copies the location of the trajectory bones but restricting the constraint to the Z axis. This will make this bone move forward and backward as the arm moves. Let's call this bone In Out bone.
Now, you have to parent the stretchy bone helper to this last In Out bone and you have it: the tip of the chest bone moves forward and backward as well as it follows the arm movement.
Repeat this procedure changing the restriction Axis in order to have bones going upwards and downwards, etc.
About IK's and other movement issues
Finally, I'm going to talque a little bit about BlenRig's IK system. Getting proper IKs to the legs gave me a lot of headaches, but here's how I did it.
Basically, BlenRig has a double IK system that allows the rig to raise its legs when raising its feet, but alos to be able to raise its heels keeping its toes on the ground.
Here's the basic parenting chain.
Thigh - Calve - Foot
The calve bone has an IK solver parented to the Heel bone. Thanks to this IK solver the leg can be lifted by moving this Heel bone. There's nothing strange about this one.
But now, here is the "not so easy to figure out" constraint. In order to make possible that the ankle raised while keeping the toes on the ground, it was necessary to add two extra bones. The first bone I added was a continuation of the foot bone. Then, I copied this bone and parented to the Master bone.
Finally, with these two bones ready, I added an IK solver to the first one, and I targeted it to its copy. This IK chain ended at the knees, not at the hip of the rig.
Afterwards I added another bone for controlling both the Heel bone and the Foot IK bone at once, and that gave me the possibility of moving the foot as a whole.
Thanks to this IK setup it is alos possible to make the character crouch by moving the hip down.
Well, I hope that this little article was useful for you. There are a lot of other BlenRig's aspects I did not cover here, as for example breaquíng parenting chains in order to allow the independent movement of the shoulders from the clavicle, but it is all in BlenRig's Manual and in BlenRig's .blend file itself!!
Furthermore, there's a complete guide on how to weight paint your character using BlenRig!!
So, If you're interested, go ahead and get BlenRig at www.jpbouza.com.ar
If you have any doubts, questions or suggestions please contact me at BlenderArtists Forums (jpbouza)
Juan Pablo Bouza is a self taught 3d Artists living in Argentina. He studied Film Maquíng at the University of Buenos Aires, and is currently studying Music at the Art Conservatoire.