38 return A.BoneIndex <
B.BoneIndex;
43template<
class BoneIndexType,
typename InAllocator>
53 return Bones.IsValidIndex(BoneIndex.GetInt());
58 return Bones[BoneIndex.GetInt()];
63 return Bones[BoneIndex.GetInt()];
72 template<
typename PoseType,
typename IterType>
83 template<
typename PoseType,
typename IterType>
102template <
typename InAllocator>
172 SrcPose.BoneContainer =
nullptr;
176 template <
typename OtherAllocator>
198 SrcPose.BoneContainer =
nullptr;
202 template <
typename OtherAllocator>
208 if (this->
Bones.Num() == SrcPoseBones.
Num())
214 template <
typename OtherAllocator>
281 Bone.SetIdentityZeroScale();
290 if (!
Bone.IsRotationNormalized())
304 if (
Bone.ContainsNaN())
319 Bone.NormalizeRotation();
406template<
class PoseType>
427 Pose.ResetToRefPose();
451 template <
typename OtherPoseType>
548 UE_DEPRECATED(5.7,
"Property no longer required. We now allocate it via TMemStackAllocator directly.")
575 return Pose[BoneIndex];
578template<
class PoseType>
592 return Pose[BoneIndex];
595template<
class PoseType>
602 Pose[BoneIndex] = NewTransform;
606template<
class PoseType>
627 BoneIndex = ParentIndex;
635 checkf(!
Bone.ContainsNaN(),
TEXT(
"Pose[%d] contains NaN: %s\nBase64: %s"),
642 ParentIndex.GetInt(),
652 auto BoolToStr = [](
const bool& bValue) {
return bValue ?
TEXT(
"true") :
TEXT(
"false"); };
656 FString ErrorMsg = FString(
TEXT(
"NaN created in during FTransform Multiplication\n"));
657 ErrorMsg += FString::Format(
TEXT(
"\tBoneIndex {0} : ParentBoneIndex {1} BoneTransformNaN={2} : ParentTransformNaN={3}\n"), { BoneIndex.GetInt(), ParentIndex.GetInt(),
BoneHasNaN,
ParentHasNaN });
658 ErrorMsg += FString::Format(
TEXT(
"\tBone {0}\n"), {
Bone.ToString() });
659 ErrorMsg += FString::Format(
TEXT(
"\tParent {0}\n"), {
ParentBone.ToString() });
660 ErrorMsg += FString::Format(
TEXT(
"\tResult {0}\n"), { ComponentTransform.
ToString() });
664 checkf(
false,
TEXT(
"Error during CalculateComponentSpaceTransform\n%s"), *ErrorMsg);
666 Bone = ComponentTransform;
669 checkf(!
Bone.ContainsNaN(),
TEXT(
"Normalized ComponentTransform for Pose[%d] contains NaN: %s\nBase64: %s"),
681template<
class PoseType>
696 Pose[BoneIndex].SetToRelativeTransform(
Pose[ParentIndex]);
701template<
class PoseType>
711 const int32 MinIndex = BoneTransforms[0].BoneIndex.GetInt();
768template<
class PoseType>
778 if (BoneTransforms.Num() > 0)
782 for (
int32 I = 1; I < BoneTransforms.Num(); ++I)
784 check(BoneTransforms[I].BoneIndex >= LastIndex);
836 if (!BoneIndex.IsRootBone())
862template<
class PoseType>
885 if (
InPose.ComponentSpaceFlags[BoneIndex])
889 ensureMsgf(
InPose.ComponentSpaceFlags[ParentIndex],
TEXT(
"Parent hasn't been calculated. Please use ConvertComponentPosesToLocalPosesSafe instead"));
891 OutPose[BoneIndex].SetToRelativeTransform(OutPose[ParentIndex]);
892 OutPose[BoneIndex].NormalizeRotation();
897template<
class PoseType>
922 if (
InPose.ComponentSpaceFlags[BoneIndex])
924 const BoneIndexType ParentIndex = OutPose.GetParentBoneIndex(BoneIndex);
928 ensureMsgf(
InPose.ComponentSpaceFlags[ParentIndex],
TEXT(
"Parent hasn't been calculated. Please use ConvertComponentPosesToLocalPosesSafe instead"));
930 OutPose[BoneIndex].SetToRelativeTransform(OutPose[ParentIndex]);
931 OutPose[BoneIndex].NormalizeRotation();
936template<
class PoseType>
960 if (
InPose.ComponentSpaceFlags[BoneIndex])
962 const BoneIndexType ParentIndex = OutPose.GetParentBoneIndex(BoneIndex);
965 if (!
InPose.ComponentSpaceFlags[ParentIndex])
968 InPose.CalculateComponentSpaceTransform(ParentIndex);
971 OutPose[BoneIndex] =
InPose.Pose[BoneIndex];
972 OutPose[BoneIndex].SetToRelativeTransform(
InPose.Pose[ParentIndex]);
973 OutPose[BoneIndex].NormalizeRotation();
979UE_DEPRECATED(5.0,
"BuildPoseFromRawData has been deprecated, use BuildPoseFromRawData signature with RetargetTransforms parameter")
987 float SequenceLength,
988 FName RetargetSource,
1000 float SequenceLength,
bool ContainsNaN(const TArray< FBoneTransform > &BoneTransforms)
Definition AnimNode_SkeletalControlBase.cpp:119
EAnimInterpolationType
Definition AnimTypes.h:689
#define checkSlow(expr)
Definition AssertionMacros.h:332
#define check(expr)
Definition AssertionMacros.h:314
#define ensureMsgf( InExpression, InFormat,...)
Definition AssertionMacros.h:465
#define checkf(expr, format,...)
Definition AssertionMacros.h:315
ENGINE_API void BuildPoseFromRawData(const TArray< FRawAnimSequenceTrack > &InAnimationData, const TArray< struct FTrackToSkeletonMap > &TrackToSkeletonMapTable, FCompactPose &InOutPose, float InTime, EAnimInterpolationType Interpolation, int32 NumFrames, float SequenceLength, FName RetargetSource, const TMap< int32, const struct FTransformCurve * > *AdditiveBoneTransformCurves=nullptr)
Definition BonePose.cpp:316
@ INDEX_NONE
Definition CoreMiscDefines.h:150
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
#define ZERO_ANIMWEIGHT_THRESH
Definition VectorRegister.h:133
Definition MemStack.h:506
Definition NameTypes.h:617
CORE_API FString ToString() const
Definition UnrealNames.cpp:3537
Definition ArrayView.h:139
UE_REWRITE SizeType Num() const
Definition Array.h:1144
void SetNumUninitialized(SizeType NewNum, EAllowShrinking AllowShrinking=UE::Core::Private::AllowShrinkingByDefault< AllocatorType >())
Definition Array.h:2369
void Empty(SizeType Slack=0)
Definition Array.h:2273
UE_FORCEINLINE_HINT void Reserve(SizeType Number)
Definition Array.h:3016
Definition UnrealString.h.inl:34
Definition MemStack.h:391
static FORCEINLINE FMemStack & Get()
Definition ThreadSingleton.h:101
Definition CustomBoneIndexArray.h:43
ENGINE_API const TArray< FTransform > & GetRefLocalPoses(FName RetargetSource=NAME_None) const
Definition Skeleton.cpp:1089
Definition AdvancedWidgetsModule.cpp:13
U16 Index
Definition radfft.cpp:71
static CORE_API FString Encode(const FString &Source, EBase64Mode Mode=EBase64Mode::Standard)
Definition Base64.cpp:53
Definition BonePose.h:104
void InitFrom(const FBaseCompactPose &SrcPose)
Definition BonePose.h:162
RangedForBoneIndexBwd ForEachBoneIndexReverse() const
Definition BonePose.h:123
void MoveBonesFrom(FBaseCompactPose< Allocator > &SrcPose)
Definition BonePose.h:192
void CopyAndAssignBoneContainer(FBoneContainer &NewBoneContainer)
Definition BonePose.h:156
const FBoneContainer * BoneContainer
Definition BonePose.h:343
FCompactPoseBoneIndex BoneIndexType
Definition BonePose.h:111
bool IsNormalized() const
Definition BonePose.h:286
void MoveBonesTo(TArray< FTransform, Allocator > &InTransforms)
Definition BonePose.h:230
FBasePose< FCompactPoseBoneIndex, Allocator >::template FRangedForSupport< FBaseCompactPose, FCompactPoseBoneIndexIterator > RangedForBoneIndexFwd
Definition BonePose.h:115
void ResetToRefPose()
Definition BonePose.h:242
const FTransform & GetRefPose(const BoneIndexType &BoneIndex) const
Definition BonePose.h:335
void CopyBonesFrom(const FBaseCompactPose< OtherAllocator > &SrcPose)
Definition BonePose.h:177
FCompactPoseBoneIndexReverseIterator MakeBeginIterReverse() const
Definition BonePose.h:132
FCompactPoseBoneIndexIterator MakeEndIter() const
Definition BonePose.h:130
FBoneContainer & GetBoneContainer()
Definition BonePose.h:143
BoneIndexType GetParentBoneIndex(const BoneIndexType &BoneIndex) const
Definition BonePose.h:329
FBaseCompactPose()
Definition BonePose.h:107
bool IsValid() const
Definition BonePose.h:323
bool ContainsNaN() const
Definition BonePose.h:300
void CopyBonesFrom(const TArray< FTransform, OtherAllocator > &SrcPoseBones)
Definition BonePose.h:203
void NormalizeRotations()
Definition BonePose.h:315
void InitFrom(FBaseCompactPose &&SrcPose)
Definition BonePose.h:168
InAllocator Allocator
Definition BonePose.h:112
void ResetToAdditiveIdentity()
Definition BonePose.h:277
void CopyBonesTo(TArray< FTransform, OtherAllocator > &DestPoseBones) const
Definition BonePose.h:215
void MoveBonesFrom(TArray< FTransform, Allocator > &&InTransforms)
Definition BonePose.h:224
FCompactPoseBoneIndexIterator MakeBeginIter() const
Definition BonePose.h:128
FBasePose< FCompactPoseBoneIndex, Allocator >::template FRangedForReverseSupport< FBaseCompactPose, FCompactPoseBoneIndexReverseIterator > RangedForBoneIndexBwd
Definition BonePose.h:116
void Empty()
Definition BonePose.h:235
void ResetToRefPose(const FBoneContainer &RequiredBones)
Definition BonePose.h:248
void CopyBonesFrom(const FBaseCompactPose< Allocator > &SrcPose)
Definition BonePose.h:183
void SetBoneContainer(const FBoneContainer *InBoneContainer)
Definition BonePose.h:149
const FBoneContainer & GetBoneContainer() const
Definition BonePose.h:137
FCompactPoseBoneIndexReverseIterator MakeEndIterReverse() const
Definition BonePose.h:134
RangedForBoneIndexFwd ForEachBoneIndex() const
Definition BonePose.h:118
IterType end()
Definition BonePose.h:91
IterType begin()
Definition BonePose.h:90
FRangedForReverseSupport(const PoseType &InPose)
Definition BonePose.h:88
const PoseType & Pose
Definition BonePose.h:86
FRangedForSupport(const PoseType &InPose)
Definition BonePose.h:77
const PoseType & Pose
Definition BonePose.h:75
IterType end()
Definition BonePose.h:80
IterType begin()
Definition BonePose.h:79
FTransform & operator[](const BoneIndexType &BoneIndex)
Definition BonePose.h:56
TArray< FTransform, InAllocator > Bones
Definition BonePose.h:99
bool IsValidIndex(const BoneIndexType &BoneIndex) const
Definition BonePose.h:51
TArrayView< FTransform > GetMutableBones()
Definition BonePose.h:66
const TArray< FTransform, InAllocator > & GetBones() const
Definition BonePose.h:94
int32 GetNumBones() const
Definition BonePose.h:49
void InitBones(int32 NumBones)
Definition BonePose.h:47
TArray< FTransform, InAllocator > && MoveBones()
Definition BonePose.h:96
Definition BoneContainer.h:192
const bool IsValid() const
Definition BoneContainer.h:270
const TArray< FBoneIndexType > & GetBoneIndicesArray() const
Definition BoneContainer.h:342
const int32 GetNumBones() const
Definition BoneContainer.h:408
bool GetDisableRetargeting() const
Definition BoneContainer.h:309
USkeletalMesh * GetSkeletalMeshAsset() const
Definition BoneContainer.h:287
ENGINE_API int32 GetParentBoneIndex(const int32 BoneIndex) const
Definition BoneContainer.cpp:512
USkeleton * GetSkeletonAsset(bool bEvenIfUnreachable=false) const
Definition BoneContainer.h:293
int32 GetSkeletonIndex(const FCompactPoseBoneIndex &BoneIndex) const
Definition BoneContainer.h:593
void FillWithCompactRefPose(ArrayType &OutTransforms) const
Definition BoneContainer.h:373
const FTransform & GetRefPoseTransform(const FCompactPoseBoneIndex &BoneIndex) const
Definition BoneContainer.h:386
int32 BoneIndex
Definition BoneIndices.h:27
int32 GetInt() const
Definition BoneIndices.h:14
Definition BonePose.h:408
static void ConvertComponentPosesToLocalPoses(FCSPose< PoseType > &&InPose, PoseType &OutPose)
Definition BonePose.h:898
PRAGMA_ENABLE_DEPRECATION_WARNINGS void InitPose(const FBoneContainer *InBoneContainer)
Definition BonePose.h:424
const TCustomBoneIndexArray< uint8, BoneIndexType, AllocatorType > & GetComponentSpaceFlags() const
Definition BonePose.h:475
FTransform GetLocalSpaceTransform(BoneIndexType BoneIndex)
Definition BonePose.h:556
TCustomBoneIndexArray< uint8, BoneIndexType, AllocatorType > BoneMask
Definition BonePose.h:549
void InitPose(const PoseType &SrcPose)
Definition BonePose.h:434
const PoseType & GetPose() const
Definition BonePose.h:474
PoseType Pose
Definition BonePose.h:543
TCustomBoneIndexArray< uint8, BoneIndexType, AllocatorType > ComponentSpaceFlags
Definition BonePose.h:546
void SafeSetCSBoneTransforms(TConstArrayView< FBoneTransform > BoneTransforms)
Definition BonePose.h:702
TArray< FCompactPoseBoneIndex, AllocatorType > BonesToConvert
Definition BonePose.h:552
void CopyPose(const OtherPoseType &SrcPose)
Definition BonePose.h:452
void Empty()
Definition BonePose.h:463
static void ConvertComponentPosesToLocalPosesSafe(FCSPose< PoseType > &InPose, PoseType &OutPose)
Definition BonePose.h:937
void SetComponentSpaceTransform(BoneIndexType BoneIndex, const FTransform &NewTransform)
Definition BonePose.h:596
void CopyAndAssignBoneContainer(FBoneContainer &NewBoneContainer)
Definition BonePose.h:458
void ConvertBoneToLocalSpace(BoneIndexType BoneIndex)
Definition BonePose.h:682
void CalculateComponentSpaceTransform(BoneIndexType BoneIndex)
Definition BonePose.h:607
FCSPose(FCSPose &&Other)=default
FCSPose & operator=(FCSPose &&Other)=default
FCSPose & operator=(const FCSPose &Other)=default
FCSPose(const FCSPose &Other)=default
void InitPose(PoseType &&SrcPose)
Definition BonePose.h:442
PRAGMA_DISABLE_DEPRECATION_WARNINGS FCSPose()=default
PoseType::Allocator AllocatorType
Definition BonePose.h:411
const FTransform & GetComponentSpaceTransform(BoneIndexType BoneIndex)
Definition BonePose.h:579
static void ConvertComponentPosesToLocalPoses(const FCSPose< PoseType > &InPose, PoseType &OutPose)
Definition BonePose.h:863
void LocalBlendCSBoneTransforms(TConstArrayView< FBoneTransform > BoneTransforms, float Alpha)
Definition BonePose.h:769
PoseType::BoneIndexType BoneIndexType
Definition BonePose.h:410
Definition BonePose.h:356
ENGINE_API void ResetToAdditiveIdentity()
Definition BonePose.cpp:108
ENGINE_API void NormalizeRotations()
Definition BonePose.cpp:82
Definition BoneContainer.h:140
Definition BoneContainer.h:153
Definition BoneIndices.h:63
Definition BonePose.h:347
ENGINE_API void ResetToAdditiveIdentity()
Definition BonePose.cpp:56
ENGINE_API void NormalizeRotations()
Definition BonePose.cpp:30
Definition BoneIndices.h:71
Definition BonePose.h:365
const FBoneContainer & GetBoneContainer() const
Definition BonePose.h:369
void SetBoneContainer(const FBoneContainer *InBoneContainer)
Definition BonePose.h:375
FMeshPoseBoneIndex BoneIndexType
Definition BonePose.h:367
bool ContainsNaN() const
Definition BonePose.cpp:144
BoneIndexType GetParentBone(const BoneIndexType &BoneIndex)
Definition BonePose.h:395
ENGINE_API void ResetToRefPose()
Definition BonePose.cpp:133
const FBoneContainer * BoneContainer
Definition BonePose.h:403
bool IsNormalized() const
Definition BonePose.cpp:159
void ResetToIdentity()
Definition BonePose.cpp:138
Definition AnimTypes.h:853
Definition ResourceArray.h:31
Definition AnimTypes.h:822