facial animation setup?


Hi all, I’m hoping that someone could point me in the right direction.

I’m primarily an animator and a novice rigger. I’ve been searching for days it seems to fine what I’m looking for but my apologies if I’ve missed it in this thread. I’m trying to learn how to do a good joint based facial rig in maya, that’s only joints no blendshapes and everything skinned to bones. The sort of rig used for many game engines. Does anyone know where I can look for either a good tutorial or a good dvd or book to purchase?

Thanks in advance!


I’m also very interested in that, I just finished Jason Osipas book “Stop Staring” which is heavily based on blendshapes.
So now, naturally I’m interested in learning a new technique, and the joint-based facial system seems very cool and fun.


I wrote a script so I could have a fun environment to play around with rigging faces using stretchy bones. I hope some Maxers find it useful. And it’s free.

More info: here

*I’m still developing the script, so feel free to send me ideas and suggestions on how to make it better.


Hey all.
I think facial rigs should able to create a wide range of expression quickly. I’ve found a joint based solution to be the best for this.
You can see my joint-based facial rig here:

There is a break down just afterward so you can see a bit of whats going on.



Great stuff Andy. On the lip joints, are they connected by a curve or straight constraints? It looked like you had distance attribute in there to? I like the forehead wrinkles and the corners of the lip the way they curved in a little. Was the lip corner a blndShape as well?


Awesome stuff Andy, but I had to skip a lot of stuff cause the camera movements was way too jerky for me.


nottoshabi: Thanks! The forehead wrinkles are the only blendshapes.
The rest is all weight painting!
The only constraints are aim constraints. And to control the positions… if you have 3 Locators A, B and C, and you want C to slide between point A and B, you can use this formula C = A + k(B-A) where k is a value between 0 and 1. Easily done with multiplyDivide and plusMinusAverage, though you could create a node to do the math for you.

Dan: sorry about the cam moves… I sent a bunch of reels out today too! oops

You guys have great reels, thanks for your feeback.


Can you explain this a little.


It sounds just like linear interpolation.

(1-t) * A + B * t


Why not just put a point constraint on C that is constrained between A and B so it will always be in the middle, and then you can can just change the weight of the constraints to make it move between them?


I’ve been advised that constraints are slow when you have many.
Plus I’m reusing some of the information from that node setup
You could use a point constraint I’m sure. There are many ways to skin a cat. Especially a 3D cat.


[left]I see you can actually plug the output of a multiplyDivide (for instance) as a target object of a pointConstraint. I could have also used a blendColors. Always learning :slight_smile:


miss post :banghead:


I liked it. Very simple and you got awesome results with it.


Going a bit different with my setup compared to what I have seen in this thread. Just love blendshapes. Gives me a lot of control. So the setup is jaw and rotate joint in the base, then blendshapes, then joints on top again. lip roll is also added, but not in the video.
Think it is a good setup, though I haven’t played with it yet. Anyone have any experience with something similar? (Only mouth shapes in this demo)


I love that setup, simple but it seems really powerful!
This might be to big of a question, but how do you get the joints to ride along with the blendshapes? Rivets?

Thanks, and great work! :smiley:


This might be to big of a question, but how do you get the joints to ride along with the blendshapes? Rivets?

Yes, I used rivets. but you need two meshes. one that have the rivets blendshaped in to another mesh that have the joints around the mouth. Or else you will get a cycle…
Not the best explanation :confused:

Have a update here:


I see… But with the way I would do it, I think I would get double transformations. I made a picture to make it easier to understand what I mean.


I just thought I’d share a quick deformation test of a joint based face rig i’ve been working on lately. I added just a few shapes to get the “S” curve on the eyelids, and the “OOO” shape for the mouth. hope you enjoi



Sorry for the necro-reply, but I missed your post when it was originally posted. You won’t get double transformations if you use a deformer which calculates based on a relative position. In Maya, you can use a cluster in relative mode to do this. Then you parent the cluster to the null that is riveted to the mesh, and the cluster will only transform the second mesh relative to its parent’s position.

Other apps likely have something similar. Just search the docs for something that works in a “relative” mode.