UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
NetworkPhysicsSettingsComponent.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3/*=============================================================================
4 NetworkPhysicsSettingsComponent.h
5 Manage networked physics settings per actor through ActorComponent and the subsequent physics-thread data flow for the settings.
6=============================================================================*/
7
8#pragma once
9#include "CoreMinimal.h"
12#include "Curves/CurveFloat.h"
13#include "Engine/DataAsset.h"
14
15#include "NetworkPhysicsSettingsComponent.generated.h"
16
17
19
20// Alias
25
27{
28 namespace DefaultReplicationCVars
29 {
30 extern bool bHardsnapLegacyInPT;
31 extern bool bCorrectConnectedBodies;
33 }
34
35 namespace PredictiveInterpolationCVars
36 {
37 extern float PosCorrectionTimeBase;
38 extern float PosCorrectionTimeMin;
39 extern float PosCorrectionTimeMultiplier;
40 extern float RotCorrectionTimeBase;
41 extern float RotCorrectionTimeMin;
42 extern float RotCorrectionTimeMultiplier;
45 extern float SoftSnapPosStrength;
46 extern float SoftSnapRotStrength;
47 extern bool bSoftSnapToSource;
49 extern bool bPostResimWaitForUpdate;
50 extern bool bDisableSoftSnap;
51 extern bool bCorrectConnectedBodies;
53 }
54
55 namespace ResimulationCVars
56 {
57 extern bool bRuntimeCorrectionEnabled;
59 extern float PosStabilityMultiplier;
60 extern float RotStabilityMultiplier;
61 extern float VelStabilityMultiplier;
62 extern float AngVelStabilityMultiplier;
64 extern bool bEnableUnreliableFlow;
65 extern bool bEnableReliableFlow;
67 extern bool bAllowInputExtrapolation;
68 extern bool bValidateDataOnGameThread;
79 extern float InputDecaySetTime;
80 }
81}
82
83
84USTRUCT()
86{
88
90
91 // Override properties
92 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (InlineEditConditionToggle))
93 bool bOverrideSimProxyRepMode = false;
94
95 // Override the EPhysicsReplicationMode for Actors with ENetRole::ROLE_SimulatedProxy.
96 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (EditCondition = "bOverrideSimProxyRepMode"))
97 EPhysicsReplicationMode SimProxyRepMode = EPhysicsReplicationMode::PredictiveInterpolation;
98
99 // Register this actor's Autonomous Proxy as a focal point / focal particle in Physics Replication LOD.
100 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides")
101 bool bFocalParticleInPhysicsReplicationLOD = false;
102
103 // Minimum delay added, in seconds, when scheduling an event far enough in the future to ensure server and all peers that event at the same time
104 // This value should be large enough to accommodate the largest network Round Trip Time, beyond which it is understood that the simulation will suffer from corrections
105 UPROPERTY(config, EditDefaultsOnly, Category = "General")
106 float EventSchedulingMinDelaySeconds = 0.3f;
107};
108
109USTRUCT()
111{
113
115 : bOverrideMaxLinearHardSnapDistance(0)
116 , bOverrideDefaultLegacyHardsnapInPT(0)
117 , bOverrideCorrectConnectedBodies(0)
118 , bOverrideCorrectConnectedBodiesFriction(0)
119 {}
120
121 // Override properties
122 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (InlineEditConditionToggle))
123 uint32 bOverrideMaxLinearHardSnapDistance : 1;
124 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (InlineEditConditionToggle))
125 uint32 bOverrideDefaultLegacyHardsnapInPT : 1;
126 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (InlineEditConditionToggle))
127 uint32 bOverrideCorrectConnectedBodies : 1;
128 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (InlineEditConditionToggle))
129 uint32 bOverrideCorrectConnectedBodiesFriction : 1;
130
131 // Overrides CVar: p.MaxLinearHardSnapDistance -- Hardsnap if distance between current position and extrapolated target position is larger than this value.
132 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (EditCondition = "bOverrideMaxLinearHardSnapDistance"))
133 float MaxLinearHardSnapDistance = 400.0f;
134 float GetMaxLinearHardSnapDistance(float DefaultValue) const { return bOverrideMaxLinearHardSnapDistance ? MaxLinearHardSnapDistance : DefaultValue; }
135
136 // Overrides CVar: p.DefaultReplication.Legacy.HardsnapInPT -- If default replication is used and it's running the legacy flow through Game Thread, allow hardsnapping to be performed on Physics Thread if async physics is enabled.
137 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (EditCondition = "bOverrideDefaultLegacyHardsnapInPT"))
138 bool bHardsnapInPhysicsThread = PhysicsReplicationCVars::DefaultReplicationCVars::bHardsnapLegacyInPT;
139 bool GetHardsnapDefaultLegacyInPT() const { return bOverrideDefaultLegacyHardsnapInPT ? bHardsnapInPhysicsThread : PhysicsReplicationCVars::DefaultReplicationCVars::bHardsnapLegacyInPT; }
140
141 // Overrides CVar: p.DefaultReplication.CorrectConnectedBodies -- When true, transform corrections will also apply to any connected physics object.
142 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (EditCondition = "bOverrideCorrectConnectedBodies"))
143 bool bCorrectConnectedBodies = PhysicsReplicationCVars::DefaultReplicationCVars::bCorrectConnectedBodies;
144 bool GetCorrectConnectedBodies() const { return bOverrideCorrectConnectedBodies ? bCorrectConnectedBodies : PhysicsReplicationCVars::DefaultReplicationCVars::bCorrectConnectedBodies; }
145
146 // Overrides CVar: p.DefaultReplication.CorrectConnectedBodiesFriction -- When true, transform correction on any connected physics object will also recalculate their friction.
147 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (EditCondition = "bOverrideCorrectConnectedBodiesFriction"))
148 bool bCorrectConnectedBodiesFriction = PhysicsReplicationCVars::DefaultReplicationCVars::bCorrectConnectedBodiesFriction;
149 bool GetCorrectConnectedBodiesFriction() const { return bOverrideCorrectConnectedBodiesFriction ? bCorrectConnectedBodiesFriction : PhysicsReplicationCVars::DefaultReplicationCVars::bCorrectConnectedBodiesFriction; }
150};
151
152USTRUCT()
154{
156
158 : bOverridePosCorrectionTimeBase(0)
159 , bOverridePosCorrectionTimeMin(0)
160 , bOverridePosCorrectionTimeMultiplier(0)
161 , bOverrideRotCorrectionTimeBase(0)
162 , bOverrideRotCorrectionTimeMin(0)
163 , bOverrideRotCorrectionTimeMultiplier(0)
164 , bOverridePosInterpolationTimeMultiplier(0)
165 , bOverrideRotInterpolationTimeMultiplier(0)
166 , bOverrideSoftSnapPosStrength(0)
167 , bOverrideSoftSnapRotStrength(0)
168 , bOverrideSoftSnapToSource(0)
169 , bOverrideDisableSoftSnap(0)
170 , bOverrideSkipVelocityRepOnPosEarlyOut(0)
171 , bOverridePostResimWaitForUpdate(0)
172 , bOverrideCorrectConnectedBodies(0)
173 , bOverrideCorrectConnectedBodiesFriction(0)
174 {}
175
176 // Override properties
177 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (InlineEditConditionToggle))
178 uint32 bOverridePosCorrectionTimeBase : 1;
179 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (InlineEditConditionToggle))
180 uint32 bOverridePosCorrectionTimeMin : 1;
181 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (InlineEditConditionToggle))
182 uint32 bOverridePosCorrectionTimeMultiplier : 1;
183 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (InlineEditConditionToggle))
184 uint32 bOverrideRotCorrectionTimeBase : 1;
185 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (InlineEditConditionToggle))
186 uint32 bOverrideRotCorrectionTimeMin : 1;
187 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (InlineEditConditionToggle))
188 uint32 bOverrideRotCorrectionTimeMultiplier : 1;
189 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (InlineEditConditionToggle))
190 uint32 bOverridePosInterpolationTimeMultiplier : 1;
191 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (InlineEditConditionToggle))
192 uint32 bOverrideRotInterpolationTimeMultiplier : 1;
193 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (InlineEditConditionToggle))
194 uint32 bOverrideSoftSnapPosStrength : 1;
195 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (InlineEditConditionToggle))
196 uint32 bOverrideSoftSnapRotStrength : 1;
197 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (InlineEditConditionToggle))
198 uint32 bOverrideSoftSnapToSource : 1;
199 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (InlineEditConditionToggle))
200 uint32 bOverrideDisableSoftSnap : 1;
201 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (InlineEditConditionToggle))
202 uint32 bOverrideSkipVelocityRepOnPosEarlyOut : 1;
203 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (InlineEditConditionToggle))
204 uint32 bOverridePostResimWaitForUpdate : 1;
205 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (InlineEditConditionToggle))
206 uint32 bOverrideCorrectConnectedBodies : 1;
207 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (InlineEditConditionToggle))
208 uint32 bOverrideCorrectConnectedBodiesFriction : 1;
209
210 // Overrides CVar: np2.PredictiveInterpolation.PosCorrectionTimeBase -- Base time to correct positional offset over. RoundTripTime * PosCorrectionTimeMultiplier is added on top of this.
211 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (EditCondition = "bOverridePosCorrectionTimeBase"))
212 float PosCorrectionTimeBase = PhysicsReplicationCVars::PredictiveInterpolationCVars::PosCorrectionTimeBase;
213 float GetPosCorrectionTimeBase() const { return bOverridePosCorrectionTimeBase ? PosCorrectionTimeBase : PhysicsReplicationCVars::PredictiveInterpolationCVars::PosCorrectionTimeBase; }
214
215 // Overrides CVar: np2.PredictiveInterpolation.PosCorrectionTimeMin -- Min time to correct positional offset over. DeltaSeconds is added on top of this.
216 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (EditCondition = "bOverridePosCorrectionTimeMin"))
217 float PosCorrectionTimeMin = PhysicsReplicationCVars::PredictiveInterpolationCVars::PosCorrectionTimeMin;
218 float GetPosCorrectionTimeMin() const { return bOverridePosCorrectionTimeMin ? PosCorrectionTimeMin : PhysicsReplicationCVars::PredictiveInterpolationCVars::PosCorrectionTimeMin; }
219
220 // Overrides CVar: np2.PredictiveInterpolation.PosCorrectionTimeMultiplier -- Multiplier to adjust how much of RoundTripTime to add to positional offset correction.
221 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (EditCondition = "bOverridePosCorrectionTimeMultiplier"))
222 float PosCorrectionTimeMultiplier = PhysicsReplicationCVars::PredictiveInterpolationCVars::PosCorrectionTimeMultiplier;
223 float GetPosCorrectionTimeMultiplier() const { return bOverridePosCorrectionTimeMultiplier ? PosCorrectionTimeMultiplier : PhysicsReplicationCVars::PredictiveInterpolationCVars::PosCorrectionTimeMultiplier; }
224
225 // Overrides CVar: np2.PredictiveInterpolation.RotCorrectionTimeBase -- Base time to correct rotational offset over. RoundTripTime * RotCorrectionTimeMultiplier is added on top of this.
226 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (EditCondition = "bOverrideRotCorrectionTimeBase"))
227 float RotCorrectionTimeBase = PhysicsReplicationCVars::PredictiveInterpolationCVars::RotCorrectionTimeBase;
228 float GetRotCorrectionTimeBase() const { return bOverrideRotCorrectionTimeBase ? RotCorrectionTimeBase : PhysicsReplicationCVars::PredictiveInterpolationCVars::RotCorrectionTimeBase; }
229
230 // Overrides CVar: np2.PredictiveInterpolation.RotCorrectionTimeMin -- Min time to correct rotational offset over. DeltaSeconds is added on top of this.
231 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (EditCondition = "bOverrideRotCorrectionTimeMin"))
232 float RotCorrectionTimeMin = PhysicsReplicationCVars::PredictiveInterpolationCVars::RotCorrectionTimeMin;
233 float GetRotCorrectionTimeMin() const { return bOverrideRotCorrectionTimeMin ? RotCorrectionTimeMin : PhysicsReplicationCVars::PredictiveInterpolationCVars::RotCorrectionTimeMin; }
234
235 // Overrides CVar: np2.PredictiveInterpolation.RotCorrectionTimeMultiplier -- Multiplier to adjust how much of RoundTripTime to add to rotational offset correction.
236 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (EditCondition = "bOverrideRotCorrectionTimeMultiplier"))
237 float RotCorrectionTimeMultiplier = PhysicsReplicationCVars::PredictiveInterpolationCVars::RotCorrectionTimeMultiplier;
238 float GetRotCorrectionTimeMultiplier() const { return bOverrideRotCorrectionTimeMultiplier ? RotCorrectionTimeMultiplier : PhysicsReplicationCVars::PredictiveInterpolationCVars::RotCorrectionTimeMultiplier; }
239
240 // Overrides CVar: np2.PredictiveInterpolation.InterpolationTimeMultiplier -- Multiplier to adjust the interpolation time which is based on the sendrate of state data from the server.
241 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (EditCondition = "bOverridePosInterpolationTimeMultiplier"))
242 float PosInterpolationTimeMultiplier = PhysicsReplicationCVars::PredictiveInterpolationCVars::PosInterpolationTimeMultiplier;
243 float GetPosInterpolationTimeMultiplier() const { return bOverridePosInterpolationTimeMultiplier ? PosInterpolationTimeMultiplier : PhysicsReplicationCVars::PredictiveInterpolationCVars::PosInterpolationTimeMultiplier; }
244
245 // Overrides CVar: np2.PredictiveInterpolation.RotInterpolationTimeMultiplier -- Multiplier to adjust the rotational interpolation time which is based on the sendrate of state data from the server.
246 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (EditCondition = "bOverrideRotInterpolationTimeMultiplier"))
247 float RotInterpolationTimeMultiplier = PhysicsReplicationCVars::PredictiveInterpolationCVars::RotInterpolationTimeMultiplier;
248 float GetRotInterpolationTimeMultiplier() const { return bOverrideRotInterpolationTimeMultiplier ? RotInterpolationTimeMultiplier : PhysicsReplicationCVars::PredictiveInterpolationCVars::RotInterpolationTimeMultiplier; }
249
250 // Overrides CVar: np2.PredictiveInterpolation.SoftSnapPosStrength -- Value in percent between 0.0 - 1.0 representing how much to softsnap each tick of the remaining positional distance.
251 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (EditCondition = "bOverrideSoftSnapPosStrength"))
252 float SoftSnapPosStrength = PhysicsReplicationCVars::PredictiveInterpolationCVars::SoftSnapPosStrength;
253 float GetSoftSnapPosStrength() const { return bOverrideSoftSnapPosStrength ? SoftSnapPosStrength : PhysicsReplicationCVars::PredictiveInterpolationCVars::SoftSnapPosStrength; }
254
255 // Overrides CVar: np2.PredictiveInterpolation.SoftSnapRotStrength -- Value in percent between 0.0 - 1.0 representing how much to softsnap each tick of the remaining rotational distance.
256 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (EditCondition = "bOverrideSoftSnapRotStrength"))
257 float SoftSnapRotStrength = PhysicsReplicationCVars::PredictiveInterpolationCVars::SoftSnapRotStrength;
258 float GetSoftSnapRotStrength() const { return bOverrideSoftSnapRotStrength ? SoftSnapRotStrength : PhysicsReplicationCVars::PredictiveInterpolationCVars::SoftSnapRotStrength; }
259
260 // Overrides CVar: np2.PredictiveInterpolation.SoftSnapToSource -- If true, softsnap will be performed towards the source state of the current target instead of the predicted state of the current target.
261 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (EditCondition = "bOverrideSoftSnapToSource"))
262 bool bSoftSnapToSource = PhysicsReplicationCVars::PredictiveInterpolationCVars::bSoftSnapToSource;
263 bool GetSoftSnapToSource() const { return bOverrideSoftSnapToSource ? bSoftSnapToSource : PhysicsReplicationCVars::PredictiveInterpolationCVars::bSoftSnapToSource; }
264
265 // Overrides CVar: np2.PredictiveInterpolation.DisableSoftSnap -- When true, predictive interpolation will not use softsnap to correct the replication with when velocity fails. Hardsnap will still eventually kick in if replication can't reach the target.
266 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (EditCondition = "bOverrideDisableSoftSnap"))
267 bool bDisableSoftSnap = PhysicsReplicationCVars::PredictiveInterpolationCVars::bDisableSoftSnap;
268 bool GetDisableSoftSnap() const { return bOverrideDisableSoftSnap ? bDisableSoftSnap : PhysicsReplicationCVars::PredictiveInterpolationCVars::bDisableSoftSnap; }
269
270 // Overrides CVar: np2.PredictiveInterpolation.SkipVelocityRepOnPosEarlyOut -- If true, don't run linear velocity replication if position can early out but angular can't early out.
271 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (EditCondition = "bOverrideSkipVelocityRepOnPosEarlyOut"))
272 bool bSkipVelocityRepOnPosEarlyOut = PhysicsReplicationCVars::PredictiveInterpolationCVars::bSkipVelocityRepOnPosEarlyOut;
273 bool GetSkipVelocityRepOnPosEarlyOut() const { return bOverrideSkipVelocityRepOnPosEarlyOut ? bSkipVelocityRepOnPosEarlyOut : PhysicsReplicationCVars::PredictiveInterpolationCVars::bSkipVelocityRepOnPosEarlyOut; }
274
275 // Overrides CVar: np2.PredictiveInterpolation.PostResimWaitForUpdate -- After a resimulation, wait for replicated states that correspond to post-resim state before processing replication again.
276 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (EditCondition = "bOverridePostResimWaitForUpdate"))
277 bool bPostResimWaitForUpdate = PhysicsReplicationCVars::PredictiveInterpolationCVars::bPostResimWaitForUpdate;
278 bool GetPostResimWaitForUpdate() const { return bOverridePostResimWaitForUpdate ? bPostResimWaitForUpdate : PhysicsReplicationCVars::PredictiveInterpolationCVars::bPostResimWaitForUpdate; }
279
280 // Overrides CVar: np2.PredictiveInterpolation.CorrectConnectedBodies -- When true, transform corrections will also apply to any connected physics object.
281 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (EditCondition = "bOverrideCorrectConnectedBodies"))
282 bool bCorrectConnectedBodies = PhysicsReplicationCVars::PredictiveInterpolationCVars::bCorrectConnectedBodies;
283 bool GetCorrectConnectedBodies() const { return bOverrideCorrectConnectedBodies ? bCorrectConnectedBodies : PhysicsReplicationCVars::PredictiveInterpolationCVars::bCorrectConnectedBodies; }
284
285 // Overrides CVar: np2.PredictiveInterpolation.CorrectConnectedBodiesFriction -- When true, transform correction on any connected physics object will also recalculate their friction.
286 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (EditCondition = "bOverrideCorrectConnectedBodiesFriction"))
287 bool bCorrectConnectedBodiesFriction = PhysicsReplicationCVars::PredictiveInterpolationCVars::bCorrectConnectedBodiesFriction;
288 bool GetCorrectConnectedBodiesFriction() const { return bOverrideCorrectConnectedBodiesFriction ? bCorrectConnectedBodiesFriction : PhysicsReplicationCVars::PredictiveInterpolationCVars::bCorrectConnectedBodiesFriction; }
289};
290
291USTRUCT()
293{
295 : bOverrideResimErrorInterpolationSettings(0)
296 , ResimErrorCorrectionDuration(0.3f)
297 , ResimErrorMaximumDistanceBeforeSnapping(250.0f)
298 , ResimErrorMaximumDesyncTimeBeforeSnapping(0.6f)
299 , ResimErrorDirectionalDecayMultiplier(0.0f)
300 , bRenderInterpApplyExponentialDecay(false)
301 , RenderInterpExponentialDecayLinearHalfLife(0.06f)
302 , RenderInterpExponentialDecayAngularHalfLife(0.06f)
303 , RenderInterpMinimumLinearThreshold(0.1f)
304 , RenderInterpMinimumAngularThreshold(0.001f)
305 {};
306
308
309
310 void ApplySettings_External(Chaos::FPhysicsObjectHandle PhysicsObject) const;
311
314 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides")
315 uint32 bOverrideResimErrorInterpolationSettings : 1;
316
318 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (EditCondition = "bOverrideResimErrorInterpolationSettings", ClampMin = "0.0", UIMin = "0.0"))
319 float ResimErrorCorrectionDuration;
320
322 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (EditCondition = "bOverrideResimErrorInterpolationSettings", ClampMin = "0.0", UIMin = "0.0"))
323 float ResimErrorMaximumDistanceBeforeSnapping;
324
327 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (EditCondition = "bOverrideResimErrorInterpolationSettings", ClampMin = "-1.0", UIMin = "-1.0"))
328 float ResimErrorMaximumDesyncTimeBeforeSnapping;
329
331 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (EditCondition = "bOverrideResimErrorInterpolationSettings", ClampMin = "0.0", UIMin = "0.0", ClampMax = "1.0", UIMax = "1.0"))
332 float ResimErrorDirectionalDecayMultiplier;
333
335 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (EditCondition = "bOverrideResimErrorInterpolationSettings"))
336 bool bRenderInterpApplyExponentialDecay;
337
339 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (EditCondition = "bOverrideResimErrorInterpolationSettings", ClampMin = "0.0", UIMin = "0.0"))
340 float RenderInterpExponentialDecayLinearHalfLife;
341
343 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (EditCondition = "bOverrideResimErrorInterpolationSettings", ClampMin = "0.0", UIMin = "0.0"))
344 float RenderInterpExponentialDecayAngularHalfLife;
345
347 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (EditCondition = "bOverrideResimErrorInterpolationSettings", ClampMin = "0.0", UIMin = "0.0"))
348 float RenderInterpMinimumLinearThreshold;
349
351 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (EditCondition = "bOverrideResimErrorInterpolationSettings", ClampMin = "0.0", UIMin = "0.0"))
352 float RenderInterpMinimumAngularThreshold;
353};
354
355USTRUCT()
357{
359 : bOverrideResimulationErrorPositionThreshold(0)
360 , bOverrideResimulationErrorRotationThreshold(0)
361 , bOverrideResimulationErrorLinearVelocityThreshold(0)
362 , bOverrideResimulationErrorAngularVelocityThreshold(0)
363 , bOverrideRuntimeCorrectionEnabled(0)
364 , bOverrideRuntimeVelocityCorrection(0)
365 , bOverrideRuntimeCorrectConnectedBodies(0)
366 , bOverridePosStabilityMultiplier(0)
367 , bOverrideRotStabilityMultiplier(0)
368 , bOverrideVelStabilityMultiplier(0)
369 , bOverrideAngVelStabilityMultiplier(0)
370 , bOverrideResimulationErrorThreshold_DEPRECATED(0)
371 , ResimulationErrorThreshold_DEPRECATED(10)
372 , ResimulationErrorCorrectionSettings()
373 {};
374
376
377 // Override properties
378 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (InlineEditConditionToggle))
379 uint32 bOverrideResimulationErrorPositionThreshold : 1;
380 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (InlineEditConditionToggle))
381 uint32 bOverrideResimulationErrorRotationThreshold : 1;
382 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (InlineEditConditionToggle))
383 uint32 bOverrideResimulationErrorLinearVelocityThreshold : 1;
384 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (InlineEditConditionToggle))
385 uint32 bOverrideResimulationErrorAngularVelocityThreshold : 1;
386 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (InlineEditConditionToggle))
387 uint32 bOverrideRuntimeCorrectionEnabled : 1;
388 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (InlineEditConditionToggle))
389 uint32 bOverrideRuntimeVelocityCorrection : 1;
390 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (InlineEditConditionToggle))
391 uint32 bOverrideRuntimeCorrectConnectedBodies : 1;
392 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (InlineEditConditionToggle))
393 uint32 bOverridePosStabilityMultiplier : 1;
394 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (InlineEditConditionToggle))
395 uint32 bOverrideRotStabilityMultiplier : 1;
396 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (InlineEditConditionToggle))
397 uint32 bOverrideVelStabilityMultiplier : 1;
398 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (InlineEditConditionToggle))
399 uint32 bOverrideAngVelStabilityMultiplier : 1;
400
402 UPROPERTY(config)
403 uint32 bOverrideResimulationErrorThreshold_DEPRECATED : 1;
404
406 UPROPERTY(config)
407 uint32 ResimulationErrorThreshold_DEPRECATED;
408
409 UE_DEPRECATED(5.5, "GetResimulationErrorThreshold has been renamed, please use GetResimulationErrorPositionThreshold.")
410 uint32 GetResimulationErrorThreshold(uint32 DefaultValue) const { return (uint32)FMath::CeilToInt(GetResimulationErrorPositionThreshold(static_cast<float>(DefaultValue))); }
411
412 // Overrides Project Settings -> Physics -> Replication -> Physics Prediction -> Resimulation Error Position Threshold -- Distance that the object is allowed to desync from the server before triggering a resimulation, within this threshold runtime correction can be performed if RuntimeCorrectionEnabled is true.
413 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (EditCondition = "bOverrideResimulationErrorPositionThreshold"))
414 float ResimulationErrorPositionThreshold = 10.0f;
415 float GetResimulationErrorPositionThreshold(float DefaultValue) const { return bOverrideResimulationErrorPositionThreshold ? ResimulationErrorPositionThreshold : DefaultValue; }
416
417 // Overrides Project Settings -> Physics -> Replication -> Physics Prediction -> Resimulation Error Rotation Threshold -- Rotation difference in degrees that the object is allowed to desync from the server before triggering a resimulation, within this threshold runtime correction can be performed if RuntimeCorrectionEnabled is true.
418 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (EditCondition = "bOverrideResimulationErrorRotationThreshold"))
419 float ResimulationErrorRotationThreshold = 4.0f;
420 float GetResimulationErrorRotationThreshold(float DefaultValue) const { return bOverrideResimulationErrorRotationThreshold ? ResimulationErrorRotationThreshold : DefaultValue; }
421
422 // Overrides Project Settings -> Physics -> Replication -> Physics Prediction -> Resimulation Error Linear Velocity Threshold -- Velocity difference in centimeters / second that the object is allowed to desync from the server before triggering a resimulation, within this threshold runtime correction can be performed if RuntimeCorrectionEnabled is true.
423 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (EditCondition = "bOverrideResimulationErrorLinearVelocityThreshold"))
424 float ResimulationErrorLinearVelocityThreshold = 5.0f;
425 float GetResimulationErrorLinearVelocityThreshold(float DefaultValue) const { return bOverrideResimulationErrorLinearVelocityThreshold ? ResimulationErrorLinearVelocityThreshold : DefaultValue; }
426
427 // Overrides Project Settings -> Physics -> Replication -> Physics Prediction -> Resimulation Error Angular Velocity Threshold -- Degrees / second that the object is allowed to desync from the server before triggering a resimulation, within this threshold runtime correction can be performed if RuntimeCorrectionEnabled is true.
428 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (EditCondition = "bOverrideResimulationErrorAngularVelocityThreshold"))
429 float ResimulationErrorAngularVelocityThreshold = 2.0f;
430 float GetResimulationErrorAngularVelocityThreshold(float DefaultValue) const { return bOverrideResimulationErrorAngularVelocityThreshold ? ResimulationErrorAngularVelocityThreshold : DefaultValue; }
431
432 // Overrides CVar: np2.Resim.RuntimeCorrectionEnabled -- Apply positional and rotational runtime corrections while within resim trigger distance.
433 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (EditCondition = "bOverrideRuntimeCorrectionEnabled"))
434 bool bRuntimeCorrectionEnabled = PhysicsReplicationCVars::ResimulationCVars::bRuntimeCorrectionEnabled;
435 bool GetRuntimeCorrectionEnabled() const { return bOverrideRuntimeCorrectionEnabled ? bRuntimeCorrectionEnabled : PhysicsReplicationCVars::ResimulationCVars::bRuntimeCorrectionEnabled; }
436
437 // Overrides CVar: np2.Resim.RuntimeVelocityCorrection -- Apply linear and angular velocity corrections in runtime while within resim trigger distance. Used if RuntimeCorrectionEnabled is true.
438 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (EditCondition = "bOverrideRuntimeVelocityCorrection"))
439 bool bRuntimeVelocityCorrection = PhysicsReplicationCVars::ResimulationCVars::bRuntimeVelocityCorrection;
440 bool GetRuntimeVelocityCorrectionEnabled() const { return bOverrideRuntimeVelocityCorrection ? bRuntimeVelocityCorrection : PhysicsReplicationCVars::ResimulationCVars::bRuntimeVelocityCorrection; }
441
442 // Overrides CVar: np2.Resim.RuntimeCorrectConnectedBodies -- If true runtime position and rotation correction will also shift transform of any connected physics objects. Used if RuntimeCorrectionEnabled is true.
443 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (EditCondition = "bOverrideRuntimeCorrectConnectedBodies"))
444 bool bRuntimeCorrectConnectedBodies = PhysicsReplicationCVars::ResimulationCVars::bRuntimeCorrectConnectedBodies;
445 bool GetRuntimeCorrectConnectedBodies() const { return bOverrideRuntimeCorrectConnectedBodies ? bRuntimeCorrectConnectedBodies : PhysicsReplicationCVars::ResimulationCVars::bRuntimeCorrectConnectedBodies; }
446
447 // Overrides CVar: np2.Resim.PosStabilityMultiplier -- Recommended range between 0.0-1.0. Lower value means more stable positional corrections.
448 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (EditCondition = "bOverridePosStabilityMultiplier"))
449 float PosStabilityMultiplier = PhysicsReplicationCVars::ResimulationCVars::PosStabilityMultiplier;
450 float GetPosStabilityMultiplier() { return bOverridePosStabilityMultiplier ? PosStabilityMultiplier : PhysicsReplicationCVars::ResimulationCVars::PosStabilityMultiplier; }
451
452 // Overrides CVar: np2.Resim.RotStabilityMultiplier -- Recommended range between 0.0-1.0. Lower value means more stable rotational corrections.
453 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (EditCondition = "bOverrideRotStabilityMultiplier"))
454 float RotStabilityMultiplier = PhysicsReplicationCVars::ResimulationCVars::RotStabilityMultiplier;
455 float GetRotStabilityMultiplier() const { return bOverrideRotStabilityMultiplier ? RotStabilityMultiplier : PhysicsReplicationCVars::ResimulationCVars::RotStabilityMultiplier; }
456
457 // Overrides CVar: np2.Resim.VelStabilityMultiplier -- Recommended range between 0.0-1.0. Lower value means more stable linear velocity corrections.
458 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (EditCondition = "bOverrideVelStabilityMultiplier"))
459 float VelStabilityMultiplier = PhysicsReplicationCVars::ResimulationCVars::VelStabilityMultiplier;
460 float GetVelStabilityMultiplier() const { return bOverrideVelStabilityMultiplier ? VelStabilityMultiplier : PhysicsReplicationCVars::ResimulationCVars::VelStabilityMultiplier; }
461
462 // Overrides CVar: np2.Resim.AngVelStabilityMultiplier -- Recommended range between 0.0-1.0. Lower value means more stable angular velocity corrections.
463 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (EditCondition = "bOverrideAngVelStabilityMultiplier"))
464 float AngVelStabilityMultiplier = PhysicsReplicationCVars::ResimulationCVars::AngVelStabilityMultiplier;
465 float GetAngVelStabilityMultiplier() const { return bOverrideAngVelStabilityMultiplier ? AngVelStabilityMultiplier : PhysicsReplicationCVars::ResimulationCVars::AngVelStabilityMultiplier; }
466
467 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", meta = (DisplayName = "Post-Resimulation Error Correction Render Interpolation Settings"))
468 FNetworkPhysicsSettingsResimulationErrorCorrection ResimulationErrorCorrectionSettings;
469};
470
471USTRUCT()
473{
475 : bOverrideRedundantInputs(0)
476 , bOverrideRedundantRemoteInputs(0)
477 , bOverrideRedundantStates(0)
478 , bOverrideCompareStateToTriggerRewind(0)
479 , bOverridebCompareStateToTriggerRewindIncludeSimProxies(0)
480 , bOverrideCompareInputToTriggerRewind(0)
481 , bOverrideEnableUnreliableFlow(0)
482 , bOverrideEnableReliableFlow(0)
483 , bOverrideApplyDataInsteadOfMergeData(0)
484 , bOverrideAllowInputExtrapolation(0)
485 , bOverrideValidateDataOnGameThread(0)
486 , bOverrideApplySimProxyStateAtRuntime(0)
487 , bOverrideApplySimProxyInputAtRuntime(0)
488 , bOverrideTriggerResimOnInputReceive(0)
489 , bOverrideApplyInputDecayOverSetTime(0)
490 , bOverrideInputDecaySetTime(0)
491 {};
492
494
496 {
497 if (InputDecayCurve.EditorCurveData.GetNumKeys() == 0)
498 {
499 InputDecayCurve.GetRichCurve()->AddKey(0.0f, 0.0f);
500 InputDecayCurve.GetRichCurve()->AddKey(0.5f, 1.0f);
501 InputDecayCurve.GetRichCurve()->AddKey(1.0f, 1.0f);
502 }
503 }
504
505 // Override properties
506 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (InlineEditConditionToggle))
507 uint32 bOverrideRedundantInputs : 1;
508 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (InlineEditConditionToggle))
509 uint32 bOverrideRedundantRemoteInputs : 1;
510 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (InlineEditConditionToggle))
511 uint32 bOverrideRedundantStates : 1;
512 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (InlineEditConditionToggle))
513 uint32 bOverrideCompareStateToTriggerRewind : 1;
514 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (InlineEditConditionToggle))
515 uint32 bOverridebCompareStateToTriggerRewindIncludeSimProxies : 1;
516 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (InlineEditConditionToggle))
517 uint32 bOverrideCompareInputToTriggerRewind : 1;
518 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (InlineEditConditionToggle))
519 uint32 bOverrideEnableUnreliableFlow : 1;
520 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (InlineEditConditionToggle))
521 uint32 bOverrideEnableReliableFlow : 1;
522 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (InlineEditConditionToggle))
523 uint32 bOverrideApplyDataInsteadOfMergeData : 1;
524 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (InlineEditConditionToggle))
525 uint32 bOverrideAllowInputExtrapolation : 1;
526 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (InlineEditConditionToggle))
527 uint32 bOverrideValidateDataOnGameThread : 1;
528 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (InlineEditConditionToggle))
529 uint32 bOverrideApplySimProxyStateAtRuntime : 1;
530 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (InlineEditConditionToggle))
531 uint32 bOverrideApplySimProxyInputAtRuntime : 1;
532 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (InlineEditConditionToggle))
533 uint32 bOverrideTriggerResimOnInputReceive : 1;
534 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (InlineEditConditionToggle))
535 uint32 bOverrideApplyInputDecayOverSetTime : 1;
536 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (InlineEditConditionToggle))
537 uint32 bOverrideInputDecaySetTime : 1;
538
539 /* Overrides CVar : np2.Resim.RedundantInputs -- How many extra inputs to send with each unreliable network message, to account for packetloss.From owning client to server and server to owning client.
540 * NOTE: This is disabled while np2.Resim.DynamicInputScaling.Enabled is enabled. */
541 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (EditCondition = "bOverrideRedundantInputs"))
542 uint16 RedundantInputs = (uint16)PhysicsReplicationCVars::ResimulationCVars::RedundantInputs;
543 const uint16 GetRedundantInputs() const { return bOverrideRedundantInputs ? RedundantInputs : (uint16)PhysicsReplicationCVars::ResimulationCVars::RedundantInputs; }
544
545 // Overrides CVar: np2.Resim.RedundantRemoteInputs -- How many extra inputs to send with each unreliable network message, to account for packetloss. From Server to remote clients.
546 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (EditCondition = "bOverrideRedundantRemoteInputs"))
547 uint16 RedundantRemoteInputs = (uint16)PhysicsReplicationCVars::ResimulationCVars::RedundantRemoteInputs;
548 const uint16 GetRedundantRemoteInputs() const { return bOverrideRedundantRemoteInputs ? RedundantRemoteInputs : (uint16)PhysicsReplicationCVars::ResimulationCVars::RedundantRemoteInputs; }
549
550 // Overrides CVar: np2.Resim.RedundantStates -- How many extra states to send with each unreliable network message, to account for packetloss. From Server to remote clients.
551 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (EditCondition = "bOverrideRedundantStates"))
552 uint16 RedundantStates = (uint16)PhysicsReplicationCVars::ResimulationCVars::RedundantStates;
553 const uint16 GetRedundantStates() const { return bOverrideRedundantStates ? RedundantStates : (uint16)PhysicsReplicationCVars::ResimulationCVars::RedundantStates; }
554
555 // Overrides CVar: np2.Resim.CompareStateToTriggerRewind -- When true, cache local FNetworkPhysicsData state in rewind history and compare the predicted state with incoming server state to trigger resimulations if they differ, comparison done through FNetworkPhysicsData::CompareData.
556 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (EditCondition = "bOverrideCompareStateToTriggerRewind"))
557 bool bCompareStateToTriggerRewind = PhysicsReplicationCVars::ResimulationCVars::bCompareStateToTriggerRewind;
558 const bool GetCompareStateToTriggerRewind(const bool bDefaultValue) const { return bOverrideCompareStateToTriggerRewind ? bCompareStateToTriggerRewind : bDefaultValue; }
559 UE_DEPRECATED(5.5, "Deprecated, use GetCompareStateToTriggerRewind(const bool bDefaultValue) instead and pass in the value that should apply if not overridden.")
560 const bool GetCompareStateToTriggerRewind() const { return bOverrideCompareStateToTriggerRewind ? bCompareStateToTriggerRewind : PhysicsReplicationCVars::ResimulationCVars::bCompareStateToTriggerRewind; }
561
562 // Overrides CVar: np2.Resim.CompareStateToTriggerRewind.IncludeSimProxies -- When true, include simulated proxies when np2.Resim.CompareStateToTriggerRewind is enabled.
563 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (EditCondition = "bOverridebCompareStateToTriggerRewindIncludeSimProxies"))
564 bool bCompareStateToTriggerRewindIncludeSimProxies = PhysicsReplicationCVars::ResimulationCVars::bCompareStateToTriggerRewindIncludeSimProxies;
565 const bool GetCompareStateToTriggerRewindIncludeSimProxies(const bool bDefaultValue) const { return bOverridebCompareStateToTriggerRewindIncludeSimProxies ? bCompareStateToTriggerRewindIncludeSimProxies : bDefaultValue; }
566
567 // Overrides CVar: np2.Resim.CompareInputToTriggerRewind -- When true, compare local predicted FNetworkPhysicsData input with incoming server input to trigger resimulations if they differ, comparison done through FNetworkPhysicsData::CompareData.
568 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (EditCondition = "bOverrideCompareInputToTriggerRewind"))
569 bool bCompareInputToTriggerRewind = PhysicsReplicationCVars::ResimulationCVars::bCompareInputToTriggerRewind;
570 const bool GetCompareInputToTriggerRewind(const bool bDefaultValue) const { return bOverrideCompareInputToTriggerRewind ? bCompareInputToTriggerRewind : bDefaultValue; }
571 UE_DEPRECATED(5.5, "Deprecated, use GetCompareInputToTriggerRewind(const bool bDefaultValue) instead and pass in the value that should apply if not overridden.")
572 const bool GetCompareInputToTriggerRewind() const { return bOverrideCompareInputToTriggerRewind ? bCompareInputToTriggerRewind : PhysicsReplicationCVars::ResimulationCVars::bCompareInputToTriggerRewind; }
573
574 // Overrides CVar: np2.Resim.EnableUnreliableFlow -- When true, allow data to be sent unreliably. Also sends FNetworkPhysicsData not marked with FNetworkPhysicsData::bimportant unreliably over the network.
575 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (EditCondition = "bOverrideEnableUnreliableFlow"))
576 bool bEnableUnreliableFlow = PhysicsReplicationCVars::ResimulationCVars::bEnableUnreliableFlow;
577 const bool GetEnableUnreliableFlow() const { return bOverrideEnableUnreliableFlow ? bEnableUnreliableFlow : PhysicsReplicationCVars::ResimulationCVars::bEnableUnreliableFlow; }
578
579 // Overrides CVar: np2.Resim.EnableReliableFlow -- EXPERIMENTAL -- When true, allow data to be sent reliably. Also send FNetworkPhysicsData marked with FNetworkPhysicsData::bimportant reliably over the network.
580 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (EditCondition = "bOverrideEnableReliableFlow"))
581 bool bEnableReliableFlow = PhysicsReplicationCVars::ResimulationCVars::bEnableReliableFlow;
582 const bool GetEnableReliableFlow() const { return bOverrideEnableReliableFlow ? bEnableReliableFlow : PhysicsReplicationCVars::ResimulationCVars::bEnableReliableFlow; }
583
584 // Overrides CVar: np2.Resim.ApplyDataInsteadOfMergeData -- When true, call ApplyData for each data instead of MergeData when having to use multiple data entries in one frame.
585 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (EditCondition = "bOverrideApplyDataInsteadOfMergeData"))
586 bool bApplyDataInsteadOfMergeData = PhysicsReplicationCVars::ResimulationCVars::bApplyDataInsteadOfMergeData;
587 const bool GetApplyDataInsteadOfMergeData() const { return bOverrideApplyDataInsteadOfMergeData ? bApplyDataInsteadOfMergeData : PhysicsReplicationCVars::ResimulationCVars::bApplyDataInsteadOfMergeData; }
588
589 // Overrides CVar: np2.Resim.AllowInputExtrapolation -- When true and not locally controlled, allow inputs to be extrapolated from last known and if there is a gap allow interpolation between two known inputs.
590 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (EditCondition = "bOverrideAllowInputExtrapolation"))
591 bool bAllowInputExtrapolation = PhysicsReplicationCVars::ResimulationCVars::bAllowInputExtrapolation;
592 const bool GetAllowInputExtrapolation() const { return bOverrideAllowInputExtrapolation ? bAllowInputExtrapolation : PhysicsReplicationCVars::ResimulationCVars::bAllowInputExtrapolation; }
593
594 // Overrides CVar: np2.Resim.ValidateDataOnGameThread -- When true, perform server-side input validation through FNetworkPhysicsData::ValidateData on the Game Thread. If false, perform the call on the Physics Thread.
595 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (EditCondition = "bOverrideValidateDataOnGameThread"))
596 bool bValidateDataOnGameThread = PhysicsReplicationCVars::ResimulationCVars::bValidateDataOnGameThread;
597 const bool GetValidateDataOnGameThread() const { return bOverrideValidateDataOnGameThread ? bValidateDataOnGameThread : PhysicsReplicationCVars::ResimulationCVars::bValidateDataOnGameThread; }
598
599 // Overrides CVar: np2.Resim.ApplySimProxyStateAtRuntime -- When true, call ApplyData on received states for simulated proxies at runtime.
600 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (EditCondition = "bOverrideApplySimProxyStateAtRuntime"))
601 bool bApplySimProxyStateAtRuntime = PhysicsReplicationCVars::ResimulationCVars::bApplySimProxyStateAtRuntime;
602 const bool GetApplySimProxyStateAtRuntime() const { return bOverrideApplySimProxyStateAtRuntime ? bApplySimProxyStateAtRuntime : PhysicsReplicationCVars::ResimulationCVars::bApplySimProxyStateAtRuntime; }
603
604 // Overrides CVar: np2.Resim.ApplySimProxyInputAtRuntime -- When true, call ApplyData on received inputs for simulated proxies at runtime.
605 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (EditCondition = "bOverrideApplySimProxyInputAtRuntime"))
606 bool bApplySimProxyInputAtRuntime = PhysicsReplicationCVars::ResimulationCVars::bApplySimProxyInputAtRuntime;
607 const bool GetApplySimProxyInputAtRuntime() const { return bOverrideApplySimProxyInputAtRuntime ? bApplySimProxyInputAtRuntime : PhysicsReplicationCVars::ResimulationCVars::bApplySimProxyInputAtRuntime; }
608
609 // Overrides CVar: np2.Resim.TriggerResimOnInputReceive -- When true, a resimulation will be requested to the frame of the latest frame of received inputs this frame
610 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (EditCondition = "bOverrideTriggerResimOnInputReceive"))
611 bool bTriggerResimOnInputReceive = PhysicsReplicationCVars::ResimulationCVars::bTriggerResimOnInputReceive;
612 const bool GetTriggerResimOnInputReceive() const { return bOverrideTriggerResimOnInputReceive ? bTriggerResimOnInputReceive : PhysicsReplicationCVars::ResimulationCVars::bTriggerResimOnInputReceive; }
613
614 // Overrides CVar: np2.Resim.ApplyInputDecayOverSetTime -- When true, apply the Input Decay Curve over a set amount of time instead of over the start of input prediction and end of resim which is variable each resimulation
615 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (EditCondition = "bOverrideApplyInputDecayOverSetTime"))
616 bool bApplyInputDecayOverSetTime = PhysicsReplicationCVars::ResimulationCVars::bApplyInputDecayOverSetTime;
617 const bool GetApplyInputDecayOverSetTime() const { return bOverrideApplyInputDecayOverSetTime ? bApplyInputDecayOverSetTime : PhysicsReplicationCVars::ResimulationCVars::bApplyInputDecayOverSetTime; }
618
619 // Overrides CVar: np2.Resim.InputDecaySetTime -- Applied when np2.Resim.ApplyInputDecayOverSetTime is true, read there for more info. Set time to apply Input Decay Curve over while predicting inputs during resimulation
620 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (EditCondition = "bOverrideInputDecaySetTime"))
621 float InputDecaySetTime = PhysicsReplicationCVars::ResimulationCVars::InputDecaySetTime;
622 const float GetInputDecaySetTime() const { return bOverrideInputDecaySetTime ? InputDecaySetTime : PhysicsReplicationCVars::ResimulationCVars::InputDecaySetTime; }
623
624 /* Curve for input decay during resimulation if input is being reused.
625 * XAxis = Alpha value from 0.0 to 1.0 where 0 is the start of reusing input and 1 is the last time we will reuse the input this resimulation.
626 * YAxis = The Input Decay value from 0.0 to 1.0 (as a percentage where 1.0 = 100% decay) for the given Alpha. */
627 UPROPERTY(config, EditDefaultsOnly, Category = "Overrides", Meta = (XAxisName="LerpAlpha", YAxisName="DecayValue"))
628 FRuntimeFloatCurve InputDecayCurve;
629 const FRuntimeFloatCurve& GetInputDecayCurve() const { return InputDecayCurve; }
630};
631
632/*
633USTRUCT()
634struct FNetworkPhysicsSettingsRewindData
635{
636 GENERATED_BODY()
637};
638
639USTRUCT()
640struct FNetworkPhysicsSettingsRenderInterpolation
641{
642 GENERATED_BODY()
643};
644*/
645
646USTRUCT()
648{
650
651 UPROPERTY(EditDefaultsOnly, Category = "Networked Physics Settings")
652 FNetworkPhysicsSettings GeneralSettings;
653
654 UPROPERTY(EditDefaultsOnly, Category = "Networked Physics Settings")
656
657 UPROPERTY(EditDefaultsOnly, Category = "Networked Physics Settings")
658 FNetworkPhysicsSettingsPredictiveInterpolation PredictiveInterpolationSettings;
659
660 UPROPERTY(EditDefaultsOnly, Category = "Networked Physics Settings")
662
663 UPROPERTY(EditDefaultsOnly, Category = "Networked Physics Settings")
664 FNetworkPhysicsSettingsNetworkPhysicsComponent NetworkPhysicsComponentSettings;
665 /*
666 UPROPERTY(EditDefaultsOnly, Category = "Networked Physics Settings")
667 FNetworkPhysicsSettingsRewindData RewindSettings;
668
669 UPROPERTY(EditDefaultsOnly, Category = "Networked Physics Settings")
670 FNetworkPhysicsSettingsRenderInterpolation RenderInterpolationSettings;
671 */
672};
673
674UCLASS(BlueprintType)
676{
678
679 virtual void PostInitProperties() override
680 {
681 Super::PostInitProperties();
682 if (!HasAnyFlags(RF_ClassDefaultObject))
683 {
684 Settings.NetworkPhysicsComponentSettings.Initialize();
685 }
686 }
687
688public:
689
691 {
692 if (bInitialized)
693 {
694 return;
695 }
696
697 Settings_Internal = MakeShared<FNetworkPhysicsSettingsData>(Settings);
698
699 bInitialized = true;
700 }
701
703 {
704 bInitialized = false;
705 }
706
708 const FNetworkPhysicsSettingsData& GetSettings_External() const { return Settings; }
709
711 TWeakPtr<const FNetworkPhysicsSettingsData> GetSettings_Internal() const { return Settings_Internal.ToWeakPtr(); }
712
713private:
714 bool bInitialized = false;
715
717 // Network Physics Settings
718 UPROPERTY(EditDefaultsOnly, Category = "Networked Physics Settings")
720
722 TSharedPtr<FNetworkPhysicsSettingsData> Settings_Internal = nullptr;
723};
724
727UCLASS(BlueprintType, MinimalAPI, meta = (BlueprintSpawnableComponent))
729{
731
732public:
737
738 virtual void OnRegister() override;
739 virtual void OnUnregister() override;
740 virtual void InitializeComponent() override;
741 virtual void UninitializeComponent() override;
742
743 virtual void BeginPlay() override;
744
746 FNetworkPhysicsSettingsComponentAsync* GetNetworkPhysicsSettings_Internal() const { return NetworkPhysicsSettings_Internal; };
747
748private:
749 UFUNCTION()
750 void OnComponentPhysicsStateChanged(UPrimitiveComponent* ChangedComponent, EComponentPhysicsStateChange StateChange);
751
753 void RegisterInPhysicsReplicationLOD();
754
755public:
757 const FNetworkPhysicsSettingsData& GetSettings() const { return SettingsDataAsset ? SettingsDataAsset->GetSettings_External() : SettingsNetworkPhysicsData_Default; }
758
760 TWeakPtr<const FNetworkPhysicsSettingsData> GetSettings_Internal() const { return SettingsDataAsset ? SettingsDataAsset->GetSettings_Internal() : nullptr; }
761
762 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Networked Physics Settings")
764
765// Deprecated properties
766#if WITH_EDITORONLY_DATA
767 UE_DEPRECATED(5.7, "FNetworkPhysicsSettings GeneralSettings has been deprecated, create a DataAsset of UNetworkPhysicsSettingsDataAsset type and reference that in the UNetworkPhysicsSettingsComponent instead.")
768 UPROPERTY(meta = (DeprecatedProperty, DeprecationMessage = "Deprecated, create a DataAsset of UNetworkPhysicsSettingsDataAsset type and reference that in the UNetworkPhysicsSettingsComponent instead"))
769 FNetworkPhysicsSettings GeneralSettings;
770
771 UE_DEPRECATED(5.7, "FNetworkPhysicsSettingsDefaultReplication DefaultReplicationSettings has been deprecated, create a DataAsset of UNetworkPhysicsSettingsDataAsset type and reference that in the UNetworkPhysicsSettingsComponent instead.")
772 UPROPERTY(meta = (DeprecatedProperty, DeprecationMessage = "Deprecated, create a DataAsset of UNetworkPhysicsSettingsDataAsset type and reference that in the UNetworkPhysicsSettingsComponent instead"))
773 FNetworkPhysicsSettingsDefaultReplication DefaultReplicationSettings;
774
775 UE_DEPRECATED(5.7, "FNetworkPhysicsSettingsPredictiveInterpolation PredictiveInterpolationSettings has been deprecated, create a DataAsset of UNetworkPhysicsSettingsDataAsset type and reference that in the UNetworkPhysicsSettingsComponent instead.")
776 UPROPERTY(meta = (DeprecatedProperty, DeprecationMessage = "Deprecated, create a DataAsset of UNetworkPhysicsSettingsDataAsset type and reference that in the UNetworkPhysicsSettingsComponent instead"))
777 FNetworkPhysicsSettingsPredictiveInterpolation PredictiveInterpolationSettings;
778
779 UE_DEPRECATED(5.7, "FNetworkPhysicsSettingsResimulation ResimulationSettings has been deprecated, create a DataAsset of UNetworkPhysicsSettingsDataAsset type and reference that in the UNetworkPhysicsSettingsComponent instead.")
780 UPROPERTY(meta = (DeprecatedProperty, DeprecationMessage = "Deprecated, create a DataAsset of UNetworkPhysicsSettingsDataAsset type and reference that in the UNetworkPhysicsSettingsComponent instead"))
781 FNetworkPhysicsSettingsResimulation ResimulationSettings;
782
783 UE_DEPRECATED(5.7, "FNetworkPhysicsSettingsNetworkPhysicsComponent NetworkPhysicsComponentSettings has been deprecated, create a DataAsset of UNetworkPhysicsSettingsDataAsset type and reference that in the UNetworkPhysicsSettingsComponent instead.")
784 UPROPERTY(meta = (DeprecatedProperty, DeprecationMessage = "Deprecated, create a DataAsset of UNetworkPhysicsSettingsDataAsset type and reference that in the UNetworkPhysicsSettingsComponent instead"))
785 FNetworkPhysicsSettingsNetworkPhysicsComponent NetworkPhysicsComponentSettings;
786#endif
787
788private:
789 FNetworkPhysicsSettingsComponentAsync* NetworkPhysicsSettings_Internal;
790 ENGINE_API static const FNetworkPhysicsSettingsData SettingsNetworkPhysicsData_Default;
791
792 /* --- Static API --- */
793private:
794 // Game Thread map of settings component per actor
795 static TMap<AActor*, UNetworkPhysicsSettingsComponent*> ObjectToSettings_External;
796
797public:
799 static UNetworkPhysicsSettingsComponent* GetSettingsForActor(AActor* Owner);
800};
801
802
803
804
805
806
807#pragma region // FNetworkPhysicsSettingsComponentAsync
808
817
835
836class FNetworkPhysicsSettingsComponentAsync : public Chaos::TSimCallbackObject<FNetworkPhysicsSettingsAsyncInput, Chaos::FSimCallbackNoOutput, Chaos::ESimCallbackOptions::Presimulate>
837{
838public:
843
844 virtual void OnPreSimulate_Internal() override;
845
846private:
847 void ConsumeAsyncInput();
848 void RegisterSettingsInPhysicsReplication();
849
850public:
852
853 UE_DEPRECATED(5.7, "Deprecated, use Settings_Internal instead")
855
856private:
857 Chaos::FConstPhysicsObjectHandle PhysicsObject;
858};
859
860#pragma endregion // FNetworkPhysicsSettingsComponentAsync
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
#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
#define PRAGMA_ENABLE_DEPRECATION_WARNINGS
Definition GenericPlatformCompilerPreSetup.h:12
#define PRAGMA_DISABLE_DEPRECATION_WARNINGS
Definition GenericPlatformCompilerPreSetup.h:8
@ General
Definition MaterialExpressionFunctionInput.h:41
const bool
Definition NetworkReplayStreaming.h:178
#define UPROPERTY(...)
UObject definition macros.
Definition ObjectMacros.h:744
#define GENERATED_BODY(...)
Definition ObjectMacros.h:765
#define UFUNCTION(...)
Definition ObjectMacros.h:745
@ RF_ClassDefaultObject
This object is used as the default template for all instances of a class. One object is created for e...
Definition ObjectMacros.h:563
#define UCLASS(...)
Definition ObjectMacros.h:776
#define USTRUCT(...)
Definition ObjectMacros.h:746
EComponentPhysicsStateChange
Definition PrimitiveComponent.h:220
USkinnedMeshComponent float
Definition SkinnedMeshComponent.h:60
uint16_t uint16
Definition binka_ue_file_header.h:7
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition Actor.h:257
Definition SimCallbackObject.h:521
Definition NetworkPhysicsSettingsComponent.h:837
PRAGMA_DISABLE_DEPRECATION_WARNINGS FNetworkPhysicsSettingsComponentAsync()
Definition NetworkPhysicsSettingsComponent.cpp:305
virtual PRAGMA_ENABLE_DEPRECATION_WARNINGS void OnPreSimulate_Internal() override
Definition NetworkPhysicsSettingsComponent.cpp:310
~FNetworkPhysicsSettingsComponentAsync()
Definition NetworkPhysicsSettingsComponent.h:841
TSharedPtr< const FNetworkPhysicsSettingsData > Settings_Internal
Definition NetworkPhysicsSettingsComponent.h:851
FNetworkPhysicsSettingsAsync Settings
Definition NetworkPhysicsSettingsComponent.h:854
Definition UnrealType.h:3087
Definition UnrealString.h.inl:34
Definition SharedPointer.h:692
Definition SharedPointer.h:1295
Definition ActorComponent.h:152
Definition DataAsset.h:21
Definition NetworkPhysicsSettingsComponent.h:729
~UNetworkPhysicsSettingsComponent()
Definition NetworkPhysicsSettingsComponent.h:735
FNetworkPhysicsSettingsComponentAsync * GetNetworkPhysicsSettings_Internal() const
Definition NetworkPhysicsSettingsComponent.h:746
TWeakPtr< const FNetworkPhysicsSettingsData > GetSettings_Internal() const
Definition NetworkPhysicsSettingsComponent.h:760
Definition NetworkPhysicsSettingsComponent.h:676
void MarkUninitialized()
Definition NetworkPhysicsSettingsComponent.h:702
void InitializeInternalSettings()
Definition NetworkPhysicsSettingsComponent.h:690
const FNetworkPhysicsSettingsData & GetSettings_External() const
Definition NetworkPhysicsSettingsComponent.h:708
TWeakPtr< const FNetworkPhysicsSettingsData > GetSettings_Internal() const
Definition NetworkPhysicsSettingsComponent.h:711
Definition SkeletalMeshComponent.h:307
bool bCorrectConnectedBodiesFriction
Definition PhysicsReplication.cpp:115
bool bCorrectConnectedBodies
Definition PhysicsReplication.cpp:112
bool bHardsnapLegacyInPT
Definition PhysicsReplication.cpp:109
bool bCorrectConnectedBodies
Definition PhysicsReplication.cpp:237
float PosCorrectionTimeBase
Definition PhysicsReplication.cpp:156
float RotCorrectionTimeMultiplier
Definition PhysicsReplication.cpp:171
bool bDisableSoftSnap
Definition PhysicsReplication.cpp:252
bool bSkipVelocityRepOnPosEarlyOut
Definition PhysicsReplication.cpp:225
bool bCorrectConnectedBodiesFriction
Definition PhysicsReplication.cpp:240
float PosInterpolationTimeMultiplier
Definition PhysicsReplication.cpp:174
float SoftSnapPosStrength
Definition PhysicsReplication.cpp:207
float PosCorrectionTimeMin
Definition PhysicsReplication.cpp:159
float RotCorrectionTimeBase
Definition PhysicsReplication.cpp:165
float PosCorrectionTimeMultiplier
Definition PhysicsReplication.cpp:162
float RotCorrectionTimeMin
Definition PhysicsReplication.cpp:168
bool bPostResimWaitForUpdate
Definition PhysicsReplication.cpp:228
float SoftSnapRotStrength
Definition PhysicsReplication.cpp:210
float RotInterpolationTimeMultiplier
Definition PhysicsReplication.cpp:177
bool bSoftSnapToSource
Definition PhysicsReplication.cpp:213
bool bCompareStateToTriggerRewind
Definition NetworkPhysicsComponent.cpp:47
bool bEnableUnreliableFlow
Definition NetworkPhysicsComponent.cpp:53
bool bRuntimeCorrectConnectedBodies
Definition PhysicsReplication.cpp:129
float VelStabilityMultiplier
Definition PhysicsReplication.cpp:141
bool bApplySimProxyStateAtRuntime
Definition NetworkPhysicsComponent.cpp:63
float InputDecaySetTime
Definition NetworkPhysicsComponent.cpp:72
bool bRuntimeCorrectionEnabled
Definition PhysicsReplication.cpp:123
bool bApplyInputDecayOverSetTime
Definition NetworkPhysicsComponent.cpp:70
int32 RedundantRemoteInputs
Definition NetworkPhysicsComponent.cpp:25
float AngVelStabilityMultiplier
Definition PhysicsReplication.cpp:144
bool bAllowInputExtrapolation
Definition NetworkPhysicsComponent.cpp:59
bool bCompareStateToTriggerRewindIncludeSimProxies
Definition NetworkPhysicsComponent.cpp:49
bool bValidateDataOnGameThread
Definition NetworkPhysicsComponent.cpp:61
float RotStabilityMultiplier
Definition PhysicsReplication.cpp:138
int32 RedundantStates
Definition NetworkPhysicsComponent.cpp:27
bool bApplySimProxyInputAtRuntime
Definition NetworkPhysicsComponent.cpp:65
float PosStabilityMultiplier
Definition PhysicsReplication.cpp:135
bool bRuntimeVelocityCorrection
Definition PhysicsReplication.cpp:126
bool bApplyDataInsteadOfMergeData
Definition NetworkPhysicsComponent.cpp:57
int32 RedundantInputs
Definition NetworkPhysicsComponent.cpp:23
bool bCompareInputToTriggerRewind
Definition NetworkPhysicsComponent.cpp:51
bool bEnableReliableFlow
Definition NetworkPhysicsComponent.cpp:55
bool bTriggerResimOnInputReceive
Definition NetworkPhysicsComponent.cpp:67
Definition PrimitiveComponent.cpp:150
@ false
Definition radaudio_common.h:23
Definition SimCallbackInput.h:34
Definition NetworkPhysicsSettingsComponent.h:819
TOptional< FNetworkPhysicsSettingsAsync > Settings
Definition NetworkPhysicsSettingsComponent.h:824
TOptional< Chaos::FConstPhysicsObjectHandle > PhysicsObject
Definition NetworkPhysicsSettingsComponent.h:820
TOptional< TWeakPtr< const FNetworkPhysicsSettingsData > > Settings_Internal
Definition NetworkPhysicsSettingsComponent.h:821
void Reset()
Definition NetworkPhysicsSettingsComponent.h:826
Definition NetworkPhysicsSettingsComponent.h:810
FNetworkPhysicsSettings GeneralSettings
Definition NetworkPhysicsSettingsComponent.h:811
FNetworkPhysicsSettingsDefaultReplication DefaultReplicationSettings
Definition NetworkPhysicsSettingsComponent.h:812
FNetworkPhysicsSettingsPredictiveInterpolation PredictiveInterpolationSettings
Definition NetworkPhysicsSettingsComponent.h:813
FNetworkPhysicsSettingsResimulation ResimulationSettings
Definition NetworkPhysicsSettingsComponent.h:814
FNetworkPhysicsSettingsNetworkPhysicsComponent NetworkPhysicsComponentSettings
Definition NetworkPhysicsSettingsComponent.h:815
Definition NetworkPhysicsSettingsComponent.h:648
Definition NetworkPhysicsSettingsComponent.h:111
Definition NetworkPhysicsSettingsComponent.h:473
FNetworkPhysicsSettingsNetworkPhysicsComponent()
Definition NetworkPhysicsSettingsComponent.h:474
Definition NetworkPhysicsSettingsComponent.h:154
Definition NetworkPhysicsSettingsComponent.h:293
FNetworkPhysicsSettingsResimulationErrorCorrection()
Definition NetworkPhysicsSettingsComponent.h:294
Definition NetworkPhysicsSettingsComponent.h:357
FNetworkPhysicsSettingsResimulation()
Definition NetworkPhysicsSettingsComponent.h:358
Definition NetworkPhysicsSettingsComponent.h:86
Definition CurveFloat.h:13
Definition ObjectPtr.h:488
Definition Optional.h:131
void Reset()
Definition Optional.h:306