UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
PhysicsReplication.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3/*=============================================================================
4 PhysicsReplication.h
5 Manage replication of physics bodies
6=============================================================================*/
7
8#pragma once
9
10#include "Engine/EngineTypes.h"
15#include "Chaos/PhysicsObject.h"
20
21namespace Chaos
22{
23 namespace Private
24 {
25 class FPBDIsland;
26 }
27}
28
30{
33 extern ENGINE_API float NetPingLimit;
41 extern ENGINE_API float PositionLerp;
43 extern ENGINE_API float AngleLerp;
48}
49
50#if !UE_BUILD_SHIPPING
52{
54}
55#endif
56
57#pragma region FPhysicsReplicationAsync
58
66
85
95
96
98{
118
121
124
127
130
133
136
140
144
150
153
156
159
160public:
162 const bool IsWaiting() const { return WaitForServerFrame > INDEX_NONE; }
163
170
177
186};
187
190 FPhysicsReplicationAsyncInput,
191 Chaos::FSimCallbackNoOutput,
192 Chaos::ESimCallbackOptions::Presimulate | Chaos::ESimCallbackOptions::PhysicsObjectUnregister>
193{
194 virtual FName GetFNameForStatId() const override;
195 virtual void OnPostInitialize_Internal() override;
196 virtual void OnPreSimulate_Internal() override;
197 virtual void OnPhysicsObjectUnregistered_Internal(Chaos::FConstPhysicsObjectHandle PhysicsObject) override;
198
199 virtual void ApplyTargetStatesAsync(const float DeltaSeconds);
200 UE_DEPRECATED(5.6, "Deprecated, call the function with just @param DeltaSeconds instead.")
201 virtual void ApplyTargetStatesAsync(const float DeltaSeconds, const FPhysicsRepErrorCorrectionData& ErrorCorrection, const TArray<FPhysicsRepAsyncInputData>& TargetStates) { ApplyTargetStatesAsync(DeltaSeconds); };
202
203 // Replication functions
204 virtual void DefaultReplication_DEPRECATED(Chaos::FRigidBodyHandle_Internal* Handle, const FPhysicsRepAsyncInputData& State, const float DeltaSeconds, const FPhysicsRepErrorCorrectionData& ErrorCorrection);
205 virtual bool DefaultReplication(Chaos::FPBDRigidParticleHandle* Handle, FReplicatedPhysicsTargetAsync& Target, const float DeltaSeconds);
206 virtual bool PredictiveInterpolation(Chaos::FPBDRigidParticleHandle* Handle, FReplicatedPhysicsTargetAsync& Target, const float DeltaSeconds);
207 virtual bool ResimulationReplication(Chaos::FPBDRigidParticleHandle* Handle, FReplicatedPhysicsTargetAsync& Target, const float DeltaSeconds);
208
209public:
211
212private:
213 float LatencyOneWay;
214 FRigidBodyErrorCorrection ErrorCorrectionDefault;
215 FNetworkPhysicsSettingsData SettingsCurrent;
216 FNetworkPhysicsSettingsData SettingsDefault;
221 TArray<int32> ParticlesInResimIslands;
222 TArray<Chaos::FParticleID> ReplicatedParticleIDs;
223
224 int32 ResimOutOfBoundsCounter = 0;
225 float ResimErrorLogTimer = 0.0f;
226
227private:
228 FReplicatedPhysicsTargetAsync* AddObjectToReplication(Chaos::FConstPhysicsObjectHandle PhysicsObject);
229 void RemoveObjectFromReplication(Chaos::FConstPhysicsObjectHandle PhysicsObject);
231 void UpdateRewindDataTarget(const FPhysicsRepAsyncInputData& Input);
232 void CacheResimInteractions();
233 // Sets SettingsCurrent to either the objects custom settings or to the default settings
234 void FetchObjectSettings(Chaos::FConstPhysicsObjectHandle PhysicsObject);
235 bool UsePhysicsReplicationLOD();
236 void CheckTargetResimValidity(FReplicatedPhysicsTargetAsync& Target);
237 void ApplyPhysicsReplicationLOD(Chaos::FConstPhysicsObjectHandle PhysicsObjectHandle, FReplicatedPhysicsTargetAsync& Target, const uint32 LODFlags);
238 void DebugDrawReplicationMode(const FPhysicsRepAsyncInputData& Input);
239
241 static void ExtrapolateTarget(FReplicatedPhysicsTargetAsync& Target, const int32 ExtrapolateFrames, const float DeltaSeconds);
243 static void ExtrapolateTarget(FReplicatedPhysicsTargetAsync& Target, const float ExtrapolationTime);
244
245public:
246 void Setup(FRigidBodyErrorCorrection ErrorCorrection)
247 {
248 ErrorCorrectionDefault = ErrorCorrection;
249 }
250};
251
252#pragma endregion // FPhysicsReplicationAsync
253
254
255
294
296{
297public:
300
303
305 ENGINE_API virtual void Tick(float DeltaSeconds) override;
306
308 ENGINE_API virtual void SetReplicatedTarget(UPrimitiveComponent* Component, FName BoneName, const FRigidBodyState& ReplicatedTarget, int32 ServerFrame) override;
309private:
310 ENGINE_API void SetReplicatedTarget(Chaos::FConstPhysicsObjectHandle PhysicsObject, const FRigidBodyState& ReplicatedTarget, int32 ServerFrame, EPhysicsReplicationMode ReplicationMode = EPhysicsReplicationMode::Default);
311
312public:
314 ENGINE_API virtual void RemoveReplicatedTarget(UPrimitiveComponent* Component) override;
315
316protected:
317
321 virtual void OnSetReplicatedTarget(UPrimitiveComponent* Component, FName BoneName, const FRigidBodyState& ReplicatedTarget, int32 ServerFrame, FReplicatedPhysicsTarget& Target) {}
322
324 ENGINE_API virtual bool ApplyRigidBodyState(float DeltaSeconds, FBodyInstance* BI, FReplicatedPhysicsTarget& PhysicsTarget, const FRigidBodyErrorCorrection& ErrorCorrection, const float PingSecondsOneWay, int32 LocalFrame, int32 NumPredictedFrames);
325 ENGINE_API virtual bool ApplyRigidBodyState(float DeltaSeconds, FBodyInstance* BI, FReplicatedPhysicsTarget& PhysicsTarget, const FRigidBodyErrorCorrection& ErrorCorrection, const float PingSecondsOneWay, bool* bDidHardSnap = nullptr); // deprecated path with no localframe/numpredicted
326
328 ENGINE_API const UWorld* GetOwningWorld() const;
329
330private:
331
333 ENGINE_API float GetLocalPing() const;
334
336 ENGINE_API float GetOwnerPing(const AActor* const Owner, const FReplicatedPhysicsTarget& Target) const;
337
338private:
339 TMap<TWeakObjectPtr<UPrimitiveComponent>, FReplicatedPhysicsTarget> ComponentToTargets_DEPRECATED; // This collection is keeping the legacy flow working until fully deprecated in a future release
340 TArray<FReplicatedPhysicsTarget> ReplicatedTargetsQueue;
341 FPhysScene* PhysScene;
343
344
345 FPhysicsReplicationAsync* PhysicsReplicationAsync;
346 FPhysicsReplicationAsyncInput* AsyncInput; //async data being written into before we push into callback
347
348 ENGINE_API void PrepareAsyncData_External(const FRigidBodyErrorCorrection& ErrorCorrection); //prepare async data for writing. Call on external thread (i.e. game thread)
349};
@ INDEX_NONE
Definition CoreMiscDefines.h:150
#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
EPhysicsReplicationMode
Definition EngineTypes.h:3378
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition Actor.h:257
Definition PBDRigidsSolver.h:84
Definition SingleParticlePhysicsProxy.h:1567
Definition SingleParticlePhysicsProxy.h:58
Definition ParticleHandle.h:987
Definition SimCallbackObject.h:521
Definition NameTypes.h:617
Definition PhysScene_Chaos.h:116
Definition PhysicsReplication.h:193
virtual void RegisterSettings(Chaos::FConstPhysicsObjectHandle PhysicsObject, TWeakPtr< const FNetworkPhysicsSettingsData > InSettings) override
Definition PhysicsReplication.cpp:895
void Setup(FRigidBodyErrorCorrection ErrorCorrection)
Definition PhysicsReplication.h:246
Definition PhysicsReplication.h:296
virtual void OnSetReplicatedTarget(UPrimitiveComponent *Component, FName BoneName, const FRigidBodyState &ReplicatedTarget, int32 ServerFrame, FReplicatedPhysicsTarget &Target)
Definition PhysicsReplication.h:321
virtual ENGINE_API void SetReplicatedTarget(UPrimitiveComponent *Component, FName BoneName, const FRigidBodyState &ReplicatedTarget, int32 ServerFrame) override
Definition PhysicsReplication.cpp:317
virtual ENGINE_API void RemoveReplicatedTarget(UPrimitiveComponent *Component) override
Definition PhysicsReplication.cpp:388
static ENGINE_API bool ShouldSkipPhysicsReplication()
Definition PhysicsReplication.cpp:2509
virtual void OnTargetRestored(TWeakObjectPtr< UPrimitiveComponent > Component, const FReplicatedPhysicsTarget &Target)
Definition PhysicsReplication.h:320
virtual ENGINE_API ~FPhysicsReplication()
Definition PhysicsReplication.cpp:305
ENGINE_API UWorld * GetOwningWorld()
Definition PhysicsReplication.cpp:2514
virtual ENGINE_API bool ApplyRigidBodyState(float DeltaSeconds, FBodyInstance *BI, FReplicatedPhysicsTarget &PhysicsTarget, const FRigidBodyErrorCorrection &ErrorCorrection, const float PingSecondsOneWay, int32 LocalFrame, int32 NumPredictedFrames)
Definition PhysicsReplication.cpp:554
Definition PhysicsReplicationInterface.h:26
Definition PhysicsReplicationInterface.h:14
Definition Array.h:670
void Reset(SizeType NewSize=0)
Definition Array.h:2246
Definition UnrealString.h.inl:34
Definition SharedPointer.h:1295
Definition World.h:918
Definition SkeletalMeshComponent.h:307
Definition CharacterMovementComponent.h:42
float AngleLerp
Definition PhysicsReplication.cpp:65
float MaxLinearHardSnapDistance
Definition PhysicsReplication.cpp:53
int32 ApplyAsyncSleepState
Definition PhysicsReplication.cpp:77
float NetPingLimit
Definition PhysicsReplication.cpp:35
float ErrorAccumulationDistanceSq
Definition PhysicsReplication.cpp:47
float LinearVelocityCoefficient
Definition PhysicsReplication.cpp:62
float ErrorAccumulationSeconds
Definition PhysicsReplication.cpp:44
float AngularVelocityCoefficient
Definition PhysicsReplication.cpp:68
float ErrorPerLinearDifference
Definition PhysicsReplication.cpp:38
float NetPingExtrapolation
Definition PhysicsReplication.cpp:32
float ErrorPerAngularDifference
Definition PhysicsReplication.cpp:41
float MaxRestoredStateError
Definition PhysicsReplication.cpp:56
int32 AlwaysHardSnap
Definition PhysicsReplication.cpp:71
float PositionLerp
Definition PhysicsReplication.cpp:59
float ErrorAccumulationSimilarity
Definition PhysicsReplication.cpp:50
int32 SkipPhysicsReplication
Definition PhysicsReplication.cpp:29
int32 AlwaysResetPhysics
Definition PhysicsReplication.cpp:74
Definition PrimitiveComponent.cpp:150
int32 LogPhysicsReplicationHardSnaps
Definition PhysicsReplication.cpp:94
Definition OverriddenPropertySet.cpp:45
@ false
Definition radaudio_common.h:23
Definition PhysicsObjectInternal.h:16
Definition SimCallbackInput.h:34
Definition BodyInstance.h:320
Definition EngineTypes.h:3929
Definition NetworkPhysicsSettingsComponent.h:648
Definition PhysicsReplication.h:69
float LatencyOneWay
Definition PhysicsReplication.h:77
FRigidBodyState TargetState
Definition PhysicsReplication.h:70
TOptional< int32 > FrameOffset
Definition PhysicsReplication.h:76
Chaos::FSingleParticlePhysicsProxy * Proxy
Definition PhysicsReplication.h:71
int32 ServerFrame
Definition PhysicsReplication.h:75
TOptional< FPhysicsRepErrorCorrectionData > ErrorCorrection
Definition PhysicsReplication.h:73
Chaos::FConstPhysicsObjectHandle PhysicsObject
Definition PhysicsReplication.h:72
EPhysicsReplicationMode RepMode
Definition PhysicsReplication.h:74
FPhysicsRepAsyncInputData(Chaos::FConstPhysicsObjectHandle POHandle)
Definition PhysicsReplication.h:79
Definition PhysicsReplication.h:60
float LinearVelocityCoefficient
Definition PhysicsReplication.h:61
float AngularVelocityCoefficient
Definition PhysicsReplication.h:62
float PositionLerp
Definition PhysicsReplication.h:63
float AngleLerp
Definition PhysicsReplication.h:64
Definition PhysicsReplication.h:87
FPhysicsRepErrorCorrectionData ErrorCorrection
Definition PhysicsReplication.h:88
void Reset()
Definition PhysicsReplication.h:90
TArray< FPhysicsRepAsyncInputData > InputData
Definition PhysicsReplication.h:89
Definition PhysicsReplication.h:98
float AccumulatedErrorSeconds
Definition PhysicsReplication.h:123
void UpdateWaiting(int32 InServerFrame)
Definition PhysicsReplication.h:179
const bool IsWaiting() const
Definition PhysicsReplication.h:162
int32 ReceiveInterval
Definition PhysicsReplication.h:138
int32 ServerFrame
Definition PhysicsReplication.h:129
int32 FrameOffset
Definition PhysicsReplication.h:132
FRigidBodyState TargetState
Definition PhysicsReplication.h:120
bool bAllowTargetAltering
Definition PhysicsReplication.h:155
FReplicatedPhysicsTargetAsync()
Definition PhysicsReplication.h:99
FVector PrevPosTarget
Definition PhysicsReplication.h:146
int32 ReceiveFrame
Definition PhysicsReplication.h:135
void SetWaiting(int32 InWaitForServerFrame, EPhysicsReplicationMode InRepModeOverride)
Definition PhysicsReplication.h:165
FVector PrevPos
Definition PhysicsReplication.h:148
int32 WaitForServerFrame
Definition PhysicsReplication.h:158
FVector PrevLinVel
Definition PhysicsReplication.h:149
int32 TickCount
Definition PhysicsReplication.h:126
void SetWaiting(int32 InWaitForServerFrame)
Definition PhysicsReplication.h:172
float AccumulatedSleepSeconds
Definition PhysicsReplication.h:152
float AverageReceiveInterval
Definition PhysicsReplication.h:139
EPhysicsReplicationMode RepMode
Definition PhysicsReplication.h:142
EPhysicsReplicationMode RepModeOverride
Definition PhysicsReplication.h:143
FQuat PrevRotTarget
Definition PhysicsReplication.h:147
Definition PhysicsReplication.h:257
FVector PrevPos
Definition PhysicsReplication.h:279
Chaos::FConstPhysicsObjectHandle PhysicsObject
Definition PhysicsReplication.h:285
FDebugFloatHistory ErrorHistory
Definition PhysicsReplication.h:291
EPhysicsReplicationMode ReplicationMode
Definition PhysicsReplication.h:288
FRigidBodyState TargetState
Definition PhysicsReplication.h:266
FReplicatedPhysicsTarget(Chaos::FConstPhysicsObjectHandle POHandle=nullptr)
Definition PhysicsReplication.h:258
FVector PrevPosTarget
Definition PhysicsReplication.h:278
FName BoneName
Definition PhysicsReplication.h:269
float AccumulatedErrorSeconds
Definition PhysicsReplication.h:275
int32 ServerFrame
Definition PhysicsReplication.h:282
float ArrivedTimeSeconds
Definition PhysicsReplication.h:272
Definition EngineTypes.h:1719
Definition ReplicatedState.h:86
Definition Optional.h:131
Definition WeakObjectPtrTemplates.h:25