UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
SkeletonRemapping.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreMinimal.h"
7
8class USkeleton;
9
11{
12 FSkeletonRemapping() = default;
14
15 const TWeakObjectPtr<const USkeleton>& GetSourceSkeleton() const { return SourceSkeleton; }
16 const TWeakObjectPtr<const USkeleton>& GetTargetSkeleton() const { return TargetSkeleton; }
17
26
34 {
35 return (SourceToTargetBoneIndexes.IsValidIndex(SourceSkeletonBoneIndex))
36 ? SourceToTargetBoneIndexes[SourceSkeletonBoneIndex]
37 : INDEX_NONE;
38 }
39
47 {
48 return (TargetToSourceBoneIndexes.IsValidIndex(TargetSkeletonBoneIndex))
49 ? TargetToSourceBoneIndexes[TargetSkeletonBoneIndex]
50 : INDEX_NONE;
51 }
52
68
78 {
79 // Compute the translation part of FTransform(Q1) * Source * FTransform(Q0)
80 const TTuple<FQuat, FQuat>& QQ = RetargetingTable[TargetSkeletonBoneIndex];
81 return QQ.Get<0>().RotateVector(SourceTranslation);
82 }
83
93 {
94 // Compute the rotation part of FTransform(Q1) * Source * FTransform(Q0)
95 const TTuple<FQuat, FQuat>& QQ = RetargetingTable[TargetSkeletonBoneIndex];
96 return QQ.Get<0>() * SourceRotation * QQ.Get<1>();
97 }
98
114
124 {
125 // Compute the translation part of FTransform(Q0.Inverse) * Source * FTransform(Q0)
126 const TTuple<FQuat, FQuat>& QQ = RetargetingTable[TargetSkeletonBoneIndex];
127 return QQ.Get<0>().RotateVector(SourceTranslation);
128 }
129
139 {
140 // Compute the rotation part of FTransform(Q0.Inverse) * Source * FTransform(Q0)
141 const TTuple<FQuat, FQuat>& QQ = RetargetingTable[TargetSkeletonBoneIndex];
142 return QQ.Get<0>() * SourceRotation * QQ.Get<0>().Inverse();
143 }
144
145 UE_DEPRECATED(5.3, "This function is no longer used")
147
150
151 UE_DEPRECATED(5.3, "This function is no longer used")
153
156 {
157 return RetargetingTable.Num() > 0;
158 }
159
161 bool IsValid() const
162 {
163 return SourceSkeleton.IsValid() && TargetSkeleton.IsValid();
164 }
165
166private:
168 ENGINE_API void GenerateMapping();
169
170private:
171 TWeakObjectPtr<const USkeleton> SourceSkeleton;
172 TWeakObjectPtr<const USkeleton> TargetSkeleton;
173
174 // Table of target skeleton bone indexes (indexed by source skeleton bone index)
175 TArray<int32> SourceToTargetBoneIndexes;
176
177 // Table of source skeleton bone indexes (indexed by target skeleton bone index)
178 TArray<int32> TargetToSourceBoneIndexes;
179
180 // Table of precalculated constants for retargeting from source to target (indexed by target skeleton bone index)
181 TArray<TTuple<FQuat, FQuat>> RetargetingTable;
182};
OODEFFUNC typedef const int const char * function
Definition oodle2.h:710
@ INDEX_NONE
Definition CoreMiscDefines.h:150
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
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
UE::Math::TTransform< double > FTransform
Definition MathFwd.h:53
Definition Array.h:670
UE_NODEBUG UE_FORCEINLINE_HINT bool IsValidIndex(SizeType Index) const
Definition Array.h:1122
Definition Skeleton.h:295
Definition AnimationAsset.h:38
Definition SkeletonRemapping.h:11
FTransform RetargetBoneTransformToTargetSkeleton(int32 TargetSkeletonBoneIndex, const FTransform &SourceTransform) const
Definition SkeletonRemapping.h:61
int32 GetSourceSkeletonBoneIndex(int32 TargetSkeletonBoneIndex) const
Definition SkeletonRemapping.h:46
ENGINE_API const TArray< SmartName::UID_Type > & GetSourceToTargetCurveMapping() const
Definition SkeletonRemapping.cpp:250
FTransform RetargetAdditiveTransformToTargetSkeleton(int32 TargetSkeletonBoneIndex, const FTransform &SourceTransform) const
Definition SkeletonRemapping.h:107
FSkeletonRemapping()=default
const TWeakObjectPtr< const USkeleton > & GetTargetSkeleton() const
Definition SkeletonRemapping.h:16
bool RequiresReferencePoseRetarget() const
Definition SkeletonRemapping.h:155
void GenerateCurveMapping()
Definition SkeletonRemapping.h:152
FVector RetargetAdditiveTranslationToTargetSkeleton(int32 TargetSkeletonBoneIndex, const FVector &SourceTranslation) const
Definition SkeletonRemapping.h:123
bool IsValid() const
Definition SkeletonRemapping.h:161
FQuat RetargetAdditiveRotationToTargetSkeleton(int32 TargetSkeletonBoneIndex, const FQuat &SourceRotation) const
Definition SkeletonRemapping.h:138
FVector RetargetBoneTranslationToTargetSkeleton(int32 TargetSkeletonBoneIndex, const FVector &SourceTranslation) const
Definition SkeletonRemapping.h:77
int32 GetTargetSkeletonBoneIndex(int32 SourceSkeletonBoneIndex) const
Definition SkeletonRemapping.h:33
ENGINE_API void RegenerateMapping()
Definition SkeletonRemapping.cpp:15
const TWeakObjectPtr< const USkeleton > & GetSourceSkeleton() const
Definition SkeletonRemapping.h:15
ENGINE_API void ComposeWith(const FSkeletonRemapping &OtherSkeletonRemapping)
Definition SkeletonRemapping.cpp:197
FQuat RetargetBoneRotationToTargetSkeleton(int32 TargetSkeletonBoneIndex, const FQuat &SourceRotation) const
Definition SkeletonRemapping.h:92
Definition Tuple.h:652
Definition WeakObjectPtrTemplates.h:25
FORCEINLINE bool IsValid(bool bEvenIfPendingKill, bool bThreadsafeTest=false) const
Definition WeakObjectPtrTemplates.h:232