UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
ConvexOptimizer.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "Chaos/Core.h"
7#include "Chaos/Tribox.h"
8
9namespace Chaos
10{
11
12namespace Private
13{
14 class FImplicitBVHObject;
19
25 {
26 public :
27
29 {
31
32 // Cached tribox
34
35 // Cached convex
37
38 // Shape Index
40
41 // Node volume
43
44 // Valid flag to check if the node has already been processed during merging
45 bool bValidNode = true;
46
47 // Valid flag to check if the edge has already been processed during merging
49
50 // Convex leaf offset that was used when the convex has been built
52 };
53
55
57
58 // Default destructor
60
61 // Simplify all the convexes in the hierarchy
63 const EObjectStateType ObjectState, const TBitArray<>& bOptimizeConvexes);
64
65 // Check if the manager is valid or not
66 bool IsValid() const {return !SimplifiedConvexes.IsEmpty();}
67
68 // Visit all the collision objects if they exist / otherwise forward it to the RootHierarchy
69 CHAOS_API void VisitCollisionObjects(const FImplicitHierarchyVisitor& VisitorFunc) const;
70
71 // Visit all the overlapping objects if they exist / otherwise forward it to the RootHierarchy
72 CHAOS_API void VisitOverlappingObjects(const FAABB3& LocalBounds, const FImplicitHierarchyVisitor& VisitorFunc) const;
73
74 // Get the shapes array
75 const FShapeInstanceArray& GetShapeInstances() const { return ShapesArray;}
76
77 // Get the number of collision objects
79
80 private:
81
82 // Build union connectivity for merging
83 void BuildUnionConnectivity(const Chaos::FImplicitObjectUnionPtr& UnionGeometry);
84
85 // Merge the connected shapes
87
88 // Build a single convex
89 void BuildSingleConvex(const Chaos::FImplicitObjectUnionPtr& UnionGeometry, const FShapesArray& UnionShapes, const TBitArray<>& bOptimizeConvexes);
90
91 // Build several convexes
92 void BuildMultipleConvex(const Chaos::FImplicitObjectUnionPtr& UnionGeometry, const FShapesArray& UnionShapes, const bool bEnableMerging, const TBitArray<>& bOptimizeConvexes);
93
94 // Build the simplified shapes
95 void BuildConvexShapes(const FShapesArray& UnionShapes);
96
97 // List of simplified convexes
98 TArray<FImplicitObjectPtr> SimplifiedConvexes;
99
100 // List of all the collision objects to avoid traversing all the hierarchy during midphase
102
103 // Additional shapes array that could be used during collision midphase
104 FShapeInstanceArray ShapesArray;
105
106 // Intermediate root triboxes to reuse the intermediate computation
107 FTriboxNodes RootTriboxes;
108
109 // BVH used to accelerate the collisions queries
111
112 // Main tribox built from all the convexes
113 FTriboxNode MainTribox;
114
115 // Leaf offset to have a unique id for the midphase
116 int32 NextConvexId = 0;
117 };
118
119 // Visit all the collision objects if they exist / otherwise forward it to the RootHierarchy
120 void VisitCollisionObjects(const FConvexOptimizer* ConvexOptimizer, const FImplicitObject* ImplicitObject, const FImplicitHierarchyVisitor& VisitorFunc);
121
122 // Visit all the overlapping objects if they exist / otherwise forward it to the RootHierarchy
123 void VisitOverlappingObjects(const FConvexOptimizer* ConvexOptimizer, const FImplicitObject* ImplicitObject, const FAABB3& LocalBounds, const FImplicitHierarchyVisitor& VisitorFunc);
124
125
126}
127}
@ 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
Definition ImplicitObject.h:111
The convex optimizer goal is to have a central place where implicits hierarchy could be modified in o...
Definition ConvexOptimizer.h:25
CHAOS_API void VisitOverlappingObjects(const FAABB3 &LocalBounds, const FImplicitHierarchyVisitor &VisitorFunc) const
Definition ConvexOptimizer.cpp:71
const FShapeInstanceArray & GetShapeInstances() const
Definition ConvexOptimizer.h:75
CHAOS_API FConvexOptimizer()
Definition ConvexOptimizer.cpp:49
bool IsValid() const
Definition ConvexOptimizer.h:66
CHAOS_API void VisitCollisionObjects(const FImplicitHierarchyVisitor &VisitorFunc) const
Definition ConvexOptimizer.cpp:55
CHAOS_API void SimplifyRootConvexes(const Chaos::FImplicitObjectUnionPtr &UnionGeometry, const FShapesArray &UnionShapes, const EObjectStateType ObjectState, const TBitArray<> &bOptimizeConvexes)
Definition ConvexOptimizer.cpp:155
TMap< FImplicitObject *, FTriboxNode > FTriboxNodes
Definition ConvexOptimizer.h:54
CHAOS_API int32 NumCollisionObjects() const
Definition ConvexOptimizer.cpp:540
Tribox object that represents a k-DOP18 convex.
Definition Tribox.h:22
FRealSingle FRealType
Definition Tribox.h:25
Definition Array.h:670
Definition AssetRegistryState.h:50
Definition UniquePtr.h:107
void VisitCollisionObjects(const FConvexOptimizer *ConvexOptimizer, const FImplicitObject *ImplicitObject, const FImplicitHierarchyVisitor &VisitorFunc)
Definition ConvexOptimizer.cpp:545
void VisitOverlappingObjects(const FConvexOptimizer *ConvexOptimizer, const FImplicitObject *ImplicitObject, const FAABB3 &LocalBounds, const FImplicitHierarchyVisitor &VisitorFunc)
Definition ConvexOptimizer.cpp:557
Definition SkeletalMeshComponent.h:307
EObjectStateType
Definition ObjectState.h:10
Definition OverriddenPropertySet.cpp:45
Definition ConvexOptimizer.h:16
TArray< Private::FImplicitBVHObject > ImplicitObjects
Definition ConvexOptimizer.h:17
Definition ConvexOptimizer.h:29
FImplicitObjectPtr TriboxConvex
Definition ConvexOptimizer.h:36
int32 ConvexId
Definition ConvexOptimizer.h:51
int32 ShapeIndex
Definition ConvexOptimizer.h:39
FValidEdges bValidEdges
Definition ConvexOptimizer.h:48
FTribox::FRealType NodeVolume
Definition ConvexOptimizer.h:42
Private::FTribox NodeTribox
Definition ConvexOptimizer.h:33
bool bValidNode
Definition ConvexOptimizer.h:45