Segmented Bbone twisting for unknown reason

There is some strange twisting on a bone in my armature that I can’t figure out. This twisting only happens on the right arm and not the left. It also happens only when the right arm is rotated by the X axis by between -13 and -30 degrees. In the attached blend file, the bones are rotated by -25 degrees. I divided bbones for the arm into five segments and the ease in/out are set to 0. I set the ease in/out to 0 so that the bones remain straight on the X and Z axes but allow different amounts of twist around the Y axis for each segment.

In this rig I actually have two armatures: Armature.BC which is set to display octohedrons and Armature.BA which is set to display sticks. Armature.BC is meant to be controlled by me directly (BC stands for body controller) and Armature BA (BA stands for body adjustment) is meant to adjust the mesh. The mesh has an armature modifier for Armature.BA. The bones of Armature.BA have constraints to copy the location or rotation of a bone in Armature.BC.

I can’t find anything different about the left and right upper arms. Both bones are divided into 5 segments with ease in/out values of 0, and all bones connected to them have the same number of segments and ease in/out values as the corresponding bone on the other side of the body. What could be causing this twisting of the right arm and how could I fix it?


bbone_twist_20160908.blend (1.23 MB)

Adjust the roll on the Shoulder.R by 180 degrees. In edit mode select the bone, and in the properties panle change the roll to 180. Also on your mesh you have flipped normals, select all verts and ctrl-n.

Thanks, changing the roll of the right shoulder bone to 180 worked. I find it strange that the bone on the right side required a roll of 180 but the left required 0.

Actually it turned out that changing the roll of the right shoulder bone to 180 degrees did not solve the problem. Although I no longer get the twisting when the bone (UpArm.R on Armature.BC) is rotated between -15 and -30 degrees on the X axis, I do get twisting I don’t understand when I rotate the bone between 75 and 150 degrees on the X axis. The twisting problem that happens between 75 and 150 degrees did not happen when the right shoulder bone had a role value of 0. It seems I need to set the roll on the right shoulder bone on both armatures to 180 to remove the problem when rotating between -15 and -30 degrees, but the problem when rotating between 75 and 150 degrees does not happen if Shoulder.R is 0 on at least one of the armatures.

Your bone roll axis on connected bones must be the same usually for b bones to do their thing. Select your shoulder bone, your forearm bone, then your upper arm bone and control n to active bone in edit mode. It fixed it for me on your file. This is also why I dislike eulers.

Thanks for the help. That solved the problem. It resulted in the right shoulder bone having a roll value of -76.46 degrees.