Creating an Accurate Muscle System Tutorial using Shape Animation

By Michael Malinowski

    Sample file:

Brief : This tutorial will go through the process of setting up a simple yet highly effective and accurate muscle system for a biped character, although the process can be easily adapted to any object you desire. The tutorial was designed for Softimage|XSI 3.0 but should work in most other versions, though some process changes may be apparent.
We will use shape animation on pre-modelled muscles to gain an automated muscle bugling and breathing effect.
Note. This is a slightly different process to the standard scaling of an object to get a bulge, as this gives more accurate results, however it does take a bit more time.
Note. Before you start this tutorial you will need to have the mesh of a character already created and a rig for your character already created as this only runs through the process of setting up the muscles.
Lets begin!

  First of all we need to model our muscles, they don't need to be highly detailed objects, but it is good working practice and will gain you more realistic results to shape the muscles in such a way that they resemble the real thing. Also keep the muscle object inside the arm, it will work with the muscle outside the arm, but it is not clean and not good working practise.
You don't need to build all the muscles in the body, just the main effecting ones, heres the ones I chose to model:
Flexor Group & Extensor group of the forearm
deltoideus (A shoulder muscle)
Pectorial Muscle

If for most people (me included) you don't know what each of those muscles actually are, then take a look at the diagram below to see what areas I gave muscles to, again its you choice as to how many you create and how much detail you put in. Remember though, ultimately these will be the start in a chain of deformers, so the more detail you have the slower you may find it is to work in.


So now we have some muscles surrounding our skeleton, this may be a good time to link them into the skeletons hierarchy, so they stay attached to the bones we want to keep them with. So all you have to do is select the bone nearest to the muscle you want to link, then press the "/" key and select the muscle, this then parents the muscle to the bone. Voila, that muscle should now follow the bone. Repeat this step for each muscle,


    So we have a skeleton which seems to have some muscles attached to it, but the muscles don't move when we move our skeleton, so lets sort that out. Choose one muscle to start with, select the muscle, and in the Animate toolbar choose Deform / Shape / Store Shape Key . This will then have stored that shape, which you can access later from the explorer or through insterting into the mixer. So we have stored its default state, name it something like MuscleName_Default , just so you know that this is the default position of this muscle. Now deform the object to show its most extreme position, for instance as shown in the image below, we stored our default state of the bicep, now we have to deform it to make it look how it would be in a bulging state. Once you have deformed your muscle to the preferred state once again we must choose Deform / Shape / Store Shape Key whilst in the animate toolbar.
Repeat this step for each of the muscles attached to your skeleton.

  Now we have stored all the shapes we need for our muscles, lets put them into action. Select a part of the skeleton and open the Animation Mixer. We need to create a few Shape tracks to insert our stored shapes into, so just press "shift + S" until you have enough tracks as you have muscles. The right click in the top shape track and select " Insert Source" , this will list all the stored shapes you have made choose the bicep muscle for now, as it will be easier to follow the tutorial. Remember to choose the shape that is the most extreme position, not the default one. Spread your shape bar across the entire shape track, or the desired length you want the muscle to work for. I must just remind you at this point to make sure that the Normalize option in the shape properties is turned Off, otherwise this exercise will not work. Now if you move the slider up and down you should see your muscle bugle up and down. However we do not want to have to hand animate our muscle ever time our character moves his armů.

Note, at this moment of the tutorial your characters arm must be in a relaxed position and your muscle slider should be set to zero.

Right Click on the key button next to the slider, this is where we will create a link between the bulging of the muscle and the rotation of the arm, Choose " Link With". This can be a tricky part depending on how well you named all the parts of your rig, you need to find the lower arm bone (as this is the one that creates the drive effect), once you have that you need to go into its local transform (through the kinematics icon) and choose "Ori.Euler Z".
Now rotate the bone on the Z axis to the point which would create the most bulge from your muscle, then move the slider along to 1 then right click on the key button again and choose "Set relative Values"

Now if you move the arm around your muscle will simultaneously bulge depending on how much you move the arm. However if you were to just envelope you characters mesh to the rig and the muscles they would have no effect, as a deformer deforms through the center of the object, and by using shape animation the center of the object is never deformed. Leaving you with a moving muscle with now deformation on the skin.
Here is one way to combat that problem

    This method is somewhat time taking, but it works, if anyone knows of another way of gaining the same results feel free to email me at

To Deform the mesh we need to attach nulls to the main points of the muscles, this is where you may struggle if you put lots of detail in the muscles, however there is no need to cover the entire surface in nulls, just the primary effecting areas.

So, to start with we need to get close to our muscle, the bicep in my case, and look at what areas will effect the skin, then individually select each point around the effecting area and create it into its own cluster.
Repeat that with all the points surrounding the effecting area of the muscle

  This is most certainly the most boring part of the tutorial, simple but repetitive. Create a Null then move it somewhere near the muscle for ease. Then Duplicate the null, make sure you have the explorer open showing all the clusters you have just created, then with the null selected choose " Constrain / object to cluster and select the desired cluster, the null will the snap to that point. However this only constrains the position of the null to the cluster and not the orientation, which is just as important, so select the null again, and choose Constrain / Orientation and select the same cluster. Now the null will follow both the position and the orientation of the muscle.
Heres the boring part, repeat that process until you have nulls covering the main points of your muscle.

  Finally we are nearing the end of our muscle tutorial, hopefully you will have some kind of rig with muscles attached that all bulge or move the way they should.

Note. You will need to have your muscles on a separate layer to you mesh and nulls, preferably the nulls should have there own layer, the mesh have its own etc etc.

To envelope you mesh to the rig, hide your control objects, and also hide the muscles too, leaving the deformers from the rig visible and all the nulls visible, as these are what will directly deform the mesh.
Select the mesh and envelope the mesh to the nulls and bones as you would normally.
Now you mesh will be effected by the bulging of your muscles. I must point out that setting up the weights correctly is a much harder task now also, as each null is its own deformer. However this can give really nice results if done properly.

Other things to try :

A great thing for this is to create an automated breathing effect, by adding an expression similar to " sin ( Fc * -5 ) * 1" (creates a sin wave effect) to the slider of the chest deformation, the character will appear to always be breathing.

  I hope you gained the results you desired from completing this tutorial, or at least you learned something positive from it. I would love to hear some feed back, bad or good. There may be more efficient ways of doing what I have done here, if so let me know! But this method most certainly worked for me.
Mike Malinowski