UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
GeometryCollection.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#include "Misc/Crc.h"
8
13
14namespace Chaos
15{
16 class FChaosArchive;
17}
20
25
32{
33
34public:
36
44
45 /***
46 * Attribute Groups
47 *
48 * These attribute groups are predefined data member of the FGeometryCollection.
49 *
50 * VerticesGroup ("Vertices")
51 *
52 * FVectorArray Vertex = GetAttribute<FVector3f>("Vertex", VerticesGroup)
53 * FInt32Array BoneMap = GetAttribute<Int32>("BoneMap", VerticesGroup, {"Transform"})
54 * FVectorArray Normal = GetAttribute<FVector3f>("Normal", MaterialGroup)
55 * FVector2DArray UVs = GetAttribute<TArray<FVector2D>>("UVs", MaterialGroup)
56 * FVectorArray TangentU = GetAttribute<FVector3f>("TangentU", MaterialGroup)
57 * FVectorArray TangentV = GetAttribute<FVector3f>("TangentV", MaterialGroup)
58 * FLinearColorArray Color = GetAttribute<FLinearColor>("Color", MaterialGroup)
59 *
60 * The VerticesGroup will store per-vertex information about the geometry. For
61 * example, the "Position" attribute stores a FVector array for the relative
62 * offset of a vertex from the geometries geometric center, and the "BoneMap"
63 * attribute stores an index in to the TransformGroups Transform array so that
64 * the local space vertices may be mapped in to world space positions.
65 *
66 * FacesGroup ("Faces")
67 * Default Attributes :
68 *
69 * FIntVectorArray Indices = GetAttribute<FIntVector>("Indices", FacesGroup, {"Faces"})
70 * FBoolArray Visible = GetAttribute<bool>("Visible", FacesGroup)
71 * FInt32Array MaterialIndex = GetAttribute<Int32>("MaterialIndex", FacesGroup)
72 * FInt32Array MaterialID = GetAttribute<Int32>("MaterialID", FacesGroup)
73 *
74 * The FacesGroup will store the triangulated face data, and any other information
75 * that is associated with the faces of the geometry. The "Triangle" attribute is
76 * stored as Vector<int,3>, and represents the vertices of a individual triangle.
77 *
78 * GeometryGroup ("Geometry")
79 * Default Attributes :
80 *
81 * FInt32Array TransformIndex = GetAttribute<Int32>("TransformIndex", GeometryGroup, {"Transform"})
82 * FBoxArray BoundingBox = GetAttribute<FBox>("BoundingBox", GeometryGroup)
83 * FIntArray FaceStart = GetAttribute<int32>("FaceStart", GeometryGroup)
84 * FIntArray FaceCount = GetAttribute<int32>("FaceCount", GeometryGroup)
85 * FIntArray VertexStart = GetAttribute<int32>("VertexStart", GeometryGroup)
86 * FIntArray VertexCount = GetAttribute<int32>("VertexCount", GeometryGroup)
87 *
88 * The GeometryGroup will store the transform indices, bounding boxes and any other information
89 * that is associated with the geometry.
90 *
91 * MaterialGroup ("Material")
92 * Default Attributes :
93 *
94 * FGeometryCollectionSection Sections = GetAttribute<FGeometryCollectionSection>("Sections", MaterialGroup)
95 *
96 * The set of triangles which are rendered with the same material
97 */
98
99 static CHAOS_API const FName VerticesGroup; // Vertices
100 static CHAOS_API const FName FacesGroup; // Faces
101 static CHAOS_API const FName GeometryGroup; // Geometry
102 static CHAOS_API const FName BreakingGroup; // Breaking
103 static CHAOS_API const FName MaterialGroup; // Materials
104
129
138
140 {
141 // additional flags
143
144 // identify nodes that should be removed from the simulation instead of becoming a fractured body
146
148
149 };
150
152
159
173
178
183
188
193
197 CHAOS_API virtual void RemoveElements(const FName & Group, const TArray<int32>& SortedDeletionList, FProcessingParameters Params = FProcessingParameters()) override;
198
202 CHAOS_API void Empty();
203
207 CHAOS_API virtual void Reset() override;
208
212 CHAOS_API virtual void ReorderElements(FName Group, const TArray<int32>& NewOrder) override;
213
214 //
215 //
216 //
217
218 // Initialize any interfaces on the geometry collection (i.e., the FGeometryCollectionConvexPropertiesInterface)
219 CHAOS_API virtual void InitializeInterfaces();
220
221
227
232
237
243
250 //
251 //
252 //
253
255 CHAOS_API bool HasVisibleGeometry() const;
256
258 CHAOS_API bool HasContiguousVertices() const;
259
261 CHAOS_API bool HasContiguousFaces() const;
262
265
268
270 CHAOS_API bool SetNumUVLayers(int32 NumLayers);
271
272 FORCEINLINE bool IsGeometry(int32 Element) const { return TransformToGeometryIndex[Element] != INDEX_NONE; }
273 FORCEINLINE bool IsClustered(int32 Element) const { const TManagedArray<int32>& SimType = SimulationType; return !!(SimType[Element] == ESimulationTypes::FST_Clustered); }
274 FORCEINLINE bool IsRigid(int32 Element) const { const TManagedArray<int32>& SimType = SimulationType; return !!(SimType[Element] == ESimulationTypes::FST_Rigid); }
275 FORCEINLINE bool IsTransform(int32 Element) const { return !IsGeometry(Element); }
276 FORCEINLINE void SetFlags(int32 Element, int32 InFlags) { TManagedArray<int32>& Status = StatusFlags; Status[Element] |= InFlags; }
277 FORCEINLINE void ClearFlags(int32 Element, int32 InFlags) { TManagedArray<int32>& Status = StatusFlags; Status[Element] = Status[Element] & ~InFlags; }
278 FORCEINLINE bool HasFlags(int32 Element, int32 InFlags) const { const TManagedArray<int32>& Status = StatusFlags; return (Status[Element] & InFlags) != 0; }
279
281 CHAOS_API bool IsVisible(int32 Element) const;
282
285
286 //
287 //
288 //
289
292
294 CHAOS_API void WriteDataToHeaderFile(const FString &Name, const FString &Path);
295
297 CHAOS_API void WriteDataToOBJFile(const FString &Name, const FString &Path, const bool WriteTopology=true, const bool WriteAuxStructures=true);
298
299 //
300 //
301 //
303 CHAOS_API virtual void SetDefaults(FName Group, uint32 StartSize, uint32 NumElements) override;
304
305 // Transform Group
311
312 // Vertices Group
314
315 // Note: UVs have been reworked, and unfortunately there is not a safe path to provide the original UVs managed array as a deprecated accessor.
316 // They are now stored in dynamically allocated attributes per UV channel (/ layer)
317 // See Facades/CollectionUVFacade.h for a more complete interface to access UV layers,
318 // but accesses of the form Collection.UVs[Vertex][Layer] can be replaced with Collection.GetUV(Vertex, Layer) (or ModifyUV)
320 {
321 return GeometryCollection::UV::ModifyUVLayer(*this, UVLayer)[VertexIndex];
322 }
323 const FVector2f& GetUV(int32 VertexIndex, int32 UVLayer) const
324 {
325 return GeometryCollection::UV::GetUVLayer(*this, UVLayer)[VertexIndex];
326 }
335
341
342 // Faces Group
348
349 // Geometry Group
358
359 // Material Group
361
362protected:
363
372
373 CHAOS_API void Construct();
374
379
385
391
396
401
406 {
407 return 10;
408 }
409
410 CHAOS_API virtual void Append(const FManagedArrayCollection& InCollection) override;
411
412public:
413 /* Backwards compatibility */
415
417};
418
424
#define FORCEINLINE
Definition AndroidPlatform.h:140
@ 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
FORCEINLINE Chaos::FChaosArchive & operator<<(Chaos::FChaosArchive &Ar, FGeometryCollection &Value)
Definition GeometryCollection.h:419
void Init()
Definition LockFreeList.h:4
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition ChaosArchive.h:167
virtual void Serialize(void *V, int64 Length) override
Definition ArchiveProxy.h:97
Definition GeometryCollectionConvexPropertiesInterface.h:12
Definition GeometryCollectionProximityPropertiesInterface.h:12
Definition GeometryCollection.h:32
static CHAOS_API const FName MaterialIndexAttribute
Definition GeometryCollection.h:122
static CHAOS_API const FName BreakingGroup
Definition GeometryCollection.h:102
CHAOS_API TArray< TArray< int32 > > ConnectionGraph()
Definition GeometryCollection.cpp:2127
CHAOS_API void UpdateFaceGroupElements()
Definition GeometryCollection.cpp:985
CHAOS_API void UpdateVerticesGroupElements()
Definition GeometryCollection.cpp:917
constexpr int32 GetLatestVersionNumber() const
Definition GeometryCollection.h:405
static CHAOS_API const FName TransformToGeometryIndexAttribute
Definition GeometryCollection.h:111
static CHAOS_API const FName VertexNormalAttribute
Definition GeometryCollection.h:125
CHAOS_API ~FGeometryCollection()
TManagedArray< bool > Internal
Definition GeometryCollection.h:347
static CHAOS_API const FName FaceIndicesAttribute
Definition GeometryCollection.h:120
CHAOS_API void WriteDataToHeaderFile(const FString &Name, const FString &Path)
Definition GeometryCollection.cpp:1786
static CHAOS_API const FName OuterRadiusAttribute
Definition GeometryCollection.h:117
CHAOS_API void UpdateGeometryVisibility(const TArray< int32 > &NodeList, bool VisibilityState)
Definition GeometryCollection.cpp:1029
static CHAOS_API const FName VertexTangentVAttribute
Definition GeometryCollection.h:127
TManagedArray< int32 > VertexCount
Definition GeometryCollection.h:355
static CHAOS_API const FName VertexPositionAttribute
Definition GeometryCollection.h:124
virtual CHAOS_API void Reset() override
Definition GeometryCollection.cpp:760
static CHAOS_API const FName FacesGroup
Definition GeometryCollection.h:100
TManagedArray< int32 > SimulationType
Definition GeometryCollection.h:307
FORCEINLINE bool IsClustered(int32 Element) const
Definition GeometryCollection.h:273
CHAOS_API int32 AppendGeometry(const FGeometryCollection &GeometryCollection, int32 MaterialIDOffset=0, bool ReindexAllMaterials=true, const FTransform &TransformRoot=FTransform::Identity)
Definition GeometryCollection.cpp:227
static CHAOS_API const FName VertexCountAttribute
Definition GeometryCollection.h:115
CHAOS_API TArray< int32 > TransformSelectionToGeometryIndices(const TArray< int32 > &Transforms)
Definition GeometryCollection.cpp:2225
virtual void MatchOptionalDefaultAttributes(const FManagedArrayCollection &InCollection) override
Definition GeometryCollection.h:368
TManagedArray< int32 > FaceStart
Definition GeometryCollection.h:356
static CHAOS_API const FName StatusFlagsAttribute
Definition GeometryCollection.h:107
CHAOS_API bool SetNumUVLayers(int32 NumLayers)
Definition GeometryCollection.cpp:1635
static CHAOS_API FGeometryCollection * NewGeometryCollection(const TArray< float > &RawVertexArray, const TArray< int32 > &RawIndicesArray, bool ReverseVertexOrder=true, FGeometryCollectionDefaults InDefaults=FGeometryCollectionDefaults())
Definition GeometryCollection.cpp:1662
TManagedArray< FLinearColor > Color
Definition GeometryCollection.h:336
static CHAOS_API const FName VertexStartAttribute
Definition GeometryCollection.h:114
CHAOS_API void RemoveGeometryElements(const TArray< int32 > &SortedGeometryIndicesToDelete)
Definition GeometryCollection.cpp:665
TManagedArray< FVector3f > TangentV
Definition GeometryCollection.h:338
static CHAOS_API const FName InnerRadiusAttribute
Definition GeometryCollection.h:116
CHAOS_API TArray< FGeometryCollectionSection > BuildMeshSections(const TArray< FIntVector > &Indices, const TArray< int32 > &BaseMeshOriginalIndicesIndex, TArray< FIntVector > &RetIndices) const
Definition GeometryCollection.cpp:599
TManagedArray< FVector3f > TangentU
Definition GeometryCollection.h:337
ESimulationTypes
Definition GeometryCollection.h:131
@ FST_Max
Definition GeometryCollection.h:136
@ FST_Rigid
Definition GeometryCollection.h:133
@ FST_Clustered
Definition GeometryCollection.h:134
@ FST_None
Definition GeometryCollection.h:132
static CHAOS_API const FName SimulatableParticlesAttribute
Definition GeometryCollection.h:105
TManagedArray< int32 > VertexStart
Definition GeometryCollection.h:354
FORCEINLINE bool IsGeometry(int32 Element) const
Definition GeometryCollection.h:272
CHAOS_API void ReindexMaterials()
Definition GeometryCollection.cpp:494
TManagedArray< FIntVector > Indices
Definition GeometryCollection.h:343
static CHAOS_API const FName BoneColorAttribute
Definition GeometryCollection.h:110
CHAOS_API bool AppendEmbeddedInstance(int32 InExemplarIndex, int32 InParentIndex, const FTransform &InTransform=FTransform::Identity)
Definition GeometryCollection.cpp:448
virtual CHAOS_API void RemoveElements(const FName &Group, const TArray< int32 > &SortedDeletionList, FProcessingParameters Params=FProcessingParameters()) override
Definition GeometryCollection.cpp:606
FGeometryCollection & operator=(const FGeometryCollection &)=delete
CHAOS_API void UpdateBoundingBox()
Definition GeometryCollection.cpp:1059
static CHAOS_API const FName TransformIndexAttribute
Definition GeometryCollection.h:113
CHAOS_API void WriteDataToOBJFile(const FString &Name, const FString &Path, const bool WriteTopology=true, const bool WriteAuxStructures=true)
Definition GeometryCollection.cpp:1887
TManagedArray< int32 > TransformToGeometryIndex
Definition GeometryCollection.h:306
static CHAOS_API const FName SimulationTypeAttribute
Definition GeometryCollection.h:106
TManagedArray< int32 > MaterialID
Definition GeometryCollection.h:346
FGeometryCollection & operator=(FGeometryCollection &&)=default
static CHAOS_API const FName GeometryGroup
Definition GeometryCollection.h:101
TManagedArray< FGeometryCollectionSection > Sections
Definition GeometryCollection.h:360
TManagedArray< int32 > MaterialIndex
Definition GeometryCollection.h:345
CHAOS_API void Construct()
Definition GeometryCollection.cpp:127
static CHAOS_API const FName MaterialGroup
Definition GeometryCollection.h:103
CHAOS_API void ReorderTransformElements(const TArray< int32 > &NewOrder)
Definition GeometryCollection.cpp:788
static CHAOS_API void DefineGeometrySchema(FManagedArrayCollection &)
Definition GeometryCollection.cpp:82
TManagedArray< FVector3f > Vertex
Definition GeometryCollection.h:313
MANAGED_ARRAY_COLLECTION_INTERNAL(FGeometryCollection)
CHAOS_API void Empty()
Definition GeometryCollection.cpp:749
TManagedArray< int32 > InitialDynamicState
Definition GeometryCollection.h:309
CHAOS_API void ReindexExemplarIndices(TArray< int32 > &SortedRemovedIndices)
Definition GeometryCollection.cpp:468
CHAOS_API void UpdateOldAttributeNames()
Definition GeometryCollection.cpp:2161
FGeometryCollection(FGeometryCollection &&)=default
static CHAOS_API const FName FaceVisibleAttribute
Definition GeometryCollection.h:121
CHAOS_API bool HasVisibleGeometry() const
Definition GeometryCollection.cpp:1043
const FVector2f & GetUV(int32 VertexIndex, int32 UVLayer) const
Definition GeometryCollection.h:323
CHAOS_API bool HasContiguousFaces() const
Definition GeometryCollection.cpp:1551
static CHAOS_API const FName BoundingBoxAttribute
Definition GeometryCollection.h:112
FORCEINLINE bool HasFlags(int32 Element, int32 InFlags) const
Definition GeometryCollection.h:278
CHAOS_API bool HasContiguousRenderFaces() const
Definition GeometryCollection.cpp:1602
virtual CHAOS_API void InitializeInterfaces()
Definition GeometryCollection.cpp:766
TManagedArray< int32 > StatusFlags
Definition GeometryCollection.h:308
static CHAOS_API const FName MaterialIDAttribute
Definition GeometryCollection.h:123
FORCEINLINE bool IsTransform(int32 Element) const
Definition GeometryCollection.h:275
TManagedArray< FBox > BoundingBox
Definition GeometryCollection.h:351
static CHAOS_API const FName ExternalCollisionsAttribute
Definition GeometryCollection.h:108
TManagedArray< int32 > TransformIndex
Definition GeometryCollection.h:350
FORCEINLINE bool IsRigid(int32 Element) const
Definition GeometryCollection.h:274
static CHAOS_API const FName ColorAttribute
Definition GeometryCollection.h:109
static CHAOS_API const FName FaceStartAttribute
Definition GeometryCollection.h:118
virtual CHAOS_API void ReorderElements(FName Group, const TArray< int32 > &NewOrder) override
Definition GeometryCollection.cpp:772
FORCEINLINE void SetFlags(int32 Element, int32 InFlags)
Definition GeometryCollection.h:276
ENodeFlags
Definition GeometryCollection.h:140
@ FS_RemoveOnFracture
Definition GeometryCollection.h:145
@ FS_IgnoreCollisionInParentCluster
Definition GeometryCollection.h:147
@ FS_None
Definition GeometryCollection.h:142
CHAOS_API void ReorderGeometryElements(const TArray< int32 > &NewOrder)
Definition GeometryCollection.cpp:848
TManagedArray< bool > Visible
Definition GeometryCollection.h:344
virtual CHAOS_API void SetDefaults(FName Group, uint32 StartSize, uint32 NumElements) override
Definition GeometryCollection.cpp:174
static CHAOS_API const FName VertexTangentUAttribute
Definition GeometryCollection.h:126
TManagedArray< int32 > FaceCount
Definition GeometryCollection.h:357
TManagedArray< int32 > BoneMap
Definition GeometryCollection.h:340
TManagedArray< FVector3f > Normal
Definition GeometryCollection.h:339
TManagedArray< FVector2f > * FindUVLayer(int32 UVLayer)
Definition GeometryCollection.h:327
TManagedArray< float > OuterRadius
Definition GeometryCollection.h:353
CHAOS_API bool HasContiguousVertices() const
Definition GeometryCollection.cpp:1494
static CHAOS_API bool AreCollisionParticlesEnabled()
Definition GeometryCollection.cpp:65
static CHAOS_API const FName VerticesGroup
Definition GeometryCollection.h:99
CHAOS_API FBoxSphereBounds GetBoundingBox() const
Definition GeometryCollection.cpp:1105
CHAOS_API bool BuildVertexToGeometryMapping(bool InSaved=false)
Definition GeometryCollection.cpp:891
FTransformCollection Super
Definition GeometryCollection.h:35
CHAOS_API void AppendCollection(const FGeometryCollection &InCollection)
Definition GeometryCollection.cpp:221
static CHAOS_API const FName VertexBoneMapAttribute
Definition GeometryCollection.h:128
FGeometryCollectionDefaults Defaults
Definition GeometryCollection.h:302
TManagedArray< float > InnerRadius
Definition GeometryCollection.h:352
FVector2f & ModifyUV(int32 VertexIndex, int32 UVLayer)
Definition GeometryCollection.h:319
const TManagedArray< FVector2f > * FindUVLayer(int32 UVLayer) const
Definition GeometryCollection.h:331
CHAOS_API int32 NumUVLayers() const
Definition GeometryCollection.cpp:1630
static CHAOS_API const FName FaceCountAttribute
Definition GeometryCollection.h:119
CHAOS_API bool BuildFaceToGeometryMapping(bool InSaved=false)
Definition GeometryCollection.cpp:959
FGeometryCollection(FGeometryCollection &)=delete
FORCEINLINE void ClearFlags(int32 Element, int32 InFlags)
Definition GeometryCollection.h:277
TManagedArray< int32 > ExemplarIndex
Definition GeometryCollection.h:310
Definition NameTypes.h:617
Definition TransformCollection.h:17
Definition Array.h:670
Definition ManagedArray.h:1099
Definition SkeletalMeshComponent.h:307
TManagedArray< FVector2f > & ModifyUVLayer(FManagedArrayCollection &Collection, int32 UVLayer)
Definition CollectionUVFacade.h:43
const TManagedArray< FVector2f > & GetUVLayer(const FManagedArrayCollection &Collection, int32 UVLayer)
Definition CollectionUVFacade.h:38
const TManagedArray< FVector2f > * FindUVLayer(const FManagedArrayCollection &Collection, int32 UVLayer)
Definition CollectionUVFacade.h:30
void MatchUVLayerCount(FManagedArrayCollection &ToCollection, const FManagedArrayCollection &FromCollection)
Definition CollectionUVFacade.h:119
Definition CollectionBoundsFacade.cpp:13
Definition GeometryCollection.h:22
FLinearColor DefaultVertexColor
Definition GeometryCollection.h:23
Definition Color.h:48
static CORE_API const FLinearColor White
Definition Color.h:456
Definition ManagedArrayCollection.h:56
CHAOS_API int32 NumElements(FName Group) const
Definition ManagedArrayCollection.cpp:236
Definition BoxSphereBounds.h:25
static CORE_API const TTransform< double > Identity
Definition TransformNonVectorized.h:58