UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
ChaosScene.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 "UObject/GCObject.h"
9
10//Chaos includes. Todo: move to chaos core so we can include for all of engine
11#include "Chaos/Declares.h"
13#include "Framework/Threading.h"
14#include "Chaos/Core.h"
20
22
24
25#ifndef CHAOS_DEBUG_NAME
26#define CHAOS_DEBUG_NAME 0
27#endif
28
29// Currently compilation issue with Incredibuild when including headers required by event template functions
30#define XGE_FIXED 0
31
32class AdvanceOneTimeStepTask;
34struct FForceFieldProxy;
36
40
42
43namespace Chaos
44{
45 class FPhysicsProxy;
46
47 struct FCollisionEventData;
48
49 enum class EEventType : int32;
50
51 template<typename PayloadType, typename HandlerType>
52 class TRawEventHandler;
53
54 class FAccelerationStructureHandle;
55
56 template <typename TPayload, typename T, int d>
57 class ISpatialAcceleration;
58
59 template <typename TPayload, typename T, int d>
60 class ISpatialAccelerationCollection;
61
62 template <typename T>
63 class TArrayCollectionArray;
64
65 class FPBDRigidDirtyParticlesBufferAccessor;
66}
67
74
75struct FChaosSceneSimCallback : public Chaos::TSimCallbackObject<FChaosSceneCallbackInput>
76{
77 virtual void OnPreSimulate_Internal() override;
78 virtual FName GetFNameForStatId() const override;
79};
80
86 : public FGCObject
87#endif
88{
89public:
93 , const FName& DebugName = NAME_None
94 );
95
97
102
103#if WITH_ENGINE
104 // FGCObject Interface ///////////////////////////////////////////////////
105 PHYSICSCORE_API virtual void AddReferencedObjects(FReferenceCollector& Collector) override;
106 virtual FString GetReferencerName() const
107 {
108 return "FChaosScene";
109 }
111#endif
112
115
121
123
129
135 PHYSICSCORE_API void Flush();
136#if WITH_EDITOR
138#endif
139
143
146
153
156
157protected:
158
160
161 // Control module for Chaos - cached to avoid constantly hitting the module manager
163
164 // Solver representing this scene
166
167#if WITH_EDITOR
168 // List of objects that we modified during a PIE run for physics simulation caching.
170#endif
171
172 // Allow other code to obtain read-locks when needed
175
176 //Engine interface BEGIN
177 virtual float OnStartFrame(float InDeltaTime){ return InDeltaTime; }
179 //Engine interface END
180
182 float MNetworkDeltaTimeScale = 1.f; // Scale passed in delta time by this. Used by NetworkPrediction to make clients slow down or catch up when needed
183
185
186private:
188 PHYSICSCORE_API TArray<Chaos::FPhysicsSolverBase*> GetPhysicsSolvers() const;
189
190 PHYSICSCORE_API void SetGravity(const Chaos::FVec3& Acceleration);
191
192 template <typename TSolver>
193 void SyncBodies(TSolver* Solver);
194
195 // Taskgraph control
196 FGraphEventArray CompletionEvents;
197
198 FChaosSceneSimCallback* SimCallback;
199
200#if WITH_CHAOS_VISUAL_DEBUGGER
201private:
203
204public:
206 {
207 return CVDContextData;
208 };
209#endif
210
211#if CHAOS_DEBUG_DRAW
212public:
213 const ChaosDD::Private::FChaosDDScenePtr& GetDebugDrawScene() const
214 {
215 return CDDScene;
216 }
217
218 PHYSICSCORE_API void SetDebugDrawScene(const ChaosDD::Private::FChaosDDScenePtr& CDDScene);
219
220private:
221 ChaosDD::Private::FChaosDDScenePtr CDDScene;
222#endif
223};
#define WITH_ENGINE
Definition Build.h:75
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
if(Failed) console_printf("Failed.\n")
Definition PBDRigidsSolver.h:84
Definition PhysicsSolverBase.h:313
Definition SingleParticlePhysicsProxy.h:58
Definition ISpatialAccelerationCollection.h:23
Definition ISpatialAcceleration.h:267
Definition ParticleHandle.h:2739
Definition SimCallbackObject.h:521
Definition ChaosScene.h:88
virtual float OnStartFrame(float InDeltaTime)
Definition ChaosScene.h:177
PHYSICSCORE_API bool AreAnyTasksPending() const
Definition ChaosScene.cpp:413
void SetNetworkDeltaTimeScale(float InDeltaTimeScale)
Definition ChaosScene.h:154
PHYSICSCORE_API const Chaos::ISpatialAcceleration< Chaos::FAccelerationStructureHandle, Chaos::FReal, 3 > * GetSpacialAcceleration() const
Definition ChaosScene.cpp:145
PHYSICSCORE_API void EndFrame()
Definition ChaosScene.cpp:500
PHYSICSCORE_API void KillSafeAsyncTasks()
Definition ChaosScene.cpp:395
PHYSICSCORE_API void UpdateActorInAccelerationStructure(const FPhysicsActorHandle &Actor)
Definition ChaosScene.cpp:206
UObject * Owner
Definition ChaosScene.h:184
PHYSICSCORE_API void WaitSolverTasks()
Definition ChaosScene.cpp:404
virtual PHYSICSCORE_API ~FChaosScene()
Definition ChaosScene.cpp:102
virtual PHYSICSCORE_API void OnSyncBodies(Chaos::FPhysicsSolverBase *Solver)
Definition ChaosScene.cpp:389
PHYSICSCORE_API void AddActorsToScene_AssumesLocked(TArray< FPhysicsActorHandle > &InHandles, const bool bImmediate=true)
Definition ChaosScene.cpp:280
PHYSICSCORE_API void BeginDestroy()
Definition ChaosScene.cpp:424
PHYSICSCORE_API void StartFrame()
Definition ChaosScene.cpp:363
DECLARE_MULTICAST_DELEGATE_OneParam(FOnPhysScenePostTick, FChaosScene *)
float MDeltaTime
Definition ChaosScene.h:181
float MNetworkDeltaTimeScale
Definition ChaosScene.h:182
PHYSICSCORE_API void UpdateActorsInAccelerationStructure(const TArrayView< FPhysicsActorHandle > &Actors)
Definition ChaosScene.cpp:236
Chaos::FPhysicsSolver * SceneSolver
Definition ChaosScene.h:165
FOnPhysScenePostTick OnPhysScenePostTick
Definition ChaosScene.h:145
PHYSICSCORE_API FGraphEventArray GetCompletionEvents()
Definition ChaosScene.cpp:588
Chaos::ISpatialAccelerationCollection< Chaos::FAccelerationStructureHandle, Chaos::FReal, 3 > * SolverAccelerationStructure
Definition ChaosScene.h:159
PHYSICSCORE_API void SetUpForFrame(const FVector *NewGrav, float InDeltaSeconds, float InMinPhysicsDeltaTime, float InMaxPhysicsDeltaTime, float InMaxSubstepDeltaTime, int32 InMaxSubsteps, bool bSubstepping)
Definition ChaosScene.cpp:331
Chaos::FPhysicsSolver * GetSolver() const
Definition ChaosScene.h:101
FChaosSolversModule * ChaosModule
Definition ChaosScene.h:162
PHYSICSCORE_API bool IsCompletionEventComplete() const
Definition ChaosScene.cpp:433
PHYSICSCORE_API void Flush()
Definition ChaosScene.cpp:165
PHYSICSCORE_API void RemoveActorFromAccelerationStructureImp(Chaos::FGeometryParticle *Particle)
Definition ChaosScene.cpp:195
float GetNetworkDeltaTimeScale() const
Definition ChaosScene.h:155
PHYSICSCORE_API void RemoveActorFromAccelerationStructure(FPhysicsActorHandle Actor)
Definition ChaosScene.cpp:189
PHYSICSCORE_API void CopySolverAccelerationStructure()
Definition ChaosScene.cpp:155
PHYSICSCORE_API void WaitPhysScenes()
Definition ChaosScene.cpp:579
Definition ChaosSolversModule.h:146
Definition GCObject.h:128
Definition NameTypes.h:617
Definition PerSolverFieldSystem.h:11
Definition UObjectGlobals.h:2492
Definition SkeletalMeshPhysicsProxy.h:117
Definition StaticMeshPhysicsProxy.h:28
Definition PhysicsProxyBase.h:97
Definition ArrayView.h:139
Definition Array.h:670
Definition Object.h:95
Definition SkeletalMeshComponent.h:307
FRealDouble FReal
Definition Real.h:22
EEventType
Definition EventManager.h:30
Definition ChaosInterfaceWrapper.h:30
Definition SimCallbackInput.h:34
Definition ChaosScene.h:69
Chaos::FVec3 Gravity
Definition ChaosScene.h:70
void Reset()
Definition ChaosScene.h:72
Definition ChaosScene.h:76
virtual FName GetFNameForStatId() const override
Definition ChaosScene.cpp:320
virtual void OnPreSimulate_Internal() override
Definition ChaosScene.cpp:311
Definition ChaosScopedSceneLock.h:36
Definition ChaosSolversModule.h:120