Previously stale tracks were always purged inside FSequencer::EvaluateInternal, but this code was lost during the ECS migration and the segragation of the legacy evaluator from the main evaluation templates. Rather than put the code back in there, I'm opting to put it in the sequence instance's post-evaluate function, meaning it will apply to volatile sequences inside cooked builds too, rather than just the editor UI.
Ideally this code would exist as part of the FMovieSceneTrackEvaluator, but in order for it to only be applied for volatile sequences (and thus not affect runtime performance) we'd have to call through from the FSequenceInstance which would involve changing headers. I'd like to get this change into a patch release if possible, so I've opted for the hotfixable change - we can tidy it up in main.
#jira MH-5629
#rb max.chen
#preflight 625ee5addb15ac92db9d06c0
#ROBOMERGE-AUTHOR: andrew.rodham
#ROBOMERGE-SOURCE: CL 19811627 in //UE5/Release-5.0/... via CL 19818090
#ROBOMERGE-BOT: UE5 (Release-Engine-Staging -> Main) (v939-19570697)
[CL 19821323 by andrew rodham in ue5-main branch]
- This prevents passing an FInstanceHandle to something that specifically wants a root instance handle.
- FRootInstanceHandle is implicitly castable to an FInstanceHandle, but not visa-versa.
#rb Max.Chen
#jira none
#preflight 62226eac2f7d78332e198dd3
[CL 19273332 by Andrew Rodham in ue5-main branch]
- Track Instance Inputs can now be used as capture sources to capture pre-animated state
- PreAnimatedState extension now simply exists as a member of UMovieSceneEntitySystem. Previously the existence of the extension was used to determine whether any pre-animated state logic was required, but in practice this created more problems than it solved and led to some convoluted lifetime management code.
- Added a templated group manager type from which the object group manager can inherit. This simplifies the introduction of new group managers
- Removed the requirement that all pre-animated state must exist as part of a valid group. This forced state from 'master' tracks to be arbitrarily grouped together which put an unnecessary burden on the storage classes.
#jira UE-132512
#rb max.chen, matt.hoffman
[FYI] andrew.rodham
#preflight 61f2ca893765218cf01f290e
#ROBOMERGE-AUTHOR: max.chen
#ROBOMERGE-SOURCE: CL 18754810 in //UE5/Release-5.0/... via CL 18754825 via CL 18757520
#ROBOMERGE-BOT: UE5 (Release-Engine-Test -> Main) (v903-18687472)
[CL 18758489 by max chen in ue5-main branch]
- Added a LogMovieSceneECS and moved entity system logs to it - this helps distinguish between ECS notifications vs frame/timing information
- Added client name to Evaluating sequence log
- Remove outdaded "Clock Tick" words from TimeController log
LogMovieScene: VeryVerbose: Evaluating sequence SimpleSequence at frame 133, subframe 0.999992 (30.000000 fps).
LogMovieScene: VeryVerbose: Evaluating sequence SimpleSequence (client 0) at frame 109, subframe 0.999993 (30.000000 fps).
LogMovieScene: VeryVerbose: Evaluating sequence SimpleSequence (client 1) at frame 106, subframe 0.999994 (30.000000 fps).
#rb ludovic.chabant, matt.hoffman
#preflight 611d9e933a81b0000143aacd
#ROBOMERGE-SOURCE: CL 17226594
#ROBOMERGE-BOT: (v855-17104924)
[CL 17226661 by max chen in ue5-main branch]
- Added a new automation test to verify this codepath's correctness
#jira UE-115787
#jira FROST-2744
#rb Ludovic.Chabant, Max.Chen
#ROBOMERGE-SOURCE: CL 16397257 in //UE5/Private-Frosty/...
#ROBOMERGE-BOT: STARSHIP (Private-Frosty -> Main) (v804-16311228)
[CL 16403512 by max chen in ue5-main branch]
- This change introduces two separate types for dealing with binding IDs in different spaces explicitly: FFixedObjectBindingID and FRelativeObjectBindingID. The latter is portable if the sequence it was created within is nested inside another foreign hierarchy.
- FMovieSceneObjectBindingID remains, and is able to represent both of the new types, but should only be used for serialization to ensure compatability and consistency with editor tools that operate in different spaces.
- Any manual ResolveLocalToRoot or GetSequenceID processing has now been replaced with the new ResolveBoundObjects API, which provides a less error-prone way of resolving bindings that live in different sequences
#jira UE-74450
#rb Max.Chen, Ludovic.Chabant
[CL 14915667 by Andrew Rodham in ue5-main branch]