I’ve been having trouble figuring out shoulder deformation caused by an armature. I’ve been using hook modifiers instead of shape keys but I wrote a Python script so I can use them like they were shape keys. I use hooks instead of shape keys because vertices move by an average of the bones that control it but by a sum of hooks. I tried attaching a .blend file but it said it could not be uploaded (it is 2.5MB). I attached a .blend from a previous thread which shows the armatures but not much for a mesh. The roll value for Shoulder.R should be -76.46 degrees to resolve another problem.
The problem is when the upper arm bone is rotated by more than one axis. What I’ve been doing is defining hook modifiers for an upper arm rotation of 90, 135, and 180 degrees (for both the X and Z axes). Do I need to create modifiers for every combination of these angles on the X and Z axes as well?
Searching online I found a thread from several years ago that included a link to a tutorial http://web.archive.org/web/20090203184958/http://kokcito.tk/tut/shoulders.html but it is based on an old version of Blender. Do I need to study the Python script to find a solution? Is there a simpler way? I actually found that link on a thread I started, but it was about deforming a shoulder when the upper arm is rotated 180 degrees on the axis that runs between the shoulders (for my armature the X axis). My issue now is how to correct shoulder deformation with a combination of X, Y, and Z rotations.
This might be complicated by using Eulers. I use Eulers because I have two armatures: one for me to control directly and the other to deform the mesh. The bones in the armature to deform has constraints to copy rotations from the bones on the other armature. When use quaternions or axis/angle the copy rotations results in the armatures not matching (some Eulers, I think XYZ and ZYX, also result an armatures not matching). I use YZX Eulers because I have separate bones on the armature for deforming for Y rotations and for XZ rotations.
I’ve gotten the impression that Eulers are not easy to work with. Is that true? How exactly do copy rotation constraints work when the rotation is set as a quaternion or axis/angle? Does it simply copy the unit vector’s value for that coordinate (or unit vector times cosine(angle/2) for quaternions)?
bbone_twist_20160908.blend (1.23 MB)