I want to make a piston with offset pivot point.

enter image description here

The idea is that the armature 1 should rotate following the armature 2 in the X and Y axes without bending between bones B1 and B2 using damped track constraint or something like that.

i've tried it with IK and copy rotation, but I didn't go well. Are there any other ways to achieve that?

EDIT: I attached the file


1 Answer 1


Here's how I understand the problem, starting with a picture of labeled points:

enter image description here

Given those points:

  1. BC should not rotate relative to AB in any pose.

  2. BC should point at E in all poses.

  3. DE should point at B in all poses.

  4. We control from the position of A and E (and F, but F doesn't really matter for anything here.)

  5. All bones shown maintain their rest poses lengths, but the distance between C and D can change.

We can do that with IK.

Shown here at rest on left, pose on right:

enter image description here

Notice hierarchy on outliner. We've added an additional bone, "ik3", parented to BC. It targets EF with an IK constraint 3 bones long, with stretch enabled. On the bone's IK settings, it is locked in all axes but Y, with 1.0 stretch enabled for it:

enter image description here

(and really, it doesn't matter if its locked or not in Y in this case, that's just a general thing for other problems of this nature.)

Bone BC, meanwhile, has all axes locked for purposes of its IK, in order to maintain its relationship with AB. Neither AB not BC have stretch enabled.

We haven't yet met our third rule, that D points at B, but that's a simple matter:

enter image description here

A damped track constraint solves it nicely, although depending on your mesh, you may wish to use a combination of locked tracks instead.

Edit: BTW, I'm doing everything here with bones in a single armature, which is, believe me, a much more convenient way to rig than to have a bunch of single bone armatures. Sometimes, you can use objects, or single bone armatures, to do the same things as bones, even though it's much less convenient; but here, you just can't run IK except with bone constraints, and the chained bones need to all be part of the same armature. This isn't something inherent to IK, just a Blender limitation.

Ed2: Maybe worth noting that this rig can be streamlined--- since BC never changes relative to AB, these can be combined into a single bone AC. Doing so would, maybe, shave a few nanonseconds off calculation time, at the cost, maybe, of making it a little harder to understand what's happening.

  • $\begingroup$ yes!!! that's exactly what i needed. who would have thought that such an easy goal has such a tricky solution. thanks a lot, Nathan, you're my savior! $\endgroup$ Commented Nov 23, 2023 at 19:05

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .