Skip to content

No. 1074 AN AnimationEQLabs Pro

Smear FX

UE 5.4–5.85/52.0.5

Module: Animation · Category: Stylization · Tool ID: SmearFX

Anime-style motion exaggeration, baked from real animation data. The tool samples per-frame bone velocities out of an AnimSequence and uses them to drive three distinct effects: elongated stretch meshes, ghost pose trails, and swept motion ribbons. Everything it produces is a plain UStaticMesh you can inspect, edit, or throw away — nothing is hidden behind a runtime-only shader.

Clean-room implementation inspired by SMEAR — Stylized Motion Exaggeration (Basset, Bénard, Barla — SIGGRAPH 2024).

Smear FX after a bake: source AnimSequence and SkeletalMesh picked, velocity summary reporting 13 frames and a peak of 30.289 units/frame on foot_r at frame 2, with the Elongated, Ghost and Ribbon bake sections below.
Smear FX after a bake: source AnimSequence and SkeletalMesh picked, velocity summary reporting 13 frames and a peak of 30.289 units/frame on foot_r at frame 2, with the Elongated, Ghost and Ribbon bake sections below.
  • Attack and impact animations that need an anime-style stretch on the contact frame
  • Fast limb motion where 30 fps sampling reads as strobing rather than speed
  • Stylised games that want smears as authored, reviewable assets rather than a post-process
  • Motion trails behind a weapon, hand, or foot during a dash
  • Don’t use it for subtle realism. This is deliberate exaggeration. For motion blur, use the engine’s.
  • Don’t bake before the animation is final. Every bake is tied to a specific frame range of a specific AnimSequence; re-timing the animation invalidates the meshes.
  • Don’t bake a long range “just in case”. The elongated bake writes one StaticMesh per frame. A 60-frame range is 60 assets.
  1. Open the EQLabs Hub and search for smear (or browse to Animation → Stylization).
  2. Click the tool card.
  3. Work top to bottom: Source → Velocity Sampling → Compute Velocities → a Bake section.

The bake sections are gated on the velocity cache. Compute Velocities must succeed first — every bake reads the frame window and per-frame velocities from that cache.

ControlNotes
Anim sequenceThe AnimSequence to sample velocities from
Skeletal meshThe SkeletalMesh whose proportions drive pose evaluation

Both are required. The skeletal mesh matters because velocities are evaluated against that mesh’s proportions — sampling with the wrong one gives plausible-looking but incorrect displacement.

ControlNotes
Target bonesComma-separated bone names whose velocities drive the smear. A single bone is fine; a chain gives a broader effect
Start frameFirst frame sampled. Velocity is computed as frame F+1 minus frame F
Peak frameFrame of maximum stretch — the impact frame in an attack
End frameLast frame sampled, inclusive. The animation must have frame F+1 available
Compute VelocitiesEvaluates the sequence across [Start, End] and fills the velocity cache

Examples of a target-bone entry:

foot_r
hand_r, lowerarm_r, upperarm_r

On success the panel reports the shape of what it sampled — frame count, bone count, total vectors, and which bone peaked at which frame:

Computed 12 frames × 1 bone — peak 842.3 on 'hand_r' @ frame 7

That peak line is the useful one: if the reported peak frame is not the frame you consider the impact, your Peak frame setting is wrong and the stretch envelope will be anchored in the wrong place.

An empty cache means the bone name does not exist on the skeleton — the most common single mistake, usually a left/right or naming-convention mismatch.

Stretches mesh vertices along per-frame bone velocity. This is the classic smear.

ControlNotes
Stretch scaleMultiplier on per-frame bone velocity → vertex displacement. Larger = longer smear
Output folder/Game-rooted path for baked StaticMesh assets + manifest
Auto-wire into source animation (recommended)Adds an AnimNotifyState_SmearFX to the source AnimSequence so the effect plays automatically
Bake Elongated SequenceOne StaticMesh per frame across [Start, End], each modulated by the stretch envelope
Bake Peak Frame OnlyQuick test bake — peak frame only, full displacement, no envelope

Use Bake Peak Frame Only while dialling in Stretch scale. It produces one asset instead of dozens, and the peak frame is where the effect is most visible. Only run the sequence bake once the look is right.

Sub-threshold frames are skipped rather than written, and the panel reports how many:

Sequence baked: 14 frames (3 skipped sub-threshold). Manifest: /Game/...

Pose snapshots trailing behind the motion.

ControlNotes
Ghost countHow many pose snapshots to bake, distributed evenly across [Start, End]
Opacity falloffPer-ghost opacity decay — ghost i gets opacity = pow(1 - falloff, i)
Bake Ghost SequenceBakes the snapshots and a manifest

Because falloff is exponential, small changes bite hard: a falloff of 0.5 leaves the fourth ghost at ~6% opacity. For a long, readable trail, keep falloff low and raise ghost count instead.

A single swept surface tracing a bone’s path — the classic motion line.

ControlNotes
Ribbon widthWidth of the swept surface in component units. ~8 for character-scale work
Trail bone (optional)Bone whose world path the ribbon traces. Leave blank to use the velocity peak bone
Bake Motion RibbonBakes one swept-surface StaticMesh

Leaving the trail bone blank is the right default — it uses whichever bone actually peaked, which is usually the one the eye follows.

With Auto-wire enabled, a bake adds an AnimNotifyState_SmearFX to the source AnimSequence, and the panel confirms it:

Sequence baked + wired: 14 frames, manifest /Game/... .
AnimSequence 'A_Attack_01' now plays the smear automatically —
add a USmearFXSequenceComponent to your character BP.

The notify alone is not enough. The character Blueprint needs a USmearFXSequenceComponent; the notify drives that component. Without it the notify fires into nothing and you see no smear — which reads as a failed bake but is not one.

Each bake writes StaticMesh assets plus a manifest under the output folder. The manifest is what ties a set of per-frame meshes to the sequence and range they came from, and it is what a future cleanup pass will read.

The panel shows a Coming soon banner for:

Profile: USmearFXProfile picker + 3 starter presets + bake-manifest cleanup (Phase 3)

Until that lands there is no preset system and no automated manifest cleanup — baked assets are removed by hand. Plan for that if you are iterating heavily, because each sequence bake writes a fresh set of per-frame meshes.

  • Compute Velocities before every bake. All three bake sections read the cache; if you change the frame range or bones, re-compute or you will bake against stale data.
  • End frame needs End + 1 to exist, since velocity is a forward difference. Setting End to the last frame of the sequence fails.
  • An empty cache almost always means a wrong bone name. Check the skeleton’s actual naming.
  • One StaticMesh per frame adds up fast. Keep ranges tight — the smear only needs to exist around the impact.
  • Re-timing the source animation invalidates every bake tied to it. Bake late.
  • No smear at runtime despite a “wired” message? The USmearFXSequenceComponent is missing from the character BP.
  • Peak frame drives the envelope. If the reported peak bone/frame disagrees with your intent, fix that before touching Stretch scale.
Report an issue with this tool

Opens our feedback form in a new tab with the tool name pre-filled.