Type arrives in sequence or it does not arrive

Text in a cutscene gets an opacity ramp because that is what is available in one line. It works, in the sense that the words end up on screen, and it is the difference between a title card and a slide deck.

The same four letters, the same duration. Left: one shared fade. Right: 60ms of stagger per letter with a settle.

Both halves finish at almost the same moment and both are entirely legible. The right one has an internal rhythm, so it reads as something happening; the left one reads as a state change.

The two decisions that carry it

Stagger, and the window is narrow

The gap between letters has a usable range and it is smaller than people expect:

The reason is the same roughly 100ms temporal integration window that governs how a flash reads. Inside it, things fuse. Outside it, they are separate.

Which also gives the scaling rule: stagger per letter for short titles, per word for sentences. Four letters at 60ms is 240ms and feels immediate. Forty letters at 60ms is two and a half seconds of watching text assemble, which nobody wants.

A settle, not a ramp

A linear or eased fade says an opacity value changed. A damped oscillation says an object arrived and stopped:

float e = 1.0 - exp(-6.5*u) * cos(9.0*u);

An exponential envelope times a cosine, which is the standard damped spring. The exponent sets how fast it settles and the cosine frequency sets how many times it overshoots. One visible overshoot is right for type; two reads as bouncy and belongs to a different tone.

Give it a small position offset to settle into, sixteen hundredths of the cap height here. Scale works too. Rotation almost never does, because rotated type is harder to read and the whole point is to be read.

Where it goes wrong

Why field type is worth the trouble

A glyph as a distance field is a set of strokes with a shared radius, which means the weight is a uniform. That gets you a variable weight axis for free, an outline at any thickness, a glow that is correct at any size, and a per-letter dissolve or shatter using the same field the letter is made of. None of that is available from a texture atlas without a second asset.

The cost is that a real typeface is not a handful of segments, and hand-building glyphs stops being reasonable somewhere around a title card. For body text the answer is a glyph atlas or a curve renderer, not this.

Rules of thumb

  1. Stagger 40 to 80ms. Under 25 fuses into a plain fade, over 120 becomes separate events.
  2. Per letter for titles, per word for sentences. The unit scales with the length.
  3. Settle with a damped spring, not a linear ramp. One overshoot, not two.
  4. All motion in the arrival, none during the hold. Movement while reading costs comprehension.
  5. Exits are faster and simpler than entrances.
  6. Time it on word count if it will be localised, or the pacing changes with the language.

All 61 notes How to use them Credits