· 4 min read
What stiffness and damping actually do
Stiffness, damping and mass aren't three independent dials. What each one changes, and why raising stiffness on its own mostly just adds bounce — measured with the solver that draws every spring in verve.
Every spring animation has three numbers behind it: stiffness, damping and mass. Most of the advice about them is a table of values somebody liked, which works until you want something slightly different and have no idea which number to move.
The reason those tables don't generalize is that the three numbers aren't independent. Damping only means anything relative to stiffness and mass, so turning stiffness up on its own changes how much the animation bounces as well as how quickly it moves. Once you know that, the rest of it stops being guesswork.
Everything below is measured, not remembered. The figures come from running verve's solver, which is the same closed-form spring the editor plays back and the exporter samples. Each one is a move from 0 to 100. "Settled" means within 0.01 of the target and moving slower than 0.01 a second, held for 48ms.
The number that predicts how it feels
The three inputs collapse into one ratio, usually written ζ:
ζ = damping / (2 × √(stiffness × mass))Below 1 the spring overshoots and comes back. At 1 it arrives as fast as it can without crossing the target. Above 1 it's sluggish and still doesn't bounce.
That ratio is what you're really choosing when you pick numbers. Stiffness and mass set how fast the spring wants to move; damping decides how much of that motion survives. Change one and you've changed the ratio, whether you meant to or not.
Stiffness on its own
Holding damping at 24 and mass at 1, and moving only stiffness:
| stiffness | ζ | settles in | overshoot |
|---|---|---|---|
| 60 | 1.55 | 3720ms | none |
| 120 | 1.10 | 1704ms | none |
| 260 | 0.74 | 1088ms | 3.0% |
| 480 | 0.55 | 1048ms | 12.8% |
| 700 | 0.45 | 1080ms | 20.2% |
The bottom three rows are the interesting part. Going from 260 to 700 is nearly a threefold increase and the animation finishes at the same moment, 1088ms against 1080ms. What changed is the overshoot, from 3% to 20%.
So stiffness reads as a speed control only while the spring is still fairly damped. Past that, the extra energy goes into travelling past the target and coming back, and the trip back costs you the time you thought you were saving. If you want faster and not bouncier, stiffness and damping have to go up together.
Damping on its own
Holding stiffness at 260 and mass at 1:
| damping | ζ | settles in | overshoot | times it crosses the target |
|---|---|---|---|---|
| 8 | 0.25 | 2840ms | 44.7% | 7 |
| 16 | 0.50 | 1552ms | 16.6% | 4 |
| 24 | 0.74 | 1088ms | 3.0% | 2 |
| 32 | 0.99 | 928ms | none | 0 |
| 40 | 1.24 | 1472ms | none | 0 |
Damping 32 is where the bounce disappears for this spring. That point has a formula:
critical damping = 2 × √(stiffness × mass)which for stiffness 260 and mass 1 is 32.25.
It's also the fastest row in the table, and that surprises people. Adding damping past critical doesn't tighten the animation, it drags it: 40 takes 1472ms to do what 32 does in 928ms. If something feels mushy and your instinct is to damp it harder, you may already be on the wrong side of this and making it worse.
Mass
Holding stiffness at 260 and damping at 24:
| mass | ζ | settles in | overshoot |
|---|---|---|---|
| 0.5 | 1.05 | 824ms | none |
| 1 | 0.74 | 1088ms | 3.0% |
| 2 | 0.53 | 1928ms | 14.3% |
| 3 | 0.43 | 2632ms | 22.4% |
Mass looks like the redundant one, since making a spring heavier and making it weaker both slow it down. The difference is what happens to the bounce. Lowering stiffness slows the spring and damps it more; raising mass slows it and damps it less. Heavier means slower and looser, which is what actual weight looks like, and nothing else in the model gives you that combination.
It's also why mass is worth leaving at 1 most of the time. Two dials that each change speed and bounce are harder to reason about than one.
The presets, in the same terms
verve ships five, and they're the five the editor's preset buttons write:
| preset | stiffness | damping | mass | ζ | settles in | overshoot |
|---|---|---|---|---|---|---|
| molasses | 60 | 18 | 1.6 | 0.92 | 2160ms | 0.1% |
| gentle | 120 | 20 | 1 | 0.91 | 1272ms | 0.1% |
| snappy | 260 | 24 | 1 | 0.74 | 1088ms | 3.0% |
| crisp | 480 | 34 | 1 | 0.78 | 720ms | 2.1% |
| bouncy | 220 | 12 | 1 | 0.40 | 1880ms | 24.9% |
Four of them sit between ζ 0.74 and 0.92 and differ mainly in how quickly they get there. Only bouncy leaves that line, and it's the only one where you see the overshoot as a bounce rather than as a soft landing.
That's the shape of most real decisions. You pick how fast this thing should feel, and then separately decide whether it's allowed to bounce.
One more thing that isn't obvious
Holding ζ at 0.75 and doubling stiffness each time, so only the speed changes:
| stiffness | damping | settles in |
|---|---|---|
| 130 | 17.1 | 1272ms |
| 260 | 24.2 | 1080ms |
| 520 | 34.2 | 800ms |
Doubling the stiffness takes about a fifth off the duration. It doesn't halve it, and it never will, because the spring's frequency goes with the square root of stiffness. If you're trying to make something twice as fast by doubling a number, this is the number that won't do it.
Where to try this
The motion specimen puts all five presets side by side, each with its curve, its ζ, and a demo you can replay. Seeing them next to each other is the fastest way to calibrate what a number means, because "3% overshoot" is meaningless until it's next to 25%.
For your own numbers, open the editor and put a spring on a keyframe. Stiffness and damping are the two axes of a pad you drag, and the curve redraws as you move — which is where you find out whether 3% was the thing you wanted or 20% was.