[Experimental - Skeletal Animations] Stopping an animation contributes to future fails of the skeletal mesh playing animations

Summary

Animations played on a skeletal mesh in verse via Scene Graph have the ability to fail silently if the skeletal mesh previously had an animation canceled on it. The call to PlaySkeletalAnimation() returns true but the animation fails to play

Please select what you are reporting on:

Unreal Editor for Fortnite

What Type of Bug are you experiencing?

Scene Graph

Steps to Reproduce

Pre-reqs:

  • Turn on the scene graph animation in the project settings
  • have a skeletal mesh and at least one animation

Steps:
1: Play an animation on a skeletal mesh through Verse
2: Stop that animation via verse
3: Repeat until the animation fails to play

Expected Result

All animations play

Observed Result

Animations randomly have a chance of not playing

Platform(s)

windows

Additional Notes

The order play and stop does not matter. The problem is just as likely to happen if you cancel the previously playing animation before playing a new one or playing a new one and canceling the previous one.

The timing also does not matter. The play and stop can occur in the same frame or have a frame delay between the calls.

1 Like

I can reproduce similar behavior on PlayStation, not only Windows.

(Eventually i just threw Astra on it, i let it give me a summary which is here below)

To isolate the issue, I reduced the test to switching between two looping skeletal animations on the same Scene Graph skeletal mesh. There are no non-looping animations or animation-completion timers involved.

The replacement procedure is:

  1. Construct a fresh skeletal_animation instance with IsLooping := true.
  2. Start it using PlaySkeletalAnimation with a nonzero 0.06-second ease-in.
  3. Keep the previous animation handle during the blend window.
  4. Call Cancel() on the previous handle after that window.
  5. Retain the new animation handle.

The first few replacements can work, but a subsequent replacement leaves the mesh static even though the PlaySkeletalAnimation call succeeds. In one reduced test, this occurred on the third replacement. The replacements were several seconds apart, so rapid triggering was not required.

Additional observations:

  • Each request uses a newly constructed animation instance; this is not an attempt to restart a previously cancelled instance.
  • Application logs show one playback request per trigger, with no duplicate controller startup in the inspected session.
  • The failure also occurs when the incoming animation is started before the outgoing animation is cancelled.
  • The issue is not limited to short animations ending before they become visible: it also affects animations explicitly configured to loop.
  • In a separate test, the mesh remained static for over two minutes after an accepted looping-animation request, with no intervening replacement command.
  • The animations play correctly in the animation editor.

The key discrepancy is that the API reports successful submission and returns a result handle, while visible animation playback fails. The logs cannot establish whether evaluation has stopped, the modifier is no longer contributing, or the client is not receiving/applying the expected state.

1 Like