Combining Spline Armature with Regular Armature messes with positioning

I’m trying to combine two armatures together (each of which already has animation actions on them). I’m trying to combine a rig with a body and legs to the rig for it’s arms together. So I was wondering might there be any way to combine a Spline IK Armature with another armature while keeping its current animations & without it deforming?

The answer is, probably, but there are a lot of details missing from the question. Do you have a file that you can share? With animations?

(Except, “without it deforming” doesn’t really make sense. In 3D-land, “deform” doesn’t mean it changes shape in an ugly way, it only means that it changes shape. Just like we have a “mesh deform” modifier, we could talk about skeletal animation as “armature deformation.” Ugliness, like beauty, is in the eye of the beholder. So without it deforming? No, you can’t armature deform a mesh without it deforming.)

1 Like

Currently, Blender doesn’t possess settings for Adjust Last Operation Region, when using the Join Operator. Because of this fact, certain Armature Object’s features (such as their Origins and certain Targets for Bone Constraints in their Bones) cannot be preserved from each of the Armature Object that is being combined (Joined): the Active element in the Multi-Selection of Armature Objects, will just override some Data in detriment of the original Data from the other combining (Joining) Armature Object(s).

So, whenever we are Joining Armature Objects, we must be aware of what we are overriding. For example, a Spline IK Bone Constraint in an Armature Object is one case in which, if that Data is overrode, I know that their Targets will get screwed up (I don’t remember 100%, but I think Hook Modifiers from a Mesh Objects will also be affected, since the Armature Object they were previously Targeting exists no more); these disruptions to the Spline IK Rigs are reversible, but can be annoying to fix —since must Re-Target stuff, one by one. To save time, it might be better if that Armature Object containing the Spline IK Rig(s) would be the Active element in the Multi-Selection, prior to using Join Operator for the 2 different Armature Objects; however, that would mean that, on one hand, even though we can preserve a Spline IK Rig from the Active Armature Object, on another hand that would still override some features from the other Armature Object(s).

What would happen to the Key Frames remains a mystery for me though. I can only theoretically assume, at the present moment, Key Frames are bound to their specific manipulated Bones. So, if Joining Armature Objects doesn’t Delete/Dissolve/merge/destroy Bones, then all the Key Frames from both Armature Objects should be preserved (on a Bone-basis)… however, this is just a ‘backup’, as 3D Animation adaptation might have to be done in a specialized way —like manually.

Hope this helps.

Ohh I’m sorry, I should have been more clear. I meant like whenever I try to combine my spline IK Armature with my body armature the meshes from the arms/hands move away from the armature and reset their scale/rotation/location. Maybe I should have said they don’t get retarget to the new armature if that makes any sense.

I do have the file though: https://drive.google.com/file/d/17ltkFehI_aP9mCQjNXDIIwpurz4K4PcK/view?usp=sharing

Looking at the file:

This would be a lot, lot easier if you had a bunch of objects with applied transforms, and if your curve was hooked to bone parented empties rather than to an armature. 2 things happen when you join one armature to another:

  1. An object can only have one set of transforms, so the transforms on one armature get replaced with the transforms of the object it joins; this can screw up relationships that depend on those transforms;
  2. Your curves are controlled by hook modifiers that target bones; when you join armatures, the targets of those modifiers disappear, because the armature they referenced no longer exists.

In addition to all that, it looks like you’re trying to join these armatures in a posed position, rather than their rest position, but I’m not totally sure that’s your intention.

So, to join, you need to first:

  1. Possibly, apply modifiers on your curve objects.
  2. Replace the hook targets with empties in appropriate places.
  3. Unparent, with “keep transform”, all objects from your armatures.
  4. Possibly, enter pose mode on armatures and “apply selected as rest pose” for any bones for which you want this to be the rest pose rather than the posed pose.
  5. Preferably, apply scale and rotation on all armatures at this point.
  6. Join your armatures.
  7. Preferably, try to figure out a way to apply rotation and scale on your curve-deformed meshes. Because these have arrays and curve modifiers, this will require adjustments to those modifiers (deform axis, relative offset), and will probably require some adjustment in edit mode.
  8. Reparent your objects (and your new, hook-target empties) to appropriate bones as needed, or to the armature as a whole for armature deformed objects.

Really, it’s just a lot easier when trying to create a character to avoid any kind of object transforms. At least, in general.

1 Like

I wound up trying to do as you said you said and I got pretty far, however can’t manage to get the scale to work like this (at least as far as I can see)

Might it be possible to export the two different together separately instead of combining the armatures? Like exporting them as one FBX animation instead of two separate armatures? My end intention is to wind up using it for a game engine (Unity).

What you’re doing isn’t exportable, regardless of whether you combine the armatures or not. You’re using live array and curve modifiers.

1 Like

If I applied the array shouldn’t it be exportable? Since, if I were to make those instances of the array modifier real it should be A-Okay for exporting, as long as I bake the poses or keyframes from the curve modifier into the mesh/armature when baking the animation

No, I’m sorry. If you apply the array modifier, then it will no longer adjust the count to fit the length of the curve. If you apply the curve modifier, it will no longer move with changes to the curve. When people talk about baking animations, they are talking about something different than what you are doing.

1 Like

Thank you for all the help so far I really appreciate it. Might there be any way you could see something like this working out? My idea is to have the hands stuffed in the backpack and then come out of it like a magic hat (like a space seemingly too small to hold the arms inside), to support my character. This is currently my 6th iteration of this design

Yes, there are ways to make it work, but you need to set it up in whatever you’re importing into, not in Blender. This could range from multiple objects, where you control per-object visibility in the rendering engine, or a transparency shader, where you tell the engine what parts of faces to draw, or even going so far as implementing array and curve functions-- but all of that has to be done in the engine you import it into.

As a general rule, if you want stuff to export, the only modifier you should ever be using is an armature modifier.

1 Like

What do you mean set it up in whatever I’m importing it into? I think I might try recreating what I have so far with one of my older rigs. Specifically for an IK

You can’t export splines, curves, or arrays into Unity. Only your armature will survive the export

Wait, couldn’t I somehow have bones on another armature follow and copy the location/rotation/scale of the bones on the spline IK armatures with the new armature?

I’m watching a tutorial video where they do something similar where the use regular bones and copy the transforms of bendy bones: https://www.youtube.com/watch?v=lBXFJA6UdaI

You could, but you’re not directly following the curve in that case, and you’re certainly not changing the instance count as the curve changes length. Basically, that’s not how you have your file set up; if you want to do that, despite the fact that it won’t be the exact same thing as what you’re doing, then set that up instead.

1 Like