Task: TODOS.phase-72.72.15.2.4
The sequencer curve editor is represented by a V2Editor TimelineVisualizer panel
spec and deterministic sampled model. It visualizes interpolation curves from
FV2SequencerTrackSpec keyframes and FV2SequencerInterpolationSpec presets,
then exposes sampled points, tangent handles, and preset curves for editor UI
rendering.
Runtime API#
- Panel spec:
FV2SequencerCurveEditorPanelSpec - Viewport spec:
FV2SequencerCurveEditorViewportSpec - Sampled point:
FV2SequencerCurvePoint - Tangent handle:
FV2SequencerCurveHandleSpec - Preset:
FV2SequencerCurvePresetSpec - Model:
FV2SequencerCurveEditorModel - Issue enum:
EV2SequencerCurveEditorIssueType
BuildSequencerCurveEditorModel samples evaluated interpolation values across
the focused track's first-to-last keyframe span, maps those values into graph
coordinates, and attaches tangent handle positions derived from the resolved
interpolation spec.
Behavior#
- Curve visualization samples
EvaluateSequencerKeyframeInterpolationinto stableCurvePoints. - Tangent handles expose arrive/leave control points and graph-space handle positions for each keyframe.
- Preset curves include linear, step, cubic ease-in-out, and custom camera ease.
- Selected keyframe focus resolves the interpolation spec that should drive the curve display.
- Validation reports invalid sequences, missing tracks, missing keyframes, unsupported value types, bad value bounds, and invalid sample counts.
The default QA fixture uses Seq.DataModel.CouncilIntro,
Track.HeroCamera.FOV, nine samples, midpoint frame 60, and four preset
curves.
QA Inventory#
- Visualization: sample the camera FOV curve into nine viewport-mapped points and verify the midpoint sample.
- Tangent handles: expose one handle per keyframe using resolved cubic control points.
- Presets: expose linear, step, cubic ease-in-out, and custom camera ease.
- Off-path: reject invalid sample counts, missing tracks, missing keyframes, and unsupported event/name curves.
js_repl Playwright interaction was unavailable in this session and the
affected surface is Unreal editor data rather than browser-rendered UI, so
verification is through UE editor automation and contract gates.
Verification#
python3 V2/ue/Tools/check-v2-sequencer-curve-editor.pyV2.Editor.Sequencer.CurveEditorpython3 V2/ue/Tools/check-v2-editor-module.pypython3 V2/ue/Tools/check-v2-ci-workflow.py