Animation Tracks & Keyframes

Texturge provides 10 typed animation tracks, each controlling one property component of FAnimationFrameData. Multiple tracks combine and layer to form complete per-character animation effects.

Track Model

FTextAnimationTrack Structure

struct FTextAnimationTrack
{
    FGuid TrackId;          // Unique track identifier
    FName TrackName;        // Track name (for Blueprint identification)
    ETextAnimationTrackType TrackType;  // Track type (determines which property to control)
    float StartTime;        // Start time (seconds)
    float Duration;         // Duration (seconds)
    float TrackWeight;      // Track weight (0~1)
    bool bEnabled;          // Whether enabled
    bool bInvertOpacity;    // Invert opacity (opacity tracks only)
    ETextAnimationBlendMode BlendMode;  // Blend mode
    TArray<FKeyFrame> KeyFrames;        // Keyframe array
    // -- Character application & timing --
    ECharacterApplicationMode ApplicationMode;  // Application mode
    int32 ApplicationInterval;      // Interval count
    bool bApplyToFirstChar;         // Whether to apply to first character
    float RandomProbability;        // Random proportion
    ETextAnimationTimingMode TimingMode;  // Timing mode
    float TotalTextDuration;        // Total text duration
    int32 CharacterDelayFrames;     // Inter-character delay frames
};

Track Type Overview

Float Properties

TrackEnum ValueFAnimationFrameData FieldDescription
OpacityOpacityOpacity (0~1)Character transparency/reveal effect. Use with bInvertOpacity for default-hidden→reveal.
Letter SpacingLetterSpacingLetterSpacing (px)Per-character letter spacing animation
RotationRotationRotation (degrees)Character rotation, centered on Pivot

Vector2D Properties

TrackEnum ValueFieldDescription
TranslationTranslationPositionOffset (px)Character position offset. X/Y independently controlled
ScaleScaleScale (X/Y)Character scale. (1,1) = original size
ShearShearShear (X/Y)Shear transform. (0,0) = no shear
PivotPivotPivot (0~1)Transform pivot. (0.5,0.5) = character center
Shadow OffsetShadowOffsetShadowOffset (px)Character shadow position offset

Color Properties

TrackEnum ValueFieldDescription
ColorColorColorCharacter tint color. Can blend with original text color
Shadow ColorShadowColorShadowColorCharacter shadow color. Transparent = no shadow

Frame Data Structure

The complete state of each character in each frame is described by the FAnimationFrameData struct:

struct FAnimationFrameData
{
    // Transform
    FVector2D PositionOffset;  // Position offset
    FVector2D Scale;           // Scale (1,1)
    float Rotation;            // Rotation angle
    FVector2D Shear;           // Shear transform
    FVector2D Pivot;           // Transform pivot (0.5,0.5)
    // Color
    FLinearColor Color;        // Tint (White = no tint)
    float Opacity;             // Opacity (1 = fully visible)
    // Shadow
    FVector2D ShadowOffset;    // Shadow offset
    FLinearColor ShadowColor;  // Shadow color
    // Typography
    float LetterSpacing;       // Letter spacing (0 = default)
};

Identity Frame is the frame data with all default values — Opacity=1, Scale=(1,1), Color=White, Pivot=(0.5,0.5), remaining fields at 0. Unrevealed characters return an identity frame with Opacity=0, producing no visible rendering.

Keyframe System

FKeyFrame Structure

struct FKeyFrame
{
    FGuid KeyId;                // Unique keyframe identifier
    float Time;                 // Time (relative to track start, seconds)
    float FloatValue;           // Float type value
    FVector2D Vector2DValue;    // Vector2D type value
    FLinearColor ColorValue;    // Color type value
    EKeyInterp InterpType;      // Interpolation type
};

Each keyframe uses only the field corresponding to its track’s value type — Float tracks use FloatValue, Vector2D tracks use Vector2DValue, Color tracks use ColorValue.

Interpolation Types

InterpolationEnum ValueCurve Shape
LinearLinearUniform straight-line transition
CubicCubicBezier smooth curve
ConstantConstantNo transition, held until next keyframe
Cubic In-OutCubicInOutS-curve easing

Interpolation is implemented in UTextAnimInstance’s static methods:

  • InterpolateKeyFramesFloat() — float interpolation
  • InterpolateKeyFramesVector2D() — vector interpolation
  • InterpolateKeyFramesColor() — color interpolation

Track Blend Modes

When multiple tracks are layered, blend modes control how they interact:

Blend ModeEnum ValueBehavior
AdditiveAdditiveAdd track result item-by-item to the base value
OverrideOverrideTrack result fully replaces the base value
MultiplyMultiplyMultiply track result with the base value item-by-item
CrossFadeCrossFadeCross-fade between track result and base value by weight

Blending is performed in UTextAnimInstance::BlendFrames(), weighted by track weight (TrackWeight).

Character Application Modes

Determines which characters the animation applies to:

ModeEnum ValueDescription
Per-CharacterPerCharacterAll characters receive the animation (default)
IntervalIntervalAnimation applied every N characters. Controlled by ApplicationInterval and bApplyToFirstChar
RandomRandomRandomly select characters by RandomProbability proportion

Timing Modes

Determines how per-character animation duration is calculated. ETextAnimationTimingMode in FTextAnimationTrack maps to EDurationMode in the Sequencer root track:

Sequencer Root LabelTrack Struct LabelEnum ValueDescription
Per-CharacterCharacter Animation DurationPerCharacterDurationEach character animates independently; total = characters × Duration
Fixed TotalTotal Text Animation DurationTotalDurationAll characters complete within the specified total duration, evenly distributed

CharacterDelayFrames controls the start delay between characters (in frames). 0 means all characters begin animating simultaneously.

images/track-editor-interface.png — Three-column layout: track list panel (add/delete/sort), keyframe curve editor (Linear/Cubic/Constant comparison), track blend mode and character application mode selectors
images/ten-track-types-comparison.png — 2×5 grid showing per-character rendering effects of all 10 track types at maximum value