Files
UnrealEngineUWP/Engine/Source/Runtime/MovieScene
david bromberg 7a4ad9a2da Sequencer: Proper support for zero-timescale sub-sequence sections. The intention behind setting zero-timescale on a section is to hold at a single frame (the StartFrameOffset) while playing this sub section in its parent sequence.
Previously, this 'kind of' worked, but in practice there were divide by zeros happening and this was causing bugs under certain circumstances, as well as some odd behavior.

To support this change required a bit of a refactor of FMovieSceneSequenceTransform and its 'Warping'. Warping previously just indicated looping, but now it can also indicate timescales of zero. In cases of zero timescale transforms, we keep transforms split into FMovieSceneNestedSequenceTransforms rather than combining them.

Some logic that directly accessed the internal FMovieSceneTimeTransform 'LinearTransform' also had to be refactored to properly use the FMovieSceneSequenceTransform's accessor functions for doing things like inverse. When dealing with zero timescale in FMovieSceneTimeTransforms, there is the ability for loss of information when multiplying and inverting, and so to compensate for that we need every hierarchical step of the transforms stored. This also necessitated some changes in logic for TMovieSceneTimeArray and how it stores its TransformStack, as it was depending on the inverse of an inverse being a lossless operation when acting on a FMovieSceneTimeTransform.

See https://docs.google.com/document/d/1ftdIyi9J8At6fw31K5awKCUK5-75uz7F-MWAq5b1vWc/edit#heading=h.fclfl8j8p52c.

#jira UE-146012
[REVIEW] [at]ludovic.chabant [at]max.chen

[CL 26734557 by david bromberg in ue5-main branch]
2023-08-01 06:45:24 -04:00
..