I'm trying to rig a telescopic model. I'd like the segments to deploy "one at a time" (like at 38s here), such the the first segment is almost completely out before the second segment starts moving, and so on.

So far, I've tried assigning a bone per segment, then setting their parent to a big bone which has a "Stretch To" constraint; the constraints target is a a bone that I can use for posing:

enter image description here

With this rig, the segments of the telescope deploy linearly as a group:

enter image description here

Is there and alternate rigging method I could use which gives me control over how the the individual segments relate to each other?


3 Answers 3


It's actually rather simple to achieve this with Transformation constraints. The key is that your reference of where to get the target transformations from is not a helper bone, but the end bone (the last element) of your telescope. You can check out this blend file here:

Move the bone Segment.1 along the Y axis (I've locked the other axes anyways) to see the effect. It should be exactly what you can see in this little animation here:


Please note that I've made the size of each segment slightly different, so you can see what you're doing when the rig is fully compressed. The transformations I'm referring to however are in this example always constant distances of 0.3. You'll see soon that you're absolutely free as of what distances each segment has though.

Start with creating the armature, and then the segment bones in Edit Mode. Make sure that all segment bones are within the same location, that means you're 'modelling' the compressed state of your rig now. Then parent each segment to a main bone to be able to move the rig around later. Do not create parent/child relationships between the segments themselves.

The rig at this point looks something like this (without constraints yet, we add them in the next step):


Now, select the 'tip' bone (the one which you will transform when animating the rig), in my case that's Segment.1, and then Shift select the first bone that should follow with a delay, that's Segment.2, and press Ctrl + Shift + C to bring up the Constrains menu. Choose Transformation from there. On the child bone, You should see something like this now in the bone constraints tab:

Constraint setup

You have a Source section, a Destination section, and a Transform Space section. Transform Space needs to be local in this example, so we want to read and set the bone channels in their own local space. Important are now the Source and Destination fields. On the source and the destination, we tell Blender to check for a Location. Then, we fill in the field for the Y-axis. Min and Max that is. We do the same for the destination. The values in the screenshot now tell Blender the following:

If the user moves the tip bone, and the local Y value of the tip bone is inbetween 0.3 and 1.2, move the destination bone inbetween 0.0 and 0.9.

That means, you need to translate the source bone to local 0.3 in Y first, before the Transformation constraint does anything at all. Then, while inbetween 0.3 and 1.2, it translates the child bone from 0.0 to 0.9. Why these values? Each segment has a length of 0.3. So that's the lower travel boundary for the first bone. The target value for the second segment therefore has to be TranslationMaxOfTip - LengthOfBone. For the next segment, the constraint is the same (we stil reference the tip bone), but we have to move the bone only if the tip is inbetween 0.6 and 1.2, and from 0.0 to 0.6. Do this for all succeeding bones, same constraint, just altering the limits.

Your values will be different, but the concept is the same.


You may try shape keys, there's Relative to there. And use Dope Sheet in the Shape Keys Editor Mode.

  • $\begingroup$ Could you clarify a bit? I suppose there will be one shape key per telescoping segment? Won't that be trick to animate? $\endgroup$
    – ajwood
    Aug 31, 2017 at 22:10
  • $\begingroup$ You suppose right, a key per element. Yes, shape keys, like rigging, are a way to animate. But shape keys, thanks to dope sheet, allow you to start the next thing before the previous one is done. $\endgroup$ Aug 31, 2017 at 22:59

use a limit distance constrain on the parts (might work even without bones).

create 2

  • create 2 cubes or so
  • select one cube in object mode
  • From the right bottom screen go to wrench icon tab.
  • Add object constraint
  • under transform its the 2nd column select limit distance
  • for target select the other cube (by default takes current distance from each)
  • now move the other cube
  • add as many cubes with distance limits to the tail as you want

  • notice the reset button on this constrain it resets the distance to current distance of the objects

  • $\begingroup$ I don't think this will work. I want the final position of the pieces to be the same as I already have them; What I want to change is the dynamics of how/when they arrive in their final resting place. $\endgroup$
    – ajwood
    Aug 31, 2017 at 15:36
  • $\begingroup$ @ajwood this will work, either using object constraints or bone constraints. Start at the collapsed position and add a limit distance so that the object stays no more than x from the preceding object, repeat for each. As the first moves out at the limit the next will start moving, as that moves out the next will start moving. Adjust the distance size to get them move at the right time. Here's a sample using bone constraints. $\endgroup$
    – sambler
    Sep 2, 2017 at 6:17
  • $\begingroup$ @sambler very cool! Do you think this method would still work if I wanted to reverse the order that the segments are extended? I'd like the 1st piece (the biggest one, closest to the base), to come out first,then the next one and so on. i.sstatic.net/DMYFg.gif $\endgroup$
    – ajwood
    Sep 2, 2017 at 15:22
  • $\begingroup$ you might animate that, if you use bones to pin against, as bones have a hierarchy moving in earlier bone would just move all later bones with it. $\endgroup$
    – Peter
    Sep 4, 2017 at 6:35

You must log in to answer this question.

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