17#define TRANSLATION_ZEROING_THRESHOLD (0.0001f)
18#define QUATERNION_ZEROING_THRESHOLD (0.0003f)
19#define SCALE_ZEROING_THRESHOLD (0.000001f)
22#define END_EFFECTOR_DUMMY_BONE_LENGTH_SOCKET (50.f)
24#define END_EFFECTOR_DUMMY_BONE_LENGTH (5.f)
26#define Quant16BitDiv (32767.f)
27#define Quant16BitFactor (32767.f)
28#define Quant16BitOffs (32767)
30#define Quant10BitDiv (511.f)
31#define Quant10BitFactor (511.f)
32#define Quant10BitOffs (511)
34#define Quant11BitDiv (1023.f)
35#define Quant11BitFactor (1023.f)
36#define Quant11BitOffs (1023)
41 inline static constexpr int32 LogScale = 7;
43 template<
typename ValueType>
46#if PLATFORM_SUPPORTS_UNALIGNED_LOADS
47 return *
reinterpret_cast<const ValueType*
>(Ptr);
53 memcpy(&Result, Ptr,
sizeof(ValueType));
185 template<
bool bIsDataAligned>
265 template<
bool bIsDataAligned = true>
268 const float X =
bIsDataAligned ? *Values++ : AnimationCompressionUtils::UnalignedRead<float>(Values++);
269 const float Y =
bIsDataAligned ? *Values++ : AnimationCompressionUtils::UnalignedRead<float>(Values++);
270 const float Z =
bIsDataAligned ? *Values++ : AnimationCompressionUtils::UnalignedRead<float>(Values++);
348 FromVector(
Value, Mins, Ranges );
369 template<
bool bIsDataAligned = true>
378 const uint32 Packed =
bIsDataAligned ? *PackedValue : AnimationCompressionUtils::UnalignedRead<uint32>(PackedValue);
413 FromQuat(
Quat, Mins, Ranges );
442 template<
bool bIsDataAligned>
451 const uint32 Packed =
bIsDataAligned ? *PackedValue : AnimationCompressionUtils::UnalignedRead<uint32>(PackedValue);
514 template<
bool bIsDataAligned>
523 const uint32 Packed =
bIsDataAligned ? *PackedValue : AnimationCompressionUtils::UnalignedRead<uint32>(PackedValue);
565template <
int32 FORMAT,
bool bIsDataAligned = true>
573 const float* Keys = (
const float*)KeyData;
574 const float X =
bIsDataAligned ? Keys[0] : AnimationCompressionUtils::UnalignedRead<float>(&Keys[0]);
575 const float Y =
bIsDataAligned ? Keys[1] : AnimationCompressionUtils::UnalignedRead<float>(&Keys[1]);
576 const float Z =
bIsDataAligned ? Keys[2] : AnimationCompressionUtils::UnalignedRead<float>(&Keys[2]);
577 const float W =
bIsDataAligned ? Keys[3] : AnimationCompressionUtils::UnalignedRead<float>(&Keys[3]);
582 Out = FQuatFloat96NoW::ToQuat<bIsDataAligned>((
const float*)KeyData);
586 Out = FQuatFixed32NoW::ToQuat<bIsDataAligned>((
const uint32*)KeyData);
596 Out = FQuatIntervalFixed32NoW::ToQuat<bIsDataAligned>(Mins, Ranges, (
const uint32*)KeyData);
600 Out = FQuatFloat32NoW::ToQuat<bIsDataAligned>((
const uint32*)KeyData);
621template <
int32 FORMAT,
bool bIsDataAligned = true>
632 Out = FVectorIntervalFixed32NoW::ToVector<bIsDataAligned>(Mins, Ranges, (
const uint32*)KeyData);
658template <
int32 FORMAT,
bool bIsDataAligned = true>
669 Out = FVectorIntervalFixed32NoW::ToVector<bIsDataAligned>(Mins, Ranges, (
const uint32*)KeyData);
724 template <
int32 Log2MaxValue>
742 return (NumKeys & 0x00FFFFFF) | ((
KeyFormat & 0xF) << 28) | ((
KeyFlags & 0x7) << 24) | ((bReallyNeedsFrameTable & 0x1) << 27);
753 return Header & 0x00FFFFFF;
811 NumKeys =
Header & 0x00FFFFFF;
812 FormatFlags = (
Header >> 24) & 0x0F;
829 NumKeys =
Header & 0x00FFFFFF;
830 FormatFlags = (
Header >> 24) & 0x0F;
838 template<
bool bIsDataAligned = true>
844 if( (FormatFlags & 7) == 0 )
884 float Mins[3] = {0.0f, 0.0f, 0.0f};
885 float Ranges[3] = {0.0f, 0.0f, 0.0f};
889 Mins[0] = *SourceBounds++;
890 Ranges[0] = *SourceBounds++;
894 Mins[1] = *SourceBounds++;
895 Ranges[1] = *SourceBounds++;
899 Mins[2] = *SourceBounds++;
900 Ranges[2] = *SourceBounds++;
903 Out = FVectorIntervalFixed32NoW::ToVector<bIsDataAligned>(Mins, Ranges, (
const uint32*)KeyData);
910 Out.
X = FAnimationCompression_PerTrackUtils::DecompressFixed16<AnimationCompressionUtils::LogScale>(*
TypedKeyData++);
919 Out.
Y = FAnimationCompression_PerTrackUtils::DecompressFixed16<AnimationCompressionUtils::LogScale>(*
TypedKeyData++);
928 Out.
Z = FAnimationCompression_PerTrackUtils::DecompressFixed16<AnimationCompressionUtils::LogScale>(*
TypedKeyData++);
948 template<
bool bIsDataAligned = true>
959 const float X = (
Xa - 32767.0f) * 3.0518509475997192297128208258309e-5f;
960 const float XX =
X*
X;
961 const float Y = (
Ya - 32767.0f) * 3.0518509475997192297128208258309e-5f;
962 const float YY =
Y*
Y;
963 const float Z = (
Za - 32767.0f) * 3.0518509475997192297128208258309e-5f;
964 const float ZZ =
Z*
Z;
974 Out = FQuatFloat96NoW::ToQuat<bIsDataAligned>((
const float*)KeyData);
980 float Mins[3] = {0.0f, 0.0f, 0.0f};
981 float Ranges[3] = {0.0f, 0.0f, 0.0f};
985 Mins[0] = *SourceBounds++;
986 Ranges[0] = *SourceBounds++;
990 Mins[1] = *SourceBounds++;
991 Ranges[1] = *SourceBounds++;
995 Mins[2] = *SourceBounds++;
996 Ranges[2] = *SourceBounds++;
999 Out = FQuatIntervalFixed32NoW::ToQuat<bIsDataAligned>(Mins, Ranges, (
const uint32*)KeyData);
1003 Out = FQuatFloat32NoW::ToQuat<bIsDataAligned>((
const uint32*)KeyData);
1007 Out = FQuatFixed32NoW::ToQuat<bIsDataAligned>((
const uint32*)KeyData);
1021 template<
bool bIsDataAligned = true>
1027 if( (FormatFlags & 7) == 0 )
1035 if (FormatFlags & 1)
1044 if (FormatFlags & 2)
1053 if (FormatFlags & 4)
1067 float Mins[3] = {0.0f, 0.0f, 0.0f};
1068 float Ranges[3] = {0.0f, 0.0f, 0.0f};
1070 if (FormatFlags & 1)
1072 Mins[0] = *SourceBounds++;
1073 Ranges[0] = *SourceBounds++;
1075 if (FormatFlags & 2)
1077 Mins[1] = *SourceBounds++;
1078 Ranges[1] = *SourceBounds++;
1080 if (FormatFlags & 4)
1082 Mins[2] = *SourceBounds++;
1083 Ranges[2] = *SourceBounds++;
1086 Out = FVectorIntervalFixed32NoW::ToVector<bIsDataAligned>(Mins, Ranges, (
const uint32*)KeyData);
1091 if (FormatFlags & 1)
1093 Out.
X = FAnimationCompression_PerTrackUtils::DecompressFixed16<AnimationCompressionUtils::LogScale>(*
TypedKeyData++);
1100 if (FormatFlags & 2)
1102 Out.
Y = FAnimationCompression_PerTrackUtils::DecompressFixed16<AnimationCompressionUtils::LogScale>(*
TypedKeyData++);
1109 if (FormatFlags & 4)
1111 Out.
Z = FAnimationCompression_PerTrackUtils::DecompressFixed16<AnimationCompressionUtils::LogScale>(*
TypedKeyData++);
1132inline float FAnimationCompression_PerTrackUtils::DecompressFixed16<0>(
uint16 Value)
1134 return ((
int32)
Value - 32767) * 3.0518509475997192297128208258309e-5f;
const uint8 PerTrackNumComponentTable[ACF_MAX *8]
Definition AnimEncoding.cpp:65
const int32 CompressedRotationStrides[ACF_MAX]
Definition AnimEncoding.cpp:38
void DecompressScale(FVector3f &Out, const uint8 *RESTRICT TopOfStream, const uint8 *RESTRICT KeyData)
Definition AnimationCompression.h:659
#define Quant16BitOffs
Definition AnimationCompression.h:28
#define Quant11BitOffs
Definition AnimationCompression.h:36
#define Quant16BitDiv
Definition AnimationCompression.h:26
#define Quant10BitFactor
Definition AnimationCompression.h:31
#define Quant10BitOffs
Definition AnimationCompression.h:32
#define Quant16BitFactor
Definition AnimationCompression.h:27
#define Quant11BitDiv
Definition AnimationCompression.h:34
void DecompressTranslation(FVector3f &Out, const uint8 *RESTRICT TopOfStream, const uint8 *RESTRICT KeyData)
Definition AnimationCompression.h:622
#define Quant11BitFactor
Definition AnimationCompression.h:35
void DecompressRotation(FQuat4f &Out, const uint8 *RESTRICT TopOfStream, const uint8 *RESTRICT KeyData)
Definition AnimationCompression.h:566
#define Quant10BitDiv
Definition AnimationCompression.h:30
#define check(expr)
Definition AssertionMacros.h:314
#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
DIRECTLINK_API Display
Definition DirectLinkLog.h:8
#define UE_REAL_TO_FLOAT(argument)
Definition LargeWorldCoordinates.h:30
#define DECLARE_LOG_CATEGORY_EXTERN(CategoryName, DefaultVerbosity, CompileTimeVerbosity)
Definition LogMacros.h:361
#define UE_LOG(CategoryName, Verbosity, Format,...)
Definition LogMacros.h:270
UE::Math::TVector< float > FVector3f
Definition MathFwd.h:73
UE::Math::TQuat< float > FQuat4f
Definition MathFwd.h:76
USkinnedMeshComponent float
Definition SkinnedMeshComponent.h:60
memcpy(InputBufferBase, BinkBlocksData, BinkBlocksSize)
Definition AnimationCompression.h:693
static uint16 CompressFixed16(float Value, int32 Log2MaxValue=0)
Definition AnimationCompression.h:709
static int32 MakeHeader(const int32 NumKeys, const int32 KeyFormat, const int32 KeyFlags, bool bReallyNeedsFrameTable)
Definition AnimationCompression.h:740
static int32 GetKeyCountFromHeader(int32 Header)
Definition AnimationCompression.h:751
static void GetAllSizesFromFormat(int32 KeyFormat, int32 FormatFlags, int32 &KeyComponentCount, int32 &KeyComponentSize, int32 &FixedComponentCount, int32 &FixedComponentSize)
Definition AnimationCompression.h:762
static void DecompressTranslation(int32 Format, int32 FormatFlags, FVector3f &Out, const uint8 *RESTRICT TopOfStream, const uint8 *RESTRICT KeyData)
Definition AnimationCompression.h:839
static void GetByteSizesFromFormat(int32 KeyFormat, int32 FormatFlags, int32 &BytesPerKey, int32 &FixedBytes)
Definition AnimationCompression.h:789
static float DecompressFixed16(uint16 Value)
Definition AnimationCompression.h:725
static void DecompressRotation(int32 Format, int32 FormatFlags, FQuat4f &Out, const uint8 *RESTRICT TopOfStream, const uint8 *RESTRICT KeyData)
Definition AnimationCompression.h:949
static void DecomposeHeader(int32 Header, int32 &KeyFormat, int32 &NumKeys, int32 &FormatFlags)
Definition AnimationCompression.h:809
static void DecompressScale(int32 Format, int32 FormatFlags, FVector3f &Out, const uint8 *RESTRICT TopOfStream, const uint8 *RESTRICT KeyData)
Definition AnimationCompression.h:1022
static void DecomposeHeader(int32 Header, int32 &KeyFormat, int32 &NumKeys, int32 &FormatFlags, int32 &BytesPerKey, int32 &FixedBytes)
Definition AnimationCompression.h:827
Definition Archive.h:1208
Definition AnimationCompression.h:151
FQuatFixed32NoW()
Definition AnimationCompression.h:155
void ToQuat(FQuat4f &Out) const
Definition AnimationCompression.h:207
uint32 Packed
Definition AnimationCompression.h:153
static FQuat4f ToQuat(const uint32 *PackedValue)
Definition AnimationCompression.h:186
void FromQuat(const FQuat4f &Quat)
Definition AnimationCompression.h:163
FQuatFixed32NoW(const FQuat4f &Quat)
Definition AnimationCompression.h:158
friend FArchive & operator<<(FArchive &Ar, FQuatFixed32NoW &Quat)
Definition AnimationCompression.h:212
Definition AnimationCompression.h:97
uint16 Y
Definition AnimationCompression.h:100
FQuatFixed48NoW(const FQuat4f &Quat)
Definition AnimationCompression.h:106
FQuatFixed48NoW()
Definition AnimationCompression.h:103
void FromQuat(const FQuat4f &Quat)
Definition AnimationCompression.h:111
friend FArchive & operator<<(FArchive &Ar, FQuatFixed48NoW &Quat)
Definition AnimationCompression.h:141
void ToQuat(FQuat4f &Out) const
Definition AnimationCompression.h:128
uint16 X
Definition AnimationCompression.h:99
uint16 Z
Definition AnimationCompression.h:101
Definition AnimationCompression.h:477
static FQuat4f ToQuat(const uint32 *PackedValue)
Definition AnimationCompression.h:515
FQuatFloat32NoW()
Definition AnimationCompression.h:481
uint32 Packed
Definition AnimationCompression.h:479
void FromQuat(const FQuat4f &Quat)
Definition AnimationCompression.h:489
FQuatFloat32NoW(const FQuat4f &Quat)
Definition AnimationCompression.h:484
friend FArchive & operator<<(FArchive &Ar, FQuatFloat32NoW &Quat)
Definition AnimationCompression.h:544
void ToQuat(FQuat4f &Out) const
Definition AnimationCompression.h:539
Definition AnimationCompression.h:220
float X
Definition AnimationCompression.h:226
float XYZ[3]
Definition AnimationCompression.h:232
FQuatFloat96NoW(const FQuat4f &Quat)
Definition AnimationCompression.h:238
FQuatFloat96NoW(float InX, float InY, float InZ)
Definition AnimationCompression.h:243
void FromQuat(const FQuat4f &Quat)
Definition AnimationCompression.h:249
void ToQuat(FQuat4f &Out) const
Definition AnimationCompression.h:276
float Y
Definition AnimationCompression.h:227
static FQuat4f ToQuat(const float *Values)
Definition AnimationCompression.h:266
float Z
Definition AnimationCompression.h:228
friend FArchive & operator<<(FArchive &Ar, FQuatFloat96NoW &Quat)
Definition AnimationCompression.h:283
Definition AnimationCompression.h:404
uint32 Packed
Definition AnimationCompression.h:406
void ToQuat(FQuat4f &Out, const float *Mins, const float *Ranges) const
Definition AnimationCompression.h:464
friend FArchive & operator<<(FArchive &Ar, FQuatIntervalFixed32NoW &Quat)
Definition AnimationCompression.h:469
FQuatIntervalFixed32NoW()
Definition AnimationCompression.h:408
FQuatIntervalFixed32NoW(const FQuat4f &Quat, const float *Mins, const float *Ranges)
Definition AnimationCompression.h:411
static FQuat4f ToQuat(const float *Mins, const float *Ranges, const uint32 *PackedValue)
Definition AnimationCompression.h:443
void FromQuat(const FQuat4f &Quat, const float *Mins, const float *Ranges)
Definition AnimationCompression.h:416
Definition AnimationCompression.h:295
FVectorFixed48(const FVector3f &Vec)
Definition AnimationCompression.h:304
FVectorFixed48()
Definition AnimationCompression.h:301
void ToVector(FVector3f &Out) const
Definition AnimationCompression.h:318
uint16 X
Definition AnimationCompression.h:297
uint16 Z
Definition AnimationCompression.h:299
uint16 Y
Definition AnimationCompression.h:298
void FromVector(const FVector3f &Vec)
Definition AnimationCompression.h:309
friend FArchive & operator<<(FArchive &Ar, FVectorFixed48 &Vec)
Definition AnimationCompression.h:329
Definition AnimationCompression.h:339
FVectorIntervalFixed32NoW()
Definition AnimationCompression.h:343
uint32 Packed
Definition AnimationCompression.h:341
friend FArchive & operator<<(FArchive &Ar, FVectorIntervalFixed32NoW &Value)
Definition AnimationCompression.h:395
FVectorIntervalFixed32NoW(const FVector3f &Value, const float *Mins, const float *Ranges)
Definition AnimationCompression.h:346
void FromVector(const FVector3f &Value, const float *Mins, const float *Ranges)
Definition AnimationCompression.h:351
void ToVector(FVector3f &Out, const float *Mins, const float *Ranges) const
Definition AnimationCompression.h:390
static FVector3f ToVector(const float *Mins, const float *Ranges, const uint32 *PackedValue)
Definition AnimationCompression.h:370
Definition FloatPacker.h:46
PackedType Encode(FloatType Value) const
Definition FloatPacker.h:64
FloatType Decode(PackedType Value) const
Definition FloatPacker.h:110
Definition AnimationCompression.h:39
FQuat4d Interpolate< FQuat4d >(const FQuat4d &A, const FQuat4d &B, float Alpha)
Definition AnimationCompression.h:81
T Interpolate(const T &A, const T &B, float Alpha)
Definition AnimationCompression.h:63
FVector3d Interpolate< FVector3d >(const FVector3d &A, const FVector3d &B, float Alpha)
Definition AnimationCompression.h:75
FVector3f Interpolate< FVector3f >(const FVector3f &A, const FVector3f &B, float Alpha)
Definition AnimationCompression.h:71
FQuat4f Interpolate< FQuat4f >(const FQuat4f &A, const FQuat4f &B, float Alpha)
Definition AnimationCompression.h:88
ValueType UnalignedRead(const void *Ptr)
Definition AnimationCompression.h:44
static constexpr UE_FORCEINLINE_HINT T Lerp(const T &A, const T &B, const U &Alpha)
Definition UnrealMathUtility.h:1116
static TQuat< double > FastLerp(const TQuat< double > &A, const TQuat< double > &B, const double Alpha)
Definition Quat.h:1373
static CORE_API const TQuat< float > Identity
Definition Quat.h:63
void Normalize(T Tolerance=UE_SMALL_NUMBER)
Definition Quat.h:1107
T Z
Definition Vector.h:68
T Y
Definition Vector.h:65
static CORE_API const TVector< float > ZeroVector
Definition Vector.h:79
T X
Definition Vector.h:62