PDA

View Full Version : Facial GUI - How to set up blendshapes on diagonal movements


JaredTaylor
10-22-2010, 08:17 AM
Hi,

I hope the thread title was clear enough.

I want to have a blendshapes linked up like this:

Mouth control moves to the left = widen blendshape
Mouth control moves up = raise cheek upward blendshape
Mouth control moves diagonally up/left = blendshape widens and raise cheek upwards and sideways to the left (different blendshape than raise cheek upwards)

I know how to make it do what I want for the left/up, but when making it move diagonally, you can't use a SDK or connection editor, I assume there is an expression people use, or even utility nodes to drive it. Can someone elaborate for me? Cheers. Baby words, please!

I use Maya 2011

eek
10-22-2010, 03:13 PM
Hi,

I hope the thread title was clear enough.

I want to have a blendshapes linked up like this:

Mouth control moves to the left = widen blendshape
Mouth control moves up = raise cheek upward blendshape
Mouth control moves diagonally up/left = blendshape widens and raise cheek upwards and sideways to the left (different blendshape than raise cheek upwards)

I know how to make it do what I want for the left/up, but when making it move diagonally, you can't use a SDK or connection editor, I assume there is an expression people use, or even utility nodes to drive it. Can someone elaborate for me? Cheers. Baby words, please!

I use Maya 2011


Treat it as a value in n dimensions of [0.0,1.0]. So if left goes 0 - 1 and up does too, just multiply them together for there combination value, it'll always return a value of 0 - 1, but most importantly it'll be non-linear. e.g left0.1 * up0.1 = 0.001 , left0.5 * up0.5 = 0.25.

left_up = (left * up) , i.e [0.0,1.0] * [0.0,1.0]

This is what a weight space is, n dimensional axis' of 0.0 - 1.0 - where a knot/value can be place anywhere inside it. It position can be anywhere on the axis too i.e 0.5 but thats more indepth.

shinyprem
10-22-2010, 03:51 PM
Hi
Try "http://www.creativecrash.com/maya/downloads/scripts-plugins/interface-display/c/sliderlist-mel"
http://www.creativecrash.com/maya/downloads/scripts-plugins/c/facials-setup-gui
Rgds,
Prem

JaredTaylor
10-23-2010, 12:02 AM
Treat it as a value in n dimensions of [0.0,1.0]. So if left goes 0 - 1 and up does too, just multiply them together for there combination value, it'll always return a value of 0 - 1, but most importantly it'll be non-linear. e.g left0.1 * up0.1 = 0.001 , left0.5 * up0.5 = 0.25.

left_up = (left * up) , i.e [0.0,1.0] * [0.0,1.0]

This is what a weight space is, n dimensional axis' of 0.0 - 1.0 - where a knot/value can be place anywhere inside it. It position can be anywhere on the axis too i.e 0.5 but thats more indepth.

I'm a little confused, but trying to understand.

I made an expression that said

face.l_smileWide = face.l_widen * face.l_smileUp);

And it sort of worked. Now, when I move it up, it uses l_smileUp, when I move to the side, it uses l_widen, when I move it to the corner it uses l_smileWide......... and l_widen, and l_smileUp. I don't want to use l_widen and l_smileUP when it's using l_smileWide.

I don't have a good enough understanding of MEL to know how to do that.

Am I headed in the right direction?

I tried writing an expression saying:

if (face.l_smileWide >= 1) face.l_widen = 0, face.l_smileUp = 0;
else face.l_widen =


Then I got lost, and didn't know what to put in. Also the part where it says "face.l_widen = 0, face.l_smileUp = 0;" was invalid so I don't know what to do.


Please help me a little more, I'm almost getting it... I think.

JaredTaylor
10-23-2010, 12:12 AM
Hi
Try "http://www.creativecrash.com/maya/downloads/scripts-plugins/interface-display/c/sliderlist-mel"
http://www.creativecrash.com/maya/downloads/scripts-plugins/c/facials-setup-gui
Rgds,
Prem

I don't want to use other people's scripts, the entire point of doing this for me is to learn to do it myself :)

JaredTaylor
10-23-2010, 11:37 AM
Apparently I also need some form of corrective blendshapes, like when I blend smile_wide with smile_up it looks horrible, I need it to use a third blendshape in place of the mixture, or something like that.

Any ideas?

eek
10-23-2010, 10:08 PM
Well thats basically what i was getting at - because in most programs the blendshape is tied to is weight. When combining two you'll generally need a corrective sculpt to fix the mixture.

'face.l_smileWide' is essentially your combination shape. One way to treat it like an absolute is to detach the blendshapes from there weights e.g. (roughly)

blendShapeA = (weightA - weightC)
blendShapeB = (weightB - weightC)
blendShapeC = weightC = (weightA * WeightB)

JaredTaylor
10-23-2010, 11:50 PM
That makes me think that I should be writing something like this:

face.l_widen = (face.l_widen - face.l_smileWide);
face.l_smileUp = (face.l_smileUp - face.l_smileWide);
face.l_smileWide = (face.l_widen * face.l_smileUp);


But then how do I make my controller actually control them? Because that way they're all keyed from the expression and can't be moved :D lol =/


Thanks for the help so far =)

I feel like I should of understood by now how to do it, but I really can't :/

CGTalk Moderation
10-23-2010, 11:50 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.