Joining 2 armatures into one

OK, I have a mechanical landing gear set up for the left side of a model controlled by an armature. The easiest way to dupicate it and mirror it to the right side is to select both the armature and the meshes in object mode and duplicate/rotate them to get the other side. When I do that, I get a second armature. Is there an easy way to combine the 2 armatures?

All the meshes are parented to seperate bones in the armature. Duplicating in edit mode, so I don’t create a seperate armature requires me to re-parent everything and every other way I’ve tried seems like a ton of work. Also, after duplicating teh mesh/armature, I need to move them into position with the main model mesh… Is there an easy way to do this???

Randy

Attachments

AirCar6sample.blend (361 KB)

Actually, that isn’t the easiest way. Easiest way to to duplicate it, mirror on the X axis, and then flip_names.

  • Make left side. I always append a .L to my bones… ie Shoulder.L, Arm.L, hand.L, etc…
  • Select all bones you want mirrored.
  • Duplicate the bones (Shift-D. Then hit Escape.)
  • Switch to using 3D Cursor Pivot point. (hit the period)
  • Hit Shift-C to center it.
  • Mirror it using CTRL-M (look at bottom left hand corner and you see you have an option of axis. Choose X by hitting the X Key)
  • Now click to deselect
  • While new bones are selected, hit the ‘W’ key.
  • Choose “Flip Names Option” and your bones are renamed.

Did not know about the shift+c shortcut… awesome :slight_smile:

You learn something new everyday!

MarkJoel60,

It’s not quite that simple, maybe I made is sound that way, but it’s not. I don’t need to just mirror the armature, I need to mirror the armature and all the meshes that are parented to the individual bones of the armature. Think of it as creating a 3 legged mech, you just created one leg’s meshes and bones. Say the left-back leg, now you want to just duplicate the right-back leg, and the front central leg. The left and right legs can share the same center point, but the front leg needs to be offset quite a bit forward, as I said, this is the landing gear for an aircraft.

Even when I duplicate the mesh and armatures as objects, the parenting is not carried over to the duplicate and the actions used in an action constraint do not get duplicated.

I guess you could say, I was looking for a quick and dirty way of duplicating everything so I have 3 copies without having to redo the parenting of meshes to bones and re-keying the actions…

dunno…
Thanks for the help,
Randy

OK… I’m trying to follow…

You have a leg Mesh. You create an armature for it. Now you want to recreate all of it – Mesh plus armature to make a second leg? (which in return makes a second armature?)

I guess you could simply have more than one armature…

I don’t know of a way of moving all bones from one armature to another. So, I think that workflow won’t work in Blender.

And maybe it is too late… but why not create the full mesh first, then rig it?

I don’t think there is another approach to it. But others know Blender’s inners better than I do. IIRC, I asked about copying bones from one rig to another before, and was told it can’t be done. Which is to say it isn’t built in. Anything can be done in scripting (conceivably). But it would probably take less time to recreate the leg, I think.

The biggest problem here is your armature is not centered. It is crucial that before beginning any rig always press alt+G/S/R in object mode to clear all transforms on the rig. Crucial :slight_smile: Did I mention it was crucial because it is very crucial :smiley:

In short: the center of your armature is not in the center, so the mirror point is not in the center.

Aside from that, you are also witnessing exactly why I never use ‘parent to bone’ for anything in a rig anymore (nope, not even the eyes). The armature is essentially a deformer, and it works best if it is manipulating the mesh through vertex groups. Mirroring and mesh management is far easier that way. Meshes can remain separated within the same object, so there isn’t a reason that I am aware of not to do this. **well perhaps when you have many complex overlapping meshes then it is good to have them separate - like clothing.

In order to mirror this I would suggest first joining the whole mesh into one. Then re-assign each part to the proper bone using vgroups. Just tab into edit mode, hover over a part, press ‘L’ >> ctrl+g to group it, then name the group as the bone name. And apply an armature modifier to the object of course :slight_smile:

Once it is an object you can simply mirror it with the mirror modifier and all the vertex groups will be intact. You will have to manually create empty groups with the opposite side name for the mirror to deform asymmetrically.

However, I’m actually having trouble with your rig…

I’m afraid I must not have looked closely enough at it when you first asked me (sorry about that :o). I didn’t realize you were using the action constraint to correct the tilt! I had assumed it was entirely constraint based. The action constraint will not mirror (although the animation can be manually transferred over using the mirror-pose function, quite easily). But I wouldn’t suggest using the action constraint as a way to correct a mechanical rig.

I have taken the time to create a working version as I have mentioned. Found a new solution for the rig, although a bit of a hack because I used the stretch-to constraint for the upper arm, heh heh. There is a simple trick for re-centering an armature which I will cover in my video… thanks for reminding me of several issues I need to cover in my tutorials :slight_smile: In fact, would you mind if I used this in the video and showed how to fix it? It perfectly sums up why it is so important to clear transforms before beginning :wink:

@MarkJoel60
Bones can be extracted from an armature with ctrl+alt+p and then joined into the other armature in object mode with ctrl+j. It’s not perfect, but it often works :slight_smile:

Attachments

AirCar6_tinker.blend (477 KB)

OK, I was looking for a quick and easy fix, didn’t find one. I did things the long way. I un parented the mesh from the armature. Did FGC’s crucial :smiley: step of setting the armature’s center to the mesh’s center. Duplicated all the mesh’s parts and positioned them on the other side. Duplicated all the armature bones and mirrored them over as well. Positioned the meshes to their final location, and the bones as well. Parented the meshes to the bones. Then recreated the action for the action constraint.

I liked the stretch to constraint over the action constraint as a good quick fix, but it’s not mechanically possible for a arm on landing gear to stretch. Plus the action constraint limits the mechanical movement.

I created the landing gear and rigged it in the front view that way everything was created squarely along the x-axis, but in the end, the gear needed to be rotated 30 degrees along the z-axis. I’ve included a pic to show what I mean. I dunno if there would have been an easier way of doing this to accomplish what I wanted.

A couple of things I learned:

  1. Armatures can be joined in object mode with Ctrl-J.
  2. When I duplicated the armatures in object mode and rotated them, it seemed to mess with the bone roll of some of the bones. (this is why, in the end, I scraped this idea)
  3. Better planning would have helped. I never thought about centering the armature with the main mesh, I only created the armature for the landing gear. I didn’t know the problems I would encounter later with duplication and positioning.
    And most importantly:
  4. Static landing gear like a simple toy helicopter has would have been so much easier to make :evilgrin:

Anyhow, I’ve included a bottom view of the finished landing gear, to show the angles and a render of it all. It was a pain in the butt, but I do like the final render of it.

Thanks for the help guys!
Randy

Attachments



Been playing with this a bit. To get the front landing gear to work right, I needed to redesign the armature. I needed to follow FGC’s example using the stretch to constraint. I worked at tearing apart his example, but didn’t quite follow everything. So I worked on a rig I did understand, my own… it appears to work and uses the stretch to constraint, but in the end it will still be controlled by action constraints to maintain the same movement and limits of the bones.

This may change, as this is all a WIP sort of thing…

Randy

Attachments

AirCar7a.blend (130 KB)

Well there is nothing inherently wrong with using the action constraint. It just depends on how you use it. In the first file the action constraint was used to position control bone at just the right position so it looked straight. And it looks good, but it creates the potential to be just slightly askew. If I grab the bone and move it a little farther left or right the bones start to bend, which suggests that they are already doing this at a very small scale.

And yea, the stretch-to is just a hack I had to resort to in creating an all-constraint version of the setup. I am interested to see what design you figure out… remember it can be useful to look at the movement of the real deal to get ideas of how to solve for it. :slight_smile:

Actually, a simple way you could be accurate with the action constraint would be to parent a null bone to the top ‘Link’ bone, so it follows along in a straight line. Then extrude another dummy bone off of that one. What that will then enable you to do is snap the cursor to the position of the second null bone in pose mode (the true position the control bone should be in), and snap the control bone to the cursor :slight_smile: Then key.

**actually this still isn’t perfect because of the angle of rotation… I’ll keep thinking lol