UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
PhysicsFieldComponent.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
6#include "Field/FieldSystem.h"
8#include "RHI.h"
9#include "RHIUtilities.h"
10#include "RenderResource.h"
11#include "PrimitiveSceneProxy.h"
13
14#include "PhysicsFieldComponent.generated.h"
15
17{
19 CPUReadBuffer = 1,
23};
24
96
101{
102public:
103
106
109
112
115
118
121
124
127
130
133
135 FPhysicsFieldResource(const int32 TargetCount, const TArray<EFieldPhysicsType>& TargetTypes,
136 const FPhysicsFieldInfos::BufferOffsets& VectorTargets, const FPhysicsFieldInfos::BufferOffsets& ScalarTargets,
137 const FPhysicsFieldInfos::BufferOffsets& IntegerTargets, const FPhysicsFieldInfos::BufferOffsets& PhysicsTargets,
138 const TStaticArray<UE::Core::TAlignedElement<FIntVector4, 16>, MAX_PHYSICS_FIELD_TARGETS>& PhysicsBounds, const bool bBuildClipmap);
139
141 virtual void ReleaseRHI() override;
142
144 virtual void InitRHI(FRHICommandListBase& RHICmdList) override;
145
147 void UpdateResource(FRHICommandList& RHICmdList,
149 const TArray<FVector>& TargetsMinDatas, const TArray<FVector>& TargetsMaxDatas, const float TimeSeconds,
151
155};
156
157
220
225UCLASS(meta = (BlueprintSpawnableComponent), MinimalAPI)
226class UPhysicsFieldComponent : public USceneComponent
227{
229
230public:
231
233
234 //~ Begin UActorComponent Interface.
235 ENGINE_API virtual void OnRegister() override;
236 ENGINE_API virtual void OnUnregister() override;
237 ENGINE_API virtual void TickComponent(float DeltaTime, enum ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction) override;
238 ENGINE_API virtual void SendRenderDynamicData_Concurrent() override;
239 ENGINE_API virtual void CreateRenderState_Concurrent(FRegisterComponentContext* Context) override;
240 ENGINE_API virtual void DestroyRenderState_Concurrent() override;
241 //~ End UActorComponent Interface.
242
244 ENGINE_API void AddTransientCommand(const FFieldSystemCommand& FieldCommand, const bool bIsGPUField);
245
247 ENGINE_API void AddPersistentCommand(const FFieldSystemCommand& FieldCommand, const bool bIsGPUField);
248
250 ENGINE_API void AddConstructionCommand(const FFieldSystemCommand& FieldCommand);
251
253 ENGINE_API void RemoveTransientCommand(const FFieldSystemCommand& FieldCommand, const bool bIsGPUField);
254
256 ENGINE_API void RemovePersistentCommand(const FFieldSystemCommand& FieldCommand, const bool bIsGPUField);
257
259 ENGINE_API void FillTransientCommands(const bool bIsWorldField, const FBox& BoundingBox, const float TimeSeconds, TArray<FFieldSystemCommand>& OutputCommands) const;
260
262 ENGINE_API void FillPersistentCommands(const bool bIsWorldField, const FBox& BoundingBox, const float TimeSeconds, TArray<FFieldSystemCommand>& OutputCommands) const;
263
265 static ENGINE_API void BuildCommandBounds(FFieldSystemCommand& FieldCommand);
266
267 // These types are not static since we probably want in the future to be able to pick the vector/scalar/integer fields we are interested in
268
271
274
277
279 FPhysicsFieldInstance* FieldInstance = nullptr;
280
282 FPhysicsFieldInstance* DebugInstance = nullptr;
283
285 class FPhysicsFieldSceneProxy* FieldProxy = nullptr;
286};
287
289void ENGINE_API GetFieldIndex(const uint32 FieldType, int32& FieldIndex, EFieldOutputType& FieldOutput);
290
291//class FPhysicsFieldSceneProxy final : public FPrimitiveSceneProxy
293{
294public:
295 //SIZE_T GetTypeHash() const override;
296
299
302
305
308};
309
311UCLASS(MinimalAPI)
313{
315
316public:
317
319 UFUNCTION(BlueprintCallable, Category="Field", meta=(WorldContext="WorldContextObject"))
320 static ENGINE_API FVector EvalPhysicsVectorField(const UObject* WorldContextObject, const FVector& WorldPosition, const EFieldVectorType VectorType);
321
323 UFUNCTION(BlueprintCallable, Category="Field", meta=(WorldContext="WorldContextObject"))
324 static ENGINE_API float EvalPhysicsScalarField(const UObject* WorldContextObject, const FVector& WorldPosition, const EFieldScalarType ScalarType);
325
327 UFUNCTION(BlueprintCallable, Category="Field", meta=(WorldContext="WorldContextObject"))
328 static ENGINE_API int32 EvalPhysicsIntegerField(const UObject* WorldContextObject, const FVector& WorldPosition, const EFieldIntegerType IntegerType);
329};
330
333
336
339
340
341
342
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
ELevelTick
Definition EngineBaseTypes.h:70
EFieldIntegerType
Definition FieldSystemTypes.h:208
EFieldPhysicsType
Definition FieldSystemTypes.h:148
EFieldScalarType
Definition FieldSystemTypes.h:194
EFieldVectorType
Definition FieldSystemTypes.h:177
EFieldOutputType
Definition FieldSystemTypes.h:222
#define GENERATED_BODY(...)
Definition ObjectMacros.h:765
#define UFUNCTION(...)
Definition ObjectMacros.h:745
#define GENERATED_UCLASS_BODY(...)
Definition ObjectMacros.h:768
#define UCLASS(...)
Definition ObjectMacros.h:776
void ENGINE_API GetFieldIndex(const uint32 FieldType, int32 &FieldIndex, EFieldOutputType &FieldOutput)
Definition PhysicsFieldComponent.cpp:1099
void ENGINE_API EvaluateFieldVectorNodes(TArray< FFieldSystemCommand > &FieldCommands, const EFieldPhysicsType FieldType, FFieldContext &FieldContext, TArray< FVector > &ResultsArray, TArray< FVector > &MaxArray)
Definition PhysicsFieldComponent.cpp:1191
void ENGINE_API EvaluateFieldScalarNodes(TArray< FFieldSystemCommand > &FieldCommands, const EFieldPhysicsType FieldType, FFieldContext &FieldContext, TArray< float > &ResultsArray, TArray< float > &MaxArray)
Definition PhysicsFieldComponent.cpp:1197
EFieldCommandBuffer
Definition PhysicsFieldComponent.h:17
void ENGINE_API EvaluateFieldIntegerNodes(TArray< FFieldSystemCommand > &FieldCommands, const EFieldPhysicsType FieldType, FFieldContext &FieldContext, TArray< int32 > &ResultsArray, TArray< int32 > &MaxArray)
Definition PhysicsFieldComponent.cpp:1203
#define MAX_PHYSICS_FIELD_TARGETS
Definition SceneView.h:23
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition FieldSystem.h:522
Definition PhysicsFieldComponent.h:162
FPhysicsFieldResource * FieldResource
Definition PhysicsFieldComponent.h:191
TArray< int32 > NodesOffsets
Definition PhysicsFieldComponent.h:200
TArray< FFieldSystemCommand > FieldCommands
Definition PhysicsFieldComponent.h:212
TStaticArray< int32, EFieldPhysicsType::Field_PhysicsType_Max+1 > BoundsOffsets
Definition PhysicsFieldComponent.h:197
TArray< FVector4 > BoundsMin
Definition PhysicsFieldComponent.h:206
TArray< FVector > TargetsMin
Definition PhysicsFieldComponent.h:215
void InitInstance(const TArray< EFieldPhysicsType > &TargetTypes, const bool bBuildClipmap)
Definition PhysicsFieldComponent.cpp:616
TArray< float > NodesParams
Definition PhysicsFieldComponent.h:203
FPhysicsFieldInstance()
Definition PhysicsFieldComponent.h:166
~FPhysicsFieldInstance()
Definition PhysicsFieldComponent.h:171
void ReleaseInstance()
Definition PhysicsFieldComponent.cpp:664
TArray< FVector4 > BoundsMax
Definition PhysicsFieldComponent.h:209
TStaticArray< int32, EFieldPhysicsType::Field_PhysicsType_Max+1 > TargetsOffsets
Definition PhysicsFieldComponent.h:194
TArray< FVector > TargetsMax
Definition PhysicsFieldComponent.h:218
Definition PhysicsFieldComponent.h:101
FRWBuffer BoundsMax
Definition PhysicsFieldComponent.h:129
FRWBuffer TargetsOffsets
Definition PhysicsFieldComponent.h:114
FRWBuffer CellsMin
Definition PhysicsFieldComponent.h:120
void UpdateBounds(const TArray< FVector > &TargetsMin, const TArray< FVector > &TargetsMax, const TStaticArray< int32, EFieldPhysicsType::Field_PhysicsType_Max+1 > &TargetOffsets, const TStaticArray< int32, EFieldPhysicsType::Field_PhysicsType_Max+1 > &BoundsOffsets)
Definition PhysicsFieldComponent.cpp:464
FPhysicsFieldInfos FieldInfos
Definition PhysicsFieldComponent.h:132
FRWBuffer CellsOffsets
Definition PhysicsFieldComponent.h:117
FRWBuffer CellsMax
Definition PhysicsFieldComponent.h:123
FRWBuffer NodesParams
Definition PhysicsFieldComponent.h:108
virtual void ReleaseRHI() override
Definition PhysicsFieldComponent.cpp:447
void UpdateResource(FRHICommandList &RHICmdList, const TStaticArray< int32, EFieldPhysicsType::Field_PhysicsType_Max+1 > &TargetsOffsetsDatas, const TArray< int32 > &NodesOffsetsDatas, const TArray< float > &NodesParamsDatas, const TArray< FVector > &TargetsMinDatas, const TArray< FVector > &TargetsMaxDatas, const float TimeSeconds, const TArray< FVector4 > &BoundsMinDatas, const TArray< FVector4 > &BoundsMaxDatas, const TStaticArray< int32, EFieldPhysicsType::Field_PhysicsType_Max+1 > &BoundsOffsetsDatas)
Definition PhysicsFieldComponent.cpp:533
FRWBuffer ClipmapBuffer
Definition PhysicsFieldComponent.h:105
FRWBuffer BoundsMin
Definition PhysicsFieldComponent.h:126
virtual void InitRHI(FRHICommandListBase &RHICmdList) override
Definition PhysicsFieldComponent.cpp:421
FRWBuffer NodesOffsets
Definition PhysicsFieldComponent.h:111
Definition PhysicsFieldComponent.h:293
~FPhysicsFieldSceneProxy()
Definition PhysicsFieldComponent.cpp:1125
FPhysicsFieldResource * DebugResource
Definition PhysicsFieldComponent.h:307
FPhysicsFieldResource * FieldResource
Definition PhysicsFieldComponent.h:304
Definition RHICommandList.h:455
Definition RHICommandList.h:3819
Definition ActorComponent.h:47
Definition RenderResource.h:37
Definition Array.h:670
Definition BlueprintFunctionLibrary.h:16
Definition Object.h:95
Definition PhysicsFieldComponent.h:227
Definition PhysicsFieldComponent.h:313
Definition EngineBaseTypes.h:571
Definition FieldSystem.h:242
Definition PhysicsFieldComponent.h:26
BufferOffsets ScalarTargets
Definition PhysicsFieldComponent.h:40
BufferOffsets VectorTargets
Definition PhysicsFieldComponent.h:37
int32 ClipmapCount
Definition PhysicsFieldComponent.h:64
BufferOffsets ValidTargets
Definition PhysicsFieldComponent.h:49
int32 ClipmapExponent
Definition PhysicsFieldComponent.h:67
BufferOffsets PhysicsTargets
Definition PhysicsFieldComponent.h:46
FVector ViewOrigin
Definition PhysicsFieldComponent.h:73
int32 TargetCount
Definition PhysicsFieldComponent.h:31
TArray< int32 > CellsOffsets
Definition PhysicsFieldComponent.h:76
BufferOffsets IntegerTargets
Definition PhysicsFieldComponent.h:43
TStaticArray< UE::Core::TAlignedElement< int32, 16 >, MAX_PHYSICS_FIELD_TARGETS > BoundsOffsets
Definition PhysicsFieldComponent.h:85
TArray< EFieldPhysicsType > TargetTypes
Definition PhysicsFieldComponent.h:34
int32 ClipmapResolution
Definition PhysicsFieldComponent.h:70
bool bBuildClipmap
Definition PhysicsFieldComponent.h:91
bool bShowFields
Definition PhysicsFieldComponent.h:94
float ClipmapDistance
Definition PhysicsFieldComponent.h:58
TArray< FIntVector4 > CellsMin
Definition PhysicsFieldComponent.h:79
TStaticArray< UE::Core::TAlignedElement< FIntVector4, 16 >, MAX_PHYSICS_FIELD_TARGETS > PhysicsBounds
Definition PhysicsFieldComponent.h:52
FVector ClipmapCenter
Definition PhysicsFieldComponent.h:55
TArray< FIntVector4 > CellsMax
Definition PhysicsFieldComponent.h:82
float TimeSeconds
Definition PhysicsFieldComponent.h:88
int32 ValidCount
Definition PhysicsFieldComponent.h:61
Definition RHIUtilities.h:181
Definition AlignedElement.h:13
static CORE_API const TVector< double > ZeroVector
Definition Vector.h:79