Facial controls follow blendshape


#1

Hi guys.
I’m rigging this characters face, and so far it’s working alright.
I use blendshapes for main manipulations such as smile/frown and so forth for the mouth shapes.
I then have a bunch of joints that I can use to tweak the mouth shape.
The problem is though, that my controls don’t follow the new shape of the face that the blendshape creates.
I can still use my joints to influence like I could before I used the blendshape, but the control is no longer sitting on top of the place where I want it to.

Like you can tell, the joint still controls the part it did before the blendshape kicks in, I just want the control to tag along.
I have 2011 so I have access to Point on Poly, but I’m not quite sure how to tackle this problem.
What’s the thinking here?

Cheers


#2

do a search for hyperRealMeshConstrain. Thats exactly what you are looking for.


#3

The rivet script, found on creativecrash, is pretty good at keeping your controls to follow the mesh. As long as you don’t constrain the controls to the joints but to a direct connection instead.


#4

Hi guys.
I tried the hyperRealMeshConstrain script, but couln’t quite get it to work. Maybe I just did something wrong. I got a cycle warning still.

About the rivet script is that just for constraining something to a given vert? or does it do something under the hood? Because maya 2011 has a poly to point constraint that does that.
Although I didn’t try to do a direct connect but I used parent constraint between controler and joint.
I’ll try with direct connect and see if that’ll make a difference.

Btw. if the whole setup is wrong, like there is a far better way than what I’ve used, feel free to say so.
I have but basic rigging knowledge and I just combine my knowledge and see what I can make of it.
There’s probably a smarter way of this additional shaping of lips.

But thanks guys!
I really appreciate you take your time and reply :slight_smile:


#5

I know this thread is old but I’m actually going through the same thing and I wanted to make a comment on it.

I’m not sure how well the method that I found works BUT what I prefer to do is create your facial joints, orient them to the face as you will, and then freeze the joint’s transformations. This assumes that you’re using floating joints or a “broken” joint rig.

Create a group exactly where the joint exists and then use something like rivet MEL to constrain a group node to the mesh. Create a controller of some sort, I prefer small NURBs circles for the face as opposed to curves, snap the control over your group node, and parent the control to the group. Freeze the control’s transformations.

Finally, connect your translate, rotate, and scale attributes from your controls to your joints. You may be thinking that because the joints aren’t on the mesh exactly that they won’t operate the same but they actually do. I’ve tested it and on a theoretical basis, since joints work with paint weights, it doesn’t matter where they are.

The end result is that you have controls that can warp the face and the controls, because they are parented to the group node (which is constrained to the face via rivet) will follow the facial deformations of the blendshape exactly. A bit indirect but it avoids the cycle that occurs when you have riveted joints, which deform the face, moving with blendshapes, which also deform the face. Hope that procedure helps you (if you still need it) and anyone else that comes by this thread.


#6

Nice post!
Great to hear different methods. Let me know how it turns out, if you ever try it on a practical basis.

I personally ended up giving into blendshapes, they work fine for the project, but for future reference, a more sophisticated method would probably be prefered.
I know you can do A LOT with blendshapes, bit it requires a lot of them :slight_smile:

Cheers


#7

I just gave it a quick try and it seems to work really well!
The only issues was, that the controler had double transformation, but I fixed it with a mult/div node between controler and it’s group.

Sweet stuff man! Seems really flexible and a quite easy setup.

Thanks


#8

I tend to use set driven key to follow the blendshape. Here is my tutorial on how I do it with my face rig setup, however you can probably do the same with your face rig setup by just adding a extra transform node on top of your control

http://vimeo.com/18632165

I also have a script to help setup the set driven key quickly.

Skip to the 9 minute mark to see the set driven setup


#9

Among many threads I found this to be the most recent so I thought I’d post a scene where I’ve set up both a joint and a cluster for on-face-controls. The cluster is the green sphere and the joint is the blue one.
For my test the cluster is far better as the control rides on the surface, but perhaps you could rig the joint in a different way(I just couldn’t come up with another one and I followed Korinkite’s explanation (if I understood it correct)) to work the same.

The clusterCtrl is riding on the surface no matter the underlying structure. However I couldn’t mimick that with the joint. However it works fine on blendshapes as you can see. Instead I had to parent in the joint to the hierarchy to move when rotating.

Reason for using joints is mostly for game graphics. However I assume painting joints and changing relationships is far easier than tweaking cluster wetghts and relationships so it would be ideal to have joints ride on the surface and then be able to offset them like clusters.

Any suggestions/ideas? :bowdown:
http://dl.dropbox.com/u/16029672/meshCtrl.ma

OT: Dropbox is awesome for attaching scene files, videos etc btw. :applause:


#10

Hey Geuse, just wanted to reply to you real quick.

I’ve learned quite a bit about broken rigs since that post and so I’d like to send an updated file of what I mean. For this test, I used a different rivet MEL than the original. It’s called djRivet. It’s much more stable, cleaner in the node graph, and works well with any version of Maya that uses hair follicles. If you don’t, you can simply set one up on the node using the older method.

Anyway, that was what I was talking about. Looking at your scene file, I wasn’t quite able to recreate the same effect. Then again, I got some loading errors so perhaps it was caused by that. Anyway, on my end the controls for the cluster and the joint were sitting at the origin and merely affected the rig from a distance which isn’t what you described (so I assume it’s a loading error).

You would be right about clusters being difficult to work with. People do not use them generally due to this reason. Also, clusters are not always supported in games and become difficult to set up once you start hitting the 40s range (bare minimum for facial rigging. Usually it’s much higher). If you’d like to continue using clusters and figuring out how you can work them in on top of a blendshape workflow, I suggest you look at curve rigs.

http://www.creativecrash.com/maya/tutorials/character/c/facial-animation-rig-for-delgo

It’s a tough workflow to incorporate and sometimes the effect is actually worse than joint based workflows but you can see the power in technique - when applied to organic creatures. Hope you enjoy.


#11

Hey man!
Sorry for the late reply, been busy this weekend, but thanks a lot. Tested it just now and It works really great. However…if you translate, rotate and then want to translate some more it will be a little quirky since you have to consider the rotation added.
But hey, I guess that’s just one of those things you have to live with. Can’t get it all :smiley:

It’s stable and easy to use. Thanks a ton dude!


#12

Below you can both read my thoughts and watch my results on that technique:

http://groups.google.com/group/xsi_list/browse_thread/thread/55654e5ff773507a/ea430c2b0dcec88b#ea430c2b0dcec88b

Here is a simple .mb scene aswell:
http://forums.cgsociety.org/showpost.php?p=6364119&postcount=11

hope it helps.


#13

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.