UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
PhysicsSolverBase.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2#pragma once
3
5#include "Chaos/Matrix.h"
6#include "Misc/ScopeLock.h"
7#include "ChaosLog.h"
11#include "Async/ParallelFor.h"
12#include "Containers/Queue.h"
15#include "Stats/Stats.h"
16#include "ChaosSolversModule.h"
17
18#if WITH_CHAOS_VISUAL_DEBUGGER
20#endif
21
24
29
34
35#ifndef UE_CHAOS_CALLBACK_TRACESTATS
36#define UE_CHAOS_CALLBACK_TRACESTATS STATS && !UE_BUILD_SHIPPING
37#endif
38
46
47namespace Chaos
48{
49 class FPhysicsSolverBase;
50 struct FPendingSpatialDataQueue;
51 class FChaosResultsManager;
52 class FRewindData;
53 class IRewindCallback;
55
60
62 {
64 : PseudoFraction(1.0)
65 , Step(1)
66 , NumSteps(1)
68 {
69 }
70
79
88
89 //This is NOT Step / NumSteps, this is to allow for kinematic target interpolation which uses its own logic
94 };
95
96
103
126
146
176
177 // Container for all steps required to fully update a solver
196
197 // Container for all physics-thread steps required to update a solver
198 // This leaves out the game thread callbacks for situations that require and update only in a physics-thread context
220
221 class FPersistentPhysicsTask;
222
223 enum class ELockType: uint8;
224
225 //todo: once refactor is done use just one enum
227 {
229 TaskGraph,
231 };
232
282
283#if UE_CHAOS_CALLBACK_TRACESTATS
285 {
286 public:
288 {
289 if(InCallback)
290 {
291 if(TStatId CallbackStatId = InCallback->GetStatId(); FThreadStats::IsCollectingData(CallbackStatId))
292 {
293 Start(CallbackStatId);
294 }
295 }
296 }
297
299 {
300 Stop();
301 }
302 };
303#else
310#endif
311
313 {
314 public:
315
316 template <typename Lambda>
317 void CastHelper(const Lambda& Func)
318 {
319 Func((FPBDRigidsSolver&)*this);
320 }
321
323 {
324 return (FPBDRigidsSolver&)(*this);
325 }
326
328
330 {
331 check(ProxyBaseIn->GetMarkedDeleted() == false);
333 }
338
343
348
353
358
359 // Batch dirty proxies without checking DirtyIdx.
360 template <typename TProxiesArray>
365
370
375
377 template <typename TSimCallbackObjectType, typename... ConstructorArgTypes>
379 {
381 //If at least one callback is on frozen GT we mark it as such
382 //Note this is never cleaned up (to avoid race conditions of register/unregister).
383 //Expectation is that there's typically just one of these on frozen gt that triggers all the fixed tick on gt (maybe two if another system wants direct control)
384 //This means we don't expect to optimize for the case where a gt callback goes away half way through sim
386 {
388 }
389
390 RegisterSimCallbackObject_External(NewCallbackObject);
391 return NewCallbackObject;
392 }
393
394 template <typename TSimCallbackObjectType>
395 UE_DEPRECATED(5.1, "Use version with no arguments, and provide TOptions bitmask parameter to TSimCallbackObject instead.")
397 {
399 ESimCallbackOptions& Options = CallbackObject->Options;
400
401 if (bContactModification) {
403 } else {
405 }
406
409 } else {
411 }
412
413 return CallbackObject;
414 }
415
417
422
423 template <typename Lambda>
424 void RegisterSimOneShotCallback(Lambda&& Func)
425 {
426 //do we need a pool to avoid allocations?
429 }
430
431 template <typename Lambda>
432 void EnqueueCommandImmediate(Lambda&& Func)
433 {
434 //TODO: remove this check. Need to rename with _External
437 }
438
441 template <typename Lambda>
447
449
451 {
452 return MRewindData.Get();
453 }
454
456 {
457 return MRewindCallback.Get();
458 }
459
461 {
462 return MRewindCallback.IsValid() && MRewindData.IsValid();
463 }
464
472
475 {
477 }
478
479 UE_DEPRECATED(5.6, "Use SetPhysicsReplication_Internal")
484
485 UE_DEPRECATED(5.6, "Use GetPhysicsReplication_Internal which return the interface instead of the implementation")
490
495
500
505
510
511 //Used as helper for GT to go from unique idx back to gt particle
512 //If GT deletes a particle, this function will return null (that's a good thing when consuming async outputs as GT may have already deleted the particle we care about)
513 //Note: if the physics solver has been advanced after the particle was freed on GT, the index may have been freed and reused.
514 //In this case instead of getting a nullptr you will get an unrelated (wrong) GT particle
515 //Because of this we keep the index alive for as long as the async callback can lag behind. This way as long as you immediately consume the output, you will always be sure the unique index was not released.
516 //Practically the flow should always be like this:
517 //advance the solver and trigger callbacks. Callbacks write to outputs. Consume the outputs on GT and use this function _before_ advancing solver again
519 {
520 FGeometryParticle* Result = nullptr;
521 if (ensure(UniqueIdx.Idx < UniqueIdxToGTParticles.Num())) //asking for particle on index that has never been allocated
522 {
523 Result = UniqueIdxToGTParticles[UniqueIdx.Idx];
524 }
525
526 return Result;
527 }
528
529 //Ensures that any running tasks finish.
537
538 virtual void KillSafeAsyncTasks()
539 {
540 }
541
542 virtual bool AreAnyTasksPending() const
543 {
544 return false;
545 }
546
548 {
550 {
551 return false;
552 }
553
554 return true;
555 }
556
557 const UObject* GetOwner() const
558 {
559 return Owner;
560 }
561
563 {
564 Owner = InOwner;
565 }
566
580
582 {
583 bIsShuttingDown = true;
584 }
585
586 bool IsShuttingDown() const { return bIsShuttingDown; }
587
589
590 FReal GetAsyncDeltaTime() const { return AsyncDt; }
591
593
595 virtual bool IsResimming() const {return false;}
596
597#if WITH_CHAOS_VISUAL_DEBUGGER
598 virtual int32 GetCVDFrameNumber() const { return INDEX_NONE; }
599#endif
600
603
605 {
606 return ThreadingMode;
607 }
608
610
611#if CHAOS_SOLVER_DEBUG_NAME
612 CHAOS_API void SetDebugName(const FName& Name);
613#endif
615
616
617 //Tells us if we're on the frozen game thread. This is needed for knowing which data to read/write to
618 //The IsInGameThread check is so that other threads (e.g audio thread) which might be running queries in parallel will continue to use the correct interpolated GT data
619 bool IsGameThreadFrozen() const { return bGameThreadFrozen; }
620
626
628 {
630
631 //if delta time is 0 we are flushing data, user callbacks should not be triggered because there is no sim
632 if(MLastDt > 0)
633 {
634 const FReal SimTime = GetSolverTime();
635 for (ISimCallbackObject* Callback : SimCallbackObjects)
636 {
638 {
640
641 Callback->SetSimAndDeltaTime_Internal(SimTime, MLastDt);
642 Callback->PreSimulate_Internal();
643 }
644 }
645 }
646 }
647
649 {
650 for (ISimCallbackObject* Callback : SimCallbackObjects)
651 {
652 Callback->FinalizeOutputData_Internal();
653 Callback->SetCurrentInput_Internal(nullptr);
654 }
655 }
656
658
659 bool IsPaused_External() const
660 {
661 return bPaused_External;
662 }
663
665 {
666 bPaused_External = bShouldPause;
667 }
668
670 template<typename TDispatcher>
672
673 template <typename RigidLambda, typename ConstraintLambda, typename GeometryCollectionLambda>
674 UE_DEPRECATED(5.3, "Use PullPhysicsStateForEachDirtyProxy_External with the TDispatcher template parameter instead.")
676
677 template <typename RigidLambda, typename ConstraintLambda>
678 UE_DEPRECATED(5.3, "Use PullPhysicsStateForEachDirtyProxy_External with the TDispatcher template parameter instead.")
680
682 {
683 return !ForceDisableAsyncPhysics && AsyncDt >= 0;
684 }
685
686 bool IsUsingFixedDt() const
687 {
689 }
690
692 {
693 MMaxDeltaTime = InMaxDeltaTime;
694 }
695
697 {
698 // a value approaching zero is not valid/desired
699 MMinDeltaTime = FMath::Max(InMinDeltaTime, UE_SMALL_NUMBER);
700 }
701
703 {
704 return MMaxDeltaTime;
705 }
706
708 {
709 return MMinDeltaTime;
710 }
711
713 {
714 MMaxSubSteps = InMaxSubSteps;
715 }
716
718 {
719 return MMaxSubSteps;
720 }
721
723 {
724 bSolverSubstep_External = bInSubstepExternal;
725 }
726
728 {
729 return bSolverSubstep_External;
730 }
731
733 {
734 return AccumulatedTime;
735 }
736
739 {
740 const FReal ExternalTime = MarshallingManager.GetExternalTime_External() + AccumulatedTime;
741 if (IsUsingFixedDt())
742 {
743 //fixed dt uses interpolation and looks into the past
744 return ExternalTime - AsyncDt * AsyncMultiplier;
745 }
746 else
747 {
748 return ExternalTime;
749 }
750 }
751
752 virtual void FlipEventManagerBuffer() {}
753
754
756 const FReal GetSolverTime() const { return MTime; }
757
758
759
760 FReal GetLastDt() const { return MLastDt; }
761
770
775
776 float GetAsyncInterpolationMultiplier() const { return AsyncMultiplier; }
777
780 {
782 static FAutoConsoleVariableRef CVarDebugNetworkPhysicsPrediction(TEXT("np2.DebugNetworkPhysicsPrediction"), DebugNetworkPhysicsPrediction, TEXT("Debugs network physics prediction"));
783
785 }
786
793
800
801
808
809 UE_DEPRECATED(5.5, "ResimulationErrorThreshold has been renamed, please use GetResimulationErrorPositionThreshold.")
815
821
823 {
824 const float ResimulationErrorPositionThreshold = FChaosSolversModule::GetModule()->GetSettingsProvider().GetResimulationErrorPositionThreshold();
825 return ResimulationErrorPositionThreshold;
826 }
827
833
835 {
836 const float ResimulationErrorRotationThreshold = FChaosSolversModule::GetModule()->GetSettingsProvider().GetResimulationErrorRotationThreshold();
837 return ResimulationErrorRotationThreshold;
838 }
839
845
847 {
848 const float ResimulationErrorLinearVelocityThreshold = FChaosSolversModule::GetModule()->GetSettingsProvider().GetResimulationErrorLinearVelocityThreshold();
849 return ResimulationErrorLinearVelocityThreshold;
850 }
851
857
859 {
860 const float ResimulationErrorAngularVelocityThreshold = FChaosSolversModule::GetModule()->GetSettingsProvider().GetResimulationErrorAngularVelocityThreshold();
861 return ResimulationErrorAngularVelocityThreshold;
862 }
863
866 {
867 static float NetworkPhysicsPredictionInterpLerp = 0.1f;
868 static FAutoConsoleVariableRef CVarNetworkPhysicsPredictionInterpLerp(TEXT("np2.NetworkPhysicsPredictionInterpLerp"), NetworkPhysicsPredictionInterpLerp, TEXT("State lerp value in between the target state and the current one in case resim is disabled or if the pawn is not possessed (continuous correction)"));
869
871 }
872
875
878
879 protected:
880
883
886
888
891
894
896
902
903 virtual void PrepareAdvanceBy(const FReal Dt) = 0;
905 virtual void PushPhysicsState(const FReal Dt, const int32 NumSteps, const int32 NumExternalSteps) = 0;
908
909#if CHAOS_SOLVER_DEBUG_NAME
910 virtual void OnDebugNameChanged() {}
911
912 FName DebugName;
913#endif
914
916 TUniquePtr<FChaosResultsManager> PullResultsManager; //must come after MarshallingManager since it knows about MarshallingManager
917
918 // The spatial operations not yet consumed by the internal sim. Use this to ensure any GT operations are seen immediately
920
929
935
937
939
941 bool bGameThreadFrozen = false;
944
945 private:
946
947 //This is private because the user should never create their own callback object
948 //The lifetime management should always be done by solver to ensure callbacks are accessing valid memory on async tasks
949 void RegisterSimCallbackObject_External(ISimCallbackObject* SimCallbackObject)
950 {
951 ensure(SimCallbackObject->Solver == nullptr); //double register?
952 SimCallbackObject->SetSolver_External(this);
954 }
955
956 // Number of ending solver task that has not been executed or that are still being executed
957 TAtomic<int32> NumPendingSolverAdvanceTasks;
958
963 bool bPaused_External;
964
971 const UObject* Owner = nullptr;
972
973 //TODO: why is this needed? seems bad to read from solver directly, should be buffered
974 FRWLock SimMaterialLock;
975
977 TUniquePtr<FPhysSceneLock> ExternalDataLock_External;
978
979#if UE_WITH_REMOTE_OBJECT_HANDLE
982#endif
983
984 friend FChaosSolversModule;
987
988 template<ELockType>
990
991 bool bIsShuttingDown;
992 bool bSolverSubstep_External;
993 FReal AsyncDt;
994 FReal AccumulatedTime;
995 float MMaxDeltaTime;
996 float MMinDeltaTime;
997 int32 MMaxSubSteps;
998 int32 ExternalSteps;
999 TArray<FGeometryParticle*> UniqueIdxToGTParticles;
1000 EAsyncBlockMode AsyncBlockMode;
1001 float AsyncMultiplier;
1002
1003 public:
1004
1006 //NOTE: this is a const operation so that you can acquire a read lock on a const solver. The assumption is that non-const write operations are already marked non-const
1007 FPhysSceneLock& GetExternalDataLock_External() const { return *ExternalDataLock_External; }
1008
1009#if UE_WITH_REMOTE_OBJECT_HANDLE
1011 {
1012 return *InternalDataLock;
1013 }
1014#endif
1015
1016 protected:
1017
1020
1021
1022#if !UE_BUILD_SHIPPING
1023 // Solver testing utility
1024 private:
1025 // instead of running advance task in single threaded, put in array for manual execution control for unit tests.
1026 bool bStealAdvanceTasksForTesting;
1027 TArray<FAllSolverTasks> StolenSolverAdvanceTasks;
1028 public:
1031#endif
1032
1033#if WITH_CHAOS_VISUAL_DEBUGGER
1034 private:
1036
1037 public:
1039 {
1040 return CVDContextData;
1041 };
1042#endif
1043
1044#if CHAOS_DEBUG_DRAW
1045 public:
1046 virtual void SetDebugDrawScene(const ChaosDD::Private::FChaosDDScenePtr& InCDDScene) = 0;
1047#endif
1048 };
1049}
1050
1051
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
#define check(expr)
Definition AssertionMacros.h:314
#define ensure( InExpression)
Definition AssertionMacros.h:464
@ INDEX_NONE
Definition CoreMiscDefines.h:150
#define UE_INTERNAL
Definition CoreMiscDefines.h:345
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
#define TEXT(x)
Definition Platform.h:1272
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
#define QUICK_SCOPE_CYCLE_COUNTER(Stat)
Definition Stats.h:652
#define DECLARE_CYCLE_STAT_EXTERN(CounterName, StatId, GroupId, API)
Definition Stats.h:679
#define RETURN_QUICK_DECLARE_CYCLE_STAT(StatId, GroupId)
Definition Stats.h:655
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define DECLARE_MULTICAST_DELEGATE(DelegateName)
Definition DelegateCombinations.h:23
#define DECLARE_MULTICAST_DELEGATE_OneParam(DelegateName, Param1Type)
Definition DelegateCombinations.h:49
EPhysicsProxyType
Definition PhysicsProxyBase.h:11
CORE_API bool IsInGameThread()
Definition ThreadingBase.cpp:185
#define UE_SMALL_NUMBER
Definition UnrealMathUtility.h:130
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
uint8_t uint8
Definition binka_ue_file_header.h:8
Definition ChaosMarshallingManager.h:314
void RegisterSimCallbackObject_External(ISimCallbackObject *SimCallbackObject)
Definition ChaosMarshallingManager.h:406
const FDirtyProxiesBucketInfo & GetDirtyProxyBucketInfo_External()
Definition ChaosMarshallingManager.h:374
void SetNumDirtyShapes(IPhysicsProxyBase *Proxy, int32 NumShapes)
Definition ChaosMarshallingManager.h:400
void AddDirtyProxy(IPhysicsProxyBase *ProxyBaseIn)
Definition ChaosMarshallingManager.h:337
int32 GetDirtyProxyBucketInfoNum_External(EPhysicsProxyType Type)
Definition ChaosMarshallingManager.h:380
void RemoveDirtyProxy(IPhysicsProxyBase *ProxyBaseIn)
Definition ChaosMarshallingManager.h:343
void RemoveDirtyProxyFromHistory_Internal(IPhysicsProxyBase *ProxyBaseIn)
Definition ChaosMarshallingManager.h:349
void AddDirtyProxyShape(IPhysicsProxyBase *ProxyBaseIn, int32 ShapeIdx)
Definition ChaosMarshallingManager.h:394
FReal GetExternalTime_External() const
Definition ChaosMarshallingManager.h:458
void RegisterSimCommand_External(FSimCallbackCommandObject *SimCommand)
Definition ChaosMarshallingManager.h:412
void UnregisterSimCallbackObject_External(ISimCallbackObject *SimCallbackObject)
Definition ChaosMarshallingManager.h:428
void RemoveDirtyProxyIfNoShapesAreDirty(IPhysicsProxyBase *ProxyBaseIn)
Definition ChaosMarshallingManager.h:368
void AddDirtyProxiesUnsafe(TProxiesArray &ProxiesArray)
Definition ChaosMarshallingManager.h:388
Definition ChaosResultsManager.h:65
Definition PBDRigidsSolver.h:84
Definition Threading.h:733
Definition PhysicsSolverBase.h:151
CHAOS_API void DoTask(ENamedThreads::Type CurrentThread, const FGraphEventRef &MyCompletionGraphEvent)
Definition PhysicsSolverBase.cpp:148
CHAOS_API void AdvanceSolver()
Definition PhysicsSolverBase.cpp:156
static ESubsequentsMode::Type GetSubsequentsMode()
Definition PhysicsSolverBase.h:158
TStatId GetStatId() const
Definition PhysicsSolverBase.h:156
static CHAOS_API ENamedThreads::Type GetDesiredThread()
Definition PhysicsSolverBase.cpp:93
Definition PhysicsSolverBase.h:313
FReal MTime
Definition PhysicsSolverBase.h:943
TArray< ISimCallbackObject * > SimCallbackObjects
Definition PhysicsSolverBase.h:921
EMultiBufferMode BufferMode
Definition PhysicsSolverBase.h:885
IPhysicsReplicationAsync * GetPhysicsReplication_Internal()
Definition PhysicsSolverBase.h:496
float GetMinDeltaTime_External() const
Definition PhysicsSolverBase.h:707
static float GetResimulationErrorAngularVelocityThreshold()
Definition PhysicsSolverBase.h:858
FPBDRigidsSolver & CastChecked()
Definition PhysicsSolverBase.h:322
TArray< ISimCallbackObject * > CCDModifiers
Definition PhysicsSolverBase.h:923
CHAOS_API void EnableAsyncMode(FReal FixedDt)
Definition PhysicsSolverBase.cpp:282
void SetStandaloneSolver(const bool bStandaloneSolver)
Definition PhysicsSolverBase.h:877
EThreadingModeTemp GetThreadingMode() const
Definition PhysicsSolverBase.h:604
virtual void PushPhysicsState(const FReal Dt, const int32 NumSteps, const int32 NumExternalSteps)=0
bool IsGameThreadFrozen() const
Definition PhysicsSolverBase.h:619
float GetAsyncInterpolationMultiplier() const
Definition PhysicsSolverBase.h:776
FPhysicsSolverBase(FPhysicsSolverBase &&InSteal)=delete
void SetMaxDeltaTime_External(float InMaxDeltaTime)
Definition PhysicsSolverBase.h:691
TArray< ISimCallbackObject * > MidPhaseModifiers
Definition PhysicsSolverBase.h:922
void SetMinDeltaTime_External(float InMinDeltaTime)
Definition PhysicsSolverBase.h:696
static int32 GetPhysicsHistoryCount()
Definition PhysicsSolverBase.h:803
bool IsStandaloneSolver() const
Definition PhysicsSolverBase.h:874
FReal GetAccumulatedTime() const
Definition PhysicsSolverBase.h:732
FReal GetPhysicsResultsTime_External() const
Definition PhysicsSolverBase.h:738
FRewindData * GetRewindData()
Definition PhysicsSolverBase.h:450
TUniquePtr< FChaosResultsManager > PullResultsManager
Definition PhysicsSolverBase.h:916
void AddDirtyProxyShape(IPhysicsProxyBase *ProxyBaseIn, int32 ShapeIdx)
Definition PhysicsSolverBase.h:366
FPhysicsReplicationAsync * GetPhysicsReplication()
Definition PhysicsSolverBase.h:486
IPhysicsReplicationLODAsync * PhysicsReplicationLODAsync
Definition PhysicsSolverBase.h:934
static bool CanDebugNetworkPhysicsPrediction()
Definition PhysicsSolverBase.h:779
void SetSolverTime(const FReal InTime)
Definition PhysicsSolverBase.h:755
void SetPhysicsReplication_Internal(IPhysicsReplicationAsync *InPhysicsReplication)
Definition PhysicsSolverBase.h:491
TArray< ISimCallbackObject * > PhysicsObjectUnregistrationWatchers
Definition PhysicsSolverBase.h:928
FReal GetAsyncDeltaTime() const
Definition PhysicsSolverBase.h:590
FReal GetLastDt() const
Definition PhysicsSolverBase.h:760
CHAOS_API void EnqueueSimcallbackRewindRegisteration(ISimCallbackObject *Callback)
Definition PhysicsSolverBase.cpp:369
CHAOS_API void SetStealAdvanceTasks_ForTesting(bool bInStealAdvanceTasksForTesting)
Definition PhysicsSolverBase.cpp:381
virtual void FlipEventManagerBuffer()
Definition PhysicsSolverBase.h:752
CHAOS_API void UpdateParticleInAccelerationStructure_External(FGeometryParticle *Particle, EPendingSpatialDataOperation InOperation)
Definition PhysicsSolverBase.cpp:354
void UnregisterAndFreeSimCallbackObject_External(ISimCallbackObject *SimCallbackObject)
Definition PhysicsSolverBase.h:418
CHAOS_API void DisableAsyncMode()
Definition PhysicsSolverBase.cpp:288
FChaosMarshallingManager MarshallingManager
Definition PhysicsSolverBase.h:915
int32 GetDirtyProxyBucketInfoNum_External(EPhysicsProxyType Type)
Definition PhysicsSolverBase.h:354
void MarkShuttingDown()
Definition PhysicsSolverBase.h:581
void SetOwner(const UObject *InOwner)
Definition PhysicsSolverBase.h:562
const UObject * GetOwner() const
Definition PhysicsSolverBase.h:557
bool IsUsingFixedDt() const
Definition PhysicsSolverBase.h:686
void WaitOnPendingTasks_External()
Definition PhysicsSolverBase.h:530
void EnqueueCommandImmediate(Lambda &&Func)
Definition PhysicsSolverBase.h:432
void SetPhysicsReplicationLOD_Internal(IPhysicsReplicationLODAsync *InPhysicsReplicationLOD)
Definition PhysicsSolverBase.h:501
const FDirtyProxiesBucketInfo & GetDirtyProxyBucketInfo_External()
Definition PhysicsSolverBase.h:349
virtual void SetExternalTimestampConsumed_Internal(const int32 Timestamp)=0
CHAOS_API void ClearGTParticle_External(FGeometryParticle &Particle)
Definition PhysicsSolverBase.cpp:409
void SetAsyncPhysicsBlockMode(EAsyncBlockMode InAsyncBlockMode)
Definition PhysicsSolverBase.h:769
CHAOS_API void PopAndExecuteStolenAdvanceTask_ForTesting()
Definition PhysicsSolverBase.cpp:386
bool bGameThreadFrozen
Definition PhysicsSolverBase.h:941
virtual void PrepareAdvanceBy(const FReal Dt)=0
static bool GetResimulationErrorPositionThresholdEnabled()
Definition PhysicsSolverBase.h:816
IPhysicsReplicationAsync * PhysicsReplicationAsync
Definition PhysicsSolverBase.h:933
bool bUseCollisionResimCache
Definition PhysicsSolverBase.h:936
FChaosResultsManager & GetResultsManager()
Definition PhysicsSolverBase.h:602
void AddDirtyProxiesUnsafe(TProxiesArray &ProxiesArray)
Definition PhysicsSolverBase.h:361
TSimCallbackObjectType * CreateAndRegisterSimCallbackObject_External(ConstructorArgTypes &&... ConstructorArgs)
Definition PhysicsSolverBase.h:378
TArray< ISimCallbackObject * > RegistrationWatchers
Definition PhysicsSolverBase.h:926
static bool GetResimulationErrorLinearVelocityThresholdEnabled()
Definition PhysicsSolverBase.h:840
CHAOS_API FGraphEventRef AdvanceAndDispatch_External(FReal InDt)
Definition PhysicsSolverBase.cpp:432
FPhysSceneLock & GetExternalDataLock_External() const
Definition PhysicsSolverBase.h:1007
bool bSolverHasFrozenGameThreadCallbacks
Definition PhysicsSolverBase.h:940
bool GetUseCollisionResimCache() const
Definition PhysicsSolverBase.h:474
virtual CHAOS_API ~FPhysicsSolverBase()
Definition PhysicsSolverBase.cpp:294
IPhysicsReplicationLODAsync * GetPhysicsReplicationLOD_Internal()
Definition PhysicsSolverBase.h:506
virtual void ConditionalApplyRewind_Internal()
Definition PhysicsSolverBase.h:594
static bool IsNetworkPhysicsPredictionEnabled()
Definition PhysicsSolverBase.h:788
int32 GetMaxSubSteps_External() const
Definition PhysicsSolverBase.h:717
virtual void ProcessPushedData_Internal(FPushPhysicsData &PushDataArray)=0
TUniquePtr< FPendingSpatialDataQueue > PendingSpatialOperations_External
Definition PhysicsSolverBase.h:919
void SetThreadingMode_External(EThreadingModeTemp InThreadingMode)
Definition PhysicsSolverBase.h:567
void SetIsPaused_External(bool bShouldPause)
Definition PhysicsSolverBase.h:664
static bool GetResimulationErrorRotationThresholdEnabled()
Definition PhysicsSolverBase.h:828
void RemoveDirtyProxy(IPhysicsProxyBase *ProxyBaseIn)
Definition PhysicsSolverBase.h:334
static float ResimulationErrorThreshold()
Definition PhysicsSolverBase.h:810
void SetAsyncInterpolationMultiplier(FRealSingle InAsyncInterpolationMultiplier)
Definition PhysicsSolverBase.h:774
void PullPhysicsStateForEachDirtyProxy_External(TDispatcher &Dispatcher)
Definition PhysicsSolverBaseImpl.h:46
FReal MLastDt
Definition PhysicsSolverBase.h:942
void RemoveDirtyProxyFromHistory_Internal(IPhysicsProxyBase *ProxyBaseIn)
Definition PhysicsSolverBase.h:339
virtual void KillSafeAsyncTasks()
Definition PhysicsSolverBase.h:538
const FReal GetSolverTime() const
Definition PhysicsSolverBase.h:756
static float GetResimulationErrorRotationThreshold()
Definition PhysicsSolverBase.h:834
EThreadingModeTemp ThreadingMode
Definition PhysicsSolverBase.h:887
void RegisterSimOneShotCallback(Lambda &&Func)
Definition PhysicsSolverBase.h:424
TUniquePtr< IRewindCallback > MRewindCallback
Definition PhysicsSolverBase.h:931
bool GetSolverSubstep_External() const
Definition PhysicsSolverBase.h:727
virtual bool AreAnyTasksPending() const
Definition PhysicsSolverBase.h:542
CHAOS_API FName GetDebugName() const
Definition PhysicsSolverBase.cpp:273
float GetMaxDeltaTime_External() const
Definition PhysicsSolverBase.h:702
FGraphEventRef PendingTasks
Definition PhysicsSolverBase.h:938
void FinalizeCallbackData_Internal()
Definition PhysicsSolverBase.h:648
void SetUseCollisionResimCache(bool InUseCollisionResimCache)
Definition PhysicsSolverBase.h:468
FPhysicsReplicationAsync * PhysicsReplication_DEPRECATED
Definition PhysicsSolverBase.h:932
void RemoveDirtyProxyIfNoShapesAreDirty(IPhysicsProxyBase *ProxyBaseIn)
Definition PhysicsSolverBase.h:344
static float GetResimulationErrorLinearVelocityThreshold()
Definition PhysicsSolverBase.h:846
CHAOS_API void TrackGTParticle_External(FGeometryParticle &Particle)
Definition PhysicsSolverBase.cpp:397
void SetMaxSubSteps_External(const int32 InMaxSubSteps)
Definition PhysicsSolverBase.h:712
static CHAOS_API void DestroySolver(FPhysicsSolverBase &InSolver)
Definition PhysicsSolverBase.cpp:306
bool IsPaused_External() const
Definition PhysicsSolverBase.h:659
void SetNumDirtyShapes(IPhysicsProxyBase *Proxy, int32 NumShapes)
Definition PhysicsSolverBase.h:371
void SetGameThreadFrozen(bool InGameThreadFrozen)
Definition PhysicsSolverBase.h:621
static float NetworkPhysicsInterpolationLerp()
Definition PhysicsSolverBase.h:865
void SetSolverSubstep_External(bool bInSubstepExternal)
Definition PhysicsSolverBase.h:722
static float GetPhysicsHistoryTimeLength()
Definition PhysicsSolverBase.h:795
FChaosMarshallingManager & GetMarshallingManager()
Definition PhysicsSolverBase.h:601
bool ShouldApplyRewindCallbacks()
Definition PhysicsSolverBase.h:460
static float GetResimulationErrorPositionThreshold()
Definition PhysicsSolverBase.h:822
bool bIsStandaloneSolver
Definition PhysicsSolverBase.h:882
TArray< ISimCallbackObject * > ContactModifiers
Definition PhysicsSolverBase.h:925
TArray< ISimCallbackObject * > UnregistrationWatchers
Definition PhysicsSolverBase.h:927
FGeometryParticle * UniqueIdxToGTParticle_External(const FUniqueIdx &UniqueIdx) const
Definition PhysicsSolverBase.h:518
virtual void AdvanceSolverBy(const FSubStepInfo &SubStepInfo=FSubStepInfo())=0
static bool GetResimulationErrorAngularVelocityThresholdEnabled()
Definition PhysicsSolverBase.h:852
void CastHelper(const Lambda &Func)
Definition PhysicsSolverBase.h:317
CHAOS_API void SetRewindCallback(TUniquePtr< IRewindCallback > &&RewindCallback)
Definition PhysicsSolverBase.cpp:418
void EnqueueCommandScheduled_External(const int32 ExecuteOnStep, Lambda &&Func)
Definition PhysicsSolverBase.h:442
IRewindCallback * GetRewindCallback()
Definition PhysicsSolverBase.h:455
bool IsPendingTasksComplete() const
Definition PhysicsSolverBase.h:547
CHAOS_API void ChangeBufferMode(EMultiBufferMode InBufferMode)
Definition PhysicsSolverBase.cpp:32
void SetPhysicsReplication(FPhysicsReplicationAsync *InPhysicsReplication)
Definition PhysicsSolverBase.h:480
virtual bool IsResimming() const
Definition PhysicsSolverBase.h:595
FPhysicsSolverBase & operator=(const FPhysicsSolverBase &InCopy)=delete
FPhysicsSolverBase(const FPhysicsSolverBase &InCopy)=delete
TArray< ISimCallbackObject * > StrainModifiers
Definition PhysicsSolverBase.h:924
bool IsShuttingDown() const
Definition PhysicsSolverBase.h:586
bool IsUsingAsyncResults() const
Definition PhysicsSolverBase.h:681
void AddDirtyProxy(IPhysicsProxyBase *ProxyBaseIn)
Definition PhysicsSolverBase.h:329
TUniquePtr< FRewindData > MRewindData
Definition PhysicsSolverBase.h:930
virtual void ApplyCallbacks_Internal()
Definition PhysicsSolverBase.h:627
Definition PhysicsSolverBase.h:236
CHAOS_API bool RemovePreAdvanceCallback(FDelegateHandle InHandle)
Definition PhysicsSolverBase.cpp:42
CHAOS_API FDelegateHandle AddTeardownCallback(FSolverTeardown::FDelegate InDelegate)
Definition PhysicsSolverBase.cpp:67
FSolverPreAdvance EventPreSolve
Definition PhysicsSolverBase.h:277
virtual ~FPhysicsSolverEvents()
Definition PhysicsSolverBase.h:241
CHAOS_API bool RemovePreBufferCallback(FDelegateHandle InHandle)
Definition PhysicsSolverBase.cpp:52
CHAOS_API bool RemoveTeardownCallback(FDelegateHandle InHandle)
Definition PhysicsSolverBase.cpp:72
FSolverTeardown EventTeardown
Definition PhysicsSolverBase.h:280
FSolverPostAdvance EventPostSolve
Definition PhysicsSolverBase.h:279
CHAOS_API FDelegateHandle AddPreBufferCallback(FSolverPreAdvance::FDelegate InDelegate)
Definition PhysicsSolverBase.cpp:47
FSolverPreBuffer EventPreBuffer
Definition PhysicsSolverBase.h:278
CHAOS_API FDelegateHandle AddPostAdvanceCallback(FSolverPostAdvance::FDelegate InDelegate)
Definition PhysicsSolverBase.cpp:57
void ClearCallbacks()
Definition PhysicsSolverBase.h:266
CHAOS_API bool RemovePostAdvanceCallback(FDelegateHandle InHandle)
Definition PhysicsSolverBase.cpp:62
CHAOS_API FDelegateHandle AddPreAdvanceCallback(FSolverPreAdvance::FDelegate InDelegate)
Definition PhysicsSolverBase.cpp:37
Definition PhysicsSolverBase.h:131
static ENamedThreads::Type GetDesiredThread()
Definition PhysicsSolverBase.h:137
TStatId GetStatId() const
Definition PhysicsSolverBase.h:136
static ESubsequentsMode::Type GetSubsequentsMode()
Definition PhysicsSolverBase.h:138
FPhysicsSolverFrozenGTPreSimCallbacks(FPhysicsSolverBase &InSolver)
Definition PhysicsSolverBase.h:134
void DoTask(ENamedThreads::Type CurrentThread, const FGraphEventRef &MyCompletionGraphEvent)
Definition PhysicsSolverBase.h:139
CHAOS_API void GTPreSimCallbacks()
Definition PhysicsSolverBase.cpp:120
Definition PhysicsSolverBase.h:108
void DoTask(ENamedThreads::Type CurrentThread, const FGraphEventRef &MyCompletionGraphEvent)
Definition PhysicsSolverBase.h:118
static ESubsequentsMode::Type GetSubsequentsMode()
Definition PhysicsSolverBase.h:117
FPhysicsSolverProcessPushDataTask(FPhysicsSolverBase &InSolver, FPushPhysicsData *InPushData)
Definition PhysicsSolverBase.h:111
static CHAOS_API ENamedThreads::Type GetDesiredThread()
Definition PhysicsSolverBase.cpp:88
TStatId GetStatId() const
Definition PhysicsSolverBase.h:115
CHAOS_API void ProcessPushData()
Definition PhysicsSolverBase.cpp:98
Definition RewindData.h:1650
Definition PhysicsSolverBase.h:305
FScopedTraceSolverCallback(ISimCallbackObject *InCallback)
Definition PhysicsSolverBase.h:307
Definition SimCallbackObject.h:427
Definition RewindData.h:2189
Definition SimCallbackObject.h:68
Definition ParticleHandle.h:2739
Definition IConsoleManager.h:1580
bool IsComplete() const
Definition TaskGraphInterfaces.h:529
Definition ChaosSolversModule.h:146
static CHAOS_API FChaosSolversModule * GetModule()
Definition ChaosSolversModule.cpp:55
CHAOS_API const IChaosSettingsProvider & GetSettingsProvider() const
Definition ChaosSolversModule.cpp:725
Definition IDelegateInstance.h:14
Definition NameTypes.h:617
Definition PhysicsReplication.h:193
static CORE_API FTaskGraphInterface & Get()
Definition TaskGraph.cpp:1794
void WaitUntilTaskCompletes(const FGraphEventRef &Task, ENamedThreads::Type CurrentThreadIfKnown=ENamedThreads::AnyThread)
Definition TaskGraphInterfaces.h:416
virtual bool GetResimulationErrorLinearVelocityThresholdEnabled() const
Definition ChaosSolversModule.h:70
virtual float GetResimulationErrorLinearVelocityThreshold() const
Definition ChaosSolversModule.h:75
virtual bool GetPhysicsPredictionEnabled() const
Definition ChaosSolversModule.h:39
virtual bool GetResimulationErrorPositionThresholdEnabled() const
Definition ChaosSolversModule.h:50
virtual bool GetResimulationErrorRotationThresholdEnabled() const
Definition ChaosSolversModule.h:60
virtual float GetResimulationErrorPositionThreshold() const
Definition ChaosSolversModule.h:55
virtual float GetResimulationErrorRotationThreshold() const
Definition ChaosSolversModule.h:65
virtual int32 GetPhysicsHistoryCount() const
Definition ChaosSolversModule.h:95
virtual bool GetResimulationErrorAngularVelocityThresholdEnabled() const
Definition ChaosSolversModule.h:80
virtual float GetResimulationErrorAngularVelocityThreshold() const
Definition ChaosSolversModule.h:85
virtual float GetPhysicsHistoryTimeLength() const
Definition ChaosSolversModule.h:90
Definition PhysicsProxyBase.h:97
Definition PhysicsReplicationInterface.h:26
Definition PhysicsReplicationLODInterface.h:55
Definition Array.h:670
Definition Atomic.h:538
Definition UniquePtr.h:107
Definition CriticalSection.h:14
Definition Object.h:95
CHAOS_API bool bEnableAsyncInitBody
Definition AsyncInitBodyHelper.cpp:10
Definition SkeletalMeshComponent.h:307
ESimCallbackOptions
Definition SimCallbackObject.h:33
ELockType
Definition PBDRigidsSolver.h:69
EMultiBufferMode
Definition MultiBufferResource.h:9
EThreadingModeTemp
Definition PhysicsSolverBase.h:227
EAsyncBlockMode
Definition PhysicsSolverBase.h:98
@ DoNoBlock
Definition PhysicsSolverBase.h:101
@ BlockForBestInterpolation
Definition PhysicsSolverBase.h:100
@ BlockOnlyPastFrames
Definition PhysicsSolverBase.h:99
FRealDouble FReal
Definition Real.h:22
CHAOS_API int32 GSingleThreadedPhysics
Definition Parallel.cpp:10
CHAOS_API int32 UseAsyncInterpolation
Definition PhysicsSolverBase.cpp:193
EPendingSpatialDataOperation
Definition PendingSpatialData.h:15
float FRealSingle
Definition Real.h:14
CHAOS_API FRealSingle AsyncInterpolationMultiplier
Definition PhysicsSolverBase.cpp:215
TGeometryParticle< FReal, 3 > FGeometryParticle
Definition ParticleHandleFwd.h:113
CHAOS_API int32 ForceDisableAsyncPhysics
Definition PhysicsSolverBase.cpp:196
Type SetTaskPriority(Type ThreadAndIndex, Type TaskPriority)
Definition TaskGraphInterfaces.h:200
Type
Definition TaskGraphInterfaces.h:57
@ GameThread
Definition TaskGraphInterfaces.h:61
@ HighTaskPriority
Definition TaskGraphInterfaces.h:82
Type
Definition TaskGraphInterfaces.h:249
@ TrackSubsequents
Definition TaskGraphInterfaces.h:251
@ false
Definition radaudio_common.h:23
Definition PhysicsSolverBase.h:179
FPhysicsSolverProcessPushDataTask ProcessPushData
Definition PhysicsSolverBase.h:188
FPhysicsSolverFrozenGTPreSimCallbacks GTPreSimCallbacks
Definition PhysicsSolverBase.h:189
FPhysicsSolverAdvanceTask AdvanceTask
Definition PhysicsSolverBase.h:190
CHAOS_API void AdvanceSolver()
Definition PhysicsSolverBase.cpp:579
FAllSolverTasks(FPhysicsSolverBase &InSolver, FPushPhysicsData *PushData)
Definition PhysicsSolverBase.h:180
FPhysicsSolverBase & Solver
Definition PhysicsSolverBase.h:194
Definition ParticleDirtyFlags.h:1006
Definition ChaosMarshallingManager.h:286
Definition PhysicsSolverBase.h:200
FSolverTasksPTOnly(FPhysicsSolverBase &InSolver, FPushPhysicsData *InPushData)
Definition PhysicsSolverBase.h:207
FSolverTasksPTOnly(const FSolverTasksPTOnly &)=delete
FPhysicsSolverBase & Solver
Definition PhysicsSolverBase.h:218
CHAOS_API void AdvanceSolver()
Definition PhysicsSolverBase.cpp:586
FPhysicsSolverProcessPushDataTask ProcessPushData
Definition PhysicsSolverBase.h:213
FSolverTasksPTOnly & operator=(const FSolverTasksPTOnly &)=delete
FPhysicsSolverAdvanceTask AdvanceTask
Definition PhysicsSolverBase.h:214
FSolverTasksPTOnly & operator=(FSolverTasksPTOnly &&)=delete
FSolverTasksPTOnly(FSolverTasksPTOnly &&)=delete
Definition PhysicsSolverBase.h:62
FSubStepInfo()
Definition PhysicsSolverBase.h:63
bool bSolverSubstepped
Definition PhysicsSolverBase.h:93
int32 NumSteps
Definition PhysicsSolverBase.h:92
FSubStepInfo(const FReal InPseudoFraction, const int32 InStep, const int32 InNumSteps, bool bInSolverSubstepped)
Definition PhysicsSolverBase.h:80
int32 Step
Definition PhysicsSolverBase.h:91
FSubStepInfo(const FReal InPseudoFraction, const int32 InStep, const int32 InNumSteps)
Definition PhysicsSolverBase.h:71
FReal PseudoFraction
Definition PhysicsSolverBase.h:90
Definition GeometryParticlesfwd.h:87
int32 Idx
Definition GeometryParticlesfwd.h:88
Definition PBDRigidsSolver.h:76
Definition LightweightStats.h:416