Easing (Data Type)

A String naming an interpolation curve — how a value travels from its start to its end over time.

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
linearConstant rate. The default everywhere an easing is optional.
stepNo interpolation. Holds the starting value and snaps to the end value at the very end. Use this for on/off properties like visible.
catmullromSmooth spline through the surrounding keyframes rather than a straight line between two of them. Only meaningful between keyframes; behaves as linear for a fade. Alias: smooth.
smoothstepClassic 3t² − 2t³ S-curve. 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, ease_in_out_* does both. 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_expoNear-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 past the target and settles back. 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.

back and elastic deliberately leave the 01 range mid-curve, so the animated value overshoots its keyframe. That is the point of them, but it means a visible or hidden transformation should not 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.