Skip to main content

Easing (Data Type)

A String naming an interpolation curve: how a value travels from its start to its end over time, instead of jumping straight there.

Names ignore case and separators, so ease_in_out, easeInOut and EASE-IN-OUT are the same curve.

Special curves

ValueDescription
linearA constant rate. The default everywhere an easing is optional.
stepNo interpolation. It holds the starting value and snaps to the end value at the very end. Use it for on and off properties like visible.
catmullromA smooth spline through the surrounding keyframes instead of a straight line between two of them. It only means something between keyframes, and behaves as linear for a fade. Alias: smooth.
smoothstepThe classic 3t² − 2t³ S-curve, a gentle ease in and out.
smootherstepPerlin's 6t⁵ − 15t⁴ + 10t³. Like smoothstep, but flatter at both ends.

Standard curves

Each family comes in three forms: ease_in_* starts slow, ease_out_* ends slow, and ease_in_out_* does both. They are ordered from gentlest to sharpest:

FamilyValuesFeel
Sineease_in_sine, ease_out_sine, ease_in_out_sineBarely there. Good for subtle idle motion.
Quadraticease_in_quad, ease_out_quad, ease_in_out_quadThe safe default for poses.
Cubicease_in_cubic, ease_out_cubic, ease_in_out_cubicNoticeably snappier.
Quarticease_in_quart, ease_out_quart, ease_in_out_quartSharp.
Quinticease_in_quint, ease_out_quint, ease_in_out_quintVery sharp.
Exponentialease_in_expo, ease_out_expo, ease_in_out_expoAlmost instant at one end.
Circularease_in_circ, ease_out_circ, ease_in_out_circFlat, then abrupt, like a quarter circle.
Backease_in_back, ease_out_back, ease_in_out_backOvershoots the target and settles back, like anticipation.
Elasticease_in_elastic, ease_out_elastic, ease_in_out_elasticSprings past the target and oscillates.
Bounceease_in_bounce, ease_out_bounce, ease_in_out_bounceHits the target and bounces off it.
warning

back and elastic leave the 0 to 1 range partway through the curve on purpose, so the animated value overshoots its keyframe. That is what they are for, but it means a visible or hidden transformation shouldn't use them.

Aliases

AliasResolves to
ease_inease_in_quad
ease_outease_out_quad
ease_in_outease_in_out_quad
smoothcatmullrom
holdstep
constantstep
nonelinear

Example

{
  "model_part": "right_arm",
  "type": "pitch",
  "value": -1.5708,
  "override_animation": true,
  "easing": "ease_out_back",
  "duration": 6
}

The arm swings up over 6 ticks, overshoots slightly and settles.