UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
SkinnedTriangleMesh.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2#pragma once
3
5#include "Chaos/AABB.h"
8
10
11namespace Chaos
12{
14 {
21
23 {
25 for (uint8 Index = 0; Index < NumInfluences; ++Index)
26 {
27 Result = HashCombine(Result, ::GetTypeHash(BoneIndices[Index]));
28 Result = HashCombine(Result, ::GetTypeHash(BoneWeights[Index]));
29 }
30 return Result;
31 }
32
33 static const uint8 MaxTotalInfluences = 12;
35 uint16 BoneIndices[MaxTotalInfluences]; // This is index into FSkinnedTriangleMesh::UsedBones (which then maps into skeletalmesh bones)
37 };
38
40 {
41 Ar << Value.NumInfluences;
42 for (int32 Index = 0; Index < Value.NumInfluences; ++Index)
43 {
44 Ar << Value.BoneIndices[Index];
45 Ar << Value.BoneWeights[Index];
46 }
47 return Ar;
48 }
49
54 {
55 public:
58
61
63
64 virtual ~FSkinnedTriangleMesh() override = default;
65
70
71 virtual const FAABB3 BoundingBox() const override
72 {
73 return LocalBoundingBox.IsEmpty() ? FAABB3() : FAABB3(LocalBoundingBox);
74 }
76 {
77 return BoneData;
78 }
80 {
81 return UsedBones;
82 }
84 {
85 return TriangleMesh;
86 }
87 // Original reference positions
89 {
90 return ReferencePositions;
91 }
92 // Current skinned positions
94 {
95 return LocalPositions;
96 }
97 // Current Skinned positions for writing
99 {
100 return TArrayView<FVec3f>(LocalPositions);
101 }
103 {
104 return SpatialHash;
105 }
106
107 // Skin positions
115 {
116 LocalBoundingBox = CalculateBoundingBox(LocalPositions);
117 }
119
120 virtual void Serialize(FChaosArchive& Ar) override
121 {
122 SerializeImp(Ar);
123 }
124
126 {
128 TriangleMesh.Serialize(Ar);
129 Ar << BoneData;
130 Ar << UsedBones;
131 Ar << ReferenceRootTransform;
132 Ar << ReferenceRelativeTransforms;
133 Ar << ReferencePositions;
134 TBox<FRealSingle, 3>::SerializeAsAABB(Ar, ReferenceBoundingBox);
135 if (Ar.IsLoading())
136 {
137 FinalizeConstruction();
138 }
139 }
140
141 CHAOS_API virtual FImplicitObjectPtr CopyGeometry() const override;
142 CHAOS_API virtual FImplicitObjectPtr CopyGeometryWithScale(const FVec3& Scale) const override;
143 CHAOS_API virtual uint32 GetTypeHash() const override;
144 virtual FReal PhiWithNormal(const FVec3& x, FVec3& Normal) const override
145 {
146 // Currently no users of PhiWithNormal. Only used for proximity queries.
147 ensure(false);
149 }
150
151 private:
153
155 :FImplicitObject(EImplicitObject::HasBoundingBox, ImplicitObjectType::SkinnedTriangleMesh)
156 {}
157
158 CHAOS_API TAABB<FRealSingle,3> CalculateBoundingBox(const TConstArrayView<FVec3f>& Positions) const;
159 CHAOS_API void FinalizeConstruction();
160
161 // Serialized data. Only non-const because of serialization
162 FTriangleMesh TriangleMesh;
164 TArray<FName> UsedBones;
165 FTransform ReferenceRootTransform;
166 TArray<FTransform> ReferenceRelativeTransforms; // ReferenceRootTransform * RefBaseMatrixInv(UsedBoneIdx)
167 TArray<FVec3f> ReferencePositions;
168 TAABB<FRealSingle, 3> ReferenceBoundingBox;
169
170 // Calculated data
171 TAABB<FRealSingle, 3> LocalBoundingBox;
172 TArray<FVec3f> LocalPositions;
173 FTriangleMesh::TSpatialHashType<FRealSingle> SpatialHash;
174 };
175}
#define ensure( InExpression)
Definition AssertionMacros.h:464
@ INDEX_NONE
Definition CoreMiscDefines.h:150
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
constexpr uint32 HashCombine(uint32 A, uint32 C)
Definition TypeHash.h:36
uint8_t uint8
Definition binka_ue_file_header.h:8
uint16_t uint16
Definition binka_ue_file_header.h:7
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition ChaosArchive.h:167
Definition ImplicitObject.h:111
bool HasBoundingBox() const
Definition ImplicitObject.h:275
virtual FName GetTypeName() const
Definition ImplicitObject.h:414
CHAOS_API void SerializeImp(FArchive &Ar)
Definition ImplicitObject.cpp:337
Definition SkinnedTriangleMesh.h:54
virtual FReal PhiWithNormal(const FVec3 &x, FVec3 &Normal) const override
Definition SkinnedTriangleMesh.h:144
static constexpr EImplicitObjectType StaticType()
Definition SkinnedTriangleMesh.h:66
void UpdateLocalBoundingBox()
Definition SkinnedTriangleMesh.h:114
const TArray< FVec3f > & GetReferencePositions() const
Definition SkinnedTriangleMesh.h:88
virtual void Serialize(FChaosArchive &Ar) override
Definition SkinnedTriangleMesh.h:120
const TArray< FWeightedInfluenceData > & GetBoneData() const
Definition SkinnedTriangleMesh.h:75
virtual CHAOS_API FImplicitObjectPtr CopyGeometryWithScale(const FVec3 &Scale) const override
Definition SkinnedTriangleMesh.cpp:73
const TArray< FName > & GetUsedBones() const
Definition SkinnedTriangleMesh.h:79
virtual ~FSkinnedTriangleMesh() override=default
const TArray< FVec3f > & GetLocalPositions() const
Definition SkinnedTriangleMesh.h:93
virtual CHAOS_API uint32 GetTypeHash() const override
Definition SkinnedTriangleMesh.cpp:89
void SerializeImp(FArchive &Ar)
Definition SkinnedTriangleMesh.h:125
const FTriangleMesh::TSpatialHashType< FRealSingle > & GetSpatialHierarchy() const
Definition SkinnedTriangleMesh.h:102
virtual CHAOS_API FImplicitObjectPtr CopyGeometry() const override
Definition SkinnedTriangleMesh.cpp:57
TArrayView< FVec3f > GetLocalPositions()
Definition SkinnedTriangleMesh.h:98
CHAOS_API void UpdateSpatialHierarchy(const FRealSingle MinLodSize=0.f)
Definition SkinnedTriangleMesh.cpp:152
CHAOS_API void SkinPositions(const TArray< FTransform > &RelativeTransforms, const TArrayView< FVec3f > &Positions) const
Definition SkinnedTriangleMesh.cpp:100
virtual const FAABB3 BoundingBox() const override
Definition SkinnedTriangleMesh.h:71
void SkinPositions(const TArray< FTransform > &RelativeTransforms)
Definition SkinnedTriangleMesh.h:109
const FTriangleMesh & GetTriangleMesh() const
Definition SkinnedTriangleMesh.h:83
Definition TriangleMesh.h:24
CHAOS_API void Serialize(FArchive &Ar)
Definition TriangleMesh.cpp:236
FORCEINLINE bool IsEmpty() const
Definition AABB.h:644
static void SerializeAsAABB(FArchive &Ar, TAABB< T, d > &AABB)
Definition Box.h:467
Definition HierarchicalSpatialHash.h:214
Definition Archive.h:1208
UE_FORCEINLINE_HINT bool IsLoading() const
Definition Archive.h:236
Definition ArrayView.h:139
Definition Array.h:670
@ SkinnedTriangleMesh
Definition ImplicitObjectType.h:31
Definition SkeletalMeshComponent.h:307
TRefCountPtr< FImplicitObject > FImplicitObjectPtr
Definition ImplicitFwd.h:33
uint8 EImplicitObjectType
Definition ImplicitObjectType.h:41
FChaosArchive & operator<<(FChaosArchive &Ar, FRigidParticleControlFlags &Flags)
Definition RigidParticleControlFlags.cpp:15
FRealDouble FReal
Definition Real.h:22
float FRealSingle
Definition Real.h:14
TAABB< FReal, 3 > FAABB3
Definition ImplicitObject.h:34
U16 Index
Definition radfft.cpp:71
Definition SkinnedTriangleMesh.h:14
FWeightedInfluenceData()
Definition SkinnedTriangleMesh.h:15
float BoneWeights[MaxTotalInfluences]
Definition SkinnedTriangleMesh.h:36
uint8 NumInfluences
Definition SkinnedTriangleMesh.h:34
uint32 GetTypeHash() const
Definition SkinnedTriangleMesh.h:22
static const uint8 MaxTotalInfluences
Definition SkinnedTriangleMesh.h:33
uint16 BoneIndices[MaxTotalInfluences]
Definition SkinnedTriangleMesh.h:35
Definition SkinnedTriangleMeshElem.h:12
static UE_FORCEINLINE_HINT void * Memset(void *Dest, uint8 Char, SIZE_T Count)
Definition UnrealMemory.h:119
Definition NumericLimits.h:41