* Lets" ShowDebug Animation" work
* Lets input filtering work
* Allows the source/pivot to be a bone or socket
#jira UE-168456
#rb thomas.sarkanen
#preflight 635be2d44710dd6af8a44d77
[CL 22828729 by danny chapman in ue5-main branch]
Also patched up some other instances of anim nodes where this could occur
#jira UE-166235
#preflight 634406087045f13c96aafa70
#rb Jurre.deBaare
[CL 22431499 by thomas sarkanen in ue5-main branch]
This is a huge change with the focus on improving compile times. It SHOULDN'T have any behavior changes since it is "only" splitting up large files in multiple smaller files and forward declare lots of types. This change is based on compile score results.
Highlights
* Moved lots and lots of types out of FortTypes.h and in to their own files to be able to avoid including FortTypes.h
* Removed FortTypes.h includes from lots of files
* Identified critical paths for includes and cut them off using forward declares or moving types out of big files
* Lots of adding of includes to be able to handle a large UE change that cut off dependencies in lots of engine files (will be submitted separately
Also fixed a bunch of linux non-monolithic build errors just to be able to verify that these changes worked
Reviewed in spirit by Marc Audy :-)
#rb none
#preflight 634350bcc272487ed4323f00
[CL 22427442 by marc audy in ue5-main branch]
Before:
3648 unity files
Total CPU Time: 47886.140625 s
Total time in Parallel executor: 498.81 seconds
After:
3548 unity files
Total CPU Time: 46643.828125 s
Total time in Parallel executor: 486.06 seconds
#jira
#preflight
[CL 22173263 by marc audy in ue5-main branch]
Enables use of layered blends in template animation blueprints
#jira UE-137671
#rb Jose Villarroel
#preflight 632c74aca4769ad714ac21c8
[CL 22145944 by thomas sarkanen in ue5-main branch]
Folding properties prevents derived classes from properly overriding these properties
#jira UE-158068
#preflight 63243da5121ffddebc793a02
#rb Jurre.deBaare
[CL 22050397 by thomas sarkanen in ue5-main branch]
**Animation Data Model load/cook time and memory optimizations**
- Added SetKeysOnly to FMovieSceneFloatChannel, allowing to only set value/frames values and skip allocating key handles
- Added EvaluateWithCache to TMovieSceneCurveChannelImpl, allowing to evaluate multiple curves using a caching data structure holding the frame-indices resulting from the FrameTime -> indexes calculationg
- UFKControlRig::GetControlName/GetControlTargetName, added thread_local mapping cache and optimized FName generation
- Made the sequencer bone curve keys 'sparse' again, if constant it just sets the default value for the curve otherwise it is still uniform
- Only resample keys when compressing, and clear them on any significant model changes and when save-during-cook has been completed
- Routed ::Presave for AnimSequencerDataModel directly through to UMovieSceneSignedObject to skip compiling cooked sequencer that that will/should never cooked and packaged
- Added some significant pass-by-reference changes to AnimSequencerModel APIs (passing large arrays by value previously) :doh:
- Optimized GenerateLegacyBoneData
Original CL description:
**New**
- Engine
- IAnimationDataModel interface
- AnimationData plugin
- AnimSequencerDataModel, sequencer based implementation of IAnimationDataModel
- AnimSequencerDataController, controller for above (implementation of IAnimationDataController)
- Added FCompressedRichCurve::PopulateCurve, allowing users to convert back to a FRichCurve for validation/debugging
- Added DefaultFrameRate to AnimationSettings, this replaces the hardcoded 30FPS in code
- Added ::GetKeyIndicesFromTime which takes FFrameRate
- Added AnimSequenceBase::OnAnimModelLoaded, this is required for correct postloading behaviour of data model (specifically AnimSequencerDataModel, as it depends on data from its outer ? anim sequence)
- Added IAnimationDataModel ::Evaluate which now takes responsibility for evaluating raw animation bone, curve and attribute data. And moved all trackbased evaluation code into AnimDataModel.cpp
- Added a.ForceEvalRawData allowing to force evaluation of source data
- Added a.SkipDDC to force compressing animation data locally
**Changed**
- Reparent UAnimDataModel to IAnimationDataModel interface, and rejig behaviour
- AnimSequenceBase now reference AnimDataModel as IAnimationDataModel
- Upgrade path for legacy to IAnimationDataModel and existing UAnimDataModel to IAnimationDataModel through IAnimationDataController::PopulateWithExisting
- IAnimationDataModel data is now frame(number/rate/time) based rather than seconds/keyindices. This enforces frameborder aligned data from now on.
- Moved RichCurve evaluation code from RichCurve.cpp to separate file and consolidated all instances of copy-pasta behaviour
- Updated/removed deprecated EngineTests around AnimSequences
- Changed many instances to use a FFrameTime together with a known FFrameRate versus seconds and sequencelength in float involving frame \/ time calculations (including instances of FAnimKeyHelper)
- Switched anim sequence evaluation to use double in Extraction context for time value and patched up places with static\_cast\<double\>
- FRichCurve::Eval
- Make sure we always evaluate keys when T >= Key0.Time and T <= KeyN.Time to deal with crazy userweighted tangents
- Fixed WeightedKeyDataAdapter::GetKeyInterpMode/GetKeyTangentWeightMode retrieving invalid values, as it was indexing according to KeyIndex rather than KeyIndex\*2. This made it so that values were misinterpreted.
- Fixed WeightedEvalForTwoKeys for compressed data retrieving GetKeyInterpMode and GetKeyTangentWeightMode using the wrong index value. As they are not indexed using KeyDataHandle type.
- Fixed issue where compression could crash when containing zero-key scale additivebase track (tries to retrieve)
- Replaced instances of NULL with nullptr
- Moved required decompression information into FAnimSequenceDecompressionContext and reimplemented decompression within UE::Anim::Decompression namespace and new file
- Deprecated ::GetRawDataGuid and replaced with GetDataModel()->GenerateGuid()
- Fixed UAnimStreamable evaluation/compression (previously broken with MVC refactor)
- Updated Animation exporting pipeline to be frame-based rather than seconds
- Deprecated RetargetPose, replaced with FRetargetingScope (used within AnimModel::Evaluate)
- Fixed BaseAdditiveAnimation array become invalid/incorrect when removing zero-additve tracks during compression
- Updated EngineTest animation sequence related tests to new APIs (while maintaining deprecated path testing as well for now)
- AnimDataController / Animation Sequence tests now generate a USkeleton for the transient animation sequence (used to perform the test on)
**Removed**
- Unused file/class AnimData/AnimDataNotifyCollector.h
#rb Thomas.Sarkanen, Mike.Zyracki
#jira UE-131296
#preflight 631f6897a9331c69c3a34d1e
[CL 21980597 by Jurre deBaare in ue5-main branch]
#jira UE-149026
#fix rely on bHasRelevantPoses=false to skip evaluating poses rather than zero-ing out the blendweight array - that way they are also 'cached' for when the node becomes relevant again given the LOD
#rb Thomas.Sarkanen
#preflight 6315e12c2b7fe03eb6286b1c
[CL 21790994 by Jurre deBaare in ue5-main branch]