My Summer Character Animation Project

Become a member of the CGSociety

Connect, Share, and Learn with our Large Growing CG Art Community. It's Free!

Thread Tools Search this Thread Display Modes
Old 05 May 2013   #1
My Summer Character Animation Project


I've been meaning to start this thread for a few weeks now and have finally got round to it. Over Summer I will be doing my master's project which will focus on creating a Bones-based rigging system in 3ds Max and creating a short animation which will act as a demostration of the rig's features.

My plan is to document my progress in the rigging stage here before moving over to the WIP/Critique: Animation forum when I get to the character animation stage.

I'll be posting images of rig tests that I've done along with some explanation of the techniques used, I'm going to try to reference any training DVD's, video tutorial, forum discussions, websites and articles that I've learned from - if anyone thinks that a particular citation is required, then please feel free to mention it as it's possible that I might have just missed it by mistake.

I'm hoping that the rig I ultimately create will be to a professional standard, so if anyone sees a feature which I could make more user friendly, then please suggest it.

Edit: I can't claim to be more than a solid beginner with MAXScript, but I do use it to create custom attributes which I add to objects. I learned MAXScript principally from John Wainwright's MAXScript 101 series ( but also from Paul Neale's Intermediate Rigging Series ( and Laszlo Sebo's MAXScript Fundamentals Series (

All the image that I will post will also be available from my PhotoBucket webpage:


Last edited by hazmondo : 05 May 2013 at 09:35 PM.
Old 05 May 2013   #2
IK-FK Blending with Hiding

This features was inspired by Brad Noble's Skeleton Rig (

This is really an aesthic feature rather than a functional one, it allows an animator to animate in IK mode and then transition into FK and the respective control objects will hide and unhide when required.

Here's the setup:

In my tests I use red to indicate IK bones and blue to indicate FK bones, the bones with the default wireframe colour are theoretically the bones which the character would be skinned to. The circular spline shape is the parent of the IK goal.

I created a custom attribute definition with MAXScript and added it to an Attribute Holder modifier which is how I created the slider and spinner. I then instanced this modifier so that it was on two of the FK bones and the IK controller object.

When the IK-FK Blend value is less than 33 then the FK bones are hidden but the IK controller is still visible.

Conversely, when the IK-FK Blend value is greater than 66 the FK Bones are visisble and the IK controller is hidden.

I modified a written tutorial on CG Academy to set this up (


Last edited by hazmondo : 05 May 2013 at 03:05 PM.
Old 05 May 2013   #3
Instanced Finger Controls

I know that some animators like to create finger poses using controls which are on the rig, whereas other animators prefer to use controls which are outside the viewport (for example, in the modify panel).

I wanted to create a system that allowed an animator to use both methods. I created the spinner and slider UI elements with MAXScript and set the attribute parameter types to angle which allowed me to simply instance the frozen rotation controllers of the spline controller objects to the spiner/slider animation track held on the hand controller.

If I had used float values, then I could've elected to created a two-way parameter wire between the relevant animation tracks but I would've had to to convert the finger rotation values to float values (radToDeg) and the float values to radians (degToRad). I chose not to do this because I had read that having too many two way parameter connections can slow down the scene and in older versions of Max thay had a tendency to lose their connnection.

Here's the setup:

I used the PEN Attribute Holder 2 modifier( to effectively store the finger poses and as can be seen, the system interacts properly with it.

As the spline shape controllers are rotated the sliders update in the modify panel.

The Local Reset Controls allow you to set the the values of specific finger to zero.


Last edited by hazmondo : 07 July 2013 at 02:12 AM.
Old 05 May 2013   #4
Arcing Stretchy IK-FK Blending

This feature was created as a result of a discussion I had with a user on The Area, he wanted to know if there was a way to create a stretchy 3-bone system which maintained its arcs when you blended between IK and FK (

Although I haven't seen this feature before, it's probable that it has been created before.

Here's the setup:

As you can see, I enabled the Trajectory options for the skinning bones and created a short animation of the them blending between IK and FK so that the arcs could be seen.

The effect of the IK control object being repositioned can be seen.

The effect of the FK bones being repositioned along the local x axis can be seen.

Here you can see the UI elements that I created which control the the IK-FK blending and the stretching and squashing of the FK bones. Note there's a checkbox which allows the FK bones to inheret the strechting from the IK chain and this checkbox can be animated.


Last edited by hazmondo : 05 May 2013 at 01:11 PM.
Old 05 May 2013   #5
Arm Controls

My Summer project specifically looks at cartoony rigging, so the arms and legs needed to be bendy and have individual "hosepipe" controls (as well as being stretchy which I've shown in a previous post).

Here's the setup:

The blue boxes are bones which have been placed into box mode, the yellow circles along the arm are hosepipe controls and and the yellow circle has an Attribute Holder modifier applied to it which contains UI items for controlling things like how bendy the arm is.

I created the bendy arm effect by adapting a tutorial on the subject by Felix Joleanes (

The effect of adjusting the hosepipe controls can be seen.

The arm rig contains twist bones to maintain the volume of the arm, I learned this technique from Paul Neale (

The final image shows that the system also works in IK mode as well as showing the UI items I created with MAXScript.

Old 05 May 2013   #6
Bone Colour Change

Changing a bone's colour based on the distance between bone links allows an animator to quickly see how squashed or stretched, say, a spine is from keyframe to keyframe and allows them to create poses accordingly. I first saw this effect in the introductory video of Paul Neale's Intermediate Rigging Series and read about it on CG Academy's website, however the article was written for an older version of 3ds Max and doesn't work in recent versions. I started a thread on The-Area ( and enquired about the effect.

Here's the setup:

When the bones are compressed it changes the diffuse colour of the material which is applied to them to white.

When the bones are stretched the diffuse colour turns to black.

Old 05 May 2013   #7
IK-FK Snapping

Animators can work in two different ways, with forward kinematics (FK) and with inverse kinematics (IK), however an animator may like to create a particular pose or create a piece of animation in, say, FK but find it more convenient to create the following pose or animation in IK, this is why having the ability to snap an FK chain to the IK chain and vice versa is an important feature to have.

Charles Looker presents a method for creating an IK-FK snapping system which involves creating a "fake" swivel angle target for the FK chain ( however I came up with a different method before viewing that discussion which I haven't seen before, but someone will have come up with it before.

Say you have an 3 bone IK chain (IK_Bone01, IK_Bone02, IK_Bone03) and 3 bone FK (FK_Bone01, FK_Bone02, FK_Bone03) chain and an object which the IK goal is parented to (IK_Controller). To snap the FK chain to the IK chain you just have to match up the respective transforms: FK_Bone01.transform = IK_Bone01.transform, ..., FK_Bone03.transform = IK_Bone03.transform. However, you cannot do this with IK chain because its rotation values are being controlled by the IK solver.

This means that we have to adjust the swivel angle in some way, Charles Looker does this by creating a target for the IK chain which is snapped to the fake FK swivel angle target.

The way I deal with snapping from IK to FK is to first set IK_Bone01.position = FK_Bone01.position and IK_Controller.position = FK_Bone03.position and then set the IK swivel angle to zero and then creating a line between FK_Bone01 and FK_Bone03.

From here you can use the equation θ = arccos((a*b)/(|a|*|b|)) where θ = swivel angle, however you need to calculate this value in a normal plane to the line.

We can use the nearestPathParam and pathInterp functions to position a point helper (Helper01) along the line such that IK_Bone02.position - Helper01.position and FK_Bone02.position - Helper01.position are position vectors which lie in a normal plane to the line, from there you can calculate the angle.

This system seems to set the positional values to be accurate to within 0.003 and the swivel angle to be accuarate to within between 0.02 degrees.

Here's the setup:

I instanced an Attribute Modifier which has the UI items which allow you to snap from IK to FK and vice versa.

The swivel angle value can be seen and no swivel angle target is being used.

Old 05 May 2013   #8
IK Pinning and Sliding

IK pinning allows an Animaor to use IK to pin, say, the lower leg while moving the upper leg or vice versa which can be useful if a character is, for example, crawling on their hands and knees. Sliding allows an Animator to adjust the position of an elbow or knee during animation and can be used to create cartoony results.

I've seen IK pinning in several demoreels but couldn't find much information on it until I saw that Charles Looker had given a detailed account on creating the effect during a discussion on the topic on CGSociety (

I took a lot from this discussion, however I used an Experssion Controller rather than a Script Controller to create the effect.

Here's the setup:

You can see that I've added some UI elements to an Attribute Holder modifier. I used a blank group to create the boarder around the relevant UI sections, it takes up more space but helps to clearly define the controls.

A demonstration of the Slide value being changed.

Just as in Charles Looker's setup, the pinning effect overides the stretch effect when its value is set to 1. Notice that pinning works with sliding. The pinning effect uses a point in its calculations, this point determines the position where the elbow/knee will be pinned to but needs to be positioned manually and so for this reason I created a UI which allows an Animator to quickly hide/unhide and select the specific node used in the calculations.


Last edited by hazmondo : 05 May 2013 at 05:20 PM.
Old 06 June 2013   #9
Dynamic Linkin

Dynamic linking allows an Animator to change an object's parent from frame to frame. This can be particularly useful when working with IK because it effectively allows you to, say, parent a hand of a character to its hip or head.

Here's the setup

The dynamic linking effect can be created in 3ds Max by using the Link Constraint, however the controls for the Link Constraint are found in the Motion panel, which can make it inefficient for an Animator to use because they would have to switch between the Modifiy panel and the Motion panel. I set up the effect using the Link Constraint but created UI elements in the Modify panel which control the Link Constraint's settings in the Motion panel. One of the buttons is labelled "Link To World..." however his need not be the case, for example if this was an IK controller on a character, then the button could be labelled "Link To Master..." which would link it to the rigs master control object.

The trajectory display property has been enabled on the objects. On frame 1 the object was linked to the world, between frame 1 and 10 it was linked to he upper point helper and from frame 10 it was linked to the lower point helper.

This method works well and gives the desired results, however to see the effects in the viewport the parent objects need to be animated.

Old 06 June 2013   #10
Custom Squash and Stretch

Squash and stretch is one of the 12 principals of animation and so should be included in any cartoony rig. Bone objects in 3ds Max allow you to enable squashing and stretching however, for example, if you create a stretchy spine which is deformed so that it is longer than its original length, then the resultant stretching effect if evenly distributed between the bones in the spine whereas it is more appealing to have a centre bias so that the middle of a character's body appears more stretched than their shoulder or hip area.

I can't remember where I first saw this type of effect, but many people have it in their demoreels, irrespective of the software they use.

Here's the setup:

Six bones have been positioned along a Bezier curve in a way that might be done when setting up a spine rig. Boxes have been positioned to the pivot points of the bones which make up the chain and have been linked to their respecitve bones so that the stretching and squashing effect can be seen more clearly.

As the spine is compressed the bones are resized in a similar way to how the Squash modifier parametrically deforms objects.

This effect can also be effected by a multiplying value, in this case a spinner/slider UI is being used.

This effect is achieved by scaling the individual bones based on the distance between points on the curve.

Old 06 June 2013   #11
Spine Rig

There are many different spine rigs that one can implment such as using SplineIK, straight FK and many other different types and variations.

Brad Noble creates a hybrid spine rig in his Skeleton Rig which has FK functionality but can also be manipulated to give squashing and stretching (

I tried to replicate this particular rig as close as possible, however the original spine uses a plugin called Virtual Segment to give it its full functionality, so it's possible that the spine I created isn't quite as effective.

Here's the setup:

The blue box helpers are linked together forming a basic FK chain, the red box helpers effectively deform a Bezier curve and reposition its tangents.

An example of the spine when it is not in FK mode.

When the checkbox "Chest Inherts Spine Rotation" is checked then the top red helper follows the top FK helper in position but it can also be offset. The rotations of the FK controls are driven by the green helpers.

When the spine is twisted, the controls stay in the same position.


Last edited by hazmondo : 06 June 2013 at 04:37 PM.
Old 06 June 2013   #12
Nice stuff,

With the ik/fk blend maintaining the arcs, i'm not sure why you wouldn't get this normally if your just slerp the intermediate chains rotation, and linearly blend its x position between the fk and ik chains.

It would in fact be harder to blend the intermediate chain without an arc to its interpolation - you'd have to treat it like an ik chain and blend the end effectors position between the fk and ik end joints.

I like the spine system - you should make sure it can rotate 90 degrees in Y + 180 in X without the curves tangents flipping. You can use simple angleaxis stuff for this.

Wish max's link constraint was better - I wrote my own multi-directional constraints and keyable pivots which are all relatively easy. The most important thing is making sure everything has the correct coordinate system, which i'm constantly thinking about as it directly affect animation keys. With the torso i tend to think about it as a column, with independent chunks - I'd love a system that would negate the need to do parent space switching just for things like counter-animation and overlap. I've got some idea but not much time at the minute.

Nice stuff again,
Disclaimer: My opinions are not those of my employer.

Old 06 June 2013   #13
Hi Charles,

Thanks for the comments, I really appreciate them coming from someone with your experience.

As for the arcing IK/FK, if you don't have stertchy IK then you can use Orientation Constraints but otherwise the naive setup would also include Position Constraints but then you would lose the animation arcs of the intermediate bones.

In my example I used Orientation Constraints to deal the the rotations but a Float Expression controller to control the X position (stretching and squashing) of the intermediate bones with a linear equation involving the X positions of the IK and FK bones. I guess I could've used spherical linear interpolation, but the Orientation Constraints seem to work.

I don't think I'm quite at the stage of writing my own constraints, but out of interest did you write them with MAXScript or .NET? Do you know of any good learning resources for .NET in 3ds Max?

Also, I noticed on your website that you've got some mathematics references, I've got quite a strong maths background but no industry experience, is there anything in particular that you'd recommend that I should know?

Thanks again for your comments,

Last edited by hazmondo : 06 June 2013 at 12:31 AM.
Old 06 June 2013   #14
Scalable Stretchy Soft IK with Pinning and Sliding

I made a post about creating a 2-bone IK rig which had features including pinning, stretching and elbow/knee sliding, however I saw in Brad Noble's Skeleton rig that he included a soft IK effect (a discussion on this effect and an explanation of it by Noble himself can be found here: which I liked an wanted to include.

Unfortunately that particular setup doesn't work well with the type of stretchy limbs I like to work with which stretch automatically as the IK goal is moved beyond the length of the IK chain, rather than stretched manually by inputting values into a UI such as a spinner or slider as in Noble's Skeleton Rig.

Fortunately I found another discussion of the soft IK effect in which Charles Looker presents a method of enabling this feature so that it works with automatic stretching (

Another feature I also wanted to include was the ability to scale the rig and still have all the same functionality, so I included that this time round.

I mention in post #8 that I used Expression Controllers rather than Script Controllers to achieve the pinning effect. This time when I included soft IK I used set everything up in one Script Controller and used linear interpolation to blend everything together.

Here's the setup:

The trajectory Display property has been enabled on the second bone to show the soft IK effect.

The elbow/knee sliding work with the soft IK effect as can be seen.

An image of the rig stretching during animation.

An example of the pinning effect in action.

An example of several features working after the rig has been uniformly scaled.

This was by far the hardest feature to try an implement, it probably took me about 3 days solid to figure out how the different components came together, even though I was able to reference discussion here on CGSociety!

Old 06 June 2013   #15
Originally Posted by hazmondo: Hi Charles,

I don't think I'm quite at the stage of writing my own constraints, but out of interest did you write them with MAXScript or .NET? Do you know of any good learning resources for .NET in 3ds Max?

Also, I noticed on your website that you've got some mathematics references, I've got quite a strong maths background but no industry experience, is there anything in particular that you'd recommend that I should know?

Thanks again for your comments,

I wrote them in pure maxscript, I currently work with Maya and use python for the same things. As for learning .NET google is your friend, plus the autodesk max forum here. As to maths - I was terrible in school and still not that great, for learning I'd recommend linear algebra, trigonometry and possibly calculus. Matrix math and quaternion stuff is a given.

Disclaimer: My opinions are not those of my employer.

Thread Closed share thread

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Society of Digital Artists

Powered by vBulletin
Copyright 2000 - 2006,
Jelsoft Enterprises Ltd.
Minimize Ads
Forum Jump

All times are GMT. The time now is 12:11 PM.

Powered by vBulletin
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.