The Timeline and F-Curves

Open any animation package — Maya, Blender, Houdini, MotionBuilder — and the pose you sculpted in the viewport is, underneath, nothing but numbers changing over time. The character's hand is at x = 0 on frame 1 and x = 5 on frame 24; the tool fills in everything between. This page is about how that filling-in is stored and edited: the timeline, the channels, the keyframes, and the smooth F-curves that thread through them. Master this and you stop fighting your tool and start conducting it.

It is the mechanical companion to timing, spacing and easing: there we asked what good motion feels like; here we open the hood and see the exact controls — tangent handles, interpolation modes, extrapolation — that let you dial it in.

Channels: one curve per number

Everything you can animate is a channel (a.k.a. a degree of freedom, or DOF). An object's world transform alone is nine channels — translate t_x, t_y, t_z, rotate r_x, r_y, r_z, and scale s_x, s_y, s_z — and a rigged character adds one per control, plus a channel for every blendshape weight (the sliders that dial a smile or a blink from 0 to 1). A single facial rig can carry hundreds of channels.

This is why the graph editor can look so busy: it is drawing one line for each number the rig exposes. You usually isolate a few channels at a time to see what you are doing.

The F-curve: value versus time

A single channel's function is its F-curve — short for function curve, also called the animation curve. Plot the channel's value up the vertical axis and time (frames or seconds) along the horizontal axis, and you get a picture of the entire motion of that one number:

\text{F-curve of channel } c \;:\; t \;\longmapsto\; c(t).

You do not author the whole curve point by point. Instead you set a few keyframes — anchor points that say "at time t_i the value is v_i" — and the tool interpolates a smooth curve through them. A keyframe is exactly a control point on the F-curve.

Tangents: the handles that shape the curve

Between two keys the tool needs to know not just where to pass but at what angle. Each keyframe therefore carries tangent handles — little levers that set the curve's slope as it enters and leaves the key. And the slope of an F-curve is not decoration: by the derivative, the slope c'(t) is the channel's velocity. Steep tangent = fast; flat tangent = momentarily stationary. Tangents are your spacing control.

The common interpolation / tangent modes you pick per key (or per curve):

ModeShape between keysFeel / use
Stepped (constant / hold)value holds flat, then jumps at the next keyblocking, pose tests, on-off switches
Linearstraight line — constant slopemechanical, constant speed
Spline / Béziersmooth curve, slopes matched across the keyorganic motion; the default workhorse
Flattangent forced horizontal (slope 0) at the keyease to a dead stop — a held extreme
Auto / clampedtool picks a smooth slope, clamped so it won't overshoot local keysquick, safe smoothing

By default the incoming and outgoing tangents of a key are unified — one straight handle, so the curve glides through smoothly. Breaking the tangents lets the two sides take different slopes, putting a sharp corner in the curve: the object arrives slow and leaves fast (or reverses direction) at that instant. A break is how you get a hard impact, a bounce contact, or a snap.

The graph editor, live

Here is a single channel with three keyframes — start at 0, a peak of 1 in the middle, back to 0 at the end (a classic up-and-down, like a jump). The faint straight segments are the linear reading; the bold curve is the currently selected tangent mode. Flip the Tangent mode switch between stepped, linear, flat (ease to stops) and spline, and drag the playhead: the moving marker is the value the channel actually takes at that frame.

Watch the marker's speed. In stepped it teleports — no in-betweens at all, which is exactly what you want when blocking poses. In flat it crawls near each key (slope 0 → slow-in/slow-out) and hurries between. In plain spline notice how the curve can bulge past the peak value of 1 near the middle key — that bulge is an overshoot, and it is the source of a famous bug.

Worked example: flat vs linear in-betweens

Take two keyframes on a translate channel: (t{=}0,\; v{=}0) and (t{=}1,\; v{=}10). What value does the tool report at the halfway frame t = 0.5, and how fast is the object moving there?

Linear tangents. The in-between is the straight line v(t) = 10\,t. At the midpoint v(0.5) = 5, and the velocity is the constant slope v'(t) = 10 units/sec — the object never speeds up or slows down.

Flat tangents. Force the slope to 0 at both keys. The cubic Hermite curve satisfying v(0){=}0,\, v(1){=}10,\, v'(0){=}v'(1){=}0 is the smoothstep v(t) = 10\,(3t^2 - 2t^3). Now v(0.5) = 10 \cdot 0.5 = 5 — the same halfway value! But the velocity v'(t) = 10\,(6t - 6t^2) = 60\,t(1-t) gives v'(0) = 0, v'(0.5) = 15, v'(1) = 0.

So flat and linear agree at the centre but could not feel more different: the linear move barrels along at a flat 10 the whole way, while the flat-tangent move eases out of rest, peaks at 15 — half again as fast — through the middle, then settles gently to a stop. Same keys, same midpoint value, opposite spacing. That is the entire reason we edit tangents rather than raw values.

Extrapolation: what happens past the last key

Keys define the curve only between the first and last. What the channel does before the first key and after the last is set by the extrapolation (pre/post) mode. Leave it at constant and the value simply holds. Set it to cycle and the whole keyed range repeats forever — the trick behind a looping walk, a flickering light, a spinning fan. A cycle with offset (relative) adds the range's net change each repeat, so a walk cycle keeps travelling forward instead of snapping back to the origin each loop; oscillate (ping-pong) plays the range forwards then backwards.

Say you key a ball rolling along the ground: three keys all at height y = 0, then one key where it hops up. With spline / auto tangents the tool matches slopes smoothly across every key — and to stay smooth through the last ground key before the hop, the curve has to start bending early, dipping to y < 0. The ball sinks through the floor for a few frames. Nothing is "wrong" with the maths; smoothness through equal-valued keys simply requires a wiggle. The fix is to set those ground keys to flat (or clamped) tangents, which pins the slope to zero and kills the dip. This is the single most common F-curve gotcha in production, and spotting it in the graph editor is a rite of passage.

Two tangent traps snare beginners. First, stepped tangents show no in-betweens — the value holds then jumps. That is a feature while blocking (you want to judge poses without the tool guessing motion), but if you forget to convert to spline before polishing, your "finished" shot plays as a slideshow of frozen poses. Second, the opposite failure: spline / auto tangents keep the curve smooth by letting it bow past a key's value — the classic unwanted overshoot. A hand keyed to stop at a table can smoothly sail through it and swing back; a scale keyed to land on 1 can bulge to 1.1 first. When a value must not be exceeded (a contact, a limit, a hold), reach for flat or clamped/auto tangents, or break the tangent so the curve arrives and leaves cleanly. Smooth is not the same as correct.