View Full Version : Blend Shape Problem!! Need Urgent Help!!!

11 November 2009, 05:11 PM
I Want to attach 8 different blend shapes to the box as marked by the white circles.
I am able to attach 7 blendshapes with the help of expression but the 8th one is creating problem.
It wud be better for me if the same thing can be done by an expression.
I have attached the image.
Help! :bounce:

11 November 2009, 06:27 PM
a couple things first before I go off and think about how to solve this..

first and foremost you do know that if you have that many blendshapes attached to a given controller that over half the blends are not going to blend with each other. since they will be at opposite ends, and will actually only be blending with the two closest shapes to a given point of reference.

Secondly Expressions have no defined order of operation. Which while may look good for what you want on the surface, it may lead to problems in the long run, you may get a better result out of a node switch system.

What is the end goal for having that many shapes on one controller?

11 November 2009, 06:40 PM
Actually i am working on multiple characters having the same setup.
But connecting 8 different blendshapes on one cotroller was done on experimental basis.........just want to know the trick.
I m just preffering expressions so that i dont have to make utility nodes or SDK in every character coz that wud be time consuming .
I case of expression i have to just connect the blendshapes and import the facial GUI and create the previously made expression.
Just want to save time :rolleyes:

11 November 2009, 08:43 PM
it is realitvely easy to script the creation, naming and connection of a utility node.

What you need to understand is that with the expersion you can get a different result everytime that you use it. Since it will re-evaulate itself from its current location in space and on the time line.

Utility nodes have a defined order of operation and will operate the same way every time (at least in theory and most of the time in pratice).

If your just wanting to save time, write a script to create the node and make the connections. It should actually be less time consuming than the expressions.

However when I ncreate a setup like that, I tend to only use a max of 4 blends to a given controller and even then they have to be opposing blends, like smile/frown then use the multiply/divide node to invert one of the numbers then use a switch node and a color blend node to take care of the rest.

I can't find the link at the moment, but if I am mistaken, and Jason can fele free to correct me if I misquote him (i beleive he's still around on the boards here from time to time). But he stated that while he used expersions in the original Stop Staring book, that Utility nodes did provide for a more stable setup.

11 November 2009, 09:08 PM
Yeah, Jason Osipa has the best way.

A long time ago Judd Simantov wrote jsFacialWin.mel ( that does what you want.

Hope I'm not sharing something I shouldn't be...please let me know if I should delete this.

11 November 2009, 09:21 PM
Thanks for your awesome support:applause:
I will certainly try to make utility nodes through script!
If anybody has got some other trick please do share!

11 November 2009, 09:27 PM
Just Change the names as needed

You can use a string to auto name the condition and invert nodes so that they are dynamic on creation. This is a sample of switching between two opposite blends happy and sad.

shadingNode -asUtility multiplyDivide -n "nameMeInvert";
shadingNode -asUtility condition -n "nameMeCondition";
setAttr "nameMeCondition.colorIfFalseR" 0;
setAttr "nameMeCondition.colorIfTrueG" 0;
connectAttr -force CircleCtrl.translateY nameMeInvert.input1X;
connectAttr -force CircleCtrl.translateY nameMeCondition.colorIfTrueR;
connectAttr -force nameMeInvert.outputX nameMeCondition.colorIfFalseG;
connectAttr -force nameMeCondition.outColorG Emote.Sad;
connectAttr -force CircleCtrl.translateY nameMeCondition.firstTerm;
connectAttr -force nameMeCondition.outColorR Emote.Happy;
setAttr nameMeCondition.operation 3;
setAttr "nameMeInvert.input2X" -1;

CGTalk Moderation
11 November 2009, 09:27 PM
This thread has been automatically closed as it remained inactive for 12 months. If you wish to continue the discussion, please create a new thread in the appropriate forum.