Description

The end of the level visibility section places a DeterminismFence. This causes the issue.
The fence clips the frame range and produces a discontinuous frame ranges,
e.g. 23201~24000, then 24001~24800.

[2021.10.28-18.24.27:597][721]LogTemp: FSequenceUpdater_Flat::Update ImportTime:  20800 bOutsideCachedRange:0 Bounds:  20001~  20801
[2021.10.28-18.24.27:630][722]LogTemp: FSequenceUpdater_Flat::Update ImportTime:  20800 bOutsideCachedRange:0 Bounds:  20800~  20801
[2021.10.28-18.24.27:664][723]LogTemp: FSequenceUpdater_Flat::Update ImportTime:  22400 bOutsideCachedRange:0 Bounds:  20801~  22401
[2021.10.28-18.24.27:697][724]LogTemp: FSequenceUpdater_Flat::Update ImportTime:  23200 bOutsideCachedRange:0 Bounds:  22401~  23201
[2021.10.28-18.24.27:697][724]LogBlueprintUserMessages: [AttachDelay_Director_0] At Frame 29
[2021.10.28-18.24.27:731][725]LogTemp: FSequenceUpdater_Flat::Update ImportTime:  23999 bOutsideCachedRange:0 Bounds:  23201~  24000
[2021.10.28-18.24.27:764][726]LogTemp: FSequenceUpdater_Flat::Update ImportTime:  24800 bOutsideCachedRange:1 Bounds:  24001~  24801
[2021.10.28-18.24.27:764][726]LogBlueprintUserMessages: [AttachDelay_Director_0] At Frame 31
[2021.10.28-18.24.27:797][727]LogTemp: FSequenceUpdater_Flat::Update ImportTime:  25600 bOutsideCachedRange:0 Bounds:  24801~  25601
[2021.10.28-18.24.27:830][728]LogTemp: FSequenceUpdater_Flat::Update ImportTime:  26400 bOutsideCachedRange:0 Bounds:  25601~  26401
[2021.10.28-18.24.27:864][729]LogTemp: FSequenceUpdater_Flat::Update ImportTime:  27200 bOutsideCachedRange:0 Bounds:  26401~  27201
[2021.10.28-18.24.27:897][730]LogTemp: FSequenceUpdater_Flat::Update ImportTime:  28000 bOutsideCachedRange:0 Bounds:  27201~  28001
[

 

Following work around can fix the issue.

 

void DissectRange(TArrayView<const FFrameTime> InDissectionTimes, const TRange<FFrameTime>& Bounds, TArray<TRange<FFrameTime>>& OutDissections)
{
...
	TRange<FFrameTime> TailRange(LowerBound, Bounds.GetUpperBound());
//	if (!TailRange.IsEmpty() && !TailRange.IsDegenerate())
	if (!TailRange.IsEmpty() )  // workaround
	{
		OutDissections.Add(TailRange);
	}
}

 

 

 

Steps to Reproduce

 

  1. (Optional) Apply the following code to the engine to make it easier to track progress
    void FSequenceUpdater_Flat::Update(UMovieSceneEntitySystemLinker* Linker, FInstanceHandle InstanceHandle, IMovieScenePlayer* InPlayer, const FMovieSceneContext& Context)
    ...
    
    	FFrameNumber ImportTime = ImportTimeFromContext(Context);
    		
    	const bool bOutsideCachedRange = !CachedEntityRange.Contains(ImportTime);
    	// Log ImportTime and FrameRange
    	UE_LOG(LogTemp, Log, TEXT("FSequenceUpdater_Flat::Update ImportTime:%7d bOutsideCachedRange:%d Bounds:%7d~%7d"), ImportTime.Value, bOutsideCachedRange?1:0, Range.GetLowerBoundValue().Value, Range.GetUpperBoundValue().Value);
    	if (bOutsideCachedRange)
    
    
  2. Open attached project [Link Removed] on 4.27
  3. After the editor launched , Open "/Game/AttachDelay" levelsequnce
  4. Press Play button on the sequencer window

 

Result 

 An event that should be executed at frame 30 is not triggered and AttachSection, which should also be executed at frame 30, is delayed by 1 tick.

See attached screen shots.

[Link Removed]
[Link Removed]
[Link Removed]  

 

Have Comments or More Details?

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

0
Login to Vote

Fixed
ComponentUE - Anim - Sequencer
Affects Versions4.274.27.1
Target Fix4.27.2
Fix Commit18010024
Release Commit18010024
CreatedOct 28, 2021
ResolvedNov 1, 2021
UpdatedDec 1, 2022