"Child of" constraint causing issues

So I have two rigs. One is used to animate a multi mesh model (no deformation).


However, because its generated by a plugin that uses it to output the animation to a non standard format, I cant modify the bones. As such I have made a second rig

and set every bone of the first rig to be a child of the equivalent bone in the second rig using “Child of” bone constants. However, while this positions the mesh that is attached to the bone perfectly, any bones that are below that bone behave rather oddly.

Though if I set the bones back to there default position it works fine.

Anyone have any idea why this would be happening, and more importantly, how to get it to not happen? Any thoughts are much appreciated. You can fine the file attachedAnimation.blend (2.7 MB)

Each of your child bones is doing two things, in order:

  1. It is inheriting its parents transformation;
  2. It is inheriting the transformation of the target of the child-of.

These add together to form the final transform. So each of your bones is double dipping on its parentage. Look at what happens when you unparent one of these bones.

If you can unparent the bones, unparent the bones. That’s the simplest solution. There may be some constraint magic you can do to fix it that is simpler than what I’m about to suggest.

But what I’d do is to use a copy transforms rather than a child-of. You need to copy world space transforms, meaning that you need to copy from bones in the same place, in the same orientations. Delete all constraints. Duplicate _Rig. Join your duplicate to _Rig.001. Parent bones that came from _Rig to appropriate bones in _Rig.001. For instance, your new Left Hand bone gets parented to your old Left Hand bone. Your old Left Hand bone remains parented to your Left Forearm bone.

Now go back to _Rig. Give every bone a copy transforms constraint, in world space, targeting its counterpart in _Rig.001. By counterpart, I don’t mean the current counterparts, but the new bones you just added. Because those are the bones in the exact same positions and orientations as the bones you’re constraining.

Now, if you try it out, you’ll find it works. I tested it out really quickly, on just three arm bones, rather than doing everything.

I was guessing something similar, however I was unable to test it (the parent box is greyed out and when I highlight over it I get “Disabled: This property is for internal use only and can’t be edited” (which I presume has to do with the plugin I am using)).

I was using copy transforms initially but that was messing up because the joints dont start in the same position. However your idea of making replica of the bones from _rig and inserting them into the new rig should get around that. This unfortunately is going to make a mess of the rig, but I should just be able to hid the in between bones.

Thanks so much for your help.

Probably because you’re in pose mode. It will only let you unparent in edit mode. There are kind of lot of things that are irritatingly restricted in either mode (really wish I could deal with constraints in edit, for example, and I don’t see any reason why they decided not to let me.)

And I am a idiot. Fortunately I hadn’t done much before reading this. Hopefully that wont break the import and I don’t have to to try and keep track of two rigs that are in the exact same position. Again, thank you, you have saved me and my animator a butt tone of time and effort.