Appearance
Sequence engine
Keyframe interpolation
sampleSequence() sorts keyframes by time, finds the surrounding pair, applies the destination keyframe's easing function, and linearly interpolates every scalar/vector channel.
Rotation currently interpolates Euler degree values component-wise. For large or complex rotations, author intermediate keyframes to control direction and avoid unexpected long paths.
Playback modes
Time-based
useFrame increments time by delta * speed, handles forward/reverse completion, and optionally wraps.
Deterministic progress
progress maps directly to duration * clamp(progress, 0, 1). This is ideal for scroll, scrubbing, and synchronized external timelines.
Application order
Per frame, the player updates:
- Perspective camera position and FOV
- Controls target or direct
lookAt - Pivot-root model transform
- Renderer exposure and scene environment intensity
- Ambient, key, and fill intensity
- Optional callbacks and completion state
Effect synchronization
A mutable progressRef communicates normalized sequence progress to CinematicEffectDriver without forcing React state updates each frame.