Elbow Pinning/Locking

Become a member of the CGSociety

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

THREAD CLOSED
 
Thread Tools Search this Thread Display Modes
  09 September 2012
Elbow Pinning/Locking

Hi all, I would like to implement this elbow locking/pinning in my rig (unsure which is the correct term for it) such that when my arm is being stretched, the elbow can be lock/stretched towards to the Pole Vector.

I have 3 different sets of arm, namely the FK, IK and Bind sets.
Mine is slightly different, instead of a 3 arm joint system, I uses a 4 arm joints systems where my arm consists of the Shoulder, Elbow, Forearm and the Wrist.

In addition, so far after much searching, I am unable to find any tutorials on this topic.

Greatly appreciated for any help given!
 
  09 September 2012
Not super expert here, but it works like the stretch. You measure the distance from the shoulder to the pole vector object and from the pole vector to the wrist. Then you scale or translate the corresponding joints.

If you want you can have the forearm to be in sort of FK mode by attaching a joint to the pv and constraining your hand object to either an Ik control or the FK one.

Hope this helps a little.

Gian
__________________
The ability to draw is not born into an artist. The desire to draw is.
(Richard Schmid, Alla Prima, Everything I know about painting)


 
  09 September 2012
Hi,
what's your forearm joint does? Is it for twisting or it's for fk forearm like liquidik said?
You can just go with the 3 joints system for ik and fk bones and put whatever inbetween joints on the bind bones. You just have to find the way for those inbetweens to stay in place when the main(shoulder, elbow and wrist) joints are stretched. Or, using 2 ribbons for upper arm and forearm is a nice way to get total control over both parts.

Here's an example of a rig created by my auto rig script which is node base, it might be a little hard to look through, but I hope you'll get some idea.

hope this helps
Attached Files
File Type: zip armRig.zip (73.7 KB, 27 views)
 
  09 September 2012
Originally Posted by liquidik: Not super expert here, but it works like the stretch. You measure the distance from the shoulder to the pole vector object and from the pole vector to the wrist. Then you scale or translate the corresponding joints.

If you want you can have the forearm to be in sort of FK mode by attaching a joint to the pv and constraining your hand object to either an Ik control or the FK one.

Hope this helps a little.


Hi liquidik, thanks for the prompt reply... Not very sure if I get you at the last point about the attachment of a joint to the pv.
The last tutorial I have read is somewhat similar to what you have mentioned here

Well, I am unable to get the forearm twisting as I do the parent constrains, it affects the other constraints I have in the elbow joints (for the fk and ik)
Then again, I may have misunderstood the steps and done somewhere wrong. Maybe I will need a precise guide

Originally Posted by nuternativ: Hi,
what's your forearm joint does? Is it for twisting or it's for fk forearm like liquidik said?
You can just go with the 3 joints system for ik and fk bones and put whatever inbetween joints on the bind bones. You just have to find the way for those inbetweens to stay in place when the main(shoulder, elbow and wrist) joints are stretched. Or, using 2 ribbons for upper arm and forearm is a nice way to get total control over both parts.

Here's an example of a rig created by my auto rig script which is node base, it might be a little hard to look through, but I hope you'll get some idea.

hope this helps


Hi nuternativ, thanks for your prompt reply as well.
My forearm joint purpose aids in the rotation of the wrist in both ik and fk scenario whenever I rotates the wrist controller.
As for my arm structure, I have 3 sets - bind, ik and fk.
Hierarchy-wise is Shoulder>>Elbow>>Forearm>>Wrist

I am able to implement the stretching but I am using the (2 locators and 3 nodes method - distanceBetween, multiplyDivide & condition)

I have upload my file here, perhaps this will give a much better visual gauge...

Looking forward to the replies
 
  09 September 2012
Originally Posted by nuternativ: Hi,
what's your forearm joint does? Is it for twisting or it's for fk forearm like liquidik said?
You can just go with the 3 joints system for ik and fk bones and put whatever inbetween joints on the bind bones. You just have to find the way for those inbetweens to stay in place when the main(shoulder, elbow and wrist) joints are stretched. Or, using 2 ribbons for upper arm and forearm is a nice way to get total control over both parts.

Here's an example of a rig created by my auto rig script which is node base, it might be a little hard to look through, but I hope you'll get some idea.

hope this helps


To add on, I am not using the ribbon spine method as it is giving me a u-shaped curvature arm, for I am trying to retain its original structure. Not sure if this makes sense
 
  09 September 2012
The extra forearm roll joint has nothing to do with the 3 bone ik-fk system it should be a part of the deform joint set which is the set that you actually bind to your mesh.

Put your extra 'forearm joint' ONLY on your bind joint set.
The tricky part is on your bind joint set. Instead of parenting them like this:
upArm>>elbow>>foreArm>>wrist
I'd go with
upArm>>elbow>>foreArm AND wrist

Leave the ik and fk set with only 3 joints.
upArm>>elbow>>wrist

so you can parent constraint the bind joint set to ik and fk set with only 3 joints -no need for extra joint.

So as the joint stretch (ik or fk) you gonna have to find the way for the extra foreArm joint to always stay in the middle between the elbow and wrist. If you do stretch using scale attribute it should be fine, but if you use translate (translateX for example) you gonna have to multiply the value piping to the wrist by 0.5 and that value goes to the extra foreArm joint.

the article on TD matt's blog might be useful for you setting up the foreArm roll jont.
http://td-matt.blogspot.com/2011/02...t-method-2.html
 
  09 September 2012
Originally Posted by nuternativ: The extra forearm roll joint has nothing to do with the 3 bone ik-fk system it should be a part of the deform joint set which is the set that you actually bind to your mesh.

Put your extra 'forearm joint' ONLY on your bind joint set.
The tricky part is on your bind joint set. Instead of parenting them like this:
upArm>>elbow>>foreArm>>wrist
I'd go with
upArm>>elbow>>foreArm AND wrist

Leave the ik and fk set with only 3 joints.
upArm>>elbow>>wrist

so you can parent constraint the bind joint set to ik and fk set with only 3 joints -no need for extra joint.

So as the joint stretch (ik or fk) you gonna have to find the way for the extra foreArm joint to always stay in the middle between the elbow and wrist. If you do stretch using scale attribute it should be fine, but if you use translate (translateX for example) you gonna have to multiply the value piping to the wrist by 0.5 and that value goes to the extra foreArm joint.

the article on TD matt's blog might be useful for you setting up the foreArm roll jont.
http://td-matt.blogspot.com/2011/02...t-method-2.html


nuternativ, thanks for the info. I did saw TD Matt's blog but I do have a few doubts about it.
1. If I am to follow TD Matt's method, do I add in the bind joint before or after the skinning?
2. This may be a pretty noob questions, but can I assume tat I will have to do a parent constraint via the wrist controllers of IK and FK controls to the forearm joints? (so as to have the twist?)

Earlier, I tried implementing this method that I have found on youtube, it seems to work fine but as soon as I tried to move my IK arms and adjust the blendAttrs, the Bind elbow did snaps to the PV but as a result, it kills off my skinning, giving it a sharp 90 deg cut.

I tried to refine the skinning but it makes it even worse.

By the way, thank you for providing me your file, I am able to somewhat make out the function but it is pretty complicated for me to understand the work process of it.
 
  09 September 2012
1.both, you can add influence whenever you want.
2.the rotate value from the actual bind wrist joint will be the one driving the roll joint(s), so, whatever mode you're in (ik, fk) it'll always twist as it should. The value on the forearm must be less than on the wrist maybe half by multiply it by 0.5 or so.(see TDmatt blog)

For elbow locking I prefer using another set of joint and also another set of control which is another parent your ik handle going to follow, aside from your regular ik arm ctrl. (the blue diamond shape control in my rig) And I left all my rotate channels unlock on my poleVector ctrl for fk behavior on the elbow when elbow lock is activated.

Any stretching will ruin your skin weight, of course, if you don't have any inbetween joints to, kind of, keep the volume.

Last edited by nuternativ : 09 September 2012 at 12:56 PM.
 
  09 September 2012
Originally Posted by nuternativ: 1.both, you can add influence whenever you want.
2.the rotate value from the actual bind wrist joint will be the one driving the roll joint(s), so, whatever mode you're in (ik, fk) it'll always twist as it should. The value on the forearm must be less than on the wrist maybe half by multiply it by 0.5 or so.(see TDmatt blog)

For elbow locking I prefer using another set of joint and also another set of control which is another parent your ik handle going to follow, aside from your regular ik arm ctrl. (the blue diamond shape control in my rig) And I left all my rotate channels unlock on my poleVector ctrl for fk behavior on the elbow when elbow lock is activated.

Any stretching will ruin your skin weight, of course, if you don't have any inbetween joints to, kind of, keep the volume.


Hi nuternativ, do correct me if I am wrong.

Judging from the reply in accordance to my second question, can I assume that I am to parent constraint bind wrist to the bind forearm joint (even though it is a children of the bind Elbow?)

Then as for the Elbow locking method that you preferred, I guess you are telling me that there is one set for the ik arm (normal ik ctrls), then there will be another similar ik set but it is mainly catered for the stretching?
Having said that can I take it all these joints will be constraint towards to the bind joints?
 
  09 September 2012
Quote: Judging from the reply in accordance to my second question, can I assume that I am to parent constraint bind wrist to the bind forearm joint (even though it is a children of the bind Elbow?)


The bind wrist and the forearm both are in the same level, both children of the elbow. If you read through TDMattt's article carefully you'll see he don't use constraint to roll joint at all, he just plug in the rotateX value from the wrist which is getting 100% rotateX, to the foreArm getting 50% rotateX. That's it NO constraint since they're both children of the elbow and you just need it for twisting.

Quote: Then as for the Elbow locking method that you preferred, I guess you are telling me that there is one set for the ik arm (normal ik ctrls), then there will be another similar ik set but it is mainly catered for the stretching?


NO.

For elbow locking. What I was trying to say is, there is still only one ikHandle which will follow both the normal ik ctrl AND the elbow-locking ik ctrl, and you blend between them using elbow lock attribute. And the elbow-locking ik ctrl is parent constraint to the poleVector ctrl, so when you rotate it the wrist follows, like in fk mode. That's just my preference, to have another control and fk-like elbow locking and it has nothing to do with stretching while still maintaining good deformation.

When stretch, normal stretching like when you pull out your ik ctrl or when the elbow lock is activated and the elbow run snap to the poleVector ctrl, these are when stretching happen. If you don't have enough inbetween joints, like between your shoulder to elbow, 3 joint inbetween, and, between your elbow to the wrist, another 3, you'll end up with bad deformation.

I attached some pic that might help you see it.
Attached Images
File Type: jpg armrig.jpg (95.7 KB, 28 views)
 
  09 September 2012
Follow me for a second

an arm resting down on a table, with both the elbow, and wrist on the table. Now I want to lock the elbow. So I start sliding the elbow lock slider, and what happens, the elbow stretches out to meet the PV control. Ok, lets try this again.

Arm down on the table. Let's try adjusting the PV control before the locking. So I translate the PV control to where the elbow should lock and stay in place, But I can't. because the PV is controlling where the elbow is. a sort of cycle, right? Even If I could get it very close. when blending, there will still be a shift, and it's certainly not a good workflow for animators.

Ok last try, Let's not blend when the elbow is already on the table, but as the arm is coming down to rest on the table. So I place the PV control on the table where I want the elbow to lock to. great, the arm is pointed right at it. Now I have to blend the locking of the elbow, with the elbow stretching to meet the PV, alongside animating the wrist control setting down on the table, and make it look not broken. Arg!

This is another one of those things that looks good in the viewport, but is damn near useless when animating. Locking to a PV control is just messy IMO, and a pain in the ass for animators. I've never really understood the lock to PV control thing, am I missing something

By using a separate (bendy?) setup (like nuternativ mentioned). It's much easier to setup, way more functional, and you have a knee or elbow control that follows the IK/FK, but releases it's relationship when locking is turned on, and your left with a locked elbow EXACTLY where you locked it off. no drifting, stretching, or popping. Plus, whether it's locked or not, you have an awesome elbow control to animate with.

Last edited by everyFrame : 09 September 2012 at 03:33 PM.
 
  09 September 2012
This is easier than you think...

You would setup your arm with a translate driven stretchy setup via utility nodes. Then intercept the connection from the condition and the joint (or blend colors if you have a switch) with a blendtwoattr input[0]. Then you measure the distance from shoulder to elbow, elbow to wrist (two separate distance nodes) and plug their distance into input[1] of the blendtwoattr - but you will have to use mel or python because it is bugged for forming the second connection...

Once that is done you should be able to switch the blendtwoattr from 0 to 1 and the locator connecting the two distance nodes at the elbow (which will be your pole vector, it can be parented / constrained under a nurbs controller if you like) will control the locking.

If you want an example scene - let me know...
 
  09 September 2012
Originally Posted by nuternativ: The bind wrist and the forearm both are in the same level, both children of the elbow. If you read through TDMattt's article carefully you'll see he don't use constraint to roll joint at all, he just plug in the rotateX value from the wrist which is getting 100% rotateX, to the foreArm getting 50% rotateX. That's it NO constraint since they're both children of the elbow and you just need it for twisting.



NO.

For elbow locking. What I was trying to say is, there is still only one ikHandle which will follow both the normal ik ctrl AND the elbow-locking ik ctrl, and you blend between them using elbow lock attribute. And the elbow-locking ik ctrl is parent constraint to the poleVector ctrl, so when you rotate it the wrist follows, like in fk mode. That's just my preference, to have another control and fk-like elbow locking and it has nothing to do with stretching while still maintaining good deformation.

When stretch, normal stretching like when you pull out your ik ctrl or when the elbow lock is activated and the elbow run snap to the poleVector ctrl, these are when stretching happen. If you don't have enough inbetween joints, like between your shoulder to elbow, 3 joint inbetween, and, between your elbow to the wrist, another 3, you'll end up with bad deformation.

I attached some pic that might help you see it.


Thanks for the breakdown info, nuternativ.
Currently I am able to understand the setup behind it, still I will need to test it out before I can really know if I do understand the concept (if you know what i mean)
 
  09 September 2012
Originally Posted by everyFrame: Follow me for a second

an arm resting down on a table, with both the elbow, and wrist on the table. Now I want to lock the elbow. So I start sliding the elbow lock slider, and what happens, the elbow stretches out to meet the PV control. Ok, lets try this again.

Arm down on the table. Let's try adjusting the PV control before the locking. So I translate the PV control to where the elbow should lock and stay in place, But I can't. because the PV is controlling where the elbow is. a sort of cycle, right? Even If I could get it very close. when blending, there will still be a shift, and it's certainly not a good workflow for animators.

Ok last try, Let's not blend when the elbow is already on the table, but as the arm is coming down to rest on the table. So I place the PV control on the table where I want the elbow to lock to. great, the arm is pointed right at it. Now I have to blend the locking of the elbow, with the elbow stretching to meet the PV, alongside animating the wrist control setting down on the table, and make it look not broken. Arg!

This is another one of those things that looks good in the viewport, but is damn near useless when animating. Locking to a PV control is just messy IMO, and a pain in the ass for animators. I've never really understood the lock to PV control thing, am I missing something

By using a separate (bendy?) setup (like nuternativ mentioned). It's much easier to setup, way more functional, and you have a knee or elbow control that follows the IK/FK, but releases it's relationship when locking is turned on, and your left with a locked elbow EXACTLY where you locked it off. no drifting, stretching, or popping. Plus, whether it's locked or not, you have an awesome elbow control to animate with.


Hi everyFrame, thanks for giving me the scenarios so as to aid me in the understanding behind what nuternativ is trying to convey to me.

As mentioned, I will try to find Maya as soon as possible so that I can test out (based on what I have read and read so far) to see if I am on the right track.
 
  09 September 2012
Originally Posted by JaredTaylor: This is easier than you think...

You would setup your arm with a translate driven stretchy setup via utility nodes. Then intercept the connection from the condition and the joint (or blend colors if you have a switch) with a blendtwoattr input[0]. Then you measure the distance from shoulder to elbow, elbow to wrist (two separate distance nodes) and plug their distance into input[1] of the blendtwoattr - but you will have to use mel or python because it is bugged for forming the second connection...

Once that is done you should be able to switch the blendtwoattr from 0 to 1 and the locator connecting the two distance nodes at the elbow (which will be your pole vector, it can be parented / constrained under a nurbs controller if you like) will control the locking.

If you want an example scene - let me know...


Hi Jared, I think I have tried and posted a similar tutorial I have found on youtube (the link is somewhere is the first few posts).

I am able to get the elbow joints to work initially but as soon as I bind skin and starting to blend, my skinning seems to get cut sharp at a 90 degree, or rather I would says the skinning is totally screwed up as soon as I tried to move the whole arm in different direction other than stretching it in its initial position.

By the way, I would appreciate if you are able to give me an example scene.
Thank you in advance.
 
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 01:26 PM.


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