UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
MorphTargetVertexCodec.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
7#include "Math/IntVector.h"
8
10class UMorphTarget;
12
13
15{
16
17constexpr uint32 BatchSizeBits = 6u;
18constexpr uint32 BatchSize = 1u << BatchSizeBits;
19
21
22
31
33{
36
41
45
46 bool operator==(const FDeltaBatchHeader&) const = default;
47
49 {
50 Ar << InHeader.DataOffset;
51 Ar << InHeader.NumElements;
52 Ar << InHeader.bTangents;
53 Ar << InHeader.IndexBits;
54 Ar << InHeader.PositionBits;
55 Ar << InHeader.TangentZBits;
56 Ar << InHeader.IndexMin;
57 Ar << InHeader.PositionMin;
58 Ar << InHeader.TangentZMin;
59
60 return Ar;
61 }
62};
63
64
66{
67 constexpr float UnrealUnitPerMeter = 100.0f;
68 return InTargetPositionErrorTolerance * 2.0f * 1e-6f * UnrealUnitPerMeter; // * 2.0 because correct rounding guarantees error is at most half of the cell size.
69}
70
72{
73 return 1.0f / 2048.0f; // Object scale irrelevant here. Let's assume ~12bits per component is plenty.
74}
75
97 const float InPositionPrecision,
98 const float InTangentZPrecision,
101 );
102
104ENGINE_API void Decode(
107 const float InPositionPrecision,
108 const float InTangentZPrecision,
110 );
111
118 const float InPositionPrecision,
119 const float InTangentZPrecision,
121 );
122
125
128
135 TArrayView<uint32> OutData
136 );
137
145 );
146
149
153 const bool bInNeedsTangent,
155 const float InPositionPrecision,
156 const float InTangentZPrecision
157 );
158
159/* Dequantize FMorphTargetDelta using the given precision. */
162 const bool bInNeedsTangent,
164 const float InPositionPrecision,
165 const float InTangentZPrecision
166 );
167
168}
FPlatformTypes::int8 int8
An 8-bit signed integer.
Definition Platform.h:1121
FPlatformTypes::uint64 uint64
A 64-bit unsigned integer.
Definition Platform.h:1117
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition Archive.h:1208
Definition ContainerAllocationPolicies.h:1644
Definition ArrayView.h:139
Definition Array.h:670
Definition MorphTarget.h:230
Definition MorphTargetVertexCodec.cpp:12
float ComputeTangentPrecision()
Definition MorphTargetVertexCodec.h:71
constexpr uint32 BatchSizeBits
Definition MorphTargetVertexCodec.h:17
void Encode(TConstArrayView< FMorphTargetDelta > InMorphDeltas, const TBitArray<> *InVertexNeedsTangents, const float InPositionPrecision, const float InTangentZPrecision, TArray< FDeltaBatchHeader > &OutBatchHeaders, TArray< uint32 > &OutCompressedVertices)
Definition MorphTargetVertexCodec.cpp:163
void ReadQuantizedDeltas(TArrayView< FQuantizedDelta > OutQuantizedDeltas, const FDeltaBatchHeader &InBatchHeader, TConstArrayView< uint32 > InData)
Definition MorphTargetVertexCodec.cpp:514
void WriteQuantizedDeltas(TConstArrayView< FQuantizedDelta > InQuantizedDeltas, const FDeltaBatchHeader &InBatchHeader, TArrayView< uint32 > OutData)
Definition MorphTargetVertexCodec.cpp:484
uint32 CalculateBatchDwords(const FDeltaBatchHeader &InBatchHeader)
Definition MorphTargetVertexCodec.cpp:544
void DequantizeDelta(FMorphTargetDelta &OutDelta, const bool bInNeedsTangent, const FQuantizedDelta &InQuantizedDelta, const float InPositionPrecision, const float InTangentZPrecision)
Definition MorphTargetVertexCodec.cpp:576
void QuantizeDelta(const FMorphTargetDelta &InDelta, const bool bInNeedsTangent, FQuantizedDelta &OutQuantizedDelta, const float InPositionPrecision, const float InTangentZPrecision)
Definition MorphTargetVertexCodec.cpp:553
void Decode(TConstArrayView< FDeltaBatchHeader > InBatchHeaders, TConstArrayView< uint32 > InCompressedVertices, const float InPositionPrecision, const float InTangentZPrecision, TArray< FMorphTargetDelta > &OutMorphDeltas)
Definition MorphTargetVertexCodec.cpp:349
void WriteHeader(const FDeltaBatchHeader &InBatchHeader, TArrayView< uint32 > OutData)
Definition MorphTargetVertexCodec.cpp:434
float ComputePositionPrecision(float InTargetPositionErrorTolerance)
Definition MorphTargetVertexCodec.h:65
constexpr uint32 BatchSize
Definition MorphTargetVertexCodec.h:18
constexpr uint32 NumBatchHeaderDwords
Definition MorphTargetVertexCodec.h:20
bool IterativeDecode(uint64 &InOutNextItemToken, TConstArrayView< FDeltaBatchHeader > InBatchHeaders, TConstArrayView< uint32 > InCompressedVertices, const float InPositionPrecision, const float InTangentZPrecision, FMorphTargetDelta &OutMorphTargetDelta)
Definition MorphTargetVertexCodec.cpp:378
void ReadHeader(FDeltaBatchHeader &OutBatchHeader, TConstArrayView< uint32 > InData)
Definition MorphTargetVertexCodec.cpp:460
Definition MorphTarget.h:17
Definition MorphTargetVertexCodec.h:33
uint32 IndexMin
Definition MorphTargetVertexCodec.h:42
Math::TIntVector3< int8 > TangentZBits
Definition MorphTargetVertexCodec.h:40
FIntVector PositionMin
Definition MorphTargetVertexCodec.h:43
Math::TIntVector3< int8 > PositionBits
Definition MorphTargetVertexCodec.h:39
FIntVector TangentZMin
Definition MorphTargetVertexCodec.h:44
uint32 DataOffset
Definition MorphTargetVertexCodec.h:34
bool bTangents
Definition MorphTargetVertexCodec.h:37
friend FArchive & operator<<(FArchive &Ar, FDeltaBatchHeader &InHeader)
Definition MorphTargetVertexCodec.h:48
bool operator==(const FDeltaBatchHeader &) const =default
int8 IndexBits
Definition MorphTargetVertexCodec.h:38
uint32 NumElements
Definition MorphTargetVertexCodec.h:35
Definition MorphTargetVertexCodec.h:24
bool operator==(const FQuantizedDelta &) const =default
FIntVector Position
Definition MorphTargetVertexCodec.h:25
uint32 Index
Definition MorphTargetVertexCodec.h:27
FIntVector TangentZ
Definition MorphTargetVertexCodec.h:26