You're in the middle of a shot. The character jumps, fast. The arm stretches — and then pops. Volume snaps back, wrong. The curve looks like a seizure on playback. You've tried everything: tweaking weight maps, adding more blendShapes, even praying to the animation gods. Nothing works. The pop is still there.
This is not a post about 'best practices.' It's about why your squash-and-stretch rig fails under speed — and what you can actually do about it. No fluff. Just the mechanical reasons and the fixes that survived production.
Why This Pop Matters Right Now
Timeline pressure: speed vs. quality
Every studio I've worked with hits this wall. Two weeks before delivery, a hero shot breaks — the character's arm stretches during a fast punch, and suddenly the mesh blows out at the elbow. The rig pops. The fix? Someone spends three hours tweaking volume preservation settings that worked fine last week. Then the shot goes to lighting, and the pop returns in render. That's a rebuild. That's a lost day. On a seven-week schedule, losing even one day per shot kills your buffer fast.
Most teams treat popping as a one-off technical issue. They adjust the CV curve. They add a corrective blend shape. They clamp the stretch ratio. But the same problem resurfaces on the next fast motion — different angle, different speed, same cost. The real price isn't the fix itself. It's the repeated context-switch. Every time an animator stops to flag a pop, the scene loses momentum. And in a pipeline where speed is the metric, that friction adds up to reshoots nobody budgeted for.
The shot that almost got killed
I remember a cartoony arm-swing sequence — fast overshoot, squash on the follow-through, stretch on the anticipation. The rig held at 24 fps. At 30 fps, it popped on frame 17. The supinator twisted the geometry inside out. The lead called a review; the director wanted to cut the shot. We had one day to fix it. The catch is — traditional volume-conserving rigs break silently. They look fine in the viewport. Then you render a single frame at production resolution and the seam is a visible crater. That one shot almost killed a whole sequence because the pop was invisible until it mattered.
'We lost half a day re-rigging a single forearm because the squash-and-stretch broke at playback speed. The animator just wanted to hit the pose.'
— supervising technical director, mid-budget feature
That quote isn't rare. It's the norm. The frustrating part is that the animation itself was good — the arcs read, the timing worked. But the rig couldn't keep up with the performance. Speed exposed a weakness that no amount of manual tweaking could fix quickly. And when you have twenty shots waiting for the same pipeline, the bottleneck isn't creativity. It's the pop.
Why traditional fixes don't scale
Most production artists reach for the same toolkit: loosen the stretch limit, add a corrective lattice, or keyframe the volume damping per frame. Those work for one shot. Maybe two. But they don't transfer. A fix tuned for a 12-frame fast ball won't hold on a 6-frame arm snap. The math changes. The hierarchy reacts differently. So you end up with per-shot workarounds — a dozen variations of the same solution, each fragile, each needing a note in the handoff doc. That's not scaling. That's duct tape on a pipeline that needs structural change.
What usually breaks first is the assumption that volume preservation can be a binary switch. Riggers build a node that tries to maintain 100% volume at all speeds. But at high velocity, the interpolation errors compound — the squash flattens the mesh, the stretch thins it unevenly, and the solver can't compensate fast enough. The pop isn't a math failure. It's a design mismatch. We designed for stability at low speed, then asked the rig to perform at high speed. The rig chose stability. The geometric continuity lost. And we blame the animator. Wrong target.
The Core Idea: Volume Conservation Breaks at Speed
The volume lie — what squash-and-stretch actually preserves
Every squash-and-stretch setup starts with one promise: the object looks bigger in one axis, thinner in another, but the total mass feels the same. That illusion is called volume conservation. A bouncing ball hits the ground, its height compresses to 60%, its width expands by the inverse factor — roughly 1.66× — and the eye buys it. The math is dead simple: scaleY * scaleX = 1. Or, for a 3D rig, scaleX * scaleY * scaleZ = 1. That equation works beautifully at 24 fps, on slow arcs, in any scene where the motion reads as deliberate. The catch is — it only works because nothing moves fast enough to reveal the cracks.
Odd bit about animation: the dull step fails first.
Odd bit about animation: the dull step fails first.
What usually breaks first is the interpolation. You key a squash frame at frame 10, a stretch at frame 14. Your software interpolates the middle frames — linear blending of the scale values. But linear interpolation of scale values is not linear interpolation of volume. The product of two linear curves is a curve, not a straight line. That means the volume dips below 1.0 halfway between the keys. The ball looks thinner and smaller — it loses mass. Suddenly that fast bounce feels like a balloon with a slow leak, then a snap back. That pop isn't artistic. It's a math error baked into the rig.
Why interpolation is the enemy — the two rules you need to know
Rule one: volume is a multiplicative property, not an additive one. If you interpolate scaleX from 1.0 to 0.5 and scaleY from 1.0 to 2.0, at the midpoint you get scaleX = 0.75, scaleY = 1.5. Multiply: 1.125. The volume is 12.5% too high. The object bulges before it squashes — a pre-bloat that reads as a jitter. Rule two: the faster the change, the more pronounced the error. Double the speed means twice the interpolation steps, and the volume drift accumulates like round-off error in a loop. I have seen rigs where a character's arm stretches 300% in three frames — the volume curve peaks at 1.4× during the overshoot. The seam pops, the shading warps, the whole thing looks like jelly under a strobe light.
The odd part is — most tutorials skip this. They teach the driver, the multiply node, the constraint setup. They never show you the graph of volume over time. So you fix the visual pop by adding more keys, smoothing the curve, adjusting the easing — treating the symptom, not the cause. Wrong order. The cause is the interpolation method itself. You can't linear-interpolate two values whose product must stay constant. That's not a rigging limitation; it's a geometric constraint the software can't satisfy automatically.
— That hurts, because the fix requires rethinking how you store and compute the stretch factor.
The two-axis trap — and a rule of thumb that saves the frame
Most teams skip this: they tie both scale channels to a single driver. Squash value drives scaleX, and the inverse drives scaleY. That works — until you have a secondary deformation. A character's arm stretches forward; the bicep bulges sideways. That's two different stretch factors applied to two different axes, but both derive from the same master control. The moment you add a twist or a bend, the volume formula breaks again. You have to choose: preserve volume on the primary axis and let the secondary axis drift, or split the deformation into two passes — first the stretch, then a volume correction on top. That second pass is where the real fix lives.
So here is the rule of thumb that actually holds at high speeds: always compute stretch as a curve, then apply the volume correction as a post-multiply. Don't bake the inverse scale into the same driver. Instead, run the stretch through a curve node that keeps the product of all three axes within 1% of 1.0 across the entire animation range. Then clamp the edge cases — you can't squash a ball to zero height without making its width infinite. That's not a rigging limit; it's a physical one. But at least the pop disappears. The ball feels heavy again. The arm reads as flesh, not rubber. That one change — reordering the multiply chain — fixed a bouncy-ball demo I had that kept breaking at 60 fps.
Under the Hood: Where the Pop Actually Lives
Joint-Based vs. BlendShape Rigs — Two Kinds of Failure
The pop doesn't live in one place. I have rebuilt enough rigs to know that a joint-based squash setup and a blendShape stack break differently, but both suffer from the same root: the order in which transformations pile up. In a joint chain, you typically scale a bone non-uniformly — stretch the forearm bone, and the elbow joint suddenly repositions. That repositioning is instantaneous. One frame the elbow sits at a reasonable angle; the next, the child bones snap to a corrected world matrix and the mesh tears. BlendShape rigs have a different wound: you stack a squash shape on top of a stretch shape, but their delta offsets fight each other. The result? A mid-range pose that neither shape intended. Wrong order.
The Hidden Role of Constraints — Your Assumptions Are Leaking
Most teams skip this: a point constraint or an orient constraint recalculates every frame at the end of the dependency graph. That means your carefully scaled bone gets re-parented by the constraint *after* the stretch node runs. So your volume-conservation math was correct, but the constraint overwrote the child's offset matrix. The surface pops because the child object didn't inherit the parent's squash — it inherited the constraint's last-known neutral pose. The odd part is — you can see this in the graph editor as a flat line of zero rotation that suddenly spikes. It's not animation noise. It's constraint interference.
“The constraint is not your friend when you squash. It's a mercenary that enforces the last known world-space agreement.”
— From a production postmortem on a feature film arm rig, 2022
Interpolation Hell — Quaternions vs. Euler
The pop often lives where you never look: the rotation blend between keyframes. I have seen rigs where the squash stretch node outputs a perfectly smooth scale curve, but the joint's rotation — handled by a quaternion slerp — flips the entire chain 180 degrees for one frame. Quaternions are great for avoiding gimbal lock. They're terrible at respecting your carefully authored Euler orders. When the stretch node pushes the bone past a critical angle, the quaternion solver takes the shortest path. That path might be backwards. The mesh balloons outward for a single frame, then recovers. To the eye it looks like a pop. To the rig it was a mathematically correct shortcut. The fix? Force the rig to hold Euler interpolation on the stretch axis, or insert a layer that re-orders the rotation channels before the quaternion converts. Not glamorous, but it works.
Honestly — most animation posts skip this.
Honestly — most animation posts skip this.
That hurts. You lose a day tracing curves that look clean in the curve editor but explode on playback. The catch is — most animation software defaults to quaternion blending on any joint with a parent constraint. You have to explicitly disable it. I have shipped rigs where the only difference between a popping elbow and a butter-smooth arm was a single checkbox labeled interpolateAsEuler. Check that box. Or don't, and watch the seam blow out at frame 37 every single time.
Walkthrough: Fixing a Bouncing Ball and an Arm Stretch
Bouncing ball: driven keys and corrective blends
Start with the simplest case—a standard bouncing ball rig that stretches on the y-axis and squashes on x and z. At slow playback it looks fine. At 48 frames per second the ball’s leading edge tears away from the contact patch for four frames, then snaps back. The pop lives in the squash key, not the stretch. Open the blendShape deformer and create a corrective target named ‘squash_apex_fix’. Sculpt it so the bottom of the sphere flattens evenly rather than pinching at the center vertex.
Now the driven key trick. Drive the blendShape weight from the squash attribute on the main control, but set the weight curve to start at 0.0 when squash is 0.5 (the neutral rest), then ramp to 1.0 exactly when squash hits 0.8. Not at the maximum squash value of 1.0. The odd part is—pushing the correction earlier than you think necessary kills the pop before it forms. Most animators key the fix at the extreme, but the visible seam occurs during the transition, not at the peak. Test this at 60 fps: if the leading edge still flickers, pull the weight key back to squash = 0.7. That small shift alone fixed a production ball rig that had resisted two days of tweaks.
‘The fix at the extreme is a myth. The pop lives in the ramp, not the peak.’
— conversation with a senior rigger during a crunch week, 2023
Arm stretch: scale compensation and joint orientation
The arm rig is trickier because you’re dealing with rotation and translation simultaneously. A standard IK arm with a stretchy spline will pop at the elbow when the forearm scales past 1.3. The catch is that the pop isn’t in the scale value—it’s in the twist axis. Open the joint orient of the upper arm. If the pop happens only when the arm rotates past 90 degrees, the fix is a pre-rotation of the elbow joint’s preferred axis by 3 to 5 degrees. That sounds marginal. It matters.
Most teams skip this: add a corrective blendShape driven by the inverse of the forearm scale. When the forearm hits 1.3, the elbow mesh receives a subtle inflation target on the lateral side. This compensates for the volume pinch that the scale compensation node can’t handle. I have seen riggers stack three scale compensation nodes trying to fix this—each one adds another layer of math that fights itself. One corrective blendShape at the elbow, driven by a simple remap of the scale value, eliminates the hard edge.
Test at high speed by scrubbing the arm through a wind-up punch cycle at 60 fps. Wrong order: checking the stretch at the end of the motion. Check the midpoint of the swing, where the arm is decelerating. That's where the pop hides. If the elbow still shows a one-frame volume jump, adjust the joint orient another 2 degrees, then re-test. Don't touch the scale compensator again—it’s a trap.
Testing at high speed
Set your playback to 60 fps, turn off motion blur, and scrub frame by frame through the transition zone. The human eye catches the pop at 24 fps but blames the motion blur. At 60 fps the seam becomes a single-frame discontinuity—easy to spot, hard to forgive. Record a quick playblast and watch it at half speed. That hurts. The fix should hold across three consecutive frames without any visible snapping. If it doesn’t, your driven key or blendShape weight is still firing one frame late. Push the activation earlier by 0.15 on the attribute range. One last check: reverse the motion. Pops often reappear only on the return arc. If the arm or ball looks clean in both directions, you're done. If not, the corrective target itself may have an internal vertex that wasn’t welded—inspect the sculpt, not the driver.
Edge Cases: When the Fix Doesn't Stick
Non-uniform scaling and shear
The cleanest volume-conservation rig assumes uniform scaling—X, Y, Z all move in lockstep. That sounds fine until you squash a character's arm along one axis while leaving the others untouched. The pop doesn't come from the stretch node; it comes from the shear matrix your constraint accidentally introduces. I have watched artists spend two hours tuning a squash deformer only to realize the parent bone had a non-uniform scale inherited from a control curve. The fix? Freeze transformations where you can. But here is the trap: freezing breaks the rig's ability to remember its rest pose. You trade one pop for another—a rig that feels stiff because the stretch node no longer knows what "unstretched" looks like. Most teams skip the shear check entirely. They shouldn't. A single shear value under 0.01 will produce a visible seam twitch at speed, and your bounce compresses that twitch into a single frame.
Every constraint is a promise to the deformation chain. Break that promise at speed, and the mesh breaks it too.
— Lead rigger, after chasing a 2-frame pop for three days
Constraints that override squash
Point constraints and orient constraints don't know your squash node exists. They run their math first—before the stretch deformer ever sees the bone chain. So when a constraint hard-locks an object's position, the squash node below it tries to push geometry in a direction the constraint has already blocked. The result? Geometry that crawls instead of stretches. Or worse, geometry that stretches one frame, then snaps back the next. The odd part is—you can see this in the viewport during playback but not on a single frame. It only manifests at 24 fps or above. I have fixed this exact problem by inserting a buffer joint between the constraint target and the stretch chain. That buffer absorbs the override. But it adds a layer of complexity: now you have an extra transform that needs to match your character's scaled skin cluster. One misaligned pivot and the pop migrates to the shoulder.
Flag this for animation: shortcuts cost a day.
Flag this for animation: shortcuts cost a day.
IK/FK mismatches
Switch an arm from IK to FK mid-animation. What happens? The stretch node registered its values in IK space—a world where the hand target drives the elbow. Flip to FK, and that same node now receives motion from a completely different input hierarchy. The deformations don't interpolate; they jump. That hurts. The pop here is not a volume violation—it's a timing mismatch. The IK stretch resolves at frame 12, the FK stretch at frame 14. Two frames of ugly. The standard fix—blending the stretch weight across the IK/FK switch—works only if your blend curve has zero overshoot. Real animators rarely give you that luxury. They want a snappy transition. So what usually breaks first is the distance-to-rest-length calculation. It sees two different bone lengths and can't decide which one is correct. Wrong order.
One workaround: store both stretch values in a utility node and lerp them based on the IK/FK switch state. The catch is—you now have two parallel deformation chains living inside one rig. That doubles your node count and slows viewport interaction to a crawl on complex characters. Not a fix you can recommend for a mobile game rig. Not yet. The smarter path is to lock the stretch node to only evaluate during FK frames and disable it entirely during IK—then accept that your IK poses will never squish quite the same way. A trade-off most directors will notice immediately.
The Limits: You Can't Fix Everything with One Node
Deformation order rebuild
Most teams skip this: the node stack itself is the problem. You can patch velocity, clamp stretch limits, add corrective blends — but if the deformation order runs squash before stretch, or if your twist node lives upstream of the squash deformer, the pop will find a way through. The odd part is — you might not see it until the rig goes to a crowd shot or a fast limb cycle. Then suddenly the character's forearm inflates like a balloon at frame 97. That's not a parameter issue. That's topology order rotting from below.
I have seen rigs where moving one node upstream fixed seven separate popping artifacts. The catch is: you have to rebuild the deformation chain from scratch. That means disconnecting the entire mesh stack, re-layering your deformers, and re-skinning the intermediate joints. It's not a clever workaround. It's surgery. And most producers will ask you to live with the pop rather than eat the rebuild cost.
Wrong order. Not yet. That hurts — but sometimes you have to choose the surgical option.
When to start over
Here is the honest trade-off: if your rig requires more than four corrective nodes to manage speed pop, you're better off building a new rig from a clean base. I have watched artists spend three weeks patching a single arm stretch — only to discover the original joint placement was too wide for the deformation style they wanted. No fix fixes that. You can't clamp your way out of bad bone spacing.
So when do you start over? Three signals: the pop shifts position every time you adjust speed, the fix works at 30 fps but breaks at 60 fps, or you need to rebuild the deformation order anyway. In those cases, salvage the control surfaces but discard the skeleton. Rebuild with volume-preserving joints from frame one. It hurts for a week. The alternative is six weeks of incremental failure.
'A rig that needs six band-aids is a rig that was built wrong on day one. You can't polish a broken joint.'
— veteran rigger at a midsize studio, after killing his own stretched arm setup
What to accept as a trade-off
Some popping is not a bug — it's a property of the deformation method you chose. A lattice-based squash rig will always show edge pinching at extreme angles. A blendshape stack will always lose detail near the limit of the morph target. That's not failure. That's the material world pushing back against infinite stretch. The question becomes: does the audience see it? If the pop happens on a secondary limb during a fast camera move, you let it slide. If the pop hits the hero hand during a close-up punch — you fix it or you ship a different rig.
I have shipped shots where the elbow scale popped every 87th frame. We knew about it. The director didn't care because the pop was two pixels wide and the action cut away. Not all pops are equal. You conserve your rebuild energy for the ones that read on screen. That sounds pragmatic until the client notices it in dailies. Then you rebuild. Every time. The difference is choosing where you spend your sixty-hour weeks.
One last thing: if your single-node fix works at 24 fps but fails at 30 fps, you have a frame-rate-dependent rig. That's a rebuild trigger. Don't band-aid it. You will chase that pop across every shot in the sequence and lose.
Comments (0)
Please sign in to post a comment.
Don't have an account? Create one
No comments yet. Be the first to comment!