UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
WeightedLatticeImplicitObject.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2#pragma once
3
5#include "Chaos/ArrayND.h"
6#include "Chaos/AABB.h"
9
11
12namespace Chaos
13{
15
17{
24
26 {
28 for (uint8 Index = 0; Index < NumInfluences; ++Index)
29 {
30 Result = HashCombine(Result, ::GetTypeHash(BoneIndices[Index]));
31 Result = HashCombine(Result, ::GetTypeHash(BoneWeights[Index]));
32 }
33 return Result;
34 }
35
36 static const uint8 MaxTotalInfluences = 12;
38 uint16 BoneIndices[MaxTotalInfluences]; // This is index into FWeightedLatticeImplicitObject::UsedBones (which then maps into skeletalmesh bones)
40};
41
43{
44 Ar << Value.NumInfluences;
45 for (int32 Index = 0; Index < Value.NumInfluences; ++Index)
46 {
47 Ar << Value.BoneIndices[Index];
48 Ar << Value.BoneWeights[Index];
49 }
50 return Ar;
51}
52
57{
58public:
61
64
66
68 virtual ~FWeightedLatticeImplicitObject() override = default;
70
71 virtual const FAABB3 BoundingBox() const override { return LocalBoundingBox; }
74 const TArrayND<bool, 3>& GetEmptyCells() const { return EmptyCells; }
75 const TUniformGrid<FReal, 3>& GetGrid() const { return Grid; }
76 const TArray<FName>& GetUsedBones() const { return UsedBones; }
77
78 UE_DEPRECATED(5.6, "SolverBoneIndices are no longer stored on WeightedLatticeImplicitObjects")
80 {
81 static TArray<int32> Dummy;
82 return Dummy;
83 }
84 UE_DEPRECATED(5.6, "SolverBoneIndices are no longer stored on WeightedLatticeImplicitObjects")
86
87 CHAOS_API virtual void Serialize(FChaosArchive& Ar) override;
88
93
95 {
99
103
107
109
115
117 {
119 TVec4<TVec3<int32>>(TVec3<int32>(1,1,1), TVec3<int32>(1,1,0), TVec3<int32>(1,0,1), TVec3<int32>(0,1,1)),
120 TVec4<TVec3<int32>>(TVec3<int32>(1,0,0), TVec3<int32>(1,0,1), TVec3<int32>(1,1,0), TVec3<int32>(0,0,0)),
121 TVec4<TVec3<int32>>(TVec3<int32>(0,0,1), TVec3<int32>(0,0,0), TVec3<int32>(0,1,1), TVec3<int32>(1,0,1)),
122 TVec4<TVec3<int32>>(TVec3<int32>(1,1,0), TVec3<int32>(0,1,1), TVec3<int32>(0,0,0), TVec3<int32>(1,0,1)),
123 };
124
126 {
128 TVec4<TVec3<int32>>(TVec3<int32>(0,1,1), TVec3<int32>(0,1,0), TVec3<int32>(1,1,1), TVec3<int32>(0,0,1)),
129 TVec4<TVec3<int32>>(TVec3<int32>(1,0,1), TVec3<int32>(1,1,1), TVec3<int32>(1,0,0), TVec3<int32>(0,0,1)),
130 TVec4<TVec3<int32>>(TVec3<int32>(1,1,0), TVec3<int32>(0,1,0), TVec3<int32>(1,0,0), TVec3<int32>(1,1,1)),
131 TVec4<TVec3<int32>>(TVec3<int32>(1,0,0), TVec3<int32>(1,1,1), TVec3<int32>(0,1,0), TVec3<int32>(0,0,1)),
132 };
133
135 {
137
138 if (((CellIndex.X + CellIndex.Y + CellIndex.Z) & 1) == 0)
139 {
141 }
142 else
143 {
145 }
146 }
147
152 };
153
155
156protected:
160
162
166
167
168 // Serialized data. Only non-const because of serialization
173 TArray<FTransform> ReferenceRelativeTransforms; // ReferenceRootTransform * RefBaseMatrixInv(UsedBoneIdx)
174
175 // Non-serialized cached (const) data derived from serialized data
177
178 // Context-specific data (e.g., data a specific solver will need to do DeformPoints)
179 UE_DEPRECATED(5.6, "SolverBoneIndices are deprecated")
180 TArray<int32> SolverBoneIndices; // indices set by the solver for bone transform query
181
182 // Non-serialized deforming data
187};
188
191{
192public:
193 using T = typename TConcrete::TType;
194 using TType = T;
196
199
200 virtual ~TWeightedLatticeImplicitObject() override = default;
201
203
205
207 {
208 return TConcrete::StaticType() | ImplicitObjectType::IsWeightedLattice;
209 }
210
212 {
213 return Object.GetReference();
214 }
215
216 virtual FImplicitObjectPtr CopyGeometry() const override;
217 virtual FImplicitObjectPtr DeepCopyGeometry() const override;
218
219 virtual uint32 GetTypeHash() const override
220 {
221 return GetTypeHashHelper(Object->GetTypeHash());
222 }
223
224 // Note that if x is in an empty cell / outside the deformed lattice and bIncludeEmptyCells is false, this will return UE_BIG_NUMBER and Normal will be unchanged.
225 // SurfaceCoord will be invalid.
226 // When bIncludeEmptyCells is true, the closest non-empty lattice cell will be used to find the closest surface point.
227 FReal PhiWithNormalAndSurfacePoint(const FVec3& X, FVec3& Normal, FEmbeddingCoordinate& SurfaceCoord, bool bIncludeEmptyCells = false) const;
228
229 // Batch calls used by cloth.
230 // Note that if x is in an empty cell / outside the deformed lattice, Phi will be UE_BIG_NUMBER and Normal will be unchanged (BatchNormals will be resized using SetNumUninitialized, so it may be left uninitialized)
231 // GreatestInfluenceBone will not be calculated (and set to INDEX_NONE) if Phi is >= Thickness.
232 // GreatestInfluenceBone is an index into UsedBones
233 // All outputs will be unchanged (and possibly uninitialized) for points with InvM == 0.
234 void BatchPhiWithNormalAndGreatestInfluenceBone(const TConstArrayView<Softs::FPAndInvM> PAndInvMArray,
237
238 // Batch calls used by cloth.
239 // Note that if x is in an empty cell / outside the deformed lattice, Phi will be UE_BIG_NUMBER and Normal will be unchanged (BatchNormals will be resized using SetNumUninitialized, so it may be left uninitialized)
240 // All outputs will be unchanged (and possibly uninitialized) for points with InvM == 0.
241 void BatchPhiWithNormal(const TConstArrayView<Softs::FPAndInvM> PAndInvMArray,
243
244 virtual FReal PhiWithNormal(const FVec3& x, FVec3& Normal) const override
245 {
247 constexpr bool bIncludeEmptyCells = true;
248 return PhiWithNormalAndSurfacePoint(x, Normal, SurfaceCoordUnused, bIncludeEmptyCells);
249 }
250
251 virtual void Serialize(FChaosArchive& Ar) override
252 {
255 Ar << Object;
256 }
257
258private:
259
260 // Serialized data
262
265 , Object(MoveTemp(InObject))
266 {}
267
268 //needed for serialization
269 TWeightedLatticeImplicitObject()
270 : FWeightedLatticeImplicitObject(EImplicitObject::HasBoundingBox, StaticType())
271 , Object(nullptr)
272 {}
273
274 friend FImplicitObject; //needed for serialization
275 friend ::FKSkinnedLevelSetElem; //needed for serialization
276};
277
279{
280public:
281
282 CHAOS_API void GenerateGrid(const int32 GridResolution, const TAABB<FReal, 3>& ObjectBBox);
283 CHAOS_API void AddInfluence(int32 FlatIndex, uint16 BoneIndex, float Weight, bool bIsOuterWeight);
284
285 // BoneIndexToBoneName(int32 BoneIndex)->FName return FName of Bone for given BoneIndex (BoneIndex used by AddInfluence)
286 // BoneIndexToReferenceTransform(int32 BoneIndex)->FTransform return transform of Bone (BoneIndex used by AddInfluence). Should return transform for RootBone (parent of this object) when BoneIndex == INDEX_NONE
287 template<typename FBoneIndexToBoneName, typename FBoneIndexToReferenceTransform>
289
290 template<typename TConcrete>
291 UE_DEPRECATED(5.4, "Please use Generate with TRefCountPtr instead")
293
296
297 const TUniformGrid<FReal, 3>& GetGrid() const { return Grid; }
298 const TArrayND<FWeightedLatticeInfluenceData, 3>& GetBoneData() const { return BoneData; }
299
300private:
301
302 CHAOS_API void NormalizeBoneWeights();
303
304 template<typename FBoneIndexToBoneName, typename FBoneIndexToReferenceTransform>
306
307
310 TArray<FName> UsedBones;
311 TArray<FTransform> ReferenceRelativeTransforms;
312
313 // Add on to FWeightedLatticeInfluenceData
314 struct FInfluenceBuildData
315 {
316 bool WeightsAreOuter = true;
317 };
319
320 enum struct EBuildStep
321 {
322 None = 0,
323 GridValid,
324 InfluencesFinalized,
325 Finished = None, // Once Finished, all data has been moved out and the builder is no longer valid
326 };
327 EBuildStep BuildStep = EBuildStep::None;
328};
329
330// Not actually a collision object. CollisionParticles that are used to update bones used by the FWeightedLatticeImplicitObject have this as their geometry
331class UE_DEPRECATED(5.6, "FWeightedLatticeBoneProxy have been deprecated. Do not use.") FWeightedLatticeBoneProxy : public FImplicitObject
332{
333public:
334 using FImplicitObject::GetTypeName;
335
337 : FImplicitObject(EImplicitObject::DisableCollisions, ImplicitObjectType::Unknown)
338 {}
339
340 static constexpr EImplicitObjectType StaticType() { return ImplicitObjectType::Unknown; }
341
342 virtual FReal PhiWithNormal(const FVec3& x, FVec3& Normal) const override
343 {
344 return UE_BIG_NUMBER;
345 }
346
347 virtual uint32 GetTypeHash() const override
348 {
349 return 0;
350 }
351};
352
353
354// inline definitions
356{
357 const TVec4<TVec3<int32>>& TetOffsets = TetrahedronOffsets();
358 return BarycentricCoordinate.X * InGrid.Node(CellIndex + TetOffsets[0]) + BarycentricCoordinate.Y * InGrid.Node(CellIndex + TetOffsets[1]) + BarycentricCoordinate.Z * InGrid.Node(CellIndex + TetOffsets[2])
359 + (1. - BarycentricCoordinate.X - BarycentricCoordinate.Y - BarycentricCoordinate.Z) * InGrid.Node(CellIndex + TetOffsets[3]);
360}
361
363{
364 const TVec4<TVec3<int32>>& TetOffsets = TetrahedronOffsets();
365
366 return BarycentricCoordinate.X * InDeformedPoints(CellIndex + TetOffsets[0]) + BarycentricCoordinate.Y * InDeformedPoints(CellIndex + TetOffsets[1]) + BarycentricCoordinate.Z * InDeformedPoints(CellIndex + TetOffsets[2])
367 + (1. - BarycentricCoordinate.X - BarycentricCoordinate.Y - BarycentricCoordinate.Z) * InDeformedPoints(CellIndex + TetOffsets[3]);
368}
369
371{
372 if (!IsValid())
373 {
374 return INDEX_NONE;
375 }
376
377 const TVec4<TVec3<int32>>& TetOffsets = TetrahedronOffsets();
378 int32 BoneIndex = INDEX_NONE;
379 const TVec4<float> BarycentricCoordinate4((float)BarycentricCoordinate.X, (float)BarycentricCoordinate.Y,
380 (float)BarycentricCoordinate.Z, 1.f - (float)BarycentricCoordinate.X - (float)BarycentricCoordinate.Y - (float)BarycentricCoordinate.Z);
381 float LargestWeight = 0.f;
382 for (int32 Coord = 0; Coord < 4; ++Coord)
383 {
384 const FWeightedLatticeInfluenceData& Influences = InBoneData(CellIndex + TetOffsets[Coord]);
385 for (uint8 InfIndex = 0; InfIndex < Influences.NumInfluences; ++InfIndex)
386 {
387 const float Weight = BarycentricCoordinate4[Coord] * Influences.BoneWeights[InfIndex];
388 if (Weight > LargestWeight)
389 {
391 BoneIndex = Influences.BoneIndices[InfIndex];
392 }
393 }
394 }
395
396 return BoneIndex;
397}
398
399template<typename FBoneIndexToBoneName, typename FBoneIndexToReferenceTransform>
400inline void FWeightedLatticeImplicitObjectBuilder::CalcUsedBonesAndReIndex(const FBoneIndexToBoneName& BoneIndexToBoneName, const FBoneIndexToReferenceTransform& BoneIndexToReferenceTransform)
401{
403 for (int32 Idx = 0; Idx < BoneData.Num(); ++Idx)
404 {
405 const FWeightedLatticeInfluenceData& Data = BoneData[Idx];
406 for (uint8 InfIdx = 0; InfIdx < Data.NumInfluences; ++InfIdx)
407 {
408 UsedBoneSet.Add(Data.BoneIndices[InfIdx]);
409 }
410 }
411 const TArray<uint16> UsedBoneIndices = UsedBoneSet.Array();
413 UsedBones.SetNumUninitialized(UsedBoneIndices.Num());
415 ReferenceRelativeTransforms.SetNumUninitialized(UsedBoneIndices.Num());
416
418
420 for (uint16 ArrayIdx = 0; ArrayIdx < (uint16)UsedBoneIndices.Num(); ++ArrayIdx)
421 {
422 UsedBones[ArrayIdx] = BoneIndexToBoneName(UsedBoneIndices[ArrayIdx]);
424 UsedBoneReverseLookup.Add(UsedBoneIndices[ArrayIdx], ArrayIdx);
425 }
426
427 for (int32 Idx = 0; Idx < BoneData.Num(); ++Idx)
428 {
429 FWeightedLatticeInfluenceData& Data = BoneData[Idx];
430 for (uint8 InfIdx = 0; InfIdx < Data.NumInfluences; ++InfIdx)
431 {
432 Data.BoneIndices[InfIdx] = UsedBoneReverseLookup[Data.BoneIndices[InfIdx]];
433 }
434 }
435}
436
437template<typename FBoneIndexToBoneName, typename FBoneIndexToReferenceTransform>
439{
440 check(BuildStep == EBuildStep::GridValid);
441 NormalizeBoneWeights();
442 CalcUsedBonesAndReIndex(BoneIndexToBoneName, BoneIndexToReferenceTransform);
443 BuildStep = EBuildStep::InfluencesFinalized;
444}
445
446template<typename TConcrete>
458}
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
@ Normal
Definition AndroidInputInterface.h:116
#define checkSlow(expr)
Definition AssertionMacros.h:332
#define check(expr)
Definition AssertionMacros.h:314
@ 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
return true
Definition ExternalRpcRegistry.cpp:601
#define PRAGMA_ENABLE_DEPRECATION_WARNINGS
Definition GenericPlatformCompilerPreSetup.h:12
#define PRAGMA_DISABLE_DEPRECATION_WARNINGS
Definition GenericPlatformCompilerPreSetup.h:8
constexpr uint32 HashCombine(uint32 A, uint32 C)
Definition TypeHash.h:36
#define UE_BIG_NUMBER
Definition UnrealMathUtility.h:132
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
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:364
Definition ChaosArchive.h:167
Definition ImplicitObject.h:111
bool HasBoundingBox() const
Definition ImplicitObject.h:275
CHAOS_API FImplicitObject(int32 Flags, EImplicitObjectType InType=ImplicitObjectType::Unknown)
Definition ImplicitObject.cpp:25
virtual FName GetTypeName() const
Definition ImplicitObject.h:414
static constexpr EImplicitObjectType StaticType()
Definition ImplicitObject.h:398
virtual Chaos::FImplicitObjectPtr DeepCopyGeometry() const
Definition ImplicitObject.h:220
virtual CHAOS_API Chaos::FImplicitObjectPtr CopyGeometry() const
Definition ImplicitObject.cpp:82
Definition WeightedLatticeImplicitObject.h:279
TUniquePtr< TWeightedLatticeImplicitObject< TConcrete > > Generate(TUniquePtr< TConcrete > &&Object)
const TArrayND< FWeightedLatticeInfluenceData, 3 > & GetBoneData() const
Definition WeightedLatticeImplicitObject.h:298
void FinalizeInfluences(const FBoneIndexToBoneName &BoneIndexToBoneName, const FBoneIndexToReferenceTransform &BoneIndexToReferenceTransform)
Definition WeightedLatticeImplicitObject.h:438
Definition WeightedLatticeImplicitObject.h:57
virtual CHAOS_API void Serialize(FChaosArchive &Ar) override
Definition WeightedLatticeImplicitObject.cpp:247
TAABB< FReal, 3 > LocalBoundingBox
Definition WeightedLatticeImplicitObject.h:183
CHAOS_API void SetEmptyCells()
Definition WeightedLatticeImplicitObject.cpp:561
TArray< FTransform > ReferenceRelativeTransforms
Definition WeightedLatticeImplicitObject.h:173
const TArrayND< bool, 3 > & GetEmptyCells() const
Definition WeightedLatticeImplicitObject.h:74
const TArray< int32 > & GetSolverBoneIndices() const
Definition WeightedLatticeImplicitObject.h:79
TArrayND< bool, 3 > EmptyCells
Definition WeightedLatticeImplicitObject.h:176
const TArray< FName > & GetUsedBones() const
Definition WeightedLatticeImplicitObject.h:76
CHAOS_API bool GetEmbeddingCoordinates(const FVec3 &DeformedPoint, TArray< FEmbeddingCoordinate > &CoordinatesOut, bool bFindClosest=false) const
Definition WeightedLatticeImplicitObject.cpp:392
virtual PRAGMA_DISABLE_DEPRECATION_WARNINGS ~FWeightedLatticeImplicitObject() override=default
void SetSolverBoneIndices(TArray< int32 > &&InSolverBoneIndices)
Definition WeightedLatticeImplicitObject.h:85
bool bSpatialDirty
Definition WeightedLatticeImplicitObject.h:186
TArray< int32 > SolverBoneIndices
Definition WeightedLatticeImplicitObject.h:180
const TUniformGrid< FReal, 3 > & GetGrid() const
Definition WeightedLatticeImplicitObject.h:75
virtual FName GetTypeName() const
Definition ImplicitObject.h:414
virtual PRAGMA_ENABLE_DEPRECATION_WARNINGS const FAABB3 BoundingBox() const override
Definition WeightedLatticeImplicitObject.h:71
FWeightedLatticeImplicitObject(int32 Flags, EImplicitObjectType InType)
Definition WeightedLatticeImplicitObject.h:157
const TArrayND< FWeightedLatticeInfluenceData, 3 > & GetBoneData() const
Definition WeightedLatticeImplicitObject.h:72
const TArrayND< FVec3, 3 > & GetDeformedPoints() const
Definition WeightedLatticeImplicitObject.h:73
CHAOS_API void UpdateSpatialHierarchy(const FReal MinLodSize=0.)
Definition WeightedLatticeImplicitObject.cpp:364
CHAOS_API void DeformPoints(const TArray< FTransform > &RelativeTransforms)
Definition WeightedLatticeImplicitObject.cpp:261
CHAOS_API void InitializeDeformedPoints()
Definition WeightedLatticeImplicitObject.cpp:543
CHAOS_API FVec3 GetDeformedPoint(const FVec3 &UndeformedPoint) const
Definition WeightedLatticeImplicitObject.cpp:302
CHAOS_API uint32 GetTypeHashHelper(const uint32 InHash) const
Definition WeightedLatticeImplicitObject.cpp:587
FImplicitObjectPtr ObjectType
Definition WeightedLatticeImplicitObject.h:59
TUniformGrid< FReal, 3 > Grid
Definition WeightedLatticeImplicitObject.h:169
THierarchicalSpatialHash< int32, FReal > Spatial
Definition WeightedLatticeImplicitObject.h:185
TArray< FName > UsedBones
Definition WeightedLatticeImplicitObject.h:171
TArrayND< FWeightedLatticeInfluenceData, 3 > BoneData
Definition WeightedLatticeImplicitObject.h:170
FTransform ReferenceRootTransform
Definition WeightedLatticeImplicitObject.h:172
TArrayND< FVec3, 3 > DeformedPoints
Definition WeightedLatticeImplicitObject.h:184
CHAOS_API void FinalizeConstruction()
Definition WeightedLatticeImplicitObject.cpp:240
Definition ArrayND.h:194
Definition HierarchicalSpatialHash.h:214
Definition Transform.h:115
Definition UniformGrid.h:267
Definition Vector.h:1000
Definition WeightedLatticeImplicitObject.h:191
virtual void Serialize(FChaosArchive &Ar) override
Definition WeightedLatticeImplicitObject.h:251
const TConcrete * GetEmbeddedObject() const
Definition WeightedLatticeImplicitObject.h:211
virtual uint32 GetTypeHash() const override
Definition WeightedLatticeImplicitObject.h:219
virtual FReal PhiWithNormal(const FVec3 &x, FVec3 &Normal) const override
Definition WeightedLatticeImplicitObject.h:244
static constexpr EImplicitObjectType StaticType()
Definition WeightedLatticeImplicitObject.h:206
virtual ~TWeightedLatticeImplicitObject() override=default
T TType
Definition WeightedLatticeImplicitObject.h:194
typename TConcrete::TType T
Definition WeightedLatticeImplicitObject.h:193
TWeightedLatticeImplicitObject(const TWeightedLatticeImplicitObject &Other)=delete
Definition Archive.h:1208
Definition Array.h:670
UE_REWRITE SizeType Num() const
Definition Array.h:1144
void Reset(SizeType NewSize=0)
Definition Array.h:2246
void SetNumUninitialized(SizeType NewNum, EAllowShrinking AllowShrinking=UE::Core::Private::AllowShrinkingByDefault< AllocatorType >())
Definition Array.h:2369
Definition UnrealString.h.inl:34
Definition UniquePtr.h:107
@ DisableCollisions
Definition ImplicitObjectType.h:69
@ IsWeightedLattice
Definition ImplicitObjectType.h:34
FRealSingle FSolverReal
Definition PBDSoftsEvolutionFwd.h:31
GeometryCollection::Facades::FMuscleActivationData Data
Definition MuscleActivationConstraints.h:15
Definition SkeletalMeshComponent.h:307
FORCEINLINE bool IsWeightedLattice(EImplicitObjectType Type)
Definition ImplicitObjectType.h:53
TRefCountPtr< FImplicitObject > FImplicitObjectPtr
Definition ImplicitFwd.h:33
uint8 EImplicitObjectType
Definition ImplicitObjectType.h:41
@ X
Definition SimulationModuleBase.h:152
FChaosArchive & operator<<(FChaosArchive &Ar, FRigidParticleControlFlags &Flags)
Definition RigidParticleControlFlags.cpp:15
FRealDouble FReal
Definition Real.h:22
TVector< FReal, 3 > FVec3
Definition Core.h:17
uint32 GetTypeHash(const FKey &Key)
Definition BlackboardKey.h:35
Chaos::FReal FReal
Definition ImmediatePhysicsCore_Chaos.h:33
U16 Index
Definition radfft.cpp:71
Definition WeightedLatticeImplicitObject.h:95
const TVec4< TVec3< int32 > > & TetrahedronOffsets() const
Definition WeightedLatticeImplicitObject.h:134
int32 GreatestInfluenceBone(const TArrayND< FWeightedLatticeInfluenceData, 3 > &InBoneData) const
Definition WeightedLatticeImplicitObject.h:370
static const TVec4< TVec3< int32 > > EvenIndexTetrahedraOffsets[5]
Definition WeightedLatticeImplicitObject.h:116
FEmbeddingCoordinate(const TVec3< int32 > &InCellIndex, int32 InLocalTetrahedron, const FVec3 &InBarycentric)
Definition WeightedLatticeImplicitObject.h:104
FEmbeddingCoordinate & operator=(const FEmbeddingCoordinate &Other)=default
TVec3< int32 > CellIndex
Definition WeightedLatticeImplicitObject.h:96
FEmbeddingCoordinate(const FEmbeddingCoordinate &Other)=default
FVec3 DeformedPosition(const TArrayND< FVec3, 3 > &InDeformedPoints) const
Definition WeightedLatticeImplicitObject.h:362
CHAOS_API FMatrix DeformationTransform(const TArrayND< FVec3, 3 > &DeformedPoints, const TUniformGrid< FReal, 3 > &Grid) const
Definition WeightedLatticeImplicitObject.cpp:101
bool IsValid() const
Definition WeightedLatticeImplicitObject.h:110
static const TVec4< TVec3< int32 > > OddIndexTetrahedraOffsets[5]
Definition WeightedLatticeImplicitObject.h:125
int32 LocalTetrahedron
Definition WeightedLatticeImplicitObject.h:97
FVec3 UndeformedPosition(const TUniformGrid< FReal, 3 > &InGrid) const
FVec3 BarycentricCoordinate
Definition WeightedLatticeImplicitObject.h:98
Definition WeightedLatticeImplicitObject.h:17
uint32 GetTypeHash() const
Definition WeightedLatticeImplicitObject.h:25
uint16 BoneIndices[MaxTotalInfluences]
Definition WeightedLatticeImplicitObject.h:38
FWeightedLatticeInfluenceData()
Definition WeightedLatticeImplicitObject.h:18
float BoneWeights[MaxTotalInfluences]
Definition WeightedLatticeImplicitObject.h:39
static const uint8 MaxTotalInfluences
Definition WeightedLatticeImplicitObject.h:36
uint8 NumInfluences
Definition WeightedLatticeImplicitObject.h:37
Definition SkinnedLevelSetElem.h:13
static UE_FORCEINLINE_HINT void * Memset(void *Dest, uint8 Char, SIZE_T Count)
Definition UnrealMemory.h:119