facial animation setup?


Eek you tha man! :thumbsup: This is exactly what i’ve been searching for. I don’t know why but i can seem to access your file cept some images and vids you posted but would like to understand more.Just went through all 48 pages and i must say at least give us a brief walkthrough on how you setup your first. Before going too advanced so we can understand some of the mad scientist stuff you’ve posted. i’m sure this is gonna be the hottest plugin ever.


Ok a little how to:

[simple guy]

Make a head with very good edge loops, these are vital for good deformation. Preferably med poly.

To make a muscle all im doing is driving a spline with a point. Eg drive a points x position via a points z so when it going down, it bulges.

For the mouth, im driving splines, with points path constrained to them. Then skinning the lips to these points. So you move the splines and inturn drive the lips. I’ll see if i can find my original and post it up as its a little hard to explain.

Ive started reading the facs manual. Facial action coding system. With facs you have AU’s Action units, these are the muscle actions of the face.

So the first AU is AU4 ‘brow lower’, An AU also has and arc, this is the greatest marked change from its start, not the end pose.

Also AU’s have an intensity chart from a to e:

a - trace
b - slight
c - marked
d - extreme
e - maximum

So the arc of AU4 might be from a to c, then it easies off to d and e.

So now you have au4a, 4b,4c,4d and 4e.

Now the way combinations work are like so:

AU 1 + 2 + 4 is not a additive blend of all three, but going from au 1 to 2 to 4.

Now you cant go from au1a, to 2a, to 4a because the face doesnt do it. So you set a rule to say when going from au1 to 2, to 4 you use intensity b like so:

au 1b, 2b,4b.

This is why gollum has so many shapes, because 1 slider may call au4a fine but in combination with au2 on another slider au4b has to blended in i.e a combination fix shape to fix the intensity.

So i need to make a rule based system, but least i dont have to make fix shapes as muscle and bone system are linearly interpolated.



I was slightly wrong in the last post, combinations do occur but its kinda how the order of combination works.

In a way a slider for an AU should start from -1 to 0 to 1 eg.

So if you move AU1 to value 1 its at intensity e, when you add AU2 to the combination at 0 value, AU2 can only reach intensity level b, but past 0 to 1 AU2 goes on to level e, but AU1 drops down to level B. At a value of 1 any slider overides any other action (in this case).

So firstly a slider is ramp, from neutral to arc to end pose. This isnt relative to -1 , 0 ,1. Or maybe it is? hmmm…

I think this is correct. More research…



hey eek,

why don’t you use squash bones for the bulging facial muscles? They pretty much do the same thing don’t they? Also, what about making a circular spline around the mouth (which will be skinned instead of the path constrained points) with some kind of controller that can change the tangents around the corners of the mouth (tangent controllers like the ones you’re using for the bulging muscles…). You could constain the points of the circular spline to the path constrained points you’re using now.



Thanks alot Eek! I’ve been able to decode the setup but not up to the expresions part.I’ll leave that to you pros.


So im looking into the control system for this - its been in a way the hardest part of the system. Combining the free form nature of the rig, with the constraints of sliders and spinners is very hard, namely because they have to exist in the same space. I.e they have to work both at the same time!

So, as ive been looking into combination sculpting ala, gollum. Well i was way off, thx Daniel for putting me straight. In a way my system is very similar, you moving vertices through space, yes this is like blends, but my blends are based off muscles and user input. Now Euclindean space, or n-space as we’ll call its in in a way garentees infinite amounts of blends for a face.

A little on n-space:

Ok so a vector, can be classified as a series of points, held in parenthesis: (brackets)

(1) - 1d a dot
(1,2) - 2d a line
(1,2,3) - 3d a vector (direction)

n-space is the space these vectors are held in. eg


so this is ‘4 space’ so i suppose you could classify an array as n space if what it contains is a series of vectors.

A n-space doesnt have to have 3d vectors in it. It could be a mixture:

((1),(1,2),(1,2,3)) - this is still a 3n space.

Now a vector can also be classed as a direction for instance, if you have 2 vectors a,b and you take a-b you get a direction from an origin. So if your output is (1,2,3) and you origin is at (0,0,0) then you have a direction from 0,0,0 to 1,2,3.

Still there?

So from an origin to a vector can be thought of as going from going from 0 to 1. a value of .5 is half way along this imaginary line. This can be achevied using a linear blend fn.

So n-space is basical a container of vectors of any value from 1d to …nd.


In a way if you collect this n-space, to a string eg. val1 = ((1,2),(1,2,3)… you have in essence a pose of vector space. So imagine a box, collect all its vertex positions and you have a n-space pose. If you move all the verts and collect again you have another set.
So you get:


Now your input mesh can go from any pose to any other pose, because you just moving your mesh through sets of n-spaces. But these sets are just data values. How this input mesh goes between these value are defined by rules, i.e the pose’s are ‘loosly’ associated with a value,slider,controller etc etc.

So for instance, you associate pose1 with slider1. And pose2 with slider2 you will get the standard morph blend. But the power comes in because you can drive the input mesh anyway you want, so you could set up an association that say pose3 = slider1 + slider2. So a pose can have 2 controllers.

So if your sliders on there own are fine, but combined mess the mesh up. You associated a fix pose, this isnt a combination fix shape, its just how you want the mesh to look like when both the values are combined.

So all this does is move the verts to there new fix pose when 1,2 sliders are combined eg.

1 is fine at 100%
2 is fine at 100%

But when 1 is combined with 2, the verts dont add they just linearly blend to the fx shape. When you bring 2 down again, they move back to 1s value and vice versa with 2. This is different to morphs.

Now going from the origin to the pose is linear, but this could be ramped, inverse etc Theres lots more to it, and this is a general over view. My system if i can get it to work will be cool, because your’ll be able to animate in any pose freeform but also go to any predefined pose, blend those poses have fix poses - because your just moving verts etc through space of n-spaces.



The best book that shows u how 2 add minute details in facial expressions is “Character Animation” by Chris Maraffi.The book tells u how u can use joints 4 detail facial expression.Also shows how 2 use joints as an influence rather than using geometry.


Hey people,

Happy new year, first off sorry for the delay. Ive been pretty busy with work lately, but after seeing Kong i got a new burst of ideas. So im gunna try and add them into a new face (having to think about a good face to use). Currently im cleaning up a lot of the math making my own functions etc

Ive also been looking into cubic vs bezier muscles i.e whether to have tangents with handles or weighted cubic splines to make the muscles. (simulated NURBs cv curves) Cubic splines a little cheaper as they dont need a couple of extra expressions, but the curve can they produce can be flatter - but they can be weighted so maybe a combination. Also trying to build the pose tool - which is pretty complex to think about. So hopefully some more pics soon.



Eek sorry to ask but how did you skin this head without it going crazy? when you move the bones.I skinned the head with your setup and it worked fine but when i rotate the neck bone the places skinned to the point controller act crazy.


This is a problem im still working on too - there are ways around it, but its very hard. I may end up keeping it on the spot and use a copy of the mesh to drive with a body rig. The control system is gui/slider based so should hopefully work out. I may be down to parenting - i need to look into it some more.


Not as hard as i thought, well i havent been thinking about this part much. (as i was using a clever little technique), but the issue was just parenting. Either parent all the controls before setting up the controls or after. I made a simple constraint with a point between two others then parented the lot to a point - works fine.

I havent looked into this much, as ive been looking into some the muscle bulge, chin, eyelid stuff.



Thanks for the tip.The thing is i alrady did the parenting but it works fine on a small less complex model, i’ll try crating another from sratch.


Yes its a little fiddly, basically your zero’ing out an object by parenting it. And then driving it with an expression, this means its expression is gunna work relative to its parent.



hi there,

I’ve read through this thread few days ago and saw the idea of driving spline handles by script controllers to simulate folding of the skin. Then I tried to set up one of those for use in my rig (that combines bones, path constraints and morph targets) but just couldn’t get the idea how should the handle react depending on distance between points. Eek, I would greatly appreciate if you spend a couple of minutes to explain the principle behind your T muscle and show us the formula you use. I am also willing to make a short tut about setting them up in max (so I don’t forget it:)), if you don’t mind of course.

thank you.




Sorry for the delay, im currently learning houdini. And am a little busy at work. Previously i was ripping out tangent handle values via animating them for a frame, exposing the controller -well giving them one.

Previously i was using a really simple expression [-a,y,-z] on a vector variable. But now ive found out about a script controller version (thankyou aaeron).

[color=white]fn[/color] addhandles ss v1 v2 v3 v4 =

setKnotPoint ss 1 1 v1.pos setOutVec ss 1 1 v2.pos
setInVec ss 1 2 v3.pos
setKnotPoint ss 1 2 v4.pos
updateShape ss
so this is held in a struct in the start folder so i can call it easily. So id make 4 points and and a control shape. plus the line, on the line i change the handles all to be ‘bezier’ corner.

I assign a scriptcontroller to the constrol shapes scale (a channel i dont use)i make 4 variables in the script controlller ss, v1 ,v2,v2,v4 and assign each to a node pointing to the points. ss points to the line. Then i run the fn eg. test.addhandles() - test being my struct.

There a whole load more to it, plus a fn that controls the bulge, rotation etc.



Eek, after you learned Houdini too, I’m sure you’ll create incredible rigs while your hands tied behind your back, and inside a sack. :slight_smile:

(ok, that was a bad houdini joke)


Using Character Studio with Physique, and I thought to put a Multi-res modifier so that my 40K guy can be animated and worked with at around 3000polys. Anyway it was working fine, but then when after I animated a walk with biped,(walk cycle was fine) and then started adding to the walk and used the dope sheet and play the animation in the perspective view it pops to the hi-res model and and the multires modifier is frozen! The mod stack is Physique -MultiRes-Editable mesh. I wanted the ability to have my guy be different res if animation took to long Please help!



You tried multires at the top of the stack?



EEk I’m more than impressed with this system :slight_smile:

Keep it up


[color=white]Hi there folks[/color]

[color=white]I’ve tried to read as much of this thread as possible and I’m very impressed in the content is very interesting. I’m sorry to say I haven’t had time to read all of it I got to about page 22! So I was wondering if there is any online tutorials (Maya scripts) that I’ve missed that are for facial animation. [/color]

[color=white] [/color]

[color=white]Thanks in response guys![/color]



Cheers man, Hopefully i can spend more time working on it. Work pretty much eats up your time. THeres lots of ideas ive been looking into including pixars menv, and facial robots setup process. I think ill still stick with my spline system, even if it turns into strips of muscles. Skinning is an issue, but unless i write my own skin system i dont know. Also im thinking about secondary movement eg, inflating you cheeks, pushing them with your tongue. So yes, sorry for been away from this stuff - im learning lots here so next iterations should be far faster and cleaner.