UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
AnimSequence.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
10#include "CoreMinimal.h"
12#include "UObject/Object.h"
13#include "Misc/Guid.h"
14#include "Animation/AnimTypes.h"
18#include "CustomAttributes.h"
25#include "IO/IoHash.h"
26
27#if WITH_EDITOR
29#endif // WITH_EDITOR
30
31#include "AnimSequence.generated.h"
32
34
35class USkeletalMesh;
37class ITargetPlatform;
38enum class EQueuedWorkPriority : uint8;
41struct FCompactPose;
42
43namespace UE { namespace Anim { class FAnimSequenceCompilingManager; namespace Compression { struct FScopedCompressionGuard; } class FAnimationSequenceAsyncCacheTask; } }
44namespace UE::UAF { class FDecompressionTools; }
45
47
48// These two always should go together, but it is not right now.
49// I wonder in the future, we change all compressed to be inside as well, so they all stay together
50// When remove tracks, it should be handled together
51USTRUCT()
53{
55
56 UPROPERTY()
58
59 UPROPERTY()
60 TArray<FName> TrackNames;
61
62 // @todo expand this struct to work better and assign data better
64 {
65 AnimationTracks.Empty(NumNode);
66 AnimationTracks.AddZeroed(NumNode);
67 TrackNames.Empty(NumNode);
68 TrackNames.AddZeroed(NumNode);
69 }
70
72 {
73 TrackNames = MoveTemp(InTrackNames);
74 const int32 NumNode = TrackNames.Num();
75 AnimationTracks.Empty(NumNode);
76 AnimationTracks.AddZeroed(NumNode);
77 }
78
79 int32 GetNum() const
80 {
81 check (TrackNames.Num() == AnimationTracks.Num());
82 return (AnimationTracks.Num());
83 }
84};
85
89USTRUCT()
91{
93
94 UPROPERTY()
95 TArray<FVector3f> PosKeys;
96
97 UPROPERTY()
98 TArray<float> Times;
99};
100
104USTRUCT()
106{
108
109 UPROPERTY()
110 TArray<FQuat4f> RotKeys;
111
112 UPROPERTY()
113 TArray<float> Times;
114};
115
119USTRUCT()
121{
123
124 UPROPERTY()
125 TArray<FVector3f> ScaleKeys;
126
127 UPROPERTY()
128 TArray<float> Times;
129};
130
131
137USTRUCT()
139{
141
142 UPROPERTY()
143 FName CurveName;
144
145 UPROPERTY()
146 TArray<float> CurveWeights;
147
149 ENGINE_API bool IsValidCurveTrack();
150
154 ENGINE_API bool CompressCurveWeights();
155};
156
157USTRUCT()
159{
161
162 UPROPERTY()
163 TArray<uint8> ByteStream;
164
165 UPROPERTY()
166 TArray<float> Times;
167
168 UPROPERTY()
169 float Mins[3];
170
171 UPROPERTY()
172 float Ranges[3];
173
174
176 {
177 for (int32 ElementIndex = 0; ElementIndex < 3; ElementIndex++)
178 {
179 Mins[ElementIndex] = 0;
180 }
181 for (int32 ElementIndex = 0; ElementIndex < 3; ElementIndex++)
182 {
183 Ranges[ElementIndex] = 0;
184 }
185 }
186
187};
188
190UENUM()
200
201UCLASS(config=Engine, hidecategories=(UObject, Length), BlueprintType, MinimalAPI)
203{
205
206#if WITH_EDITORONLY_DATA
208 UPROPERTY(AssetRegistrySearchable, meta = (DisplayName = "Import File Framerate"))
210
212 UPROPERTY(AssetRegistrySearchable, meta = (DisplayName = "Import Resample Framerate"))
214
215protected:
217 UE_DEPRECATED(5.0, "NumFrames is deprecated see UAnimDataModel::GetNumberOfFrames for the number of source data frames, or GetNumberOfSampledKeys for the target keys")
218 UPROPERTY()
219 int32 NumFrames;
220
222 UE_DEPRECATED(5.0, "NumberOfKeys is deprecated see UAnimDataModel::GetNumberOfKeys for the number of source data keys, or GetNumberOfSampledKeys for the target keys")
223 UPROPERTY()
224 int32 NumberOfKeys;
225
227 UE_DEPRECATED(5.0, "SamplingFrameRate is deprecated see UAnimDataModel::GetFrameRate for the source frame rate, or GetSamplingFrameRate for the target frame rate instead")
228 UPROPERTY()
229 FFrameRate SamplingFrameRate;
230
231 UE_DEPRECATED(5.0, "RawAnimationData has been deprecated see FBoneAnimationTrack::InternalTrackData")
233
234 // Update this if the contents of RawAnimationData changes
235 UE_DEPRECATED(5.1, "RawDataGuid has been deprecated see GenerateGuidFromModel instead")
236 UPROPERTY()
238
242 UE_DEPRECATED(5.0, "Animation track names has been deprecated see FBoneAnimationTrack::Name")
243 UPROPERTY(VisibleAnywhere, DuplicateTransient, Category="Animation")
245
250public:
251
256 UPROPERTY(Category = Compression, EditAnywhere)
258
264 UPROPERTY(Category = Compression, EditAnywhere)
266#endif
267
269 UPROPERTY(Category = Compression, EditAnywhere, meta = (ForceShowEngineContent))
271
273 UPROPERTY(Category = Compression, EditAnywhere, meta = (ForceShowEngineContent))
275
276 // CompressedData is only valid in cook/non-editor runtime, see DataByPlatformKeyHash for editor-runtime data
277 UE_DEPRECATED(5.6, "CompressedData public access will be removed")
278 FCompressedAnimSequence CompressedData;
279
280 UPROPERTY(Category = Compression, EditAnywhere, meta = (ForceShowEngineContent))
281 TObjectPtr<class UVariableFrameStrippingSettings> VariableFrameStrippingSettings;
282
284 UPROPERTY(EditAnywhere, Category=AdditiveSettings, AssetRegistrySearchable)
286
287 /* Additive refrerence pose type. Refer above enum type */
288 UPROPERTY(EditAnywhere, Category=AdditiveSettings, meta=(DisplayName = "Base Pose Type"))
290
291 /* Additve reference frame if RefPoseType == AnimFrame **/
292 UPROPERTY(EditAnywhere, Category = AdditiveSettings)
293 int32 RefFrameIndex;
294
295 /* Additive reference animation if it's relevant - i.e. AnimScaled or AnimFrame **/
296 UPROPERTY(EditAnywhere, Category=AdditiveSettings, meta=(DisplayName = "Base Pose Animation"))
298
300 UPROPERTY(EditAnywhere, AssetRegistrySearchable, Category=Animation)
301 FName RetargetSource;
302
303#if WITH_EDITORONLY_DATA
305 UE_DEPRECATED(5.5, "Direct access to RetargetSourceAsset has been deprecated. Please use members GetRetargetSourceAsset & SetRetargetSourceAsset instead.")
306 UPROPERTY(EditAnywhere, AssetRegistrySearchable, Category=Animation, meta = (DisallowedClasses = "/Script/ApexDestruction.DestructibleMesh"))
308#endif
309
311 UPROPERTY()
312 TArray<FTransform> RetargetSourceAssetReferencePose;
313
315 UPROPERTY(EditAnywhere, AssetRegistrySearchable, Category = Animation)
316 EAnimInterpolationType Interpolation;
317
319 UPROPERTY(EditAnywhere, AssetRegistrySearchable, Category = RootMotion)
320 bool bEnableRootMotion;
321
323 UPROPERTY(EditAnywhere, Category = RootMotion)
325
327 UPROPERTY(EditAnywhere, Category = RootMotion)
328 bool bForceRootLock;
329
331 UPROPERTY(EditAnywhere, AssetRegistrySearchable, Category = RootMotion)
332 bool bUseNormalizedRootMotionScale;
333
335 UPROPERTY()
336 bool bRootMotionSettingsCopiedFromMontage;
337
338#if WITH_EDITORONLY_DATA
340 UPROPERTY()
341 int32 CompressCommandletVersion;
342
347 UPROPERTY(EditAnywhere, Category=Compression)
349
351 UPROPERTY(VisibleAnywhere, Instanced, Category=ImportSettings)
353
354 /*** for Reimport **/
356 UPROPERTY()
358
360 UPROPERTY()
362
363 // Track whether we have updated markers so cached data can be updated
365#endif // WITH_EDITORONLY_DATA
366
368 UPROPERTY(EditAnywhere, Category = Compression)
370
371public:
372 //~ Begin UObject Interface
373 ENGINE_API virtual void Serialize(FArchive& Ar) override;
374 ENGINE_API virtual void PostInitProperties() override;
375 ENGINE_API virtual void PostLoad() override;
376 ENGINE_API virtual void PreSave(FObjectPreSaveContext ObjectSaveContext) override;
377 ENGINE_API virtual void GetPreloadDependencies(TArray<UObject*>& OutDeps) override;
378#if WITH_EDITOR
379 ENGINE_API virtual void PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent) override;
380 ENGINE_API virtual void BeginCacheForCookedPlatformData(const ITargetPlatform* TargetPlatform) override;
381 ENGINE_API virtual bool IsCachedCookedPlatformDataLoaded(const ITargetPlatform* TargetPlatform) override;
383 ENGINE_API virtual void ClearAllCachedCookedPlatformData() override;
384 ENGINE_API virtual EDataValidationResult IsDataValid(class FDataValidationContext& Context) const override;
385#endif // WITH_EDITOR
386 ENGINE_API virtual void BeginDestroy() override;
387 ENGINE_API virtual bool IsReadyForFinishDestroy() override;
388 ENGINE_API virtual void GetAssetRegistryTags(FAssetRegistryTagsContext Context) const override;
389 UE_DEPRECATED(5.4, "Implement the version that takes FAssetRegistryTagsContext instead.")
390 ENGINE_API virtual void GetAssetRegistryTags(TArray<FAssetRegistryTag>& OutTags) const override;
391 static ENGINE_API void AddReferencedObjects(UObject* This, FReferenceCollector& Collector);
392 //~ End UObject Interface
393
394 //~ Begin UAnimationAsset Interface
395 ENGINE_API virtual bool IsValidAdditive() const override;
396 virtual TArray<FName>* GetUniqueMarkerNames() { return &UniqueMarkerNames; }
397#if WITH_EDITOR
398 ENGINE_API virtual bool GetAllAnimationSequencesReferred(TArray<UAnimationAsset*>& AnimationAssets, bool bRecursive = true) override;
399 ENGINE_API virtual void ReplaceReferredAnimations(const TMap<UAnimationAsset*, UAnimationAsset*>& ReplacementMap) override;
400 ENGINE_API virtual void OnSetSkeleton(USkeleton* NewSkeleton) override;
401#endif
402 //~ End UAnimationAsset Interface
403
404 //~ Begin UAnimSequenceBase Interface
405 ENGINE_API virtual void HandleAssetPlayerTickedInternal(FAnimAssetTickContext &Context, const float PreviousTime, const float MoveDelta, const FAnimTickRecord &Instance, struct FAnimNotifyQueue& NotifyQueue) const override;
406 virtual bool HasRootMotion() const override { return bEnableRootMotion; }
407 ENGINE_API virtual void RefreshCacheData() override;
408 virtual EAdditiveAnimationType GetAdditiveAnimType() const override { return AdditiveAnimType; }
409 ENGINE_API virtual int32 GetNumberOfSampledKeys() const override;
410 virtual FFrameRate GetSamplingFrameRate() const override { return PlatformTargetFrameRate.Default; }
411 ENGINE_API virtual void EvaluateCurveData(FBlendedCurve& OutCurve, const FAnimExtractContext& AnimExtractContext, bool bForceUseRawData = false) const override;
412 ENGINE_API virtual float EvaluateCurveData(FName CurveName, const FAnimExtractContext& AnimExtractContext, bool bForceUseRawData = false) const override;
413 // This will only check the current platform its compressed data (if valid)
414 ENGINE_API virtual bool HasCurveData(FName CurveName, bool bForceUseRawData) const override;
415
416 //~ End UAnimSequenceBase Interface
417
418 UE_DEPRECATED(5.6, "Please use ExtractRootMotion with FAnimExtractContext")
419 virtual FTransform ExtractRootMotion(float StartTime, float DeltaTime, bool bAllowLooping) const override final { PRAGMA_DISABLE_DEPRECATION_WARNINGS return UAnimSequenceBase::ExtractRootMotion(StartTime, DeltaTime, bAllowLooping); PRAGMA_ENABLE_DEPRECATION_WARNINGS }
420 UE_DEPRECATED(5.6, "Please use ExtractRootMotionFromRange with FAnimExtractContext")
422 UE_DEPRECATED(5.6, "Please use ExtractRootTrackTransform with FAnimExtractContext")
424
425 // Extract Root Motion transform from the animation
426 ENGINE_API virtual FTransform ExtractRootMotion(const FAnimExtractContext& ExtractionContext) const override final;
427 // Extract Root Motion transform from a contiguous position range (no looping)
428 ENGINE_API virtual FTransform ExtractRootMotionFromRange(double StartTime, double EndTime, const FAnimExtractContext& ExtractionContext) const override final;
429 // Extract the transform from the root track for the given animation position
430 ENGINE_API virtual FTransform ExtractRootTrackTransform(const FAnimExtractContext& ExtractionContext, const FBoneContainer* RequiredBones) const override final;
431
432 // Begin Transform related functions
433 ENGINE_API virtual void GetAnimationPose(FAnimationPoseData& OutAnimationPoseData, const FAnimExtractContext& ExtractionContext) const override;
434
444
445 UE_DEPRECATED(5.6, "GetCompressedTrackToSkeletonMapTable has been deprecated. Use GetCompressedData().CompressedTrackToSkeletonMapTable instead")
446 const TArray<FTrackToSkeletonMap>& GetCompressedTrackToSkeletonMapTable() const
447 {
449 return TempArray;
450 }
451
452 UE_DEPRECATED(5.6, "GetCompressedCurveIndexedNames has been deprecated. Use GetCompressedData().IndexedCurveNames instead")
453 const TArray<FAnimCompressedCurveIndexedName>& GetCompressedCurveIndexedNames() const
454 {
456 return TempArray;
457 }
458
459#if WITH_EDITORONLY_DATA
460protected:
462#endif
463
464public:
465#if WITH_EDITOR
466 // Assigns the passed skeletal mesh to the retarget source
467 UFUNCTION(BlueprintCallable, Category = "Animation")
469
470 // Resets the retarget source asset
471 UFUNCTION(BlueprintCallable, Category = "Animation")
473
474 // Returns the retarget source asset soft object pointer.
475 UFUNCTION(BlueprintPure, Category = "Animation")
477
478 // Update the retarget data pose from the source, if it exist, else clears the retarget data pose saved in RetargetSourceAssetReferencePose.
479 // Warning : This function calls LoadSynchronous at the retarget source asset soft object pointer, so it can not be used at PostLoad
480 UFUNCTION(BlueprintCallable, Category = "Animation")
482#endif
483
484private:
485#if WITH_EDITORONLY_DATA
487 UE_DEPRECATED(5.0, "UpdateFrameRate has been deprecated see UAnimDataController::SetFrameRate")
489#endif
490
491public:
492 ENGINE_API const TArray<FTransform>& GetRetargetTransforms() const;
493 ENGINE_API FName GetRetargetTransformsSourceName() const;
494
503 ENGINE_API void RetargetBoneTransform(FTransform& BoneTransform, const int32 SkeletonBoneIndex, const FCompactPoseBoneIndex& BoneIndex, const FBoneContainer& RequiredBones, const bool bIsBakedAdditive) const;
504
512
520
521 UE_DEPRECATED(5.6, "Please use GetBoneTransform with FAnimExtractContext")
522 void GetBoneTransform(FTransform& OutAtom, FSkeletonPoseBoneIndex BoneIndex, double Time, bool bUseRawData, TOptional<EAnimInterpolationType> InterpolationOverride=TOptional<EAnimInterpolationType>()) const { FAnimExtractContext ExtractionContext(Time); ExtractionContext.InterpolationOverride = InterpolationOverride; return GetBoneTransform(OutAtom, BoneIndex, ExtractionContext, bUseRawData); }
523
532 ENGINE_API void GetBoneTransform(FTransform& OutAtom, FSkeletonPoseBoneIndex BoneIndex, const FAnimExtractContext& ExtractionContext, bool bUseRawData) const;
533
542 UE_DEPRECATED(5.6, "Please use GetBoneTransform with FAnimExtractContext")
544 // End Transform related functions
545
546 // Begin Memory related functions
547
550#if WITH_EDITOR
552
557
562
567#endif // WITH_EDITOR
568
572 ENGINE_API int32 GetApproxBoneCompressedSize() const;
573
577 ENGINE_API int32 GetApproxCompressedSize() const;
578protected:
582 ENGINE_API int32 GetApproxBoneCompressedSize_Lockless() const;
583
587 ENGINE_API int32 GetApproxCompressedSize_Lockless() const;
588
589 void EvaluateCurveData_Lockless(FBlendedCurve& OutCurve, const FAnimExtractContext& AnimExtractContext, bool bForceUseRawData = false) const;
590 float EvaluateCurveData_Lockless(FName CurveName, const FAnimExtractContext& AnimExtractContext, bool bForceUseRawData = false) const;
591 FTransform ExtractRootTrackTransform_Lockless(const FAnimExtractContext& ExtractionContext, const FBoneContainer* RequiredBones) const;
592
593 ENGINE_API void GetBoneTransform_Lockless(FTransform& OutAtom, FSkeletonPoseBoneIndex BoneIndex, const FAnimExtractContext& ExtractionContext, bool bForceUseRawData) const;
594
595#if WITH_EDITOR
597#endif // WITH_EDITOR
598
599
600protected:
601 UE_DEPRECATED(5.6, "ClearCompressedBoneData will be removed")
602 void ClearCompressedBoneData() {}
603 UE_DEPRECATED(5.6, "ClearCompressedCurveData will be removed")
604 void ClearCompressedCurveData() {}
605 // Write the compressed data to the supplied FArchive
606 ENGINE_API void SerializeCompressedData(FArchive& Ar, bool bDDCData);
607 ENGINE_API void SerializeCompressedData(FArchive& Ar, FCompressedAnimSequence& CompressedData);
608#if WITH_EDITOR
609 ENGINE_API virtual void OnAnimModelLoaded() override;
610#endif
611public:
612 ENGINE_API bool IsCompressedDataValid() const;
613 ENGINE_API bool IsBoneCompressedDataValid() const;
614 ENGINE_API bool IsCurveCompressedDataValid() const;
615 // End Memory related functions
616#if WITH_EDITOR
620 ENGINE_API void AddKeyToSequence(float Time, const FName& BoneName, const FTransform& AdditiveTransform);
621
622 UE_DEPRECATED(5.6, "DoesNeedRecompress has been renamed to IsCompressedDataOutOfDate")
624
629
637 ENGINE_API bool CreateAnimation(class USkeletalMeshComponent* MeshComponent);
641 ENGINE_API bool CreateAnimation(class UAnimSequence* Sequence);
642
646 ENGINE_API virtual bool IsValidToPlay() const override;
647
648 // Get a pointer to the data for a given Anim Notify
650
651 virtual int32 GetMarkerUpdateCounter() const { return MarkerDataUpdateCounter; }
652#endif
653
655 ENGINE_API void SortSyncMarkers();
656
657#if WITH_EDITOR
660
663#endif
664
665 // Advancing based on markers
666 ENGINE_API float GetCurrentTimeFromMarkers(FMarkerPair& PrevMarker, FMarkerPair& NextMarker, float PositionBetweenMarkers) const;
667 ENGINE_API virtual void AdvanceMarkerPhaseAsLeader(bool bLooping, float MoveDelta, const TArray<FName>& ValidMarkerNames, float& CurrentTime, FMarkerPair& PrevMarker, FMarkerPair& NextMarker, TArray<FPassedMarker>& MarkersPassed, const UMirrorDataTable* MirrorTable) const;
668 ENGINE_API virtual void AdvanceMarkerPhaseAsFollower(const FMarkerTickContext& Context, float DeltaRemaining, bool bLooping, float& CurrentTime, FMarkerPair& PreviousMarker, FMarkerPair& NextMarker, const UMirrorDataTable* MirrorTable) const;
669 ENGINE_API virtual void GetMarkerIndicesForTime(float CurrentTime, bool bLooping, const TArray<FName>& ValidMarkerNames, FMarkerPair& OutPrevMarker, FMarkerPair& OutNextMarker) const;
670
671 ENGINE_API virtual FMarkerSyncAnimPosition GetMarkerSyncPositionFromMarkerIndicies(int32 PrevMarker, int32 NextMarker, float CurrentTime, const UMirrorDataTable* MirrorTable) const;
672 ENGINE_API virtual void GetMarkerIndicesForPosition(const FMarkerSyncAnimPosition& SyncPosition, bool bLooping, FMarkerPair& OutPrevMarker, FMarkerPair& OutNextMarker, float& CurrentTime, const UMirrorDataTable* MirrorTable) const;
673
674 ENGINE_API virtual float GetFirstMatchingPosFromMarkerSyncPos(const FMarkerSyncAnimPosition& InMarkerSyncGroupPosition) const override;
675 ENGINE_API virtual float GetNextMatchingPosFromMarkerSyncPos(const FMarkerSyncAnimPosition& InMarkerSyncGroupPosition, const float& StartingPosition) const override;
676 ENGINE_API virtual float GetPrevMatchingPosFromMarkerSyncPos(const FMarkerSyncAnimPosition& InMarkerSyncGroupPosition, const float& StartingPosition) const override;
677
678 // to support anim sequence base to all montages
679 ENGINE_API virtual void EnableRootMotionSettingFromMontage(bool bInEnableRootMotion, const ERootMotionRootLock::Type InRootMotionRootLock) override;
680 ENGINE_API virtual bool GetEnableRootMotionSettingFromMontage() const override;
681
682#if WITH_EDITOR
683 virtual class UAnimSequence* GetAdditiveBasePose() const override
684 {
685 if (IsValidAdditive())
686 {
687 return RefPoseSeq;
688 }
689
690 return nullptr;
691 }
692
693 // Is this animation valid for baking into additive
694 ENGINE_API bool CanBakeAdditive() const;
695
696 // Test whether at any point we will scale a bone to 0 (needed for validating additive anims)
698
699 // Helper function to allow us to notify animations that depend on us that they need to update
701
702 // Helper function to allow us to update streaming animations that depend on us with our data when we are updated
704
707#endif
708
709private:
717 ENGINE_API void GetBonePose_AdditiveMeshRotationOnly(FAnimationPoseData& OutAnimationPoseData, const FAnimExtractContext& ExtractionContext) const;
718
719protected:
721 ENGINE_API virtual bool CanEvaluateRawAnimationData() const;
722
723private:
724#if WITH_EDITOR
729
732#endif
733
734public:
737
739 ENGINE_API void ValidateCurrentPosition(const FMarkerSyncAnimPosition& Position, bool bPlayingForwards, bool bLooping, float&CurrentTime, FMarkerPair& PreviousMarker, FMarkerPair& NextMarker, const UMirrorDataTable* MirrorTable = nullptr) const;
740
741 UE_DEPRECATED(5.6, "Public access to UseRawDataForPoseExtraction has been deprecated")
742 ENGINE_API bool UseRawDataForPoseExtraction(const FBoneContainer& RequiredBones) const;
743
744public:
746 UPROPERTY()
748
751
752public:
755#if WITH_EDITOR
758
759 // Begin UAnimSequenceBase virtual overrides
760 ENGINE_API virtual void OnModelModified(const EAnimDataModelNotifyType& NotifyType, IAnimationDataModel* Model, const FAnimDataModelNotifPayload& Payload) override;
761 ENGINE_API virtual void PopulateModel() override;
762 // End UAnimSequenceBase virtual overrides
763
768public:
770 // Resets the bone and curve compression settings to the project default
772#endif // WITH_EDITOR
773
774protected:
775 UPROPERTY(VisibleAnywhere, AssetRegistrySearchable, Category = "Animation")
777
778#if WITH_EDITORONLY_DATA
779 UPROPERTY()
781
782 UPROPERTY(VisibleAnywhere, AssetRegistrySearchable, Category = "Animation", Transient, DuplicateTransient)
784
785 UPROPERTY(VisibleAnywhere, Category = "Animation", Transient, DuplicateTransient)
787
789private:
791 UE_DEPRECATED(5.0, "PerBoneCustomAttributeData has been deprecated see UAnimDataModel::AnimatedBoneAttributes")
792 UPROPERTY(VisibleAnywhere, EditFixedSize, Category=CustomAttributes)
795#endif // WITH_EDITORONLY_DATA
796
797protected:
798 UPROPERTY()
800
801#if WITH_EDITOR
802 ENGINE_API FIoHash CreateDerivedDataKeyHash(const ITargetPlatform* TargetPlatform) const;
803 FString CreateDerivedDataKeyString(const ITargetPlatform* TargetPlatform) const;
804
806 ENGINE_API bool PollCacheDerivedData(const FIoHash& KeyHash) const;
807 ENGINE_API void EndCacheDerivedData(const FIoHash& KeyHash);
808
813
814 // Cached FIoHash keys stored according to ITargetPlatform type-hash
816 mutable FRWLock HashCacheLock;
817 // Whether or not compressed data should be cleared in case of residency releasing (cook-time behaviour only)
819
820 // Bi-directional multi-maps keeping track of required (target-platform specific) compressed data, stored by hash and provided identifier from API usage
823
824 mutable FRWLock ResidencyLock;
825
827 ENGINE_API bool WaitForAsyncTasks(float TimeLimitSeconds);
830 ENGINE_API bool IsAsyncTaskComplete() const;
831 ENGINE_API bool IsCompiling() const;
833
835
836 const FCompressedAnimSequence& GetPlatformCompressedData(const ITargetPlatform* InTargetPlatform) const;
837#endif // WITH_EDITOR
838
839 // Whether or not RawData should be sampled during pose extraction, either because compressed data is not available or through user directive
843
844 // Clears all currently cached compressed data (all platform data)
846 // Clears compressed data, if currently cached, for specified hash
848 // Whether or not compressed data, for specified hash, is currently cached
850
851private:
852 // Returns compressed animation data for specified Hash or TargetPlatform (not thread-safe see FCompressedAnimationDataReadScope and FCompressedAnimationResidencyScope)
853 ENGINE_API const FCompressedAnimSequence& GetPlatformCompressedData(const FAnimExtractContext& AnimExtractContext) const;
855 ENGINE_API FCompressedAnimSequence& GetPlatformCompressedData(const ITargetPlatform* InTargetPlatform);
856
857 // Returns compressed animation data for the current platform (not thread-safe in editor-builds see FCompressedAnimationDataReadScope and FCompressedAnimationResidencyScope)
858 ENGINE_API const FCompressedAnimSequence& GetCompressedData_Internal() const;
859 // Returns compressed animation data for the current platform (not thread-safe in editor-builds see FCompressedAnimationDataReadScope and FCompressedAnimationResidencyScope)
860 ENGINE_API FCompressedAnimSequence& GetCompressedData_Internal();
861
862public:
865#if WITH_EDITOR
867
868 // Returns hash identifying compressed animation data with the specified target platform its settings (these can overlap between different platforms due to the settings matching)
869 ENGINE_API FIoHash GetDerivedDataKeyHash(const ITargetPlatform* TargetPlatform) const;
870
871 // Whether or not compressed data, for specified platform, is currently cached
873 // Synchronous caching of compressed animation data for provided target platform
874 ENGINE_API void CacheDerivedDataForPlatform(const ITargetPlatform* TargetPlatform);
875
876 // Whether or not animation sequence can be compressed (dependent on loading state)
877 ENGINE_API bool CanBeCompressed() const;
878
879 // Whether or not compressed animation data has been requested to stay resident until released
882 // Fetches and keeps resident the compressed animation data for the provided target platform (until released)
884 // Releases previously requested residency of compressed animation data
886
887 // Synchronous caching of compressed animation data for provided target platform
888 UE_DEPRECATED(5.6, "CacheDerivedData returning FCompressedAnimSequence reference has been deprecated, use CacheDerivedDataForPlatform")
889 ENGINE_API FCompressedAnimSequence& CacheDerivedData(const ITargetPlatform* TargetPlatform);
890
892#endif
893
894public:
895 // Provides access to an instance of compressed animation data within the lifetime of FScopedCompressedAnimSequence, should _only_ be used on the stack due to risk of deadlocking
897 {
903
904 const FCompressedAnimSequence& operator->() const { return *CompressedData; }
905 const FCompressedAnimSequence& Get() const { return *CompressedData; }
906#if WITH_EDITOR
908 {
910 }
911#endif // WITH_EDITOR
912
913 protected:
915 CompressedData(InCompressedData)
916 {
917 check(CompressedData && InAnimSequence);
918#if WITH_EDITOR
920#endif // WITH_EDITOR
921 }
922
923 const FCompressedAnimSequence* CompressedData = nullptr;
924#if WITH_EDITOR
926#endif // WITH_EDITOR
927 friend class UAnimSequence;
928 };
929
930 // Returns scoped version of the compressed AnimSequence, only valid to read when FScopedConstCompressedAnimSequence is in scope (this internally locks CompressedDataLock)
933
934#if WITH_EDITOR
936protected:
939 {
941 {
944 }
946 };
947
950 {
952 {
954 InAnimSequence->SharedCompressedDataMutex.Lock();
955 }
957 {
958 AnimSequence->SharedCompressedDataMutex.Unlock();
959 }
960
961 const UAnimSequence* AnimSequence = nullptr;
962 };
963#endif // WITH_EDITOR
964
965public:
966 friend class UAnimationAsset;
967 friend struct FScopedAnimSequenceRawDataCache;
968 friend class UAnimationBlueprintLibrary;
970 friend class FCustomAttributeCustomization;
971 friend class FAnimSequenceDeterminismHelper;
972 friend class FAnimSequenceTestBase;
973 friend struct UE::Anim::Compression::FScopedCompressionGuard;
974 friend class FAnimDataControllerTestBase;
975 friend class UE::Anim::FAnimSequenceCompilingManager;
976 friend UE::UAF::FDecompressionTools;
977 friend class FAnimSequenceDetails;
978 friend class FCompressedAnimationDataNodeBuilder;
979 friend class UAnimBank;
980 friend class FAnimBankBuildAsyncCacheTask;
982 friend class UE::Anim::FAnimationSequenceAsyncCacheTask;
983};
984
985#ifndef UE_COMPRESSED_DATA_WRITE_SCOPE
986#if WITH_EDITOR
987 #define UE_COMPRESSED_DATA_WRITE_SCOPE(sequence) \
988 UAnimSequence::FCompressedAnimationDataWriteScope Scope(sequence);
989#else
990 #define UE_COMPRESSED_DATA_WRITE_SCOPE(sequence)
991#endif
992#endif
993
994#ifndef UE_COMPRESSED_DATA_READ_SCOPE
995#if WITH_EDITOR
996 #define UE_COMPRESSED_DATA_READ_SCOPE(sequence) \
997 UAnimSequence::FCompressedAnimationDataReadScope Scope(sequence);
998#else
999 #define UE_COMPRESSED_DATA_READ_SCOPE(sequence)
1000#endif
1001#endif
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
EAnimDataModelNotifyType
Definition AnimDataNotifications.h:20
EStripAnimDataOnDedicatedServerSettings
Definition AnimSequence.h:192
ENGINE_API int32 GPerformFrameStripping
Definition AnimSequence.cpp:83
TArray< FTransform > FTransformArrayA2
Definition AnimSequence.h:33
EAnimInterpolationType
Definition AnimTypes.h:689
EAdditiveAnimationType
Definition AnimTypes.h:575
#define check(expr)
Definition AssertionMacros.h:314
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
FPlatformTypes::int64 int64
A 64-bit signed integer.
Definition Platform.h:1127
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define PRAGMA_ENABLE_DEPRECATION_WARNINGS
Definition GenericPlatformCompilerPreSetup.h:12
#define PRAGMA_DISABLE_DEPRECATION_WARNINGS
Definition GenericPlatformCompilerPreSetup.h:8
const bool
Definition NetworkReplayStreaming.h:178
#define UPROPERTY(...)
UObject definition macros.
Definition ObjectMacros.h:744
#define UFUNCTION(...)
Definition ObjectMacros.h:745
#define GENERATED_UCLASS_BODY(...)
Definition ObjectMacros.h:768
#define UCLASS(...)
Definition ObjectMacros.h:776
#define UENUM(...)
Definition ObjectMacros.h:749
#define USTRUCT(...)
Definition ObjectMacros.h:746
#define GENERATED_USTRUCT_BODY(...)
Definition ObjectMacros.h:767
EQueuedWorkPriority
Definition QueuedThreadPool.h:14
EDataValidationResult
Definition UObjectGlobals.h:4225
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition Engine.Build.cs:7
Definition Archive.h:1208
Definition UnrealType.h:3702
Definition AssetRegistryTagsContext.h:98
Definition DataValidation.h:40
Definition AnimationAsset.h:513
Definition NameTypes.h:617
Definition ObjectSaveContext.h:244
Definition QueuedThreadPool.h:105
Definition UObjectGlobals.h:2492
Definition IAnimationDataModel.h:127
Definition Array.h:670
Definition Atomic.h:538
Definition EnumAsByte.h:22
Definition UnrealString.h.inl:34
Definition UniquePtr.h:107
Definition AnimBank.h:178
Definition AnimBoneCompressionSettings.h:23
Definition AnimDataModel.h:18
Definition AnimSequenceBase.h:37
virtual FTransform ExtractRootMotionFromRange(float StartTrackPosition, float EndTrackPosition) const
Definition AnimSequenceBase.h:199
virtual FTransform ExtractRootTrackTransform(float Time, const FBoneContainer *RequiredBones) const
Definition AnimSequenceBase.h:205
virtual FTransform ExtractRootMotion(float StartTime, float DeltaTime, bool bAllowLooping) const
Definition AnimSequenceBase.h:193
Definition AnimSequence.h:203
ENGINE_API void ClearCompressionData(const FIoHash &InKeyHash)
TMap< FAnimationAttributeIdentifier, FAttributeCurve > AttributeCurves
Definition AnimSequence.h:799
ENGINE_API bool UseRawDataForPoseExtraction(const FBoneContainer &RequiredBones) const
Definition AnimSequence.cpp:3667
ENGINE_API void EvaluateAttributes(FAnimationPoseData &OutAnimationPoseData, const FAnimExtractContext &ExtractionContext, bool bUseRawData) const
Definition AnimSequence.cpp:3711
ENGINE_API void GetAdditiveBasePose(FAnimationPoseData &OutAnimationPoseData, const FAnimExtractContext &ExtractionContext) const
Definition AnimSequence.cpp:1917
ENGINE_API void BeginCacheDerivedDataForCurrentPlatform()
ENGINE_API void CacheDerivedDataForCurrentPlatform()
void GetBoneTransform(FTransform &OutAtom, FSkeletonPoseBoneIndex BoneIndex, double Time, bool bUseRawData, TOptional< EAnimInterpolationType > InterpolationOverride=TOptional< EAnimInterpolationType >()) const
Definition AnimSequence.h:522
ENGINE_API void RefreshSyncMarkerDataFromAuthored()
Definition AnimSequence.cpp:3302
ENGINE_API bool HasCompressedDataForHash(const FIoHash &InKeyHash) const
virtual ENGINE_API bool IsValidAdditive() const override
Definition AnimSequence.cpp:2615
virtual EAdditiveAnimationType GetAdditiveAnimType() const override
Definition AnimSequence.h:408
FPerPlatformFrameRate PlatformTargetFrameRate
Definition AnimSequence.h:776
ENGINE_API void ClearAllCompressionData()
virtual FFrameRate GetSamplingFrameRate() const override
Definition AnimSequence.h:410
virtual TArray< FName > * GetUniqueMarkerNames()
Definition AnimSequence.h:396
ENGINE_API bool ShouldUseRawDataForPoseExtraction(const FBoneContainer &RequiredBones, const FAnimExtractContext &ExtractionContext) const
Definition AnimSequence.cpp:3683
TArray< FAnimSyncMarker > AuthoredSyncMarkers
Definition AnimSequence.h:747
ENGINE_API FScopedCompressedAnimSequence GetCompressedData() const
Definition AnimSequence.cpp:581
virtual ENGINE_API bool CanEvaluateRawAnimationData() const
Definition AnimSequence.cpp:1994
virtual bool HasRootMotion() const override
Definition AnimSequence.h:406
ENGINE_API void ValidateCurrentPosition(const FMarkerSyncAnimPosition &Position, bool bPlayingForwards, bool bLooping, float &CurrentTime, FMarkerPair &PreviousMarker, FMarkerPair &NextMarker, const UMirrorDataTable *MirrorTable=nullptr) const
Definition AnimSequence.cpp:3605
ENGINE_API bool ShouldUseRawDataForPoseExtraction_Lockless(const FBoneContainer &RequiredBones, const FAnimExtractContext &ExtractionContext) const
Definition AnimSequence.cpp:3689
TArray< FName > UniqueMarkerNames
Definition AnimSequence.h:750
Definition AnimationAsset.h:1020
Definition CriticalSection.h:14
Definition SharedRecursiveMutex.h:40
Definition MirrorDataTable.h:102
Definition Object.h:95
Definition SkeletalMesh.h:440
Definition Skeleton.h:295
Type
Definition AnimEnums.h:14
Definition AnimSequence.h:44
Definition AdvancedWidgetsModule.cpp:13
Definition AnimationAsset.h:850
Definition AnimCompress.h:231
Definition AnimCompressionTypes.h:746
Definition AnimCurveCompressionCodec_UniformIndexable.h:15
Definition AnimDataNotifications.h:251
Definition AnimationAsset.h:267
Definition AnimNotifyQueue.h:161
Definition AnimSequenceDecompressionContext.h:14
Definition AnimSequence.h:53
int32 GetNum() const
Definition AnimSequence.h:79
void Initialize(TArray< FName > InTrackNames)
Definition AnimSequence.h:71
Definition AnimTypes.h:482
Definition AnimationAsset.h:411
Definition AttributeIdentifier.h:17
Definition AnimationPoseData.h:16
Definition AttributeCurve.h:61
Definition AnimCurveTypes.h:1041
Definition BoneContainer.h:192
Definition BoneIndices.h:63
Definition BonePose.h:347
Definition AnimCompressionTypes.h:775
ENGINE_API void Reset()
Definition AnimCompressionTypes.cpp:1583
Definition AnimSequence.h:159
Definition AnimSequence.h:139
Definition CustomAttributes.h:133
Definition FrameRate.h:21
Definition Guid.h:109
Definition IoHash.h:33
Definition AnimationAsset.h:56
Definition AnimationAsset.h:361
Definition PerPlatformProperties.h:425
Definition UnrealType.h:6865
Definition AnimTypes.h:853
Definition AnimSequence.h:106
Definition AnimSequence.h:121
Definition BoneIndices.h:79
Definition AnimTypes.h:822
Definition AnimSequence.h:91
Definition ObjectPtr.h:488
Definition Optional.h:131
Definition SoftObjectPtr.h:174
FScopedCompressedAnimSequence(FScopedCompressedAnimSequence &&)=delete
FScopedCompressedAnimSequence(const FScopedCompressedAnimSequence &)=delete
FScopedCompressedAnimSequence & operator=(const FScopedCompressedAnimSequence &)=delete
const FCompressedAnimSequence & operator->() const
Definition AnimSequence.h:904
FScopedCompressedAnimSequence(const UAnimSequence *InAnimSequence, const FCompressedAnimSequence *InCompressedData)
Definition AnimSequence.h:914
const FCompressedAnimSequence & Get() const
Definition AnimSequence.h:905
FScopedCompressedAnimSequence & operator=(FScopedCompressedAnimSequence &&)=delete