Making of clean rig controls

Become a member of the CGSociety

Connect, Share, and Learn with our Large Growing CG Art Community. It's Free!

REPLY TO THREAD
 
Thread Tools Search this Thread Display Modes
Old 04 April 2014   #1
Making of clean rig controls

Hi all i seen this video yesterday and the one thing i loved
was the way you could access the controls its so clean.

http://vimeo.com/90687696

I was just wondering how you could do this in MAYA.
I was thinking that you could assign faces on the mesh to a control
and then hide the controls so you just have to click on the mesh and
then your able to access the rotate and move controls.

Thanks in advance,

Jon
 
Old 04 April 2014   #2
Check out Paolo Dominici's example from 2008.
http://www.youtube.com/watch?v=V911_DcsaH8

There's a duplicate face chopped up into control sized chunks/regions. The deformation they drive is being fed back into these meshes. How? That's the question. This guy writes plugins so he might have written custom nodes in the API or made some creative connections with native Maya nodes.

Last edited by gonzalimator : 04 April 2014 at 07:35 AM. Reason: typo
 
Old 04 April 2014   #3
Thank you buddy ill try and ask him how he managed to accomplish that.
it looks so much nicer to animate with.
 
Old 04 April 2014   #4
It's pretty simple to set that up really.

First you're going to have joints/controls in the locations that you want to have the control pivots. Then what you can do is shape parent ("parent -r -add", using the add flag so it creates a shape node for each control) from the source mesh (That's the mesh that's skinned to the joints that the controls are affecting).

Now you'll have the shape on each transform/joint. Though, it's going to double transform since you have the same transform affect the skinning, and it's going to snap the pivot to the space of the transform. What you need to do it is create a transform geometry node, take the outmesh of your skinned mesh's shape and connect it into "Input Geometry" of the transform geometry node.

Next you need to put the shape's space back to it's origin, you can do that by connecting the world inverse matrix of the transform into the transform geometry's "transform" attribute. You can pump it through a multMatrix node if you need.

That should snap the shape back to it's original position. You can now select the faces and delete whatever you don't need for the shape (Don't delete history afterwards, as everything will pump into the deleteComponent node before going into the final shape.)

Now, you should be able to just select that area, it'll select and move it around, the control will have the same deformation as the mesh (You can reference the original mesh to avoid selecting it).

Making this into a node would make it a lot quicker obviously.

I hope that makes sense. I'm at work right now. So just typed this out quickly.
 
Old 04 April 2014   #5
Hi!
This looks great man!
BUT! Always a but... I'm lost!

Originally Posted by Ollarin:
Next you need to put the shape's space back to it's origin, you can do that by connecting the world inverse matrix of the transform into the transform geometry's "transform" attribute. You can pump it through a multMatrix node if you need.



Which nodes, and in which order should I connect? When you talk about a "transform geometry node".. are you referring to a simple null?
I understand that I should connect my output (skinned) mesh to the null inputGeomtry. Then connect this one, with the inverse world matrix , to some node to reset the position of the shape that is under my joint/control. This is where I get lost! What is that node whose transform will bring my shape to it's exact position?

Any clue about this?
Thanks in advance for any help!

Cheers, from Argentina.

Bye.
 
Old 04 April 2014   #6
Originally Posted by eadatto: Hi!
This looks great man!
BUT! Always a but... I'm lost!



Which nodes, and in which order should I connect? When you talk about a "transform geometry node".. are you referring to a simple null?
I understand that I should connect my output (skinned) mesh to the null inputGeomtry. Then connect this one, with the inverse world matrix , to some node to reset the position of the shape that is under my joint/control. This is where I get lost! What is that node whose transform will bring my shape to it's exact position?

Any clue about this?
Thanks in advance for any help!

Cheers, from Argentina.

Bye.


The transform geometry node is a separate node that you need to create using 'createNode "transformGeometry"'

The skinned mesh should be connect into that node, as well as the inverse matrix. The output from the transform geometry node will go back into the shape node attached to your control/joint.

Sorry, I'll make a quick video or something outlining it better when I get home.
 
Old 04 April 2014   #7
i've done it!!!

thank you, man!!!

the only correction! i could realized because i created a new EMPTY shape below the control, and put the output geometry of the transofrm to that new one. which is very logic but i couldn't got it right yesterday.


thank you again!

cheers!

Last edited by eadatto : 04 April 2014 at 03:21 PM. Reason: problem resolved!
 
Old 04 April 2014   #8
Ok, my turn...

When I try this method, I end up with a cycle. The reason is, when I parent the shape of the skinned mesh to my joint/control, I get an instance of the original mesh shape. If I try the connections as described, I'm connecting the outMesh of the skinned shape to the transformGeometry.inputGeometry, and the transformGeometry.outputGeometry back into the skinned shape's inputMesh. Because it's an instance, I'm affecting the original no matter what and get a cycle. If I delete faces, the original skinned faces are deleted. What am I missing?

I tried feeding the outputGeometry of the skinCluster through the transformGeometry, then into the shape and that worked but the original shape swings around in an inverse manner due to the joint/control's worldInverseMatrix connection. The fact that they are the same shape means that one looks right and the other is botched.

By the way, I used "parent -s -r -add" and not "parent -r -add". When I tried the latter I got an instance of the object as a child of the joint I'm using. Selecting it did not select the joint/control (obviously) like it would if I parented the shape node to the joint.

Ollarin, eadatto, could you help me to understand this technique?

Thanks,
 
Old 04 April 2014   #9
Originally Posted by gonzalimator: Ok, my turn...

When I try this method, I end up with a cycle. The reason is, when I parent the shape of the skinned mesh to my joint/control, I get an instance of the original mesh shape. If I try the connections as described, I'm connecting the outMesh of the skinned shape to the transformGeometry.inputGeometry, and the transformGeometry.outputGeometry back into the skinned shape's inputMesh. Because it's an instance, I'm affecting the original no matter what and get a cycle. If I delete faces, the original skinned faces are deleted. What am I missing?

I tried feeding the outputGeometry of the skinCluster through the transformGeometry, then into the shape and that worked but the original shape swings around in an inverse manner due to the joint/control's worldInverseMatrix connection. The fact that they are the same shape means that one looks right and the other is botched.

By the way, I used "parent -s -r -add" and not "parent -r -add". When I tried the latter I got an instance of the object as a child of the joint I'm using. Selecting it did not select the joint/control (obviously) like it would if I parented the shape node to the joint.

Ollarin, eadatto, could you help me to understand this technique?

Thanks,


Urgh! I'm sorry, I wrote in such a rush the other day I didn't explain that right. Haha!

You can either create an empty shape node and parent -s -r it to your control/joint. Or just duplicate the skinned object and parent -s -r that into the control.

The output from the transform geometry node will go into each respective shapes.

I've attached a quick screenshot to illustrate.

Let me know if that makes sense.Sorry, I havent had time this last couple of weeks to make a video. :/
Attached Images
File Type: jpg skinnedControls.jpg (50.6 KB, 96 views)
 
Old 04 April 2014   #10
Thanks Ollarin! Very clean. I get it now, makes total sense. I've recreated it here and all is well. Very cool technique!

I forget how useful using the outMesh of shapes can be. I saw it a few years ago, then it came up recently (at work), and now this! I should pay better attention.
 
Old 04 April 2014   #11
No problem!

By the way, I learned this technique from my supervisor(Wasim Khan of http://creaturerigs.com/), so it's not something I came up with.

Connecting shape nodes can be very powerful, especially for rigging, you can split your deformations up into separate layers and flatten them all down to a final mesh, very handy.

Last edited by Ollarin : 06 June 2014 at 09:00 AM.
 
Old 04 April 2014   #12
haha, so thank's to you and to supervisor, Ollarin!!!
awesome stuff here

cheers !!!
 
Old 04 April 2014   #13
Hello,

This is an interesting technique and one that I'd like to explore, but I'm not very experienced with Maya's nodes. I tried to follow along using your instructions and using some other posts on CGTalk but the result I'm getting is strange, I'm not sure if it's double transforms.

I tried to set things up similar to you but I'm not sure what you mean when you say
The output from the transform geometry node will go into each respective shapes

Taking your image as the example, do you mean your connecting the transform attribute from bot_transformGeometry to botShape?

In my scene I have
  • bot_jnt.worldMatrix[0] -> bot_transformGeometry.transform
  • skinnedShape.outMesh -> bot_transformGeometry.inputGeometry
  • bot_transformGeometry.outGeometry -> botShape.inMesh

Thanks,
-Harry
__________________
LinkedIn | Website | Vimeo | YouTube | Twitter | Facebook
 
Old 04 April 2014   #14
What you have is right except, you want to connect the inverse world matrix of the joint rather than the world matrix into the transformGeometry.transform, as you want to negate the transforms of the joint and pump that back into the shape.

So:
bot_jnt.inverseWorldMatrix[0] -> bot_transformGeometry.transform
skinnedShape.outMesh -> bot_transformGeometry.inputGeometry
bot_transformGeometry.outGeometry -> botShape.inMesh
 
Old 04 April 2014   #15
Thanks for the response,

I got it working, I used empty shape nodes first but they only give a wireframe display so I then tried out duplicating the skin mesh which in the end gives you the shaded model which is nice!

I think I could reproduce the method, but I couldn't properly explain it to someone else - but like I said, I'm pretty inexperienced with Maya.

Thanks for the explanation,
-Harry
__________________
LinkedIn | Website | Vimeo | YouTube | Twitter | Facebook
 
reply share thread



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 12:43 AM.


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