Description

It's possible for blendspaces to end up with an invalid delta time record because of how UBlendSpace::TickAssetPlayer modifies the time record.  This only seems to happen with specific settings:

  • Axis to Scale Animation has to be set
  • The horizontal and vertical axis min/max values have to be non-zero
  • The inputs to the blendspace from the anim bp have to be outside of the range of the horizontal or vertical axis

It seems that the issue is this code that seems to attempt to scale the playback when the sample point is outside of the blendspace grid:

                FVector ClampedInput = GetClampedBlendInput(FilteredBlendInput);
                if (!ClampedInput.Equals(FilteredBlendInput))
                {
                    // apply speed change if you want, 
                    if (AxisToScale == BSA_X && !BlendParameters[0].bWrapInput)
                    {
                        if (ClampedInput.X != 0.f)
                        {
                            FilterMultiplier *= FilteredBlendInput.X / ClampedInput.X;
                        }
                    }
                    else if (AxisToScale == BSA_Y)
                    {
                        if (ClampedInput.Y != 0.f && !BlendParameters[1].bWrapInput)
                        {
                            FilterMultiplier *= FilteredBlendInput.Y / ClampedInput.Y;
                        }
                    }
                } 

While this deals with the possibility that ClampedInput.X or Y can be zero, it doesn't deal with FilteredBlendInput.X or Y being zero.

This issue doesn't break the generation of root motion from the blendspace.  But it does break anything that relies on the delta time record from the blendspace node - ie. the fix for [Link Removed]

Steps to Reproduce
  1. Open QAGame
  2. Create an anim bp for the ue5 mannequin
  3. Drop in Loco_Fwd_Speed_Leans and connect to the output
    1. Leave the input pins as 0, 0
  4. Place a breakpoint in UBlendSpace::TickAssetPlayer on the following line:
Instance.DeltaTimeRecord->Delta *= FilterMultiplier; 
  1. PIE
  2. Note how the Delta time value is set to 0 because FilterMultiplier is 0

Have Comments or More Details?

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

0
Login to Vote

Fixed
ComponentUE - Anim - Runtime
Target Fix5.5
Fix Commit36442132
CreatedApr 19, 2024
ResolvedSep 20, 2024
UpdatedOct 15, 2024
View Jira Issue