I have been creating the rig that is described in ‘Introducing Character Animation with Blender’ and have run into a little issue. The problem is with the rib/spine bones. When I rotate the upper body around the z axis, the middle spine jumps further than it should around. Rotating it back the other way causes the same effect in the opposite direction. Any ideas as to what might be causing this? Here is a pic showing the issue.
The top image is the rig at rest. The second image is rotating the upper body only very slightly (you can see the top of the spine has moved normal while the ones below it in the IK chain have jumped oddly). The 3rd image the upper body is moved slightly downwards along the z axis and produces a similar result.
Here is a shot with bone names on the spine.
Any help with this would be greatly appreciated.
I will offer what help I can, but first I need to know a few more details:
What solvers are on the bones? track-to, rotation constraint, transform constraint…?
What is the parent relationship of the spine bones? Are they parented to eachother, and are they connected?
Edit: A .blend would be ideal if that’s possible. This looks like a very complicated setup, and there may be more info needed after the above questions are answered…
Also, the colour of green on the top spine bone suggests to me that you have an IK solver on it, as well as whatever constraint is on it and on the ones below it. That could be the problem right there…
Here is the blend. There are several constraints and ik solvers on the rig. I temporarily removed the stretchto constraint so it may not be obvious what the extra SpineStretch bones are for, but that is their purpose.
–Link to blend–
So I did my best to get it working as you have it, changing as little as possible. The core of the problem seemed to be having the “rot” option turned on in the IK solver. Turning that off mostly fixed it. You may also want to add a pole target for the IK somewhere behind the back so you can control which way the spine faces. As it is now, the spine will only bend when you translate the shoulder control.
I realize you were probably using the ‘rot’ option on the solver to get the spine to bend when the shoulders were rotated. The reason that isn’t working in your current setup I think is because the shoulder pivot origin is at the end of the chain. This pulls the chain up upon rotation, and the bottom bones spin to match it. But I honestly haven’t used the rot option before as I have not yet found a reason to, and I’m not really familiar with how it should be used.
I also removed the copy location constraints from the top 2 stretchy bones, and parented them instead. Perhaps that won’t work with whatever final stretchy setup you have in mind, but it was leading to misbehaviour as well.
There was also a dependency cycle on the head, so I unparented it from the chain, and parented it to the ‘neckloc’ instead. Just so you are aware that it may need to be changed.
Let me know if the solution is adequate. I am not familiar with the rig from introducing character animation with blender, but if you take a look at my signature, there are some useful spines in the examples section and community rigs you can take a look at as well.
zanz_rigFix.blend (282 KB)
Thanks for the help, although I didn’t use your changes. I reconstructed the spine and seemed to have corrected the problem. I did want to use the rotation of the upper body to propagate to the spine and this setup allows for some pretty flexible poses. Here are some sample poses of the rig.
So what did you do exactly to rebuild the spine?