hello there!
there are a few methods out there creating an upper arm roll, however, none of those methods work in all possible situations, so it's quite normal you will have to switch to one of 2 solutions (like backwards and forward arm or something like this). if you actually animating and come to this area you have a problem...
so for my diploma thesis i came up with the following method i like to share with you.
- You will need an upper arm with at least 2 joints, better 3 or 4 to
give a nice volume preservation. Then you will need also a driver arm
setup for the ik with just 2 bones. The chains must have the same
LRA-Orientation for this setup to work.
- Create a rotate-plane ik fort he ik-joints. This will be a simple arm-setup to later drive the deform joints.

- Now comes the funky part
Create another rotate-plane ik for the first deform joint, set the polevector of the rotate-plane ik to 0-0-0. By doing this the ik will remember its orientation and will ony flip if the ik-handle gets to the exact opposite. This trick will ensure the the first deform joint will not self-rotate, it will always keep its original orientation. This ik-setup acts a little bit like a aim-constraint.
- Now parent the rp-ik to the first upper-arm joint from the driver
ik-chain. By doing the deform-chain will follow the driver-chain
without doing the self-rotation. And thats exactly what we wanted: NO
SELF ROTATION !!!

- The next step is, you guessed it, to apply the exact self-rotation
or roll-difference gradually back to next 3 joints of the deform chain.
To measure this difference we create a locator, which we parent under
the non-self-rotating first deform-joint. Then we create an orient
constraint from the first driver-ik-joint to the locator. This way the
locator rotates with driver-chain, but since its parented to the
deform-chain, which also rotates with the driver, except for the
roll-component, you get the exact rotation difference.

- The last step is take the rotate value of the locator and divide
it through the number of deform-joint 1 and connect this value to the
defrom-joints self-rotation.

- The Setup is finished. You will see it produces very stable
results. It will never flip unless the arm is positioned to the
opposite, which is for more or less every character impossible.
Hope you liked the Tutorial!
also visit my homepage: http://www.ferstltom.com/
cheers,
ferdo
Comments
-
Love this! It\'s so simple, but a great solution. Before I was simply duplicating the shoulder joint and feeding Y and Z rotations into it, but leaving out the X(roll) axis, however, flipping can occur during certain extreme poses. This no-flip method is waay better, I am switching to this from now on. Thanks. -Rod
-
this is by far the best way to get around this problem. very kind of you to share :)
-
Can we please get an example file so that we can see the final piece? I think I have the rig down but I'm having trouble visualizing things and would like to know exact end behavior.
-
Good workflow, but the use of an orient constraint as rotate offset calculator is not wise. Constraints tend to flip values and twist values when reaching a certain angle. You can avoid the problem by using some simple math nodes instead of a locator and a constraint: If you obsevere how the rotate values are calculated, you can see how it is calculated. So instead of using locator+constraint I would do as follows: created two multiplyDivide nodes, set both of their input2x values to -1 Plug rotate x of the bind bone into one and the twist driver rotate x into the other multidivide node. Now create a plusMinusAverage node, set its operation to substract, and substract the twist rotation x from the bind bone rotation x (plug bind bone mult output into input1D[0] of the pma node, and twist driver mult output into input1D[1] of the pma. Now plug the output of that pma into the gradual rotation distribution system of your choice, and voila, everything should work now, with even less flipping.
-
Jesus Christ praise your soul! (or something to that effect... I'm no religious per say) This IK Handle with PoleVector at 0,0,0 gimmick is the most perfect solution for No Twist Socket joints! I use a simple single roll joint system so I didn't really followed your tut completly... but setting the shoulder socket joint to only follow Y and Z rotation using this system worked Perfectly. I Also used it for the Thigh joint and it Rocked as well! The old "Aim Constraint the shoulder joint to the elbow with an World Up Object locator" system was not working well AT ALL and this one DID!!! Thank you..."we so excited"!