UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
CollisionFilterData.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2#pragma once
3
4#include "ChaosArchive.h"
6
7// Supported flags for Chaos filter, shares some flags with EPhysXFilterDataFlags
8// Shared flags should be kept in sync until unified. @see EPhysXFilterDataFlags
9// #TODO unify filter builder with this flag list
10
11namespace Chaos
12{
13 enum class EFilterFlags : uint8
14 {
15 None = 0b00000000,
16 SimpleCollision = 0b00000001, // The shape is used for simple collision
17 ComplexCollision = 0b00000010, // The shape is used for complex (trimesh) collision
18 CCD = 0b00000100, // Unused - present for compatibility. CCD handled per-particle in Chaos
19 ContactNotify = 0b00001000, // Whether collisions with this shape should be reported back to the game thread
20 StaticShape = 0b00010000, // Unused - present for compatibility
21 ModifyContacts = 0b00100000, // Unused - present for compatibility, whether to allow contact modification, handled in Chaos callbacks now
22 KinematicKinematicPairs = 0b01000000, // Unused - present for compatibility, whether to generate KK pairs, Chaos never generates KK pairs
23 All = 0xFF,
24 };
26
28 {
29 switch (FilterFlag)
30 {
31 case EFilterFlags::None: return TEXT("None");
32 case EFilterFlags::SimpleCollision: return TEXT("SimpleCollision");
33 case EFilterFlags::ComplexCollision: return TEXT("ComplexCollision");
34 case EFilterFlags::CCD: return TEXT("CCD");
35 case EFilterFlags::ContactNotify: return TEXT("ContactNotify");
36 case EFilterFlags::StaticShape: return TEXT("StaticShape");
37 case EFilterFlags::ModifyContacts: return TEXT("ModifyContacts");
38 case EFilterFlags::KinematicKinematicPairs: return TEXT("KinematicKinematicPairs");
39 case EFilterFlags::All: return TEXT("All");
40 default: return TEXT("Invalid");
41 }
42 }
43}
44
46{
51
56
58 {
59 const uint32 FilterFlags = (Word3 & 0xFFFFFF);
60 return FilterFlags & static_cast<uint32>(InFlag);
61 }
62
63 friend inline bool operator!=(const FCollisionFilterData& A, const FCollisionFilterData& B)
64 {
65 return A.Word0!=B.Word0 || A.Word1!=B.Word1 || A.Word2!=B.Word2 || A.Word3!=B.Word3;
66 }
67};
68
70{
71 Ar << Filter.Word0 << Filter.Word1 << Filter.Word2 << Filter.Word3;
72 return Ar;
73}
74
75namespace Chaos::Filter
76{
77 struct FCombinedShapeFilterData;
78 struct FQueryFilterData;
79
81 {
82 FInstanceData() = default;
83 CHAOS_API FInstanceData(const uint32 ActorId, const uint32 ComponentId);
84
85 bool operator==(const FInstanceData&) const = default;
86 bool operator!=(const FInstanceData&) const = default;
87
88 CHAOS_API bool IsValid() const;
89
92
95
96 private:
97 friend class FShapeFilterBuilder;
99
100 uint32 ActorId = 0;
101 uint32 ComponentId = 0;
102 // TODO @ JoshD: Remove if possible
103 uint32 BodyIndex = 0;
104 };
105
107 {
108 FShapeFilterData() = default;
109
110 bool operator==(const FShapeFilterData&) const = default;
111 bool operator!=(const FShapeFilterData&) const = default;
112
113 CHAOS_API bool IsValid() const;
114
118
120 CHAOS_API void SetMaskFilter(uint8 MaskFilter);
121
124
128
129 private:
131 friend FQueryFilterData;
133
134 uint32 QueryBlockChannels = 0;
135 uint32 QueryOverlapChannels = 0;
136 uint32 SimBlockChannels = 0;
137 uint32 Word3 = 0;
138 // TODO @ JoshD: Remove this eventually. This is kept here for legacy conversions until usage is cleaned up.
139 uint32 SimWord3 = 0;
140 };
141
143 {
145 {
148 };
149
150 FQueryFilterData() = default;
151
152 bool operator==(const FQueryFilterData&) const = default;
153 bool operator!=(const FQueryFilterData&) const = default;
154
155 CHAOS_API bool IsValid() const;
156
158
162
164
165 // Channel API
170
171 // ObjectType API
173 CHAOS_API bool IsMultiQuery() const;
174
175 private:
177
178 void SetMaskChannelAndFlags(const uint8 IgnoreMask, const uint8 ChannelIndex, const EFilterFlags FilterFlags);
179
180 uint32 Word0 = 0;
181 uint32 Word1 = 0;
182 uint32 Word2 = 0;
183 uint32 Word3 = 0;
184 };
185
207
209 {
210 public:
211 UE_INTERNAL CHAOS_API static FShapeFilterData BuildLegacyShapeFilter(const uint8 InChannelIndex, const uint32 InQueryOverlapChannels, const uint32 InQueryBlockChannels, const uint32 InSimBlockChannels, const uint8 InMaskFilter = 0, const EFilterFlags InFilterFlags = EFilterFlags::None);
212 UE_INTERNAL CHAOS_API static FShapeFilterData BuildLegacyBlockAllSimShapeFilter(const uint8 InChannelIndex = 0, const uint8 InMaskFilter = 0, const EFilterFlags InFilterFlags = EFilterFlags::All);
213
214 UE_INTERNAL CHAOS_API static FShapeFilterData BuildFromLegacyQueryFilter(const FCollisionFilterData& QueryFilter);
215 UE_INTERNAL CHAOS_API static FShapeFilterData BuildFromLegacySimFilter(const FCollisionFilterData& SimFilter);
216 UE_INTERNAL CHAOS_API static FCombinedShapeFilterData BuildFromLegacyShapeFilter(const FCollisionFilterData& QueryFilterData, const FCollisionFilterData& SimFilterData);
217
218 UE_INTERNAL CHAOS_API static void SetLegacyShapeQueryFilter(FCombinedShapeFilterData& CombinedShapeFilterData, const FCollisionFilterData& QueryFilterData);
219 UE_INTERNAL CHAOS_API static void SetLegacyShapeSimFilter(FCombinedShapeFilterData& CombinedShapeFilterData, const FCollisionFilterData& SimFilterData);
220
224 private:
225 };
226
228 {
229 public:
230 UE_INTERNAL CHAOS_API static FQueryFilterData CreateLegacyObjectTypeFilter(const uint32 ObjectTypesToQuery, const bool bMultiTrace, const uint8 IgnoreMask = 0, const EFilterFlags FilterFlags = EFilterFlags::None);
231 UE_INTERNAL CHAOS_API static FQueryFilterData CreateLegacyTraceFilter(const uint8 ChannelIndex, const uint32 BlockChannelMask, const uint32 OverlapChannelMask, const uint8 IgnoreMask = 0, const EFilterFlags FilterFlags = EFilterFlags::None);
232
233 UE_INTERNAL CHAOS_API static FQueryFilterData BuildFromLegacyQueryFilter(const FCollisionFilterData& QueryFilterData);
234 UE_INTERNAL CHAOS_API static FCollisionFilterData GetLegacyQueryFilter(const FQueryFilterData& QueryFilterData);
235 private:
236 };
237} // namespace Chaos::Filter
#define FORCEINLINE
Definition AndroidPlatform.h:140
Chaos::FChaosArchive & operator<<(Chaos::FChaosArchive &Ar, FCollisionFilterData &Filter)
Definition CollisionFilterData.h:69
#define UE_INTERNAL
Definition CoreMiscDefines.h:345
#define TEXT(x)
Definition Platform.h:1272
FPlatformTypes::TCHAR TCHAR
Either ANSICHAR or WIDECHAR, depending on whether the platform supports wide characters or the requir...
Definition Platform.h:1135
FPlatformTypes::uint64 uint64
A 64-bit unsigned integer.
Definition Platform.h:1117
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define ENUM_CLASS_FLAGS(Enum)
Definition EnumClassFlags.h:6
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition ChaosArchive.h:167
Definition CollisionFilterData.h:228
Definition CollisionFilterData.h:209
FChaosQueryFilterData FQueryFilterData
Definition ChaosInterfaceWrapperCore.h:34
Definition CollisionFilterData.cpp:8
Definition SkeletalMeshComponent.h:307
EFilterFlags
Definition CollisionFilterData.h:14
const TCHAR * LexToString(ESerializedDataContext Value)
Definition SolverSerializer.cpp:92
Definition CollisionFilterData.h:187
CHAOS_API void SetInstanceData(const FInstanceData &InData)
Definition CollisionFilterData.cpp:227
CHAOS_API const FShapeFilterData & GetShapeFilterData() const
Definition CollisionFilterData.cpp:232
bool operator==(const FCombinedShapeFilterData &) const =default
CHAOS_API void SetShapeFilterData(const FShapeFilterData &InData)
Definition CollisionFilterData.cpp:237
bool operator!=(const FCombinedShapeFilterData &) const =default
CHAOS_API bool IsValid() const
Definition CollisionFilterData.cpp:242
CHAOS_API const FInstanceData & GetInstanceData() const
Definition CollisionFilterData.cpp:222
Definition CollisionFilterData.h:81
bool operator!=(const FInstanceData &) const =default
UE_INTERNAL CHAOS_API void SetComponentId(const uint32 InComponentId)
Definition CollisionFilterData.cpp:90
CHAOS_API void SetActorId(const uint32 InActorId)
Definition CollisionFilterData.cpp:80
bool operator==(const FInstanceData &) const =default
CHAOS_API uint32 GetActorId() const
Definition CollisionFilterData.cpp:75
CHAOS_API bool IsValid() const
Definition CollisionFilterData.cpp:70
UE_INTERNAL CHAOS_API uint32 GetComponentId() const
Definition CollisionFilterData.cpp:85
Definition CollisionFilterData.h:143
bool operator!=(const FQueryFilterData &) const =default
CHAOS_API uint64 GetOverlapChannels() const
Definition CollisionFilterData.cpp:195
CHAOS_API EQueryType GetQueryType() const
Definition CollisionFilterData.cpp:155
CHAOS_API uint8 GetCollisionChannelIndex() const
Definition CollisionFilterData.cpp:180
EQueryType
Definition CollisionFilterData.h:145
@ Channel
Definition CollisionFilterData.h:146
@ ObjectType
Definition CollisionFilterData.h:147
CHAOS_API uint64 GetCollisionChannelMask() const
Definition CollisionFilterData.cpp:185
CHAOS_API bool IsValid() const
Definition CollisionFilterData.cpp:150
CHAOS_API void SetFlags(EFilterFlags InFlags)
Definition CollisionFilterData.cpp:165
CHAOS_API uint8 GetIgnoreMask() const
Definition CollisionFilterData.cpp:175
CHAOS_API bool IsMultiQuery() const
Definition CollisionFilterData.cpp:205
CHAOS_API bool HasFlag(EFilterFlags InFlag) const
Definition CollisionFilterData.cpp:170
bool operator==(const FQueryFilterData &) const =default
CHAOS_API uint64 GetBlockChannels() const
Definition CollisionFilterData.cpp:190
CHAOS_API uint64 GetObjectTypesToQueryMask() const
Definition CollisionFilterData.cpp:200
CHAOS_API EFilterFlags GetFlags() const
Definition CollisionFilterData.cpp:160
Definition CollisionFilterData.h:107
CHAOS_API EFilterFlags GetFlags() const
Definition CollisionFilterData.cpp:100
CHAOS_API void SetMaskFilter(uint8 MaskFilter)
Definition CollisionFilterData.cpp:120
bool operator!=(const FShapeFilterData &) const =default
CHAOS_API uint64 GetQueryBlockChannels() const
Definition CollisionFilterData.cpp:135
CHAOS_API uint64 GetQueryOverlapChannels() const
Definition CollisionFilterData.cpp:140
bool operator==(const FShapeFilterData &) const =default
CHAOS_API uint8 GetCollisionChannelIndex() const
Definition CollisionFilterData.cpp:125
CHAOS_API void SetFlags(EFilterFlags InFlags)
Definition CollisionFilterData.cpp:105
CHAOS_API bool IsValid() const
Definition CollisionFilterData.cpp:95
CHAOS_API uint64 GetSimBlockChannels() const
Definition CollisionFilterData.cpp:145
CHAOS_API uint8 GetMaskFilter() const
Definition CollisionFilterData.cpp:115
CHAOS_API uint64 GetCollisionChannelMask() const
Definition CollisionFilterData.cpp:130
CHAOS_API bool HasFlag(EFilterFlags InFlag) const
Definition CollisionFilterData.cpp:110
Definition CollisionFilterData.h:46
uint32 Word3
Definition CollisionFilterData.h:50
uint32 Word0
Definition CollisionFilterData.h:47
uint32 Word2
Definition CollisionFilterData.h:49
FORCEINLINE FCollisionFilterData()
Definition CollisionFilterData.h:52
friend bool operator!=(const FCollisionFilterData &A, const FCollisionFilterData &B)
Definition CollisionFilterData.h:63
bool HasFlag(Chaos::EFilterFlags InFlag) const
Definition CollisionFilterData.h:57
uint32 Word1
Definition CollisionFilterData.h:48