I've been attempting to rig a telescopic piston, but having some problems getting it to fully work as I want.

How I rig a regular piston:

enter image description here

Two bones for each end, Ctrl bone for controlling location and the aim bone for rotation, aiming at the opposite Ctrl bone. Aim is parented to Ctrl, kept offset. Pretty straight forward and works nicely.

In motion here

Simple synchronized telescopic piston:

enter image description here

This is essentially a copy of the previous version, only with the mid section added. It is using two copy location constraints to keep it in the middle of the top and bot bones. And a damped track constraint to keep it aligned correctly.

enter image description here

Video of it here Now this method works and it's easy to add more sections to it by just duplicating the middle bone and tweaking the second copy location constraint.

But I would like to make a "regular" hydraulic telescope piston, with the different segments being pulled out one by one.

Some attempts:

enter image description here enter image description here

Video of it

First attempt, the Center bone is using a damped track to keep it pointing in the right direction and a limit distance constraint to make the top part "pull" it out. It sort of works, but only when moving along one axis, drags behind as soon as the top is moved of axis.

Random manual attempt just to think a bit. One is just animating the objects the other is manually animating the position of the middle part.

Another attempt using the limit distance method. It's a lot of overlapping bones so not the easiest to see. enter image description here In motion here

This one also works along the Z-axis, but falls apart when going any other way.

  • Bone Section_03_Dist is parented to Section_03.
  • Section_03 has distance limited from the top bone(forgot to rename here, bone is named 03 here).
  • Section_02 has distance limited to Section_03_Dist, and Section_01 has its distance limited to Section_02_Dist.

Not sure if this is the best way to go about it, but it almost works and its somewhat oddly satisfying draging the chain around. I just cant figure out how to get them to remain in the correct location when moving away from the Z-axis.


1 Answer 1


So I figured this out while writing the question, so I'm just following up with my solutions here.

Solution for telescopic piston:

The solution was mostly like the last attempt in my post/question, but with the sections/segments parented to the bottom bone and figured I could just remove the _Dist bones I had. Think I was just mostly over complicating things in my head.

enter image description here

First I did was make all the cylinders an equal length. Here each chrome cylinder is 0.6m And make a duplicate where I moved every part to it's retracted position, each section here moves down 0.59.

enter image description here

  • The base/end parts are still made as before, base/end parented to respective _Loc bone with a Damped Track constrained to keep them pointed at each other.

  • The Mid bones are parented to the Base to inherit rotation.

  • Mid_01 has a Limit Distance constraint targeting the root/head of Mid_02.

  • Same with Mid_02 and 03 targeting the next bone.enter image description here

  • Distance is of course set at 0.6 m to match the length of the sections.

Now this setup wont work when rigged in its extended position, it's just a bit easier to set things up when it's extended. So It's just to move everything down in edit mode. Also important to make sure none of the objects are parented to the bones when doing this. And moving corresponding bones/objects the same distance so everything still fits nicely together.

enter image description here

Screenshot showing it in edit mode, pose mode and only the mid sections, can become a bit cumbersome to deal with when there are many overlapping bones and objects.

enter image description here

The Piston_End_Loc bone also has two Limit Distance constraints to keep it from extending/retracting further than the geometry allows. First one tells it that it can't go further than 3.9 m away from the Base_Loc bone. And the other to keep it from getting closer than 0.95 m

Video of it moving

Now this works nicely, but this extends the the inner cylinder first and drags the rest out after it. Going by this video and some others, it seems it should be the other way around(found this just before I was going to post this..).

This is easily fixable by just clearing the parenting on the objects and flipping/rotating the rig around. Then moving the constraints from the Piston_End_Loc bone over to the Base_Loc bone as they have now flipped places(renaming the bones should probably be done if to keep things making sense).

We then finally have a perfectly fine working telescopic piston.

enter image description here

A bit more advanced synchronized telescopic piston:

For the synchronized version I copied over everything except the mid sections. Base and End bones keep all of their constraints.

enter image description here

First I added the _CpyLoc bone to both Base and End, both parented to their respective bones. And moved the Mid bones to the top of the sections, instead of the middle as I did in the first version. This is because I want the top of the cylinders to always remain between the two _CpyLoc bones.

Previously when I copied location from the Base/End bones you would have to awkwardly tweak the position and size of things for them to fit together.

enter image description here

Here I know that there is 5 sections so I can just set the influence on the second Copy Location constraint to 0.2, 0.4, 0.6 and 0.8. I've subtracted a tiny bit to accommodate the bevel/edge of the cylinder.

Video of it here.

And a video of all three variations

enter image description here.

Hope someone finds this useful, and that this somehow makes sense.

Here is my Blender file containing all different versions.


You must log in to answer this question.

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