Description

The OnlyTickMontagesAndRefreshBonesWhenPlayingMontages setting added in 5.4 is broken.  It only works because it unintentionally forces a second call to UAnimInstance::UpdateAnimation (via RefreshBoneTransforms) which generates generates the montage evaluation data by performing a full update of the animation graph.  If this second update doesn't happen, we don't have any montage evaluation data so when we call evaluate on the slot node in the anim graph, we don't generate the correct pose.  This second update is also performed on the game thread so is particularly detrimental to any licensee that uses this setting.

There maybe other bugs hiding here since the desired codepath would be to only perform the montages in UAnimInstance::UpdateAnimation and not the anim graph.  I'm unsure if the anim graph is then in a valid state to evaluate.

Steps to Reproduce
  1. Open the attached project
  2. Place a breakpoint near the top of UAnimInstance::UpdateAnimation
  3. PIE
  4. Turn the camera so the mannequin isn't visible
  5. Hit X to trigger the montage
  6. Note how your breakpoint will be hit twice each frame:
    1. First from USkeletalMeshComponent::TickPose as expected
    2. Second from USkeletalMeshComponent::RefreshBoneTransforms with a 0 delta time which is not expected

Have Comments or More Details?

There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-213271 in the post.

1
Login to Vote

Fixed
Fix Commit36564374
CreatedApr 25, 2024
ResolvedSep 25, 2024
UpdatedOct 14, 2024
View Jira Issue