Forearm twist bug

Hello, I’m trying to get a good rigging for my character but I’m facing a boring issue.
I put two bones in the forearm, one for rotation (hinge) one for twist, the hand is following an object world transformations, the rotation of the elbow is done by an IK, the second part of the forearm is locked in rotation X and Z, and for the twist (Y) I’m copying the pose rotation of the hand relative to the twist bone with an influence of 0.5 to make it possible.
It works if the hand stay straight. If it tilt the forearm twist suddenly, maybe because the Y of the hand rotate of 360, but not sure.
How to avoid that without using the “3 bones technique” ?

Thanks

My armature : untitled.blend (2.63 MB) <- don’t look at the right arm because I used local space instead of pose space.

The best way I’ve found around, it needs another bone. :slight_smile:
Make a copy of the hand bone, make it a child of the hand bone, and set it to do a damped track(-Y) back toward the elbow. Then do a .5 copy rotation of that(Y-axis, local space to local space).

What happens is… When the hand starts rotating, on more than one axis, the rotations stack up and fudge each other. By using the damped track(-Y) it effectively strips off the X and Z rotations before they happen.

EDIT: Missed a step! The new bone needs to be aligned to the forearm twist bone.

Also, until just now I hadn’t looked at your rig. I don’t know how that’s going to work for you. I’m not really sure just what you’ve got going on there.

Here’s the most recent rig I’ve been messing with… You’ll notice it’s a little more straight forward. I blew up the bbone scale so the MCH-WristTwist bones are easier to spot…
http://pasteall.org/blend/index.php?id=47681

I would actually recommend using Bendy bones instead. As long as you give them some segments, they will automatically distribute the twist down the length of the bone. It works up to 180 degrees to try not to rotate to far and make sure it’s within the normal limits of a human forearm. The best thing about this is that you avoid having to use multiple constraints and you only have to paint weights for a single bone.

Thanks both, but…

SkpFX how can I keep the the new bone aligned to the forearm if it is a child of the hand, and why it needs to be a child of the forearm ?

Indy_Logic how to make bendy bones rotate only in Y axis ?

Sorry, wasn’t clear on that.

So all you need to do is select your forearm, go to the bone properties, go to the Bendy Bones rollout, add some segments (6 to 8 or so), Tick the “Use Custom Handle References” and pick your hand bone as the “Out” handle. If you get some weird rotations to begin with you can correct them with the “Roll” parameter.

It’s as simple as that.

EDIT: Forgot that you need to set your Ease In and Ease Out parameters to 0 so they don’t bend when you rotate the forearm.

It’s the damped track that keeps it aligned to the forearm, and it’s a child of the hand. It wants to rotate with the hand, but is constrained to stay aligned to the forearm.

SkpFX, thank you for your help, but I succeded first with the bendy bone solution and it just use one bone…

Indy_Logic, yes your EDIT is what was missing, the ease In/out at zero, the bendy bone stays straight, don’t need to check “Use Custom Handle References”, the last bendy bone section follow the hand bone, and the roll rotation is distributed along the forearm.
Thanks !