Giving a bone two targets / creating a symmetric bone

I followed this great tutorial to create a rigged spring. To use the spring in an animation I extended the rig by adding the typical “rings” at the ends of the spring (which are really just two or three turns of the coil bent sideways). Additionally I added some handling-object to the target- and footbone to make them spring easier controllable.

It works quite nice, as long as you have a fixed point for the bottom of the spring to attach it to. So one end of the spring needs to have a static, fixed position. I can attach the other end to anything I like, and the spring will stretch just as it should, but if I move the bottom end the whole spring will move. What I really want is a spring where I can attach both ends to whatever I like, and the spring will stretch automaticly in between. So basicly the stretchbone would need to be symmetrical, and have two targets. Has anyone got an idea if/how this can be achieved?


spring5.blend (288 KB)

Hey Forrest,

Thanks for the link! That is a very nice spring!

In order to get the behaviour you want there is only a very tiny change to make to your present setup - just select the bone “target” and clear the parent. Now the root can be moved anywhere, and the spring will continue to point at the target bone, which will stay in place.

I would also recommend removing the “child of” constraint on the ‘target’ bone which is locking it to the hook. It causes a problem when attempting to clear the transforms. It will be much easier to animate if the bones are the controls because you can easily clear the bones back to their ‘home’ position, which you can’t do with hooks. When you remove the constraint the whole thing will collapse, but just press “w->clear transforms” to set it back to the default position. The root and target bones are now your controls, so you can delete the top and bottom empties and also clear the “child of” constraint from the ‘root’ in the same way.

Also another suggestion, you can turn down the DefResolU value to about 3 or 4 for both the spring curve and the bevel object, and turn up the RenResolU value below it to your desired render resolution. This will make the display resolution low, and the render resolution high which should make it a little easier to work with :slight_smile:

Very nice use of the “limit scale” by the way! I hadn’t thought of using it to counter the stretch-to influence of the child bones…

Thanks a ton for the hints and compliments.

The limit-scale has its dark sideeffects anyway: if you scale the spring the constraint will prevent the endrings from scaling along with the rest. I have thought about playing around with using another bone used just for scaling the whole spring and then just copying the scale via constraint to both ring-scaling bones?
Anyway, I put in the empties because bones are still suspicious to me (I just started rigging), and I can link the empties easily to any animated mesh without entering pose-mode.
Thanks for the tip about RenResuIU/DefResIU as well… I never noticed this option. Funny.

ah okay, yeah if you’re attaching the ends onto an object then hooks will work better. If you were animating the ends by hand, then it would be better to use bones.

Something else I recently learned is that the little ‘s’ in the bone options next to ‘deform’ will also prevent the child from inheriting scale from the parent…

I imagine you are talking about scaling the whole spring evenly to match the scale to the scene? With the empties on it you will need to go to object mode, select the armature and the 2 empty controllers, then scale it all together.

Yeah, i use the springs attached to parts of a model-train which is already animated using ipo-keys. Works perfectly now.

Cool, so I can just kick out the size-constraint alltogether! I tested it immediately, and it works!

Yes, that’s what I mean. But no matter what I select (I tried selecting the armature and the endpoints, like you suggested, I tried selecting everything including the spring) the size-constraint always fixes the size of the endrings to stay constantly the same. everything else scales accordingly, and the position of the rings scales along, the size however stays exactly the same and would have to be adjusted accordingly by entering the right values in the size-constraint.

This ist fixed using the s you mentioned, because the size constraint is not needed any more then. I attached the new, perfect version of the spring!

The scene includes the setup of the tutorial it’s all based on, a fully rigged version of a tight spring (be careful because of moirè-effects when rendering!) a slightly wider version I found working best for my case and a non-rigged version of the spring with the working rig extra for easy editing (e.g. if you need a very long / very short /very slim version of the spring.) You’ll heve to re-set the hooks following the tutorial if you edit the number of vertices in the spring-curve. Don’t forget you can also edit the wire-thickness with the loft labeled “spring-thickness” on layer 1.
Happy blending!


spring6.blend (288 KB)