Runtime notes:
- Removes 'smart name' usage across the animation systems.
- Changed curve blending from a uniform array (sized per skeleton) to a sparse array of sorted named values. Blends and other combiners are performed using a dual iteration 'tape merge'.
- Skeleton curves are no longer guaranteed to cover all curve names that can be found at runtime.
Editor notes:
- Curve metadata (flags, bone links etc.) is still present on the skeleton, but can also now exist on a skeletal mesh
- Curve metadata (for morph targets) is still populated on import
- Curves can now be used arbitrarily at runtime
New features:
- New Find/Replace dialog that allows for batch-replacing curves and notifies across all of a project's assets
- New curve debugger tab in various Persona editors that allows for viewing curve values live. This also now allows viewing curves for specific pose watches.
- Pose watches now output curve tracks to the Rewind Debugger
#rb Jurre.deBaare,Nicholas.Frechette,Sara.Schvartzman,Helge.Mathee,Kiaran.Ritchie,Jaime.Cifuentes,Martin.Wilson,Keith.Yerex,Andrean.Franc (and more!)
#jira UE-167776
#jira UE-173716
#jira UE-110407
#preflight 63fc98c81206d91a2bc3ab90
#preflight 63f3ad4f81646f1f24c240c2
[CL 24421496 by Thomas Sarkanen 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]
Renamed / deprecated master/slave terms at SkinnedMeshComponent and SkeletalMeshComponent (plus all the users)
#jira UE-158645, UE-158525, UE-158532
#review @thomas.sarkanen @john.vanderburg
#preflight 62ced88af324cee189e48d43
#tests Verified the properties transfer correctly after modifying them without the fix and loading the character with the component with the fix applied
#preflight 62cfc490c36afd11ef07c9ab
[CL 21088391 by jaime cifuentes in ue5-main branch]
#jira UE-132455
Animaton attribute index remapping:
- Introduced FMeshAttributeContainer which stores the attributes according to FMeshPoseIndex
- Added FinalizeAttributeEvaluationResults to SkeletalMeshComponent - which remaps the evaluated compact-pose indexed attributes to mesh-indices
- Added CopyFrom template for different bone index types
- Updated CopyPoseFromMesh
* Added SourceBoneToTarget as attributes are mapped from source to target vs target to source for Bones
- Ensure that attributes are only inserted during evaluation if its bone index is present in the required bones
- Added testing for remapping attributes
* Remapping between LODs with removed bones
* Remapping between Skeletal meshes with different skeleton hierarchies
#rb Thomas.Sarkanen
#preflight 61e8067e843acf1b2428c2be
#ROBOMERGE-OWNER: jurre.debaare
#ROBOMERGE-AUTHOR: jurre.debaare
#ROBOMERGE-SOURCE: CL 18657038 in //UE5/Release-5.0/... via CL 18657062 via CL 18657063
#ROBOMERGE-BOT: UE5 (Release-Engine-Test -> Main) (v900-18638592)
[CL 18657069 by jurre debaare in ue5-main branch]
+ Attribute structures to UAnimDataModel
* These are sampled/copied into AnimSequence whenever they change
+ Attribute related Notifies and Payloads
+ Controller API and Actions for Attribute related behaviour
+ Type traits (TAttributeTypeTraitsBase) to determine support functionality for user-defined attribute types
+ TAttributeContainer equivalent to TCustomAttributes, used for keeping track of attributes at runtime in a TMap similar fashion
* Has two exported specializations FStack/Heap-AttributeContainer
+ IAttributeBlendOperator interface used for Attribute related operations in Anim graph
* Allows for user-defined blending behaviour for their associated types
+ TAttributeBlendOperator providing out-of-the-box blending behaviour for user-defined types
+ FAttributeBlendData helper structure, this encapsulates and abstracts the blend / attribute operations
* Exposes two iterators, allowing BlendOperator to loop through (type) overlapping Attributes and unique attributes
+ Float/Integer/String Animation Attribute structures used to support legacy TVariant CustomAttribute data types
+ Transform animation attribute structure to add support for single-FTransform based attributes
+ FAnimationAttributeIdentifier identifier used to reference an attribute in a script-friendly manor
+ AttributeTypes static API for registering Attribute types
+ FAttributeCurve providing a curve-type with an Attribute type as its underlying key-value
+ TWrappedAttribute helper structure to wrap end template operate on raw memory (TArray buffer)
+ Added tests for
* Attribute related controller functionality and actions
* Attribute curve key reduction
* Evaluating attributes from AnimSequence
* Attribute operations (blend, accumulate etc)
* Functional testing for blendspace attribute evaluation and blending
* Changed default attribute blend type to Blend vs Override
* Updated FBX import/export paths to handle and use new Attribute data structures
* Attribute data is now incorporated into animation source data DDC key
* Deprecated Custom Attributes stored on AnimSequence get converted into their equivalent Attribute structures
* Deprecated all previous CustomAttribute structures, APIs and files
* Corrected some comments in UAnimDataController.h
* Updated existing custom attribute tests to adhere to new blend expectations/behaviour
* Updated AnimSequence resize tests to also incorporate an attribute curve
* Changed layered bone blend to use .5 blend weight vs 1.0 to cover more behaviour
* Added transform attribute used to compare against bone transform during pre-existing functional testing (blended only)
- Deleted CustomAttributes details customization
#rb Thomas.Sarkanen
#fyi kiaran.ritchie, koray.hagen, timothy.daoust
[CL 15568420 by Jurre deBaare in ue5-main branch]
Adding a public member to USkeletalMesh class is now prohibed since it can break asynchronous operations that will be added next to this submit.
#rb danny.couture
#jira UEENT-3936
#rnx
[CL 14812920 by Alexis Matte in ue5-main branch]
#rnx
#rb none
#ROBOMERGE-OWNER: ryan.durand
#ROBOMERGE-AUTHOR: ryan.durand
#ROBOMERGE-SOURCE: CL 10869210 via CL 10869511 via CL 10869900
#ROBOMERGE-BOT: (v613-10869866)
[CL 10870549 by ryan durand in Main branch]
Merging using Fortnite_Main<->Fortnite_ControlRig
#rb none
#ROBOMERGE-OWNER: helge.mathee
#ROBOMERGE-AUTHOR: helge.mathee
#ROBOMERGE-SOURCE: CL 7321580 via CL 7323175
#ROBOMERGE-BOT: (v371-7306989)
[CL 7323351 by helge mathee in Main branch]
Fixes animation pose breaking when dynamically changing between skeletal meshes that use the same animbp but have a different number of bones.
[CODEREVIEW] Laurent.Delayen, Lina.Halper
#ROBOMERGE-SOURCE: CL 6938273 via CL 6938276 via CL 6938281 via CL 6938283 via CL 6943622
#ROBOMERGE-BOT: (v366-6836689)
[CL 6946612 by aaron cox in Main branch]
- where it seems the reference contains invalid skeleton
- refSkeleton access seems violated
- copied Jaren's fix w.r.t. evaluation crash due to setting different AnimBP in the middle of evaluation
#code review: Thomas.Sarkanen
#jira: FORT-160974, FORT-149957
#ROBOMERGE-SOURCE: CL 5672339 via CL 5675808
[CL 5675866 by lina halper in Main branch]
Moved the work to acquire the bone transforms to PreUpdate on the game thread.
Supported master-pose by checking whether what we are copying is running master-pose (this potentially fixes issues where character heads/hats can detach).
Profiled, this averages ~8us on console per call, so not too bad.
#rb Lina.Halper
[FYI] Lina.Halper
#ROBOMERGE-SOURCE: CL 4691593
[CL 4692711 by thomas sarkanen in Main branch]
Just in case - found a potential regression with the editor after this went in.
#rb none
#ROBOMERGE-SOURCE: CL 4688910
[CL 4689070 by thomas sarkanen in Main branch]
Moved the work to acquire the bone transforms to PreUpdate on the game thread.
Supported master-pose by checking whether what we are copying is running master-pose (this potentially fixes issues where character heads/hats can detach).
Profiled, this averages ~8us on console per call, so not too bad.
#rb Lina.Halper
#ROBOMERGE-SOURCE: CL 4688737
[CL 4689055 by thomas sarkanen in Main branch]