UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
PhysicsProxyBase.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "Chaos/Declares.h"
6#include "UObject/GCObject.h"
7#include "Chaos/Core.h"
9
11{
12 NoneType = 0,
15 FieldType = 3,
17 JointConstraintType = 8, //left gap when removed some types in case these numbers actually matter to someone, should remove
22 Count
23};
24
25namespace Chaos
26{
27 class FPhysicsSolverBase;
28}
29
31{
38 extern bool bRenderInterpDebugDraw;
39 extern bool bRenderInterpDebugDrawGC;
46}
47
49{
50 Base = 0,
51 ErrorLinear = 1,
53};
54
56{
57 bool bDeleted = false;
58};
59
60template <typename TPropertyType>
72
81
83{
84 // nothing to add as Geometry collections are driven from the Physics thread only
85 // ( including kinematic targeting )
86};
87
95
97{
98public:
106
107 UObject* GetOwner() const { return Owner; }
108
109 template< class SOLVER_TYPE>
110 SOLVER_TYPE* GetSolver() const { return static_cast<SOLVER_TYPE*>(Solver); }
111
113
114 //Should this be in the public API? probably not
115 template< class SOLVER_TYPE = Chaos::FPhysicsSolver>
117
118 EPhysicsProxyType GetType() const { return Type; }
119
120 //todo: remove this
121 virtual void* GetHandleUnsafe() const { check(false); return nullptr; }
122
123 int32 GetDirtyIdx() const { return DirtyIdx; }
124 void SetDirtyIdx(const int32 Idx) { DirtyIdx = Idx; }
125 void ResetDirtyIdx() { DirtyIdx = INDEX_NONE; }
126
127 void MarkDeleted() { SyncTimestamp->bDeleted = true; }
128 bool GetMarkedDeleted() const { return SyncTimestamp->bDeleted; }
129
131
132 bool IsInitialized() const { return InitializedOnStep != INDEX_NONE; }
134 {
135 //If changed initialization, ignore the very first initialization push data
137 {
139 }
140
142 }
144
146
147 IPhysicsProxyBase* GetParentProxy() const { return ParentProxy; }
149
150 // Render Interpolation CVars
151 UE_DEPRECATED(5.5, "Deprecated, use RenderInterpolationCVars::RenderInterpErrorCorrectionDuration")
156 UE_DEPRECATED(5.5, "Deprecated, use RenderInterpolationCVars::RenderInterpMaximumErrorCorrectionBeforeSnapping")
161 UE_DEPRECATED(5.5, "Deprecated, use RenderInterpolationCVars::RenderInterpErrorVelocitySmoothingDuration")
166 UE_DEPRECATED(5.5, "Deprecated, use RenderInterpolationCVars::bRenderInterpDebugDraw")
171 UE_DEPRECATED(5.5, "Deprecated, use RenderInterpolationCVars::RenderInterpErrorDirectionalDecayMultiplier")
176
177protected:
178 // Ensures that derived classes can successfully call this destructor
179 // but no one can delete using a IPhysicsProxyBase*
181
182 template<typename TProxyTimeStamp>
187
191
192private:
193 int32 DirtyIdx;
194protected:
197private:
199 IPhysicsProxyBase* ParentProxy = nullptr;
200protected:
203
205};
206
212
256
258{
264
267
269 void SetInterpChannel_External(const int32 Channel) { InterpChannel_External = Channel; }
270
271protected:
274
275public:
276 // --- Error correction interpolation API ---
277
280
283
285 virtual const bool IsErrorSmoothing() const { return false; }
286
288 virtual const Chaos::FVec3 GetErrorX(const Chaos::FRealSingle Alpha) const { return Chaos::FVec3::ZeroVector; }
289
291 virtual const FQuat GetErrorR(const Chaos::FRealSingle Alpha) const { return FQuat::Identity; }
292
295
297 virtual const bool UpdateError(const int32 CurrentSimTick, const Chaos::FReal AsyncFixedTimeStep) { return false; }
298
300 UE_DEPRECATED(5.6, "Deprecated, use DirectionalDecay(Direction, ErrorDirectionalDecayMultiplier) instead")
301 virtual const bool DirectionalDecay(Chaos::FVec3 Direction) { return DirectionalDecay(Direction, 0.0f); }
302
305 virtual const bool DirectionalDecay(Chaos::FVec3 Direction, const float ErrorDirectionalDecayMultiplier) { return false; }
306
308 virtual const bool IsErrorVelocitySmoothing() const { return false; }
309
312
314 virtual const Chaos::FVec3 GetErrorVelocitySmoothingX(const Chaos::FRealSingle Alpha) const { return Chaos::FVec3::ZeroVector; }
315
318
321};
322
323// Render interpolation that can correct errors from resimulation / repositions through a linear decay over N simulation tick.
325{
327
331
334
335 CHAOS_API virtual const bool IsErrorSmoothing() const override;
336
337 virtual const Chaos::FVec3 GetErrorX(const Chaos::FRealSingle Alpha) const override { return FMath::Lerp(ErrorXPrev, ErrorX, Alpha); }
338
339 virtual const FQuat GetErrorR(const Chaos::FRealSingle Alpha) const override { return FQuat::Slerp(ErrorRPrev, ErrorR, Alpha); }
340
341 CHAOS_API virtual void AccumlateErrorXR(const Chaos::FVec3 X, const FQuat R, const int32 CurrentSimTick, const int32 ErrorSmoothDuration) override;
342
343 CHAOS_API virtual const bool UpdateError(const int32 CurrentSimTick, const Chaos::FReal AsyncFixedTimeStep) override;
344
345 CHAOS_API virtual const bool DirectionalDecay(Chaos::FVec3 Direction, float ErrorDirectionalDecayMultiplier) override;
346
347protected:
348 CHAOS_API virtual const bool DecayError(const Chaos::FReal AsyncFixedTimeStep);
349
350 virtual void Reset()
351 {
352 ErrorX = Chaos::FVec3::ZeroVector;
353 ErrorXPrev = Chaos::FVec3::ZeroVector;
356 EndDecayTick = 0;
357 LastSimTick = 0;
358 SimTicks = 0;
359 }
360
361public:
371
377
378protected:
382
383 Chaos::FVec3 ErrorX = Chaos::FVec3::Zero();
384 Chaos::FVec3 ErrorXPrev = Chaos::FVec3::Zero();
387
389};
390
391
392// Render Interpolation that both perform the linear error correction from FProxyInterpolationError and takes incoming velocity into account to make a smoother and more organic correction of the error.
394{
396
400
403
404 virtual const bool IsErrorVelocitySmoothing() const override { return ErrorVelocitySmoothingCount > 0; }
407
408 virtual const bool UpdateError(const int32 CurrentSimTick, const Chaos::FReal AsyncFixedTimeStep) override
409 {
411 {
413 return true;
414 }
415 return false;
416 }
417
419 {
420 // Cache pre error velocity and position to be used when smoothing out error correction
425 }
426
427protected:
429 {
430 // Step the error velocity smoothing position forward along the previous velocity to have a new position to base smoothing on each tick
432 {
436
438 }
439 }
440
441 Chaos::FVec3 ErrorVelocitySmoothingV = Chaos::FVec3::Zero();
442 Chaos::FVec3 ErrorVelocitySmoothingX = Chaos::FVec3::Zero();
445};
#define check(expr)
Definition AssertionMacros.h:314
@ INDEX_NONE
Definition CoreMiscDefines.h:150
#define FORCEINLINE_DEBUGGABLE
Definition CoreMiscDefines.h:74
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
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
#define X(Name, Desc)
Definition FormatStringSan.h:47
EProxyInterpolationType
Definition PhysicsProxyBase.h:49
EPhysicsProxyType
Definition PhysicsProxyBase.h:11
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition PhysicsSolverBase.h:313
Definition PhysicsProxyBase.h:97
virtual CHAOS_API ~IPhysicsProxyBase()
Definition PhysicsProxyBase.cpp:51
Chaos::FPhysicsSolverBase * GetSolverBase() const
Definition PhysicsProxyBase.h:112
void ResetDirtyIdx()
Definition PhysicsProxyBase.h:125
void SetDirtyIdx(const int32 Idx)
Definition PhysicsProxyBase.h:124
FORCEINLINE_DEBUGGABLE TProxyTimeStamp & GetSyncTimestampAs()
Definition PhysicsProxyBase.h:183
int32 GetInitializedStep() const
Definition PhysicsProxyBase.h:143
void SetInitialized(const int32 InitializeStep)
Definition PhysicsProxyBase.h:133
void SetParentProxy(IPhysicsProxyBase *InProxy)
Definition PhysicsProxyBase.h:148
int32 IgnoreDataOnStep_Internal
Definition PhysicsProxyBase.h:202
CHAOS_API int32 GetSolverSyncTimestamp_External() const
Definition PhysicsProxyBase.cpp:60
IPhysicsProxyBase * GetParentProxy() const
Definition PhysicsProxyBase.h:147
bool IsInitialized() const
Definition PhysicsProxyBase.h:132
virtual void * GetHandleUnsafe() const
Definition PhysicsProxyBase.h:121
EPhysicsProxyType GetType() const
Definition PhysicsProxyBase.h:118
UObject * Owner
Definition PhysicsProxyBase.h:190
void MarkDeleted()
Definition PhysicsProxyBase.h:127
static float GetRenderInterpErrorCorrectionDuration()
Definition PhysicsProxyBase.h:152
static float GetRenderInterpErrorDirectionalDecayMultiplier()
Definition PhysicsProxyBase.h:172
static float GetRenderInterpMaximumErrorCorrectionBeforeSnapping()
Definition PhysicsProxyBase.h:157
int32 InitializedOnStep
Definition PhysicsProxyBase.h:201
static float GetRenderInterpErrorVelocitySmoothingDuration()
Definition PhysicsProxyBase.h:162
void SetSolver(SOLVER_TYPE *InSolver)
Definition PhysicsProxyBase.h:116
EPhysicsProxyType Type
Definition PhysicsProxyBase.h:196
SOLVER_TYPE * GetSolver() const
Definition PhysicsProxyBase.h:110
Chaos::FPhysicsSolverBase * Solver
Definition PhysicsProxyBase.h:189
int32 GetIgnoreDataOnStep_Internal() const
Definition PhysicsProxyBase.h:145
bool GetMarkedDeleted() const
Definition PhysicsProxyBase.h:128
UObject * GetOwner() const
Definition PhysicsProxyBase.h:107
TSharedPtr< FProxyTimestampBase, ESPMode::ThreadSafe > GetSyncTimestamp() const
Definition PhysicsProxyBase.h:130
static bool GetRenderInterpDebugDraw()
Definition PhysicsProxyBase.h:167
int32 GetDirtyIdx() const
Definition PhysicsProxyBase.h:123
IPhysicsProxyBase(EPhysicsProxyType InType, UObject *InOwner, TSharedPtr< FProxyTimestampBase, ESPMode::ThreadSafe > InProxyTimeStamp)
Definition PhysicsProxyBase.h:99
Definition SharedPointer.h:692
Definition UniquePtr.h:107
bool IsValid() const
Definition UniquePtr.h:280
UE_FORCEINLINE_HINT T * Get() const
Definition UniquePtr.h:324
Definition Object.h:95
Definition SkeletalMeshComponent.h:307
FRealDouble FReal
Definition Real.h:22
float FRealSingle
Definition Real.h:14
Definition PhysicsReplication.cpp:82
float RenderInterpExponentialDecayAngularHalfLife
Definition PhysicsProxyBase.cpp:41
float RenderInterpErrorVelocitySmoothingDuration
Definition PhysicsProxyBase.cpp:17
bool bRenderInterpApplyExponentialDecay
Definition PhysicsProxyBase.cpp:35
float RenderInterpErrorDirectionalDecayMultiplier
Definition PhysicsProxyBase.cpp:20
float RenderInterpErrorCorrectionDuration
Definition PhysicsProxyBase.cpp:8
float RenderInterpMaximumErrorCorrectionBeforeSnapping
Definition PhysicsProxyBase.cpp:11
float RenderInterpDebugDrawZOffset
Definition PhysicsProxyBase.cpp:32
bool bRenderInterpDebugDraw
Definition PhysicsProxyBase.cpp:26
float RenderInterpMinimumAngularThreshold
Definition PhysicsProxyBase.cpp:47
float RenderInterpMinimumLinearThreshold
Definition PhysicsProxyBase.cpp:44
bool bRenderInterpErrorVelocityCorrection
Definition PhysicsProxyBase.cpp:23
float RenderInterpExponentialDecayLinearHalfLife
Definition PhysicsProxyBase.cpp:38
bool bRenderInterpDebugDrawGC
Definition PhysicsProxyBase.cpp:29
float RenderInterpMaximumErrorCorrectionDesyncTimeBeforeSnapping
Definition PhysicsProxyBase.cpp:14
@ false
Definition radaudio_common.h:23
Definition PhysicsProxyBase.h:89
TTimestampProperty< Chaos::FVec3 > OverWriteW
Definition PhysicsProxyBase.h:93
TTimestampProperty< Chaos::FRotation3 > OverWriteR
Definition PhysicsProxyBase.h:91
TTimestampProperty< Chaos::FVec3 > OverWriteX
Definition PhysicsProxyBase.h:90
TTimestampProperty< Chaos::FVec3 > OverWriteV
Definition PhysicsProxyBase.h:92
Definition PhysicsProxyBase.h:214
float ErrorDirectionalDecayMultiplier
Definition PhysicsProxyBase.h:239
bool bApplyExponentialDecay
Definition PhysicsProxyBase.h:242
float ErrorCorrectionDuration
Definition PhysicsProxyBase.h:229
float ExponentialDecayLinearHalfLife
Definition PhysicsProxyBase.h:245
float MaximumErrorCorrectionBeforeSnapping
Definition PhysicsProxyBase.h:232
~FErrorInterpolationSettings()
Definition PhysicsProxyBase.h:226
float ExponentialDecayAngularHalfLife
Definition PhysicsProxyBase.h:248
float MaximumErrorCorrectionDesyncTimeBeforeSnapping
Definition PhysicsProxyBase.h:236
FErrorInterpolationSettings()
Definition PhysicsProxyBase.h:215
float MinimumLinearThreshold
Definition PhysicsProxyBase.h:251
float MinimumAngularThreshold
Definition PhysicsProxyBase.h:254
Definition PhysicsProxyBase.h:83
static constexpr UE_FORCEINLINE_HINT T Lerp(const T &A, const T &B, const U &Alpha)
Definition UnrealMathUtility.h:1116
Definition PhysicsProxyBase.h:258
int32 PullDataInterpIdx_External
Definition PhysicsProxyBase.h:272
virtual const Chaos::FRealSingle GetErrorVelocitySmoothingAlpha(const int32 ErrorVelocitySmoothDuration) const
Definition PhysicsProxyBase.h:311
virtual void AccumlateErrorXR(const Chaos::FVec3 X, const FQuat R, const int32 CurrentSimTick, const int32 ErrorSmoothDuration)
Definition PhysicsProxyBase.h:294
FProxyInterpolationBase(const int32 PullDataInterpIdx=INDEX_NONE, const int32 InterpChannel=0)
Definition PhysicsProxyBase.h:259
void SetInterpChannel_External(const int32 Channel)
Definition PhysicsProxyBase.h:269
virtual const Chaos::FVec3 GetErrorVelocitySmoothingX(const Chaos::FRealSingle Alpha) const
Definition PhysicsProxyBase.h:314
virtual const bool DirectionalDecay(Chaos::FVec3 Direction, const float ErrorDirectionalDecayMultiplier)
Definition PhysicsProxyBase.h:305
virtual FErrorInterpolationSettings * GetErrorInterpolationSettings()
Definition PhysicsProxyBase.h:320
int32 GetInterpChannel_External() const
Definition PhysicsProxyBase.h:268
virtual const bool IsErrorSmoothing() const
Definition PhysicsProxyBase.h:285
void SetPullDataInterpIdx_External(const int32 Idx)
Definition PhysicsProxyBase.h:266
virtual const bool DirectionalDecay(Chaos::FVec3 Direction)
Definition PhysicsProxyBase.h:301
int32 InterpChannel_External
Definition PhysicsProxyBase.h:273
virtual const FQuat GetErrorR(const Chaos::FRealSingle Alpha) const
Definition PhysicsProxyBase.h:291
static const EProxyInterpolationType InterpolationType
Definition PhysicsProxyBase.h:279
virtual const EProxyInterpolationType GetInterpolationType() const
Definition PhysicsProxyBase.h:282
virtual const bool IsErrorVelocitySmoothing() const
Definition PhysicsProxyBase.h:308
virtual ~FProxyInterpolationBase()
Definition PhysicsProxyBase.h:263
int32 GetPullDataInterpIdx_External() const
Definition PhysicsProxyBase.h:265
virtual const bool UpdateError(const int32 CurrentSimTick, const Chaos::FReal AsyncFixedTimeStep)
Definition PhysicsProxyBase.h:297
virtual const Chaos::FVec3 GetErrorX(const Chaos::FRealSingle Alpha) const
Definition PhysicsProxyBase.h:288
virtual void SetVelocitySmoothing(const Chaos::FVec3 CurrV, const Chaos::FVec3 CurrX, const int32 ErrorVelocitySmoothDuration)
Definition PhysicsProxyBase.h:317
Definition PhysicsProxyBase.h:394
Chaos::FVec3 ErrorVelocitySmoothingXPrev
Definition PhysicsProxyBase.h:443
int32 ErrorVelocitySmoothingCount
Definition PhysicsProxyBase.h:444
static const EProxyInterpolationType InterpolationType
Definition PhysicsProxyBase.h:401
FProxyInterpolationErrorVelocity(const int32 PullDataInterpIdx=INDEX_NONE, const int32 InterpChannel=0)
Definition PhysicsProxyBase.h:397
virtual void SetVelocitySmoothing(const Chaos::FVec3 CurrV, const Chaos::FVec3 CurrX, const int32 ErrorVelocitySmoothDuration) override
Definition PhysicsProxyBase.h:418
virtual const Chaos::FRealSingle GetErrorVelocitySmoothingAlpha(const int32 ErrorVelocitySmoothDuration) const override
Definition PhysicsProxyBase.h:405
Chaos::FVec3 ErrorVelocitySmoothingX
Definition PhysicsProxyBase.h:442
virtual void StepErrorVelocitySmoothingData(const Chaos::FReal AsyncFixedTimeStep)
Definition PhysicsProxyBase.h:428
virtual ~FProxyInterpolationErrorVelocity()
Definition PhysicsProxyBase.h:399
Chaos::FVec3 ErrorVelocitySmoothingV
Definition PhysicsProxyBase.h:441
virtual const Chaos::FVec3 GetErrorVelocitySmoothingX(const Chaos::FRealSingle Alpha) const override
Definition PhysicsProxyBase.h:406
virtual const EProxyInterpolationType GetInterpolationType() const override
Definition PhysicsProxyBase.h:402
virtual const bool IsErrorVelocitySmoothing() const override
Definition PhysicsProxyBase.h:404
virtual const bool UpdateError(const int32 CurrentSimTick, const Chaos::FReal AsyncFixedTimeStep) override
Definition PhysicsProxyBase.h:408
Definition PhysicsProxyBase.h:325
int32 EndDecayTick
Definition PhysicsProxyBase.h:381
virtual CHAOS_API const bool DirectionalDecay(Chaos::FVec3 Direction, float ErrorDirectionalDecayMultiplier) override
Definition PhysicsProxyBase.cpp:116
FProxyInterpolationError(const int32 PullDataInterpIdx=INDEX_NONE, const int32 InterpChannel=0)
Definition PhysicsProxyBase.h:328
virtual CHAOS_API const bool UpdateError(const int32 CurrentSimTick, const Chaos::FReal AsyncFixedTimeStep) override
Definition PhysicsProxyBase.cpp:103
virtual ~FProxyInterpolationError()
Definition PhysicsProxyBase.h:330
TUniquePtr< FErrorInterpolationSettings > ErrorInterpolationSettings
Definition PhysicsProxyBase.h:388
virtual CHAOS_API const bool DecayError(const Chaos::FReal AsyncFixedTimeStep)
Definition PhysicsProxyBase.cpp:145
virtual FErrorInterpolationSettings * GetErrorInterpolationSettings() override
Definition PhysicsProxyBase.h:373
Chaos::FVec3 ErrorXPrev
Definition PhysicsProxyBase.h:384
FQuat ErrorRPrev
Definition PhysicsProxyBase.h:386
int32 SimTicks
Definition PhysicsProxyBase.h:380
static const EProxyInterpolationType InterpolationType
Definition PhysicsProxyBase.h:332
virtual void Reset()
Definition PhysicsProxyBase.h:350
virtual const EProxyInterpolationType GetInterpolationType() const override
Definition PhysicsProxyBase.h:333
virtual const Chaos::FVec3 GetErrorX(const Chaos::FRealSingle Alpha) const override
Definition PhysicsProxyBase.h:337
virtual CHAOS_API const bool IsErrorSmoothing() const override
Definition PhysicsProxyBase.cpp:70
int32 LastSimTick
Definition PhysicsProxyBase.h:379
Chaos::FVec3 ErrorX
Definition PhysicsProxyBase.h:383
FQuat ErrorR
Definition PhysicsProxyBase.h:385
virtual CHAOS_API void AccumlateErrorXR(const Chaos::FVec3 X, const FQuat R, const int32 CurrentSimTick, const int32 ErrorSmoothDuration) override
Definition PhysicsProxyBase.cpp:85
virtual const FQuat GetErrorR(const Chaos::FRealSingle Alpha) const override
Definition PhysicsProxyBase.h:339
FErrorInterpolationSettings & GetOrCreateErrorInterpolationSettings()
Definition PhysicsProxyBase.h:363
Definition PhysicsProxyBase.h:56
bool bDeleted
Definition PhysicsProxyBase.h:57
Definition PhysicsProxyBase.h:74
TTimestampProperty< Chaos::FRotation3 > OverWriteR
Definition PhysicsProxyBase.h:77
TTimestampProperty< Chaos::FVec3 > OverWriteX
Definition PhysicsProxyBase.h:76
int32 ObjectStateTimestamp
Definition PhysicsProxyBase.h:75
TTimestampProperty< Chaos::FVec3 > OverWriteW
Definition PhysicsProxyBase.h:79
TTimestampProperty< Chaos::FVec3 > OverWriteV
Definition PhysicsProxyBase.h:78
Definition PhysicsProxyBase.h:208
EPhysicsProxyType Type
Definition PhysicsProxyBase.h:210
IPhysicsProxyBase * PhysicsProxy
Definition PhysicsProxyBase.h:209
Definition PhysicsProxyBase.h:62
TPropertyType Value
Definition PhysicsProxyBase.h:69
FORCEINLINE_DEBUGGABLE void Set(int32 InTimestamp, const TPropertyType &InValue)
Definition PhysicsProxyBase.h:63
int32 Timestamp
Definition PhysicsProxyBase.h:70
static UE_FORCEINLINE_HINT TQuat< double > Slerp(const TQuat< double > &Quat1, const TQuat< double > &Quat2, double Slerp)
Definition Quat.h:660
static CORE_API const TQuat< double > Identity
Definition Quat.h:63