CGTalk > Software > Autodesk Maya
Login register
Thread Closed share thread « Previous Thread | Next Thread »  
 
Thread Tools Search this Thread Display Modes
Old 11-29-2012, 04:15 AM   #1
egglybagelface
Maya Sloth
portfolio
eggly bagelface
Sydney, AU
 
Join Date: Apr 2010
Posts: 562
Adding (via djRivet) detailed 2ndary sculptors to a primarily driven blendshape face.

Hi Fellas,

I'm rigging a face primarily driven by blendshapes (and joysticks)

I need a point in the right direction how one goes about adding small detailed face sculptors (a secondary layer of control) that follow with the mesh.

I understand a rivet script (most likely djRivet), a single joint (tip/end only) are involved.... and that joint gets added to the character's skinCluster and a small amount of weight painting is involved for that region.

Is that, right? I've tried to dissect rigs I have that have this setup but I can't nail their relationships.... yet. I can't reverse-engineer this one. So I need a step by step.

Any clues?
Any website links?
I've googled for ages. The closest I've come to an answer is a video tut involving another piece of geometry (a "ribbon") that contains the rivets (follicle) that is only parented to the main head joint... but it does not follow the vertices deformed by a blendshape change.

Cheers
 
Old 11-29-2012, 04:43 AM   #2
royg
---
Roy
City, Afghanistan
 
Join Date: Nov 2007
Posts: 539
Paraphrasing:

Rig up a duplicate head with joints / clusters.

Pipe that into your main (blendshape driven) head as another blendshape.

On your main (blendshape driven) head, attach rivets where the joints / clusters are (on the other head).

Make some controls that are parented to these rivets that in turn, drive the joints / clusters (usually via direct connections - not parent constraints).

Put a group above these controllers (in the same position) that subtracts the translate values of it's child and puts that back into its own translate values to counter the double transform you'll get.
 
Old 11-29-2012, 07:44 PM   #3
egglybagelface
Maya Sloth
portfolio
eggly bagelface
Sydney, AU
 
Join Date: Apr 2010
Posts: 562
I worked it out:

1 word:

hyperRealMeshParent.mel
 
Old 11-29-2012, 07:56 PM   #4
Horganovski
Freelance Animator/Rigger
 
Horganovski's Avatar
portfolio
Brian Horgan
Graphite9
Dublin, Ireland
 
Join Date: Apr 2007
Posts: 4,845
Looking at some posts about that tool I see comments that it can slow a rig down a lot. Personally I'd use the same method as RoyG suggested. It's pretty easy to set up if you write some simple scripts for doing the direct connections and inverse tranforms part. Best thing is that it doesn't require animators to make sure any plugins are loaded before using it.

Cheers,
Brian
 
Old 11-29-2012, 09:26 PM   #5
royg
---
Roy
City, Afghanistan
 
Join Date: Nov 2007
Posts: 539
Yeah hyperRealMeshParent can get pretty slow... but hey, whatever floats your boat

Last edited by royg : 11-29-2012 at 09:41 PM.
 
Old 11-29-2012, 10:18 PM   #6
egglybagelface
Maya Sloth
portfolio
eggly bagelface
Sydney, AU
 
Join Date: Apr 2010
Posts: 562
I think I'm gunna have to abort the hyperreal.mel. I can only get clusters working / not joints.

I'll have to look into what you have suggested.

Please stay around as I may need your help... that looks pretty complicated for a little ol' animator/non-rigger to setup.
 
Old 11-30-2012, 01:27 AM   #7
royg
---
Roy
City, Afghanistan
 
Join Date: Nov 2007
Posts: 539
Not sure I understand - hyperRealMeshParent works on *any* transform - can't see why it would work on clusters but not joints...

How exactly are you trying to use it?
 
Old 11-30-2012, 02:04 AM   #8
Horganovski
Freelance Animator/Rigger
 
Horganovski's Avatar
portfolio
Brian Horgan
Graphite9
Dublin, Ireland
 
Join Date: Apr 2007
Posts: 4,845
Well if it helps, here are a couple of helper scripts I use to speed up the task of setting up the connections between the control objects and joints/clusters. Nothing you can't do manually through the hypershade/node editor/connection editor but a lot faster

This one just connects the tranlate/rotate/scale of one object to another :
Code:
// bh_directConnectTransforms - select the object,then the object that should follow it, for face rigging with soft mod manipulators etc string $sel[] = `ls -sl`; int $selCount = size($sel); if ($selCount != 2) {error "Please select the controller and then the object that should follow it";} string $ctrl = $sel[0]; string $ctrlParent = $sel[1]; connectAttr -f ($ctrl+".translate") ($ctrlParent+".translate") ; connectAttr -f ($ctrl+".rotate") ($ctrlParent+".rotate") ; connectAttr -f ($ctrl+".scale") ($ctrlParent+".scale") ; print ($ctrlParent+" is hooked up to the translate, rotate and scale of "+$ctrl);


And this one will create the 'inverse transform' relationship between an object and it's parent to get around the double transform issue RoyG mentioned above.

Code:
// bh_negateTransform - select the object,then it's parent and run to create a multiply node -1 with the transforms hooked up - for face rigging string $sel[] = `ls -sl`; int $selCount = size($sel); if ($selCount != 2) {error "Please select the controller and then its parent";} string $ctrl = $sel[0]; string $ctrlParent = $sel[1]; string $negateNode = `shadingNode -asUtility multiplyDivide -name ($ctrl+"_NegateNode")`; setAttr ($negateNode+".input2X") -1; setAttr ($negateNode+".input2Y") -1; setAttr ($negateNode+".input2Z") -1; connectAttr -f ($ctrl+".translate") ($negateNode+".input1"); connectAttr -f ($negateNode+".output") ($ctrlParent+".translate");


Both of these deal with local transforms only so the objects need to have the same local space.
Some of this code is a little clunky (well..most of it ) but it was pretty early on when I started with MEL and it still works fine.

Cheers,
Brian

Last edited by Horganovski : 11-30-2012 at 02:11 AM.
 
Old 12-01-2012, 04:24 AM   #9
egglybagelface
Maya Sloth
portfolio
eggly bagelface
Sydney, AU
 
Join Date: Apr 2010
Posts: 562
Well it took me a while to understand the approach but I get the concept now.
I know exactly what needs to get done, and I'm almost there.... I think.
In a nut-shell you could call it an "on-the-fly blendshaper, created by remote controls... in this case: nurbs control curves.

Please remember you're talking to an animator. not a rigger TD. And scripting is not my forte.

Step by step bullet point would be appreciated. I love the help you're giving me but it got too brief and vague towards the end... specifically the hook ups.

Here's my baby language

Quote:
Originally Posted by royg
Rig up a duplicate head with joints / clusters.

Check

Quote:
Originally Posted by royg
Pipe that into your main (blendshape driven) head as another blendshape.

Check

Quote:
Originally Posted by royg
On your main (blendshape driven) head, attach rivets where the joints / clusters are (on the other head).

Check

Quote:
Originally Posted by royg
Make some controls that are parented to these rivets that in turn, drive the joints / clusters (usually via direct connections - not parent constraints).

Sorta check :/

Controls as in Nurbs Curves, right?

So in the outliner it would look like this:

djRivetX
.......|--- follicle1
........... |---controlCurveMouthLower (Trans 5, 6, 7)

Quote:
Originally Posted by royg
Put a group above these controllers (in the same position) ........


djRivetX
|--- follicleMouthLower
..... |--- controlCurveMouthLowerGROUP
......... |---controlCurveMouthLower ...... then Freeze Trans(trans0,0,0 rot0,0,0 scale1,1,1)

Quote:
Originally Posted by royg
that subtracts the translate values of it's child and puts that back into its own translate values to counter the double transform you'll get.


That is where you lost me.

Quote:
Originally Posted by Horganovski
This [script] just connects the tranlate/rotate/scale of one object to another


I think I'm doing this right...

I gotta group the joint as it has it's own values that can't be zeroed out.
eg. joint1 = trans 5,6,7

From this:
djRivetX
|--- follicleMouthLower
|..... |--- controlCurveMouthLowerGROUP
|............ |---controlCurveMouthLower ...... then Freeze Trans(trans0,0,0 rot0,0,0 scale1,1,1)
| -- joint1 (trans 5,6,7)

To this:

djRivetX
|--- follicleMouthLower
|...... |--- controlCurveMouthLowerGROUP
|............... |---controlCurveMouthLower ...... then Freeze Trans(trans0,0,0 rot0,0,0 scale1,1,1)
| -- jointGRP (trans 0,0,0)
|.... |---- joint1 (trans 5,6,7)

First select: controlCurveMouthLower
then shift select jointGRP

I run the first script and when I move controlCurveMouthLower I get wackiness. Stuff moves in the opposite direction. That's to be as expected, I think.

Selecting jointGRP , shift selecting controlCurveMouthLower and running the 2nd script recreate a cyclic error.

So I tried selecting in the opposite way:
Selecting controlCurveMouthLower, shift selecting jointGRP and running the 2nd script returns no error, but now moving the control curve in X,Y are double transforming. And Z moves in the opposite like before.

When I select the jointGRP and control curve their local rotations aren't the same. I think that's the problem. I have 97 controllers to hook up, how can I change the control curve to sync up with the jointGRP.

If I'm completely wrong please lemme know.
 
Old 12-01-2012, 04:27 AM   #10
egglybagelface
Maya Sloth
portfolio
eggly bagelface
Sydney, AU
 
Join Date: Apr 2010
Posts: 562
Can't believe I missed it.... well actually I can.

Pages 341 - 346 of "Stop Staring" explain the whole process. But it's hidden away at the end of the chapter... easily missed.

Last edited by egglybagelface : 12-01-2012 at 12:20 PM.
 
Old 12-01-2012, 04:27 AM   #11
CGTalk Moderation
Lord of the posts
CGTalk Forum Leader
 
Join Date: Sep 2003
Posts: 1,066,481
Thread automatically closed

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.
__________________
CGTalk Policy/Legalities
Note that as CGTalk Members, you agree to the terms and conditions of using this website.
 
Thread Closed share thread


Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
CGSociety
Society of Digital Artists
www.cgsociety.org

Powered by vBulletin
Copyright 2000 - 2006,
Jelsoft Enterprises Ltd.
Minimize Ads
Forum Jump
Miscellaneous

All times are GMT. The time now is 04:19 AM.


Powered by vBulletin
Copyright ©2000 - 2016, Jelsoft Enterprises Ltd.