home

[ Some better blendShape techniques ]

Lets imagine the next situation: we have a nice modeled face with 20-30 ( or maybe 500 ) blendShapes for facial expressions. Ok, sounds great, but what happens if we need to change, for example - cheeks, eyesockets or whatever other is needed ? Is it needed to remodel everything ?
Would be really nice if the targets are dependent on the base geometry - remodel only the base one - update the targets automaticaly.

 
I will use a simple scene with 3 spheres to keep things simple.
The left two spheres are targets, the right one is the base.
 
Fast test to be sure that everything with the blendShapes works fine.
 
Now, lets take a look at the hypergraph - everything is as should be: intermediateShape -> tweak -> deformer -> deformedShape.
 
The first thing we need to do is to connect the tweak.outputGeometry attribute to both inMesh attributes of the targets.
 
 
We are ready to see the first results:
 
If we stop here, we will have the ability to only tweak the point positions of the current baseGeo ( for example - translating couple of vertices, or rotating some faces ), but we want to go further and have the ability to change topology ( extruding, beveling, faceSplitting, deleting of edges, etc. ).
 
Lets see what else we have in the nodal network - baseGeoShapeOrig - this is the intermediate object used by Maya to calculate deformations. Select the blendShape node and apply the "Display Intermediate Objects" command inside the Deform menu. Set some of the blendShape weights to 1 to be able to easily recongnize this object in the viewport. Feel free to apply whatever changes to the baseShape object - Maya will pipe everything through the tweak node to the targets.
 
And here is the final result ( extruded baseShape's faces ):
 

In fact this simple technique works with all deformer types. We can easily change topology of any skinClustered geometry without messing-up too mutch the construction history. To do it fallow the next steps:
1. Add an empty transform node - "createNode transform";
2. Display the intermediateShape ( with command "DisplayIntermediataObject" from the "Deform" menu ) of the skined shape, and parent it under the empty transform node - "parent -add -s theNameOfTheIntermediateShape theNameOfTheNewTransform". This will make the shape appear under the new transform.
3. Apply whatever you want modifications to the intermediate shape and then delete its construction history.