Bone twisting = extreme pain

does anyone know why this happens? I assume a bone is flipping, but I’ve checked the transformations and they seem fine. When I mess with the clavicle it will untwist, and it only seems to happen when there are 3 axial rotations on a bone, and it doesn’t happen when rotated foward!


When you create the bones you need to adjust the bone roll angle. Use Ctrl+N to clear roll angle of the bone in edit mode. Did you do that?

Despiting the problem at all, i like the picture as it is… especially the “Huh???” expression while looking at his upper arm…

I did change the roll angles as per the BBB rigging tute, I think the problem may lie in a track to constraint I utilized for a shoulder bone, I hear they flip sometimes. although when I turn the axes on I don’t see any flipping. Oh well.

arexma, maybe I can exploit this, like the character’s arm randomly breaks at the wrong moment (asking a girl out, job interview, on the toilet), and hilarity ensues. :stuck_out_tongue:

I avoid TrackTo. It does induce flipping at the worst moments. Just the other day, I was ordering a sandwich down the street and my own TrackTo constraint popped. Boom. Sandwich on the floor. Terror. Depending on how you’re using it, you could replace it with a variety of techniques: pole vector for IK, StretchTo, etc.

Did it just flip out or did you try to do a sudden Target change, such as to the aft superstructure of a passing Sweet Young Thang?


yes, it’s the roll that can cause that. I’ve also had trouble with this. shoulders are tricky…
Shot at 2008-10-02
Shot at 2008-10-02
here the twisting happened when I moved the elbowpole a little to high. I fixed, or moved it out of the noticable way by changing the roll of the shoulder with around 90°.
It’s more tricky when you use Bbones. Because it’s tricky to tell when the segments will roll back to reset the roll when you have this shouldertwist issue.

… have some new ideas that might work… gonna try something…

Thanks for the responses, I tried to use a stretch to constraint, and it acted the same way. My idea behind my shoulder setup is that the deltoid bone points at the target at the tip of the upper arm, and the deltoid’s Y rotation is locked so that it doesn’t twist- the concept seems good, I only need shape keys on the up and down rotation of the arm, but when the upper arm is rotated on Y then rotated back it pops. This apparently is even a problem in the “almighty maya:” (scroll down to the anti-twist controls movie). I am wondering if the cause in my Blender rig is similar.


Oh, apparently I did not get what you were saying before Freakydude, but I did adjust the clavicle roll angle which was the culprit, and it all seems fine now. maybe you can use an action constraint, it seems that you can set keys in the bone edit mode, so that your rolls set themselves automatically. Thanks!

In my shoulder tutorial (link) I originally suggested to use an IK constraint with length of one to make a “track to” substitute with the least roll possible, but that tutorial is outdated since I found a better way by writing a custom “locked roll” constraint.

“Locking” the twisting of a bone is not really possible, but that doesn’t mean you can’t try to approximate it.

I am attaching a file with this custom constraint. If you want to try it, append the text “lock_roll” into your file and use it to create a “script” constraint. You may look at the example in my file. Note that both target space and “Cspace” should be set to “Local space”

It doesn’t work like “track to”, it is similar to “copy rotation”. Your target is not a bone to aim to, but a bone whose roll axis is shared by the constrained bone.

There is a “dominant axis” option to tune the result. Normally supposing your upper arm’s Z axis points upwards, you would set this to “Z”, but you might like the result of using “X”, so there is no “correct” setting.

One important thing: Because of a bug, this does not work with 2.47. If you want to try it, use 2.46 or a recent build. Scriptlinks must be enabled.

Here are some examples my own shoulder setup:


lock_roll_constraint.blend (170 KB)

Hey Toloban, yeah my setup is basically the bone version of your fantastic script/idea. Apparently the devs fixed something in 2.48, because it is no longer happening! Thanks devs!