Non flipping Shoulder/Bicep twist -> Help needed, please!

Become a member of the CGSociety

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

THREAD CLOSED
 
Thread Tools Display Modes
  12 December 2008
Non flipping Shoulder/Bicep twist -> Help needed, please!

Hello everyone.

I'm currently rigging several characters in Maya.
Everything is working great, the only thing I just can't get worked out is a non flipping shoulder / bicep twist (same for the Thigh). I've tried several methods, like for example point constraining a joint to the upper arm joint and then connecting the Y and Z rotations to the arm, or parenting it under the arm and then in Hypershade apply a multiply divide node andmultiply the x rotation by -1.
I tried using an aim constraint, and even had a setup where I would use a locators rotation as upvector and set driven keys on it, but although this helped a little, the problem remains ... as soon as I get close to gimbal lock (which obviously ca't be prevented for every possible pose) the setup goes haywire.

I've searched the net for a solution, and I've found a few threads with people who have one, but the threads are closed and the solution wasn't made public, or the old files are gone.

I hope some of you know of a way to couter the flipping problem and are willing to share, or even give me a hint in the right direction.

Any help is greatly apreciated.


I'm attaching two really simple versions, just to demonstrate the problem ...
Attached Files
File Type: zip shldrTest.zip (8.0 KB, 86 views)
__________________

 
  12 December 2008
If you're familiar with the ribbon spine setup, you can follow along with this:

http://animandmel.blogspot.com/2007...-rigged-up.html

Its something I wrote, that augments the abilities of the ribbon spine to allow for twisting beyond 360. That may help...never tested it in production though.
__________________
"You do not have a soul; You ARE a soul. You have a body."
- cs lewis

MEL Blog
 
  12 December 2008
What MolemanSD7 wrote should do the trick. But it really depends how you setup your arm joints. make sure you are getting clean rotation values. sometimes orient constraints give values between 180 and -180 causing stuff to flip unexpectedly. Even if you use an augmented ribbon spine but are giving bogus values it will flip.
__________________
-Animatix
My Rigging Blog
 
  12 December 2008
Thanks for your quick reply, Moleman. I guess I'll first figure out how your setup works, as i don't have the Fahrenheit DVDs, and it seems their shop is down at the moment. I'm still a little unsure on how I would attach this setup to the shoulder but I'll play around with the idea for sure and if I come up with a solution, I will of course post it here.

@mberglund:
What do you mean by giving false values? Would you use something different than Orient constraints?

Thanks for you help,

Alex
__________________

 
  12 December 2008
I use the blender node. It will take the rotations of joint A and the Rotations of Joint B, blend them together and put the result into joint C. You do this through the connection editor or hypershade. here is a link to sean Nolan's website, he has a good video to show how to set this up. http://www.snolan.net/2008/01/07/29/
__________________
-Animatix
My Rigging Blog
 
  12 December 2008
Right-on! I love Nolan's site. Its really inspired me and given me some good ideas for things in the past. I just wish he'd post more....
__________________
"You do not have a soul; You ARE a soul. You have a body."
- cs lewis

MEL Blog
 
  12 December 2008
Yeah, I understand the concept, and I think I could rig up the spine setup you're talking about (wich is something I'll do next, as ist relly looks powerful).

I just seem to not be getting the connection to my problem. What I want to to is to have the first twistbone on the Bicep to not twist at all (in x, assuming x is pointing down the joint), no matter how I rotate the upper arm, the shoulder should always be pointing up, or if the arm is on the side of the body, be pointing to the side.

What I have is that it either flips over when I rotate past 90 degrees down, or front. There must be a way to fix that, right?

Thanks again for all the great info so far!


-Alex
__________________

 
  12 December 2008
Yeah, i understand. The answer is a much sought after. The link I posted is for a spine but it can be changed for an upper arm twist and forearm twist without flipping.

Here is a post that has a lot of good discussion http://forums.cgsociety.org/showthr...t=shoulder+roll.

Aaron Holly's DVD's has a ribbon spine solution for the arms, that works really well. If i remember correctly he connects the rotations of the upper arm to ribbon joints and uses a Multiple Divide node to multiple the rotation by incremental values. the first joint, the one nearest the shoulder, he muliplies by zero so it never rotates, the rest are .25, .50, .75 to get the distributed twisting.
__________________
-Animatix
My Rigging Blog
 
  12 December 2008
I remember following that thread, but it still seems scarce on details. I couldn't even clearly decipher the high level concept he was mentioning...how to avoid gimbal altogether. From the video, it just looks like he's rotating in local space. Berglund, can you clarify his concept?
__________________
"You do not have a soul; You ARE a soul. You have a body."
- cs lewis

MEL Blog
 
  12 December 2008
Thanks for the link!

Yeah, I figured some people were looking for a solution. I think I might be on to something that would work for me. I'm at work right now, but I'll put up a file when I'm back home.


Cheers,

Alex
__________________

 
  12 December 2008
I've been trying to figure out what Victor uses for non-shoulder roll, so far I can't say. I think he is rotating in local space but has something else that is driving the twist. All i've come up with is something similar to Holly's ribbon spine, without the ribbon part, and it works well for me. The distributed twist from the shoulder to the elbow.
__________________
-Animatix
My Rigging Blog
 
  12 December 2008
Hello and thanks again for your replies!

I think I might have come up with something close to a solution for my problem. Again, I first want to get more control over how the first bone in my bicep twist setup twists, then take care of the remaining twistbones. (lots of twists for one sentence )

With a normal setup where I try to eliminate the twist of the first twistbone (by for example connecting the Y and Z rotations to the driving UpArm bone and leaving the x blank etc.) I get a flip when the system either rotates 90 from the TPose to the front/back OR up/down, which is of course sogical as we hit gimbal lock. BUT, you might want to have your characters Arms swing down a bit more than just straight down or front, and if your bone flips 180 at that moment it might look really weird.

I've tried and tried to get around that by using set driven Keys, or expressions that, based on the UpperArm joints rotation would do something to the first twistbone but nothing worked ... of course, because i was relying on the rotations, which get sort of unpredictable when I hit gimbal lock.

Now what if I didn't rely on rotations at all for the joints twist?

So I've come up with this partial solution(which is probably nothing new and far from perfect, but I didn't think of it before and i though maybe it would be a nice starting point for people with the same problem) :

I create 2 locators at the position of my bone and freeze their rotations. One of them ( loc_Aim ) I move down the arm (like to the elbow) and parent constrain it to the UpperArm, the other one I move slightly up. Then I Aim Constraint the first twistbone to the loc_Aim ans use the other one ( loc_UpNode ) as upnode.

This gives me a system that works alright, but flips around the y axis if aiming straight up or down.

Now, to prevent that I looked at how I want my joint to be oriented at different Arm poses. Here comes the tricky part I haven't cleaned up yet, as i might try to work some conditions in here to get nice and clean poses all the way. But for now I continued by writing an expression for the loc_upnode, that alters its x position relative to the loc_Aim's position in Y (and again, that's just a start).

This gives me relatively clean predictable results and the system flisp only when the arm would already stick deep in the body

i hope this makes senese somehow, I basically try to control the different stated of the joint, by looking at the quadrants the loc_Aim is in.

the expression I used is this:



loc_UpNode.translateX = loc_Aim.translateY* (-0.1)



I'm attaching the test file for you to check.

I'll try and play around with that a bit more. Also, next on the list is getting something like your awesome spine (@ mberglund) in there, to prevent the rest of the twistbones from flipping.

Looking forward to your feedback,



Alex



Attached Files
File Type: zip shldrTest_new.zip (7.1 KB, 56 views)
__________________

 
  12 December 2008
I quickly messed with your file. A better way to fix the upNode flipping would be to do this.

1. duplicate the upArm joint, and delete children.
2. connect the upArm ry,rz,tx,ty,tz to upArm_dup
3. break the expression on the upNode, and parent to the upArm_dup.

It seems to work well for this example, i'm curious to see where you take this. Good start so far!
__________________
-Animatix
My Rigging Blog
 
  12 December 2008
if you're using a regular IKrp setup, put a locator just outside the elbow skin section so you can grab after skinning, shift-click the IK node, Constrain - pole vector

hope this helps. learn about constraints. interesting stuff.

now can someone tell me why there's only ONE spine node seemingly available for use in FBIK. more than a little annoying, or am i missing some really big secret in assigning names to the skeleton? can't find that info a-n-y-w-h-e-r-e.
 
  12 December 2008
Here is a playblast of my non-shoulder roll and bicep twist solution. The first segment of the cube would (the one closest to the shoulder) doesn't roll at all but the joints further down the arm do. The arm setup is a simple three bone, fk/ik switching. Whenever i test a new twist distribution setup i always apply it to a switch setup to make sure it works correctly.

Whistler2k: Is this the type of solution you were looking for? or did i miss the point entirely. (...it happens sometimes...)

http://faithofthefallen.wordpress.c...shoulder-setup/
__________________
-Animatix
My Rigging Blog
 
Thread Closed 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 02:44 AM.


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