Stable spline IK for spine / bone chains?


I’ve been testing spline IK for spine armature for a good while.

I’ve come to conclusion it isn’t very stable;

First of all, I don’t seem to be able to find built-in heading control. Either I can’t find it or there is no built in heading control for constrained armature bone chain.

Another thing probably resulting from this - when armature root bone which is parent of bones that control the spline (for example) is rotated 360 degrees along x-axis, vertically oriented spine deformation bones that are constrained to IK will flip halfway into full revolution. I don’t think I had any other controls as I was testing this with a blank scene.

Also, trying to fix heading and twist control with constraints like copy rotation doesn’t seem to help. I’ve tried several combinations to create center spine bones that take their heading from hip and chest bones… no success. Local + pose space seem to work the best, but bending spline sideways causes center bones to roll / change their heading for no obvious reason, even though hips and chest are facing forwards and even if the spine is otherwise pretty much vertical line along y-axis.

Any ideas?

Is spline IK actually usable for spines in Blender?

I probably haven’t tried out all possible combinations of constraints, but not being able to do a 360 flip is really limiting… and not being able to control heading of IK bones renders it useless for me. Hope I’m wrong.

Spline IK doesn’t acquire tilt from curves. It acquires Y axis rotation from the parent bone of the chain (or the armature object if no parent bone). If you manipulate the curve such that it approaches a -180 degree angle to the parent/armature, that acquired roll kind of stops making sense from an intuitive standpoint. The math still makes sense, of course.

Spline IK, like regular IK, ignores constraints on its chain bones. If you want to use constraints like copy rotation to control twist, you have to duplicate the chain bones (with no IK on the duplicate) and acquire chain transformation by parenting or non-IK constraints, at which point you can use any constraints you want.

Simple way to setup a spline IK spine, without good Y axis rotation, is parent the first bone of the chain to a root bone nd parent the curve to that same bone. Rotation that approaches 180 degrees shouldn’t be achieved by manipulating hooks on the curve, but by manipulating the root bone. That will prevent the problems you’re seeing.

Acquiring proper Y axis rotation with a spline IK, particularly a long spline IK composed of many bones, is a more complicated problem. A simple three bone spline IK spine is easy enough: duplicate the spine, parent duplicates to originals, deform from the duplicate, and pose the deforming duplicates manually. For a lot of bones, distributing twist becomes a more complicated problem (as it is for a regular IK chain as well.) My latest idea, which I haven’t tested yet, is track a chain of verts that gets two armature modifiers, first to acquire appropriate twist, then to acquire the shape of the curve.

Straight up acquiring tilt from a curve is possible, but for a spine, it’s a bad idea. Curves’ tilts flip in world space when the curves change direction, meaning that bending over would spin your belly around to face backwards.