UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
GeometryCollectionProximityUtility.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreTypes.h"
7
8#include "GeometryCollectionProximityUtility.generated.h"
9
12{
13 struct FConvexHulls;
14}
15
16namespace Chaos::Facades
17{
18 class FCollectionHierarchyFacade;
19}
20
21UENUM()
23{
24 // Precise proximity mode looks for geometry with touching vertices or touching, coplanar, opposite-facing triangles. This works well with geometry fractured using our fracture tools.
25 Precise,
26 // Convex Hull proximity mode looks for geometry with overlapping convex hulls (with an optional offset)
28};
29
30UENUM()
32{
33 // Rejects proximity if the bounding boxes do not overlap by more than Contact Threshold centimeters in any major axis direction (or at least half the max possible). This can filter out corner connections of box-like shapes.
35 // Rejects proximity if the intersection of convex hulls (allowing for optional offset) follows a sharp, thin region which is not wider than Contact Threshold centimeters (or at least half the max possible).
37 // Rejects proximity if the surface area of the intersection of convex hulls (allowing for optional offset) is smaller than Contact Threshold squared (or at least half the max possible).
39 //~ TODO: Add other methods for filtering overlaps, e.g. based on approximate surface area of the contact
40};
41
42// How contact is computed on the connection graph
43UENUM()
45{
46 // Do not compute contact areas
47 None,
48 // Define contact based on the surface area of the intersection of the convex hulls, allowing for optional offset
50};
51
53{
54public:
56
58
59 // Update proximity data if it is not already present
61
63
65
66 // Method to compute the precise proximity, regardless of the proximity configuration on the collection
68
69 // Stores stats about the contact between two geometries
71 {
73 // Area estimate for contact region
75 // Maximum area for contact for this pair (half the smallest surface area)
77 // 'Sharp contact' width estimate
79 // Estimate of maximum possible 'sharp contact' for this pair
81
86 };
87 // Note: This computes connections from lower to higher geometry indices, assuming connections are symmetric
89
90 // @param ContactEdges Optional pre-computed proximity contact edges, to be used for computing contact areas on the connection graph edges
93
94private:
95 FGeometryCollection* Collection;
96
97 // This threshold not exposed to the user via Properties.DistanceThreshold because it doesn't behave very well if increased to large values --
98 // the computation would become closer to O(n^2), and the results would likely be confusing/inconsistent
99 static constexpr float PreciseProximityThreshold = .01f;
100};
101
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
EProximityContactMethod
Definition GeometryCollectionProximityUtility.h:32
EConnectionContactMethod
Definition GeometryCollectionProximityUtility.h:45
EProximityMethod
Definition GeometryCollectionProximityUtility.h:23
#define UENUM(...)
Definition ObjectMacros.h:749
uint8_t uint8
Definition binka_ue_file_header.h:8
Definition CollectionHierarchyFacade.h:15
Definition GeometryCollectionProximityUtility.h:53
CHAOS_API void InvalidateProximity()
Definition GeometryCollectionProximityUtility.cpp:536
static CHAOS_API TArray< FGeometryContactEdge > ComputeConvexGeometryContactFromProximity(FGeometryCollection *Collection, float DistanceTolerance, UE::GeometryCollectionConvexUtility::FConvexHulls &LocalHulls)
Definition GeometryCollectionProximityUtility.cpp:881
CHAOS_API void RequireProximity(UE::GeometryCollectionConvexUtility::FConvexHulls *OptionalComputedHulls=nullptr)
Definition GeometryCollectionProximityUtility.cpp:527
CHAOS_API void EnumerateNeighbors(const Chaos::Facades::FCollectionHierarchyFacade &Hierarchy, int32 BoneIdx, TFunctionRef< void(int32)> NeighborFunc, bool bIncludeNeighborsInParentLevels=true, bool bFilterDuplicates=true)
Definition GeometryCollectionProximityUtility.cpp:551
CHAOS_API void ClearConnectionGraph()
Definition GeometryCollectionProximityUtility.cpp:545
static CHAOS_API TArray< TSet< int32 > > ComputePreciseProximity(const FGeometryCollection &InCollection)
Definition GeometryCollectionProximityUtility.cpp:719
CHAOS_API void CopyProximityToConnectionGraph(const TArray< FGeometryContactEdge > *ContactEdges=nullptr)
Definition GeometryCollectionProximityUtility.cpp:610
CHAOS_API void UpdateProximity(UE::GeometryCollectionConvexUtility::FConvexHulls *OptionalComputedHulls=nullptr)
Definition GeometryCollectionProximityUtility.cpp:726
Definition GeometryCollection.h:32
Definition Array.h:670
Definition AssetRegistryState.h:50
Definition CollectionAnchoringFacade.cpp:7
Definition GeometryCollectionConvexUtility.cpp:3602
Definition GeometryCollectionProximityUtility.h:71
float MaxContactArea
Definition GeometryCollectionProximityUtility.h:76
int32 GeometryIndices[2]
Definition GeometryCollectionProximityUtility.h:72
float ContactArea
Definition GeometryCollectionProximityUtility.h:74
float SharpContactWidth
Definition GeometryCollectionProximityUtility.h:78
float MaxSharpContact
Definition GeometryCollectionProximityUtility.h:80
FGeometryContactEdge(int32 GeoIdxA, int32 GeoIdxB, float ContactArea, float MaxContactArea, float SharpContactWidth, float MaxSharpContact)
Definition GeometryCollectionProximityUtility.h:83
Definition GeometryCollectionConvexUtility.h:66