I have 10 bones inside a cylinder so the cylinder can bend, like an elephant nose or octopus leg. However, when I rotate a higher bone, eg bone 5, the children bones stretch or get longer. How do I turn this off, so bones keep the same length when higher bones are rotated?

Edit: adding screenshots: Here is a screenshot. It is a cylinder, I used extrude so it would have several sections of vertices, and it has 7 bones in it (the cylinder has the Armature as parent.) I added a cube to show the stretching, it also has the armature as parent with Automatic Weights.

After rotating bone 4, the cube is stretched, and it looks like the bones after bone 4 are stretched too.

enter image description here

What I'd like to do is have the rotation applied, the further down children bones keep their length and not stretch, and for the cube to point in the direction of rotation as it does now, but not stretch the cube.

I've uploaded my blender file, named as "bendAndScale.blend". I'm sure it's some constraint, I tried to add one but couldn't figure it out. Thanks in advance for the help.

  • $\begingroup$ Welcome! This sounds like you have some scaling issues on some of your objects, but to be sure, it would help us if you provided an example blend file demonstrating the problem. You can upload a blend for your question here: blend-exchange.giantcowfilms.com $\endgroup$ – Italic_ Jul 3 '16 at 2:35
  • $\begingroup$ Thank you for the welcome. I've uploaded my blender file, and added a screenshot to show what is happening. $\endgroup$ – d l Jul 3 '16 at 17:46

The Problem

As I suspected, this is a scaling problem. The bones distort because you have non-uniform scaling on your armature object. Select your armature object (not a bone in pose mode) and look at the scale values in the transform properties. The object is scaled by 0.5 on the Z axis. With non-uniform scaling, any transformation done in a space influenced by this object's scaling will appear distorted. In an armature's case, bones in pose mode will be distorted by the object's scale. Likewise with other objects, if you have a cube parented to an empty, the empty's scaling will affect the cube's transforms. This is all because transform "space" is inherited from parent objects. A good explanation is in Nathan Vegdahl's Humane Rigging course.

The Solution

You need to apply the scale transformation on the armature object. With the armature object selected, press Ctrl+A and choose Scale. The appearance of the bones will change (some axes look like they scale), but the overall function should remain the same. For the sake of cleanliness, I would apply rotation as well. Before applying any transforms, it would be a good idea to unbind and unparent any objects influenced by the armature. This will keep them from being influenced by the transform application and keep their position in 3D space.

For the future, it is best to always leave your armature scaling and rotation unchanged, for this exact reason. To change the size of the bones, it's best to edit the armature in edit mode, or if you're doing animation, scale the bones in pose mode instead.

Non-uniform scaling

Apply scale

  • $\begingroup$ Thank you -- worked perfectly to solve the problem, and the detailed explanation and tips are very helpful !! $\endgroup$ – d l Jul 4 '16 at 1:22

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.