Adverti horiz upsell
Facial Animation Rig for Delgo
Facial Animation Rig for Delgo
gfunk, updated 2006-05-30 22:05:03 UTC 429,905 views  Rating:
(25 ratings)
Page 1 of 5

I am Warren Grubb, Animation Director for Fathom Studios on the film Delgo. (click here for the trailer) When we R&D for the feature film Delgo, I was Technical Director and I knew we would need a facial rig for our characters that was more powerful and flexible than standard multi-targeted blendshape rigs. The solution we came up with, to describe it very simply, uses NURBS curves as influence objects on a poly mesh that is bound to control joints using smooth skining. We retained the ability to create blendshapes if necessary, but we gained, among other things, the ability for animators to create very subtle or extreme changes in expressiveness without having to send the character to a modeler for new target shapes. In most cases, this process is simple and fast enough that you can rig a head in a single day.

Before we get to the rig itself, allow me to relate the idea that first led me down this road. I was creating blendshapes for another project and I was looking for a quicker way to sculpt the target heads from the base model. I was using wire deformers, lattices, and other various tools to push and pull the topology around to create the expressions and phonemes I wanted when it dawned on me that if I had some sort of unified toolset for creating the targets, I could just drive that toolset �on the fly� to achieve those targets instead of deleting all the modeling history and creating blendshapes. About this time, I saw some work Caleb Owens was working on with facial animation for motion capture- he utilized something similar to what I was doing, so I knew it was possible, I just had to create a manageable workflow for rigging and for an animator and make sure it was foolproof for production- or as foolproof as possible.

The Concept

The head of the character is bound to a few joints (that I will explain shortly) using a smoothSkin cluster, but the majority of the face is deformed with NURBS curves that are influence objects to the smoothSkin cluster.

If you haven�t used NURBS curves as influence objects in smoothSkinning, it can be a little confusing to conceptualize, but read through the tutorial and it should make sense. In influencecurve.avithis movie (avi) . I have created a sphere, bound it to a single joint and then added a NURBS curve as an influence. In the movie, you can see the influence the curve has on the surface- by deforming the curve, you will deform the surface. It�s sort of like a wire deformer, but since it is added to the skinCluster, it is one less layer of deformers to deal with (also, when we started on Delgo, wire-deformers were a lot more limited).

The influence NURBS curves act as our muscles, so the placement of the curves should look pretty logical and intuitive.

We typically only use a few joints in the head- one that doesn�t move at all and acts as a holder for and skin that is tight against the skull (such as the back of the head). A few more joints are used for the jaw rig (only one of those is a member of the skinCluster) and we used joints for the eyelids (you could used NURBS influence curves for those too, and probably with better results, but we decided we didn�t need the extra detail). The jaw rig has the joints you could expect for the base of the jaw and the chin but there is on extra bone on each side of the mouth that is used to squash and stretch the corners of the mouth as the jaw opens and closes- this will make more sense when you get into later steps in the tutorial. Finally, some joints will affect the neck and shoulders, depending on how far down the head model extends. If this all sounds terribly confusing, just read on for now and the specific joints are explained in more detail later. The point I want to convey here is that there aren�t many joints in the rig that are really influencing the head.

The NURBS influence curves- let�s call them faceCurves- are driven by two layers of controls- one that will be connected to attributes that are on centralized controls (this would be control names like �smile�, �frown�, �blink�, etc) and another layer remains available for hand keyframing so the animator can always tweak the results


  • kuk arne

    kuk arne said almost 9 years ago:

    A good tutorial is easy to follow. This one is horrible but still the content is very usefull. Ive been stuck on this third page for some time now. The curves are binded to the mesh correctly but nothing happens when i move the boxes.. the mesh doesnt follow
  • Stephan Strote

    Stephan Strote said almost 9 years ago:

    Same problem as kuk arne here. I can follow the tut step by step but the mesh refuses to follow... :(
  • Carlos Ortega

    Carlos Ortega said almost 9 years ago:

    Smart method, i tested it in a couple of characters and works beautiful.
  • Jason Baskin

    Jason Baskin said almost 9 years ago:

    Great tutorial!
  • darkzirconia

    darkzirconia said almost 9 years ago:

    For Kuk Arne and Stephan Strote: you need to select the skinCluster node on the mesh and turn Use Components on (it doesn't do it automatically like the tutorial implies)
  • 27084389

    27084389 said almost 9 years ago:

    Thank you do have video
  • R131

    R131 said almost 9 years ago:

    I got double transform problem after I use FS_addInfluences script. Faces along the face curves move itself when I move joints. Any idea? I'm useing maya8.5
  • Stephan Strote

    Stephan Strote said almost 9 years ago:

    darkzirconia, that did the trick! thank you very much for the info!!! :) Brilliant tutorial and a lot more flexible than blendshapes only!
  • gfunk

    gfunk said almost 9 years ago:

    Glad this tutorial is of some use, I didn't even realize it had migrated to this server. I originally made it for Highend3D. I have since modified some of the concepts to work with Maya Muscle systems, so hopefully I can update a 2.0 version.
  • ratandeep deep

    ratandeep deep said almost 9 years ago:

    hi sir i m ratan deep frm india ........i have many problem in this tutorial can u explain more plz sir
  • gfunk

    gfunk said almost 9 years ago:

    ratan, did you have a specific question to start off with?
  • mauricio steinert

    mauricio steinert said almost 9 years ago:

    I've made some tests with curves deforming the mesh, but I fall into problems with the mouth when I need to do the "M" phoneme. In short, I rotate the clusters inside but there's no effect to the mesh. Any tips? Best regards.
  • sterlma

    sterlma said over 8 years ago:

    Really enjoying your tut. It's been VERY helpful. Unfortunately, the faceCurve script didn't work for me so I had to do it by hand, but hey... it worked. Thanks.
  • lalamax3d

    lalamax3d said over 8 years ago:

    if someone explains step 4 and 5 more clearly (may be visual) i'll be greatful to him for my remaining life. i know this stuff is useful but can't do this as become more confused at above mentioned steps.. precise problem: 1- the curves i drew are called face curves, running first script in step3, creates 2- clusters 3 - face controllers or hulls (2 in count) per cluster assumption: 2 and 3, should be linked(parented) to skull or jaw joint ( whatever make sense ) 1 shouldn't be linked(parented) to jaw joint. they should be grouped and keep somewhere else. as in my case, most of time, mesh is part of world / root. so it should be part of world please correct me if i m wrong..?? hope to hear soon , regards, (
  • lalamax3d

    lalamax3d said over 8 years ago:

    i wish some day some angel will come and reply me or shared his finished file, so i can open, reverse and see, how he had done that......
  • virtual_gravity

    virtual_gravity said over 8 years ago:

    Hey guys, ANyone else having problems with double transforms with the geo? I set this up and everything works fine until I try to rotate the head. THe clusters aren't double transforming, but the curves are bending into "S" shapes when I rotate the head. I've tried all the parenting combinations I can think of, parent constraints, point contraints, grouping everything together, grouping individually, but still get that unpredictable deforms. This is exactly the head rig I was looking for, and would love to get it working. Great info!
  • jinu john

    jinu john said over 8 years ago:

    If I am not using the addinfluence script can anyone tell how it is to be done manually? A step by step would be really helpful thanks a lot for this wonderful tutorial.
  • sam1991

    sam1991 said over 8 years ago:

    i want to use your mel script FS_faceCurves, but it isn't working. i'm working with maya 2010, can anyone help me, please?
  • Monique Hudson

    Monique Hudson said over 8 years ago:

    I really do not understand steps C and D "c) point constrain the cluster to the child control curve. d) repeat this process for all the CVs on the curve. " pictures or a more detailed explanation a video even :/ I currently have the L_brow_CRV and two other curves that I think are controller curves (curve1, curve2). I'm very confused about which ones are supposed to have clusters. much help needed..trying to rig my thesis character
  • weiserty

    weiserty said over 8 years ago:

    Ay, Monique!!!!! Select a cv on the control curve, and hit create deformer- create cluster under the animation menu toolset. Now the CV is controlled by a sexy little cluster. Tim
  • advanced

    advanced said about 8 years ago:

    for the people that when _have made all_ and _still dont work_, the only thing what you need to do is select your curve and activate the atribute> _use components_ in your channel box in your history. and the curve will be deform by the clusters and will affect the geometry. PD sorry my english.
  • kristin pratt

    kristin pratt said about 8 years ago:

    This type of rig is only for a humanoid face. Anything oblong will improperly deform with head rotation. (ex: dog, horse, giraffe) Otherwise, great tutorial. It's design is simple in nature, but gives pretty nice results.
  • kristin pratt

    kristin pratt said about 8 years ago:

    @jinu john In order to add influences without the script all you have to do is: + select the mesh and in the skinCluster node make sure "use components" is on + keep mesh selected and make sure you also have the face curves selected as well + in the animation shelf tab, go to "skin" -> "edit smooth skin" -> add select the "add influence" hotbox + make sure "use geometry" is selected and the "NURBS sample" is set to 10 + then click "add"
  • kristin pratt

    kristin pratt said about 8 years ago:

    @mauricio steinert Because the clusters are sitting on points on a curve, they have no rotational value. You cannot rotate a CV, if they were joints for example, you could achieve the effect that you are looking for.
  • Pilou

    Pilou said about 8 years ago:

    Hi everybody. I'm stucked when i Add the curves to the skinCluster. I turned "use component" ON Then i select the curve and the mesh and => add influence with "use geometry" ON but when I do that, my mesh goes deformed. i don't know why. If i lock the weighting and then painting infuences of the curves after add it, the mesh goes deformed as well. Do you have any clue ? Thank you Pierre
  • Pilou

    Pilou said almost 8 years ago:

    I found the solution. I should tell everybody my issue was on Maya 2011. The solution is to put Skin mode in "INTERACTIVE" rather than "POST" and it will work as it shall work.
  • Adam Eisfeld

    Adam Eisfeld said over 7 years ago:

    Tip for taking it further: I mightve missed something but I found that although this is a great foundation for a rig, taking it a bit further provides for a smoother deformation: Duplicate all of the initial base curves you drew on your face, then create clusters on all of the CV's for each of these curves. The next step is to create a locator, and attach this locator to one of your duplicated base curves via a motion path constraint. Then in the motion path constraint attributes, break the connection for the U value, and then adjust the U value for the constraint so that the locator slides along the curve to line up with one of the clusters on the curve. Now grab the deformation hull that is located at this cluster, and Point Constrain (with maintain offset turned on) this to the created locator. Repeat this locator creation / constraint for every cluster on your duplicated base curves. The added functionality you gain from this is now you can a) deform a given duplicated base curve via rotation or translation to have all of the hulls deform at once, and b) moving any given hull (which is now accomplished by moving the clusters you created instead) will slightly move the adjacent hulls as well, giving a soft-modification effect.

Please sign up or sign in to post a comment.