I can't figure out how to parent a bezier curve to an armature

So I’m working on a character with a tail, and decided to animate it with a bezier curve. Everything was going great while I was setting it up until I tried to parent the curve to the rig. First the curve doesn’t translate with the rig, in fact the first bone of the tail that is affected by the spline IK modifier, stopped translate with the rest of the rig and detached, staying with its position with the curve. Second when I parent the curve to the first bone of the tail and then go into edit mode for the curve and try to manipulate the handle of the curve it just spins the entire thing curve and bones around on that handles section. And when I try to fix it by ctrl+Z it doesn’t reverse the rotation until I unparent the curve from the rig. How do I parent the curve to the rig so it translates and rotates with it?

It sounds like you have two problems. First, a curve cannot be controlled directly by an armature the way that a mesh can. That’s why it stays in place until you actually parent it directly to a specific bone. Second, curves/armature combos frequently have dependency loops, which causes Blender to make things spin out of control and not update correctly even when you hit ctrl-Z.

To control a curve, you need to use hooks. Create a hook modifier for your curve, assign your rig and the particular bone in your rig, then enter edit mode on your curve, and assign appropriate controls/handles to that hook, then reset the hook. Repeat as necessary for multiple hooks.

If you’re trying to use spline IK, you have to be careful of dependency problems, at least in 2.79. (I’ve been told that 2.8 has solutions to this, but I haven’t tested it out.) You can’t go armature1->curve->armature1. Since you probably want your curve parented to a root bone, that means that you need to separate out (at least) the spline IK bones to a new armature, so that you instead go armature1->curve->armature2.

Spline IK is not the only way to control a mesh from a curve, btw. There are other techniques (like a curve modifier) that won’t create dependency problems. But they have their own idiosyncracies too… (Like, you don’t want to use a hook to control the first control point of a curve when you’re using it for a curve modifier…)

1 Like

This solved my issue, thank you!
I have one question, why do I need to “reset” the hook after assigning it?
When I only assigned it it didn’t work, when I first assigned and then reset it work perfectly, could you explain me what is the reason for this?

Well, first, this is a very old post, and a lot of stuff has changed since then. Particularly, dependency problems involving armatures and curves have been completely sorted out.

When you create a hook modifier, you’re creating a relationship between the target of the hook and the hooked controls and/or handles. Could Blender establish this relationship at time of creation of the hook? It could. Does it? I don’t know, I haven’t played around with it, maybe it does now, maybe it doesn’t. But if it doesn’t create an intelligent relationship at the time of hook creation, just fills in that relationship with an identity matrix, then you need to tell it, “Hey, the hooker and the hookee should have this particular spatial relationship.” You do that by resetting.

It’s very similar to use of a child-of constraint. The child-of constraint requires that there be an “inverse” matrix created to establish the spatial relationship between the parent-of and the child-of. Used to be, Blender did not create this relationship automatically, and you had to set the inverse in whatever relationship you wanted. Since then, I believe Blender has started doing this automatically at the time of creation of the child-of constraint. Why was it like it was originally? Because somebody didn’t feel like coding any more that day, or because they wanted to work on some other problem, and figured it wasn’t too much trouble for users to hit a button. Why did it get changed? Because somebody got tired of hitting that button.

But my memory isn’t perfect, and I don’t always keep up to date with every small change in Blender. I could be misremembering some stuff.

2 Likes