Rigging a mechanical model with joints at odd angles

I’m working on a clockwork wyvern for a portfolio piece, and in my excitement to get to the fun stuff like texturing and maps, I jumped the gun, and now that I’ve started to test rigging, I’ve run into a bit of an issue:



Both the wings and legs sit at a slight angle, but with the exception of a few parts like the shoulders and wing joints, the joints should all rotate on one axis only. I’m having a problem getting this to look right. For instance, here’s what the elbow joint looks like at a resting/default pose:

And here’s what it looks like rotated down on the X axis about 60 degrees:


You can see that it’s started to come out of its place slightly, this feels really sloppy and I want to fix it so the joints bend as if it was an actual mechanical hinge joint. How would I accomplish this? I’m still learning the technical side of Blender, but any pointers in the right direction would be hugely appreciated.

I’m thinking since this is mechanical, you don’t need to rig it with an armature. Armatures are great for deformation, but for purely mechanical objects, you can just use object constraints and parenting. The great there is with object constraints you can very specially set which axes are affected, in which space, so if you want your joint to only move on one local axis, object constraint has you covered :slight_smile:

I did consider using parenting instead of a rig. The only parts that would need an actual rig and weight painting are the canvas wing membranes, and even then I’m not 100% on keeping them because I’m worried about texture deformation, but that’s a whole other issue.

I would also like to be able to save poses, which I know I can do with a rig system but I’m not sure if it’s possible with regular old parenting. The final product won’t be animated, but I would like to take several renders of it in different poses.

Sorry, I think I didn’t explain my problem right. I can of course rotate a piece on its origin by hitting R, then constrain it to an axis by hitting X/Y/Z, but because the mesh is slightly tilted to begin with, when I rotate it that way it produces that problem I showed in the fourth picture. Is there a way to sort of…tilt a mesh’s origin so it better matches the mesh?

That’s a locked track constraint. Or using rotational transform locks. Or, for IK, Y locked IK axes.

If it’s been rotated in only a single axis, then this is just about getting proper axes. If you have an actual axis modeled, then you can use cursor snapping to snap the bone origin to the median point of two ends of the axis, and then recalculate roll to point the bone’s +Z axis at one end of the axis.

If you wanted an example of how I would set the axes for a specific bone, and you link a file with a mesh that demonstrates the axis of rotation and a pair of bones, I’d be happy to demonstrate.

I am a believer in doing this with bones, mostly because it is so much easier to control the axes of bones-- you can set specific rest axes more easily and precisely than you can “affect only origins” with objects, you can use pose mode or constraints to set them and then set pose as rest, and of course there are a few constraints that you can use on bones that you can’t on objects.

2 Likes

@bandages is correct, you can fix all these issues with the proper constraints. I noticed, however, that you said you’re still learning the technical side of Blender, and it occurs to me that this all may be a bit beyond your current skill level. I don’t mean that as a bad thing, I’m just thinking that maybe these suggestions aren’t very helpful because you don’t understand precisely how to do them :slight_smile:

It’s a bit tricky to provide an example file that will fit your use case exactly, but if you want, you can send me your blend file or upload it here and I will throw some constraints on it to show you how you can approach this :slight_smile:

1 Like

I will admit, it makes my eyes glaze over a bit, but I’m trying to treat it as a learning experience xD

I’ve attached a blend file with the wing rigged up, with a couple test poses. It’s not super noticeable, but I figure it will be when I try to rig the legs, so I want to fix it before it becomes a serious problem.
clockworkdragon_wingtest.blend (2.4 MB)
I haven’t shared files on here before, so if I need to fix anything, let me know. Tagging @bandages as well in case they wanted to take a crack at it.

Looks great. We see nice defined axes on the mesh. We’ll start by entering edit and selecting two central, symmetrical verts on either side of the axis, then shift-s snap cursor to selected:

We’ll select our bone’s head and shift s snap it to cursor.

We’ll repeat the process for an appropriate place for the bone tail. So you can see which vertices I selected:

Now we’ll select one vertex on the side of our first axis and snap the cursor to it:

Select the whole bone in edit and recalculate roll to cursor:

Renormalize roll is ctrl n for me, but IIRC that’s one where it depends on your startup interface choices.

Now when we rotate the bone in its local Z axis, we can see how nicely it rotates:

Z isn’t usually people’s first choice for rotation axis, but it’s fine, it’s just what the recalculate roll operation does. If you make this bone an Euler, make sure to make it a ZXY or ZYX. If you want it to be X, you can add 90 degrees to the roll of the bone in edit. You can do math straight in the roll field, so you can just type +90 at the end and hit enter.

If we ever move the head or tail of the bone in edit, we may have to recalculate roll again, which is why I placed the tail first.

3 Likes

Thank you!! I think this is exactly what I needed. I might resurrect this thread if I have problems with the legs, but I should be able to set them up the same way.

1 Like