Squash and stretch: the animation principle and how to apply it in Blender
Short answer
Squash and stretch is the change of shape that gives an animated object weight and flexibility: it flattens on impact and lengthens with speed, while keeping its volume. It is the first of Disney's twelve principles of animation. In Blender, you animate the scale on one axis and let the Maintain Volume constraint compensate the others; Stretch To, Simple Deform and Bendy Bones cover bones and meshes.
- Volume-preserving scale: Object Constraint Properties > Add Object Constraint > Maintain Volume, Free Axis set to the stretch axis.
- Bones aimed at a target: Bone Constraint Properties > Add Bone Constraint > Stretch To, Maintain Volume: XZ.
- Mesh deformation: Modifier Properties > Add Modifier > Deform > Simple Deform, mode Stretch.
- Curved limbs: Bone Properties > Bendy Bones > Segments above 1.
- Timing: Graph Editor, V for handle types, T for interpolation.
Menu names below are checked against the Blender 5.2 manual and source code. The first half explains the principle; the second half builds it in Blender, starting with the bouncing ball.
What is squash and stretch?
Squash and stretch is the deformation of an object as it moves. A rubber ball flattens when it hits the floor and lengthens as it falls; a cheek bulges when a character smiles; a body compresses when it lands from a jump. In animation, exaggerating that change of shape is what tells the viewer that something is soft, heavy or fast. An object that never deforms looks rigid, like a bowling ball, and that is a choice too.
Frank Thomas and Ollie Johnston, two of the key animators of Disney's golden age, put it first among the twelve basic principles of animation in their 1981 book The Illusion of Life: Disney Animation. According to the Wikipedia article on the principle, which cites page 47, the book calls it by far the most important of the twelve. The other eleven include timing, anticipation, slow in and slow out, arcs and exaggeration, which all come back below.
The rule that matters: the volume stays the same
A squashed or stretched object must not seem to change volume, only shape. If a ball stretches vertically, its width, and in 3D its depth, contract to compensate. The usual illustration is a half-filled flour sack, dropped on the floor or pulled by its corners: it changes shape all the time and never gains or loses flour. Break the rule and the object reads as inflating or deflating.
For a 3D object scaled along one axis, the math is simple: multiply the height by s, and divide each of the two other dimensions by the square root of s. A stretch of 1.44 in height gives 0.83 in width and depth; a squash to 0.64 gives 1.25. You will rarely type these numbers yourself, because Blender's Maintain Volume constraint computes exactly this.
How much to squash
The amount tells the material. A rubber ball deforms a lot, a tennis ball a little, a billiard ball not at all. In realistic animation the deformation stays subtle; taken to an extreme, it produces the comic effect of classic cartoons, and styles like rubber hose animation make it deliberately visible. Whatever the amount, the volume rule holds.
The bouncing ball, the classic exercise
The bouncing ball is the simplest squash and stretch exercise, and it was part of the preparatory training of Disney animators. One bounce breaks down into five moments:
- At the top of the arc, the ball is round and moving slowest. Following slow in and slow out, more frames sit near the top than near the floor.
- While falling, it speeds up and stretches along its direction of travel.
- On contact, it squashes against the floor: flatter and wider, for one or two frames.
- Leaving the floor, it stretches again, as fast as it hit.
- Rising, it slows down and returns to round before the top.
Timing gives the weight
Timing is the number of frames an action takes, and it decides how heavy something looks: a light object reacts faster than a heavy one. A ball that spends few frames on the floor feels springy; one that sinks in for longer feels soft. Timing and squash work together, which is why both live on the same curves in Blender. How the frames between two key poses are spaced is covered in the guide to in-betweening.
Squash and stretch in Blender: which tool for what
Blender has no single squash and stretch button. Four tools cover the cases:
| Tool | Where | Best for |
|---|---|---|
| Maintain Volume constraint | Object or Bone Constraint Properties, Transform group | A ball, a prop, a whole character: animate one scale axis, the others follow |
| Stretch To constraint | Object or Bone Constraint Properties, Tracking group | A limb or a neck that stretches towards a control, getting thinner as it lengthens |
| Simple Deform modifier, Stretch mode | Add Modifier > Deform | A mesh that bulges in the middle or tapers, without a rig |
| Bendy Bones | Bone Properties > Bendy Bones | Arms, spines and tails that bend and change thickness along their length |
Rig a bouncing ball, step by step
The trick is the pivot. Scale a sphere from its center and it lifts off the floor as it squashes. Scale it from the point where it touches the floor and it flattens onto it. An empty, an object with no geometry that never renders, makes a good handle for that.
- Add a UV sphere and place it so it rests on the floor. In Edit Mode, select its lowest vertex and use Shift+S > Cursor to Selected: the 3D cursor jumps to the contact point.
- Back in Object Mode, use Add > Empty > Plain Axes. New objects appear at the 3D cursor, so the empty sits right under the ball. Name it Squash.
- Select the sphere, then the empty last, and press Ctrl+P > Object: the empty becomes the parent and the ball follows whatever it does.
- With the empty selected, open Object Constraint Properties, click Add Object Constraint and choose Maintain Volume (Transform group). Set Free Axis to Z; it defaults to Y.
- Scale the empty on Z only. Below 1 the ball flattens and widens, above 1 it stretches and narrows, and it stays anchored to the floor in both cases.
- Animate the empty, not the ball: Location Z for the bounce, Scale Z for the squash. Hover the field and press I to insert a keyframe.
A practice loop: the ball at the top on frame 1, on the floor on frame 13, back at the top on frame 25. Key Scale Z at 1 at the top, around 0.7 on the contact frame, and a little above 1 on the frames just before and after contact. Then shape the timing in the Graph Editor, as described further down.
For a single object, you can skip the empty: put the 3D cursor at the contact point as above, then use Object > Set Origin > Origin to 3D Cursor on the ball and add the constraint to the ball itself. The empty is handier once the ball also travels: add a second empty as the parent of Squash for the location, and rotate Squash so its Z axis follows the direction of travel during the stretch.
The same constraint works on a bone. Its default Free Axis, Y, is the length axis of a bone, so scaling a bone in Pose Mode along Y keeps its volume as soon as the constraint is added with Add Bone Constraint.
The Maintain Volume constraint in detail
The manual describes it plainly: it keeps the original volume of an object or bone by scaling down two axes when the third is scaled up, and vice versa, which is useful for stretching and squashing stylized characters.
- Mode: Strict, the default, always keeps the volume exactly: scaling up the free axis scales down both others, and scaling up one of the others scales down the last one. It is the mode to start with.
- Mode: Uniform only keeps the volume while the object is scaled equally on all three axes; scaling the free axis alone loses volume in an exaggerated way, and the manual does not recommend it.
- Mode: Single Axis keeps the volume as long as you scale along the free axis only, which can save animation curves.
- Volume is the target as a ratio of the original volume, 1 by default. An object scaled 2 on every axis that should keep that size needs 2 × 2 × 2 = 8.
- Influence sets how strongly the constraint acts, and like any constraint Influence can be keyframed, to switch the effect on and off over a shot.
Stretch To: limbs that thin out as they lengthen
Stretch To makes an object or bone point at a target and scale towards it, along its local Y axis only, which makes it mainly a bone constraint. It also performs volume preservation: the owner gets thinner as the target moves away and thicker as it comes closer.
- Original Length is the rest distance, where there is no stretch; the Reset button next to it sets it to the current distance.
- Maintain Volume: XZ scales both side axes, X or Z only one, None keeps the thickness.
- Volume Variation is an exponent: at 1, the default, XZ mode keeps the volume constant; above 1 the thickness change is exaggerated, below 1 it is reduced, and 0 equals None.
- Volume Min and Max limit the thickness factor; in XZ mode each axis is bound to the square root, so a Max of 4 lets X and Z grow to twice their size at most. Smooth slows the change near the limits instead of stopping abruptly.
A typical use is an arm bone that stretches towards a hand control: pull the control away and the arm lengthens and thins, push it back and the arm thickens. Building the rest of such a rig is covered in the guide to rigging in Blender.
The Simple Deform modifier in Stretch mode
Without a rig, a mesh can be deformed directly. Add Modifier > Deform > Simple Deform, mode Stretch, stretches the object along the chosen Axis. With a positive Factor, the mesh gets longer on that axis, thinner at the origin and wider towards the ends; with a negative Factor, it is squashed along the axis, thicker at the origin and thinner at the ends.
- Everything is measured from the object's origin, in local space. Keep the origin inside the object, at the center of a ball, so it stretches like rubber pulled from both sides.
- Origin accepts another object, usually an empty, whose position, rotation and scale then control the deformation.
- Lock keeps one of the two other axes from changing: stretch along Z with Y locked and only X squashes.
- Limits restricts the effect to part of the axis, and a Vertex Group weights it per vertex.
The modifier applies a formula to each vertex and computes no volume, so judge the result by eye rather than trusting it to conserve anything. Its Factor can be keyframed like any property, which also makes it a quick way to distort a single frame, the idea behind smear frames.
Bendy Bones for arms, spines and tails
A rigid bone can only scale as a whole. Bendy Bones (B-Bones) split a bone into segments that follow an invisible Bézier curve, so a single bone can bend and change thickness along its length.
- Select the bone and, in Bone Properties > Bendy Bones, raise Segmentsabove 1. More segments bend more smoothly but cost more to compute.
- To see the curve, set Armature Properties > Viewport Display > Display As to B-Bone; the segments deform the mesh in any display mode.
- Scale In and Scale Out, on X and Z, set the thickness at each end, which the segments interpolate: a forearm can bulge at the elbow and thin at the wrist.
- Ease In and Ease Out lengthen or shorten the curve handles to shape the bend.
The BBone Shape keying set keys all these properties at once. Combined with Stretch To on the same bone, a limb both lengthens and curves. When a squash should stay inside one part of a character, set Bone Properties > Relations > Inherit Scale to Average on the child bone: the manual recommends it to block squash and stretch propagation between sub-rigs while letting uniform size changes through.
Timing the bounce in the Graph Editor
Keys set the poses; the curves between them set the timing. Open the Graph Editor and select the Location Z and Scale Z channels of the Squash empty.
- Sharp contact. By default, keys get Auto Clamped handles, which round every key. A bounce must change direction instantly on the floor: select the contact keys of Location Z and press V > Vector, or use Free handles and drag them to shape the corner. The keys at the top stay rounded.
- Slow at the top, fast at the floor. The curve should be flat around the top keys and steep near the contact; spread the handles at the top to hold the ball there longer.
- Squash in sync. The lowest Scale Z key must sit on the same frame as the contact key. The Normalize option in the header displays both curves in the same -1 to 1 range so they are easy to compare.
- A loop. Channel > Extrapolation Mode (Shift+E) > Make Cyclic adds a Cycles modifier that repeats the curve forever.
For a quick test, T (Key > Interpolation Mode) > Dynamic Effects > Bounce makes a value bounce a few times with exponential decay, like a dropped tennis ball. It shapes the curve it is applied to, usually the height; the squash still has to be keyed. To check that the ball travels along clean arcs, Object Properties > Motion Paths > Calculate Path draws its trajectory in the viewport. Keyframes, the Dope Sheet and the Graph Editor are covered from the start in the guide to Blender animation.
From the ball to a character
The same rules carry over to bodies: a character squashes when landing or bracing for a jump and stretches at the top of the effort, and faces squash and stretch through their muscles. Keep the volume constant, place the pivot where the weight rests, and keep the deformation to the frames that need it. The rig tools above, Maintain Volume on a control, Stretch To on limbs and Bendy Bones for curves, are usually set up on bones in Pose Mode.
Frequently asked questions
What is squash and stretch in animation?
Squash and stretch is the change of shape that gives an animated object weight and flexibility: it flattens when it hits something or carries weight, and it lengthens when it moves fast. It is the first of the twelve principles of animation that Frank Thomas and Ollie Johnston described in The Illusion of Life: Disney Animation (1981). The bouncing ball is the classic example.
Why does squash and stretch keep the volume?
Because a shape that grows or shrinks reads as inflating or deflating instead of deforming. When a ball stretches vertically, its width, and its depth in 3D, must contract to compensate. In numbers, if the height is multiplied by s, the two other dimensions are each divided by the square root of s: at 1.44 in height, they drop to about 0.83.
How do you squash and stretch in Blender?
Animate the scale on one axis and let a Maintain Volume constraint compensate the two others, so the volume stays constant. For bones that point at a target, the Stretch To constraint does the same with its Maintain Volume option. The Simple Deform modifier in Stretch mode and Bendy Bones are the other two tools, and the Graph Editor handles the timing.
How do you keep the ball on the floor when it squashes?
Scale it from the contact point, not from its center. Put an empty at the bottom of the ball, parent the ball to it and animate the scale of the empty, or move the origin of the ball to its lowest point with Object > Set Origin > Origin to 3D Cursor.
Is squash and stretch only for cartoons?
No. The amount changes, the principle stays. In realistic animation the deformation is small and the volume rule matters most; taken to an extreme, it gives the comic effect of cartoons. It applies to a ball as much as to the muscles of a face.
Rendering the animation on TURNA
When a scene is already well optimised and the frame count is what takes the time, the remaining lever is rendering several frames at once. TURNA does this for Blender: an add-on (Blender 4.0 to 5.2, Cycles and Eevee) sends the scene in one click, and the frames are split across 1, 2, 4 or 8 GPUs in parallel, RTX 5090 first and RTX 4090 when none is free. The add-on shows the estimated cost before anything starts. Prices start at €4.90 per hour, billed on the time actually used, with a 2-minute minimum (30 seconds until November 9), and new accounts get €25 of free credit. A single still image is still rendered by one machine, so the gain is on animations. Tiers and worked examples are on the Blender render farm page.



