Skip to content

Common Rigid Body Sleep Problems [UE5]

If you are having some problems where your angular velocity gets stuck between small decimal values and zero (creeping or stuttering) you most likely have a rigid body sleep problem.

Typical Problems of Sleep System in Unreal Engine:

  • Object is still but it keeps bouncing or swinging
  • Object has micro stutters
  • Angular Velocity is creeping or stuttering
  • Linear Velocity is creeping or stuttering

If you disable gravity or your rigid body actor becomes still after movement stops Chaos Physics puts rigid body to sleep if there are no other sources of Forces that peaks past sleep threshold parameters.

Scenario:

  • Some type of test actor or rocket that just floats
  • Test actor can be made for Angular Forces (RCS Thrusters, Helicopter, Plane)
  • Gravity Off
  • No other gravity implementations
  • No Linear Force
  • Actor is Floating

Without continuous gravity (using Unrealโ€™s standard static/zero-g setup), Chaos attempts to optimize CPU usage by putting slow-moving bodies into a “sleeping” state. When a physics body reaches low angular speeds, its kinetic energy drops below Chaos’s default sleep threshold, causing the physics engine to freeze angular updatesโ€”leading directly to 0.x deg/s stuttering behavior.

You can change sleep family in constructor:

MeshComponent->SetSleepFamily(ESleepFamily::Sensitive);

// Or Custom
MeshComponent->BodyInstance.SleepFamily = ESleepFamily::Custom;
MeshComponent->BodyInstance.CustomSleepThresholdMultiplier = 0.0;

Setting Sleep Family to Sensitive also kills swinging and stabilizes objects that are still after movement or player input has ended.

Why “Sensitive” Stops Swinging

When a heavy object (like a 10-ton rocket) rests on a static collision surface in Chaos Physics:

  1. Micro-Penetrations: Gravity constantly pulls the rocket down, pushing its collision mesh a fraction of a millimeter into the landing platform’s collision surface.
  2. Over-Correction Loop: In default sleep modes, Chaos calculates a massive normal force to pop the rocket back out. If the physics body is on the verge of falling asleep, these corrections happen irregularlyโ€”creating a feedback loop where the solver “kicks” the base of the rocket, causing top-heavy swinging.
  3. Continuous Solver Integration: Switching to Sensitive Sleep Family forces Chaos to continuously process micro-contacts at a high sub-step resolution rather than aggressively freezing and waking the contact points. Instead of violent over-corrections, the contact forces damp out smoothly until the rocket rests dead still.

Performance

If the physical body is not moving or the desired movement is idle or completely still, then the body should be sleeping.

Pawn body should be sleeping if the player is not possessing it.

If something is far away from the camera then the body should use normal sleep family.

Only Hero Assets should be allowed to use Sensitive or Custom Sleep Family.

Objects the player is carrying (attached) can use Sensitive Sleep Family.

Avoid manually waking physics bodies.

Test Scenario

Small Testing Scenario to demonstrate Sleep Family in Physics Body. Just a long (10 000 kg) cylinder that starts with an angle of 5 degrees and altitude of 50 cm.

This could demonstrate a Rocket that just nailed a successful landing.

Logs

We can see when sleep family is set to a sensitive object will eventually zero out all of its physical properties.

Time, Attitude, Linear Velocity, Angular Velocity, Rigid Body is Awake, FPS, Delta Time

Editor, Sensitive Sleep Family:
[0,22 sec] [5,0 deg] [0,7 m/s] [0,0 deg/s] [Yes] [24 FPS] [40,87 ms]
[0,42 sec] [4,9 deg] [0,6 m/s] [3,3 deg/s] [Yes] [119 FPS] [8,33 ms]
[0,63 sec] [4,2 deg] [0,4 m/s] [4,7 deg/s] [Yes] [119 FPS] [8,33 ms]
[0,83 sec] [3,0 deg] [0,6 m/s] [6,9 deg/s] [Yes] [119 FPS] [8,36 ms]
[1,03 sec] [1,4 deg] [0,8 m/s] [9,5 deg/s] [Yes] [101 FPS] [9,83 ms]
[1,23 sec] [0,7 deg] [0,9 m/s] [9,6 deg/s] [Yes] [119 FPS] [8,33 ms]
[1,43 sec] [2,3 deg] [0,6 m/s] [6,8 deg/s] [Yes] [119 FPS] [8,40 ms]
[1,63 sec] [3,4 deg] [0,4 m/s] [4,3 deg/s] [Yes] [119 FPS] [8,33 ms]
[1,83 sec] [4,1 deg] [0,2 m/s] [2,2 deg/s] [Yes] [119 FPS] [8,33 ms]
[2,03 sec] [4,3 deg] [0,0 m/s] [0,1 deg/s] [Yes] [108 FPS] [9,17 ms]
[2,24 sec] [4,1 deg] [0,2 m/s] [2,0 deg/s] [Yes] [104 FPS] [9,57 ms]
[2,44 sec] [3,5 deg] [0,4 m/s] [4,1 deg/s] [Yes] [119 FPS] [8,33 ms]
[2,64 sec] [2,4 deg] [0,6 m/s] [6,5 deg/s] [Yes] [119 FPS] [8,33 ms]
[2,84 sec] [0,8 deg] [0,8 m/s] [9,3 deg/s] [Yes] [119 FPS] [8,33 ms]
[3,04 sec] [1,1 deg] [0,7 m/s] [8,0 deg/s] [Yes] [119 FPS] [8,33 ms]
[3,24 sec] [2,4 deg] [0,5 m/s] [5,1 deg/s] [Yes] [119 FPS] [8,33 ms]
[3,44 sec] [3,2 deg] [0,2 m/s] [2,7 deg/s] [Yes] [119 FPS] [8,33 ms]
[3,65 sec] [3,5 deg] [0,0 m/s] [0,4 deg/s] [Yes] [119 FPS] [8,33 ms]
[3,85 sec] [3,3 deg] [0,2 m/s] [1,9 deg/s] [Yes] [119 FPS] [8,33 ms]
[4,05 sec] [2,7 deg] [0,4 m/s] [4,3 deg/s] [Yes] [119 FPS] [8,33 ms]
[4,25 sec] [1,5 deg] [0,6 m/s] [7,0 deg/s] [Yes] [119 FPS] [8,33 ms]
[4,45 sec] [0,1 deg] [0,8 m/s] [8,6 deg/s] [Yes] [119 FPS] [8,33 ms]
[4,65 sec] [1,6 deg] [0,5 m/s] [5,7 deg/s] [Yes] [119 FPS] [8,33 ms]
[4,85 sec] [2,4 deg] [0,3 m/s] [3,0 deg/s] [Yes] [119 FPS] [8,33 ms]
[5,05 sec] [2,8 deg] [0,0 m/s] [0,5 deg/s] [Yes] [119 FPS] [8,33 ms]
[5,25 sec] [2,6 deg] [0,2 m/s] [2,0 deg/s] [Yes] [119 FPS] [8,33 ms]
[5,45 sec] [1,9 deg] [0,4 m/s] [4,6 deg/s] [Yes] [119 FPS] [8,33 ms]
[5,65 sec] [0,7 deg] [0,7 m/s] [7,5 deg/s] [Yes] [119 FPS] [8,33 ms]
[5,85 sec] [0,9 deg] [0,6 m/s] [6,5 deg/s] [Yes] [119 FPS] [8,33 ms]
[6,06 sec] [1,9 deg] [0,3 m/s] [3,6 deg/s] [Yes] [119 FPS] [8,33 ms]
[6,26 sec] [2,3 deg] [0,1 m/s] [1,0 deg/s] [Yes] [119 FPS] [8,33 ms]
[6,46 sec] [2,2 deg] [0,1 m/s] [1,6 deg/s] [Yes] [119 FPS] [8,33 ms]
[6,66 sec] [1,6 deg] [0,4 m/s] [4,3 deg/s] [Yes] [119 FPS] [8,33 ms]
[6,86 sec] [0,4 deg] [0,6 m/s] [7,3 deg/s] [Yes] [119 FPS] [8,33 ms]
[7,06 sec] [0,9 deg] [0,5 m/s] [5,3 deg/s] [Yes] [119 FPS] [8,33 ms]
[7,26 sec] [1,7 deg] [0,2 m/s] [2,4 deg/s] [Yes] [119 FPS] [8,33 ms]
[7,46 sec] [1,9 deg] [0,0 m/s] [0,4 deg/s] [Yes] [119 FPS] [8,33 ms]
[7,67 sec] [1,5 deg] [0,3 m/s] [3,1 deg/s] [Yes] [119 FPS] [8,33 ms]
[7,87 sec] [0,5 deg] [0,5 m/s] [6,1 deg/s] [Yes] [119 FPS] [8,33 ms]
[8,07 sec] [0,7 deg] [0,4 m/s] [4,9 deg/s] [Yes] [119 FPS] [8,33 ms]
[8,27 sec] [1,4 deg] [0,2 m/s] [2,0 deg/s] [Yes] [119 FPS] [8,33 ms]
[8,47 sec] [1,5 deg] [0,1 m/s] [0,8 deg/s] [Yes] [119 FPS] [8,33 ms]
[8,67 sec] [1,0 deg] [0,3 m/s] [3,7 deg/s] [Yes] [119 FPS] [8,33 ms]
[8,87 sec] [0,0 deg] [0,6 m/s] [6,0 deg/s] [Yes] [119 FPS] [8,33 ms]
[9,07 sec] [0,9 deg] [0,3 m/s] [3,1 deg/s] [Yes] [119 FPS] [8,33 ms]
[9,27 sec] [1,3 deg] [0,0 m/s] [0,1 deg/s] [Yes] [119 FPS] [8,33 ms]
[9,47 sec] [1,0 deg] [0,2 m/s] [2,8 deg/s] [Yes] [119 FPS] [8,33 ms]
[9,67 sec] [0,1 deg] [0,5 m/s] [5,9 deg/s] [Yes] [116 FPS] [8,61 ms]
[9,87 sec] [0,8 deg] [0,3 m/s] [2,9 deg/s] [Yes] [119 FPS] [8,33 ms]
[10,07 sec] [1,1 deg] [0,0 m/s] [0,0 deg/s] [Yes] [119 FPS] [8,33 ms]
[10,27 sec] [0,7 deg] [0,3 m/s] [3,0 deg/s] [Yes] [119 FPS] [8,33 ms]
[10,47 sec] [0,2 deg] [0,4 m/s] [4,5 deg/s] [Yes] [119 FPS] [8,33 ms]
[10,67 sec] [0,7 deg] [0,1 m/s] [1,4 deg/s] [Yes] [119 FPS] [8,33 ms]
[10,87 sec] [0,7 deg] [0,1 m/s] [1,6 deg/s] [Yes] [119 FPS] [8,33 ms]
[11,07 sec] [0,1 deg] [0,4 m/s] [4,8 deg/s] [Yes] [119 FPS] [8,33 ms]
[11,28 sec] [0,6 deg] [0,1 m/s] [1,5 deg/s] [Yes] [119 FPS] [8,33 ms]
[11,48 sec] [0,5 deg] [0,1 m/s] [1,6 deg/s] [Yes] [119 FPS] [8,33 ms]
[11,69 sec] [0,1 deg] [0,3 m/s] [3,5 deg/s] [Yes] [119 FPS] [8,33 ms]
[11,89 sec] [0,5 deg] [0,0 m/s] [0,3 deg/s] [Yes] [119 FPS] [8,33 ms]
[12,09 sec] [0,2 deg] [0,3 m/s] [2,8 deg/s] [Yes] [119 FPS] [8,33 ms]
[12,29 sec] [0,3 deg] [0,1 m/s] [1,4 deg/s] [Yes] [106 FPS] [9,41 ms]
[12,49 sec] [0,3 deg] [0,2 m/s] [1,9 deg/s] [Yes] [119 FPS] [8,33 ms]
[12,69 sec] [0,2 deg] [0,1 m/s] [1,5 deg/s] [Yes] [119 FPS] [8,33 ms]
[12,89 sec] [0,2 deg] [0,2 m/s] [1,8 deg/s] [Yes] [119 FPS] [8,33 ms]
[13,10 sec] [0,1 deg] [0,1 m/s] [1,5 deg/s] [Yes] [119 FPS] [8,33 ms]
[13,30 sec] [0,2 deg] [0,1 m/s] [1,0 deg/s] [Yes] [119 FPS] [8,33 ms]
[13,50 sec] [0,1 deg] [0,0 m/s] [0,4 deg/s] [Yes] [119 FPS] [8,33 ms]
[13,70 sec] [0,0 deg] [0,1 m/s] [1,1 deg/s] [Yes] [119 FPS] [8,33 ms]
[13,90 sec] [0,0 deg] [0,1 m/s] [1,5 deg/s] [Yes] [119 FPS] [8,33 ms]
[14,10 sec] [0,0 deg] [0,1 m/s] [1,0 deg/s] [Yes] [119 FPS] [8,33 ms]
[14,30 sec] [0,0 deg] [0,0 m/s] [0,0 deg/s] [Yes] [113 FPS] [8,82 ms]
[14,50 sec] [0,0 deg] [0,0 m/s] [0,0 deg/s] [No] [119 FPS] [8,33 ms]
[14,70 sec] [0,0 deg] [0,0 m/s] [0,0 deg/s] [No] [119 FPS] [8,33 ms]
[14,90 sec] [0,0 deg] [0,0 m/s] [0,0 deg/s] [No] [119 FPS] [8,33 ms]
[15,10 sec] [0,0 deg] [0,0 m/s] [0,0 deg/s] [No] [119 FPS] [8,33 ms]
[15,30 sec] [0,0 deg] [0,0 m/s] [0,0 deg/s] [No] [119 FPS] [8,33 ms]
[15,50 sec] [0,0 deg] [0,0 m/s] [0,0 deg/s] [No] [119 FPS] [8,33 ms]
[15,70 sec] [0,0 deg] [0,0 m/s] [0,0 deg/s] [No] [119 FPS] [8,33 ms]
[15,91 sec] [0,0 deg] [0,0 m/s] [0,0 deg/s] [No] [119 FPS] [8,33 ms]
[16,11 sec] [0,0 deg] [0,0 m/s] [0,0 deg/s] [No] [119 FPS] [8,33 ms]
[16,31 sec] [0,0 deg] [0,0 m/s] [0,0 deg/s] [No] [119 FPS] [8,33 ms]
[16,51 sec] [0,0 deg] [0,0 m/s] [0,0 deg/s] [No] [119 FPS] [8,33 ms]

When sleep family is normal it can actually stop before it has zeroed out its body angle.

Editor, Normal Sleep Family:
[0,22 sec] [5,0 deg] [0,7 m/s] [0,0 deg/s] [Yes] [24 FPS] [41,40 ms]
[0,42 sec] [4,9 deg] [0,6 m/s] [3,3 deg/s] [Yes] [119 FPS] [8,33 ms]
[0,62 sec] [4,2 deg] [0,4 m/s] [4,7 deg/s] [Yes] [119 FPS] [8,33 ms]
[0,83 sec] [3,0 deg] [0,6 m/s] [6,9 deg/s] [Yes] [119 FPS] [8,33 ms]
[1,03 sec] [1,3 deg] [0,9 m/s] [9,6 deg/s] [Yes] [119 FPS] [8,38 ms]
[1,23 sec] [0,8 deg] [0,8 m/s] [9,4 deg/s] [Yes] [119 FPS] [8,33 ms]
[1,43 sec] [2,3 deg] [0,6 m/s] [6,7 deg/s] [Yes] [119 FPS] [8,34 ms]
[1,63 sec] [3,4 deg] [0,4 m/s] [4,2 deg/s] [Yes] [119 FPS] [8,33 ms]
[1,83 sec] [4,0 deg] [0,2 m/s] [2,1 deg/s] [Yes] [119 FPS] [8,33 ms]
[2,03 sec] [4,2 deg] [0,0 m/s] [0,0 deg/s] [No] [119 FPS] [8,33 ms]
[2,23 sec] [4,2 deg] [0,0 m/s] [0,0 deg/s] [No] [119 FPS] [8,33 ms]
[2,43 sec] [4,2 deg] [0,0 m/s] [0,0 deg/s] [No] [119 FPS] [8,33 ms]
[2,63 sec] [4,2 deg] [0,0 m/s] [0,0 deg/s] [No] [119 FPS] [8,33 ms]
[2,83 sec] [4,2 deg] [0,0 m/s] [0,0 deg/s] [No] [119 FPS] [8,33 ms]
[3,03 sec] [4,2 deg] [0,0 m/s] [0,0 deg/s] [No] [119 FPS] [8,33 ms]

When an object sways back and forth, its velocity briefly passes through zero at the apex of each swing. Normal sleep mode misinterprets this momentary pause as full rest and freezes the object prematurely in mid-air.


Standalone (MyProject.uproject -> Right Click -> Launch Game)

Standalone, Sensitive Sleep Family:
[0.20 sec] [5.0 deg] [1.3 m/s] [0.0 deg/s] [Yes] [178 FPS] [5.59 ms]
[0.40 sec] [4.8 deg] [0.4 m/s] [3.4 deg/s] [Yes] [174 FPS] [5.73 ms]
[0.61 sec] [4.0 deg] [0.5 m/s] [5.1 deg/s] [Yes] [165 FPS] [6.05 ms]
[0.81 sec] [2.7 deg] [0.7 m/s] [7.4 deg/s] [Yes] [157 FPS] [6.35 ms]
[1.02 sec] [1.0 deg] [0.9 m/s] [10.2 deg/s] [Yes] [160 FPS] [6.24 ms]
[1.22 sec] [1.1 deg] [0.8 m/s] [9.0 deg/s] [Yes] [169 FPS] [5.89 ms]
[1.42 sec] [2.6 deg] [0.6 m/s] [6.2 deg/s] [Yes] [179 FPS] [5.57 ms]
[1.63 sec] [3.7 deg] [0.3 m/s] [3.8 deg/s] [Yes] [177 FPS] [5.65 ms]
[1.83 sec] [4.2 deg] [0.2 m/s] [1.7 deg/s] [Yes] [168 FPS] [5.94 ms]
[2.03 sec] [4.4 deg] [0.0 m/s] [0.3 deg/s] [Yes] [170 FPS] [5.88 ms]
[2.24 sec] [4.1 deg] [0.2 m/s] [2.4 deg/s] [Yes] [169 FPS] [5.89 ms]
[2.44 sec] [3.4 deg] [0.4 m/s] [4.6 deg/s] [Yes] [164 FPS] [6.06 ms]
[2.64 sec] [2.2 deg] [0.6 m/s] [7.1 deg/s] [Yes] [182 FPS] [5.48 ms]
[2.84 sec] [0.4 deg] [0.9 m/s] [10.0 deg/s] [Yes] [172 FPS] [5.80 ms]
[3.05 sec] [1.4 deg] [0.7 m/s] [7.4 deg/s] [Yes] [156 FPS] [6.39 ms]
[3.25 sec] [2.6 deg] [0.4 m/s] [4.7 deg/s] [Yes] [174 FPS] [5.72 ms]
[3.45 sec] [3.3 deg] [0.2 m/s] [2.3 deg/s] [Yes] [162 FPS] [6.16 ms]
[3.65 sec] [3.5 deg] [0.0 m/s] [0.0 deg/s] [Yes] [142 FPS] [7.01 ms]
[3.86 sec] [3.3 deg] [0.2 m/s] [2.3 deg/s] [Yes] [139 FPS] [7.19 ms]
[4.06 sec] [2.6 deg] [0.4 m/s] [4.8 deg/s] [Yes] [174 FPS] [5.74 ms]
[4.26 sec] [1.3 deg] [0.7 m/s] [7.5 deg/s] [Yes] [176 FPS] [5.67 ms]
[4.47 sec] [0.4 deg] [0.7 m/s] [8.4 deg/s] [Yes] [177 FPS] [5.65 ms]
[4.67 sec] [1.8 deg] [0.5 m/s] [5.4 deg/s] [Yes] [164 FPS] [6.09 ms]
[4.87 sec] [2.6 deg] [0.2 m/s] [2.7 deg/s] [Yes] [174 FPS] [5.74 ms]
[5.08 sec] [2.9 deg] [0.0 m/s] [0.2 deg/s] [Yes] [175 FPS] [5.69 ms]
[5.28 sec] [2.7 deg] [0.2 m/s] [2.2 deg/s] [Yes] [170 FPS] [5.86 ms]
[5.49 sec] [2.0 deg] [0.4 m/s] [4.9 deg/s] [Yes] [179 FPS] [5.57 ms]
[5.69 sec] [0.7 deg] [0.7 m/s] [7.7 deg/s] [Yes] [178 FPS] [5.60 ms]
[5.89 sec] [0.9 deg] [0.6 m/s] [6.7 deg/s] [Yes] [172 FPS] [5.79 ms]
[6.09 sec] [1.9 deg] [0.3 m/s] [3.8 deg/s] [Yes] [178 FPS] [5.60 ms]
[6.29 sec] [2.4 deg] [0.1 m/s] [1.2 deg/s] [Yes] [169 FPS] [5.91 ms]
[6.49 sec] [2.4 deg] [0.1 m/s] [1.4 deg/s] [Yes] [165 FPS] [6.04 ms]
[[6.70 sec] [1.8 deg] [0.4 m/s] [4.1 deg/s] [Yes] [152 FPS] [6.56 ms]
[6.90 sec] [0.7 deg] [0.6 m/s] [7.1 deg/s] [Yes] [164 FPS] [6.10 ms]
[7.11 sec] [0.8 deg] [0.5 m/s] [5.9 deg/s] [Yes] [185 FPS] [5.39 ms]
[7.31 sec] [1.7 deg] [0.3 m/s] [2.9 deg/s] [Yes] [177 FPS] [5.63 ms]
[7.51 sec] [2.0 deg] [0.0 m/s] [0.2 deg/s] [Yes] [170 FPS] [5.88 ms]
[7.71 sec] [1.8 deg] [0.2 m/s] [2.5 deg/s] [Yes] [175 FPS] [5.70 ms]
[7.92 sec] [0.9 deg] [0.5 m/s] [5.4 deg/s] [Yes] [185 FPS] [5.38 ms]
[8.12 sec] [0.4 deg] [0.5 m/s] [6.1 deg/s] [Yes] [180 FPS] [5.55 ms]
[8.32 sec] [1.3 deg] [0.3 m/s] [3.1 deg/s] [Yes] [156 FPS] [6.38 ms]
[8.53 sec] [1.6 deg] [0.0 m/s] [0.2 deg/s] [Yes] [153 FPS] [6.49 ms]
[8.73 sec] [1.4 deg] [0.2 m/s] [2.6 deg/s] [Yes] [170 FPS] [5.85 ms]
[8.94 sec] [0.5 deg] [0.5 m/s] [5.7 deg/s] [Yes] [166 FPS] [6.01 ms]
[9.14 sec] [0.6 deg] [0.4 m/s] [4.7 deg/s] [Yes] [162 FPS] [6.14 ms]
[9.34 sec] [1.3 deg] [0.1 m/s] [1.7 deg/s] [Yes] [171 FPS] [5.83 ms]
[9.54 sec] [1.3 deg] [0.1 m/s] [1.2 deg/s] [Yes] [158 FPS] [6.29 ms]
[9.75 sec] [0.8 deg] [0.4 m/s] [4.2 deg/s] [Yes] [166 FPS] [5.99 ms]
[9.95 sec] [0.3 deg] [0.4 m/s] [5.0 deg/s] [Yes] [167 FPS] [5.99 ms]
[10.16 sec] [1.0 deg] [0.2 m/s] [1.9 deg/s] [Yes] [171 FPS] [5.81 ms]
[10.36 sec] [1.1 deg] [0.1 m/s] [1.0 deg/s] [Yes] [162 FPS] [6.16 ms]
[10.56 sec] [0.6 deg] [0.4 m/s] [4.0 deg/s] [Yes] [155 FPS] [6.44 ms]
[10.76 sec] [0.4 deg] [0.4 m/s] [4.2 deg/s] [Yes] [179 FPS] [5.56 ms]
[10.97 sec] [0.9 deg] [0.1 m/s] [1.1 deg/s] [Yes] [192 FPS] [5.19 ms]
[11.17 sec] [0.8 deg] [0.2 m/s] [1.9 deg/s] [Yes] [156 FPS] [6.40 ms]
[11.37 sec] [0.1 deg] [0.5 m/s] [5.1 deg/s] [Yes] [174 FPS] [5.73 ms]
[11.57 sec] [0.6 deg] [0.2 m/s] [2.2 deg/s] [Yes] [170 FPS] [5.87 ms]
[11.77 sec] [0.7 deg] [0.1 m/s] [0.9 deg/s] [Yes] [165 FPS] [6.06 ms]
[11.98 sec] [0.2 deg] [0.4 m/s] [4.0 deg/s] [Yes] [185 FPS] [5.39 ms]
[12.18 sec] [0.5 deg] [0.2 m/s] [2.2 deg/s] [Yes] [179 FPS] [5.56 ms]
[12.38 sec] [0.6 deg] [0.1 m/s] [0.9 deg/s] [Yes] [157 FPS] [6.36 ms]
[12.58 sec] [0.1 deg] [0.4 m/s] [4.1 deg/s] [Yes] [187 FPS] [5.35 ms]
[12.78 sec] [0.5 deg] [0.1 m/s] [1.1 deg/s] [Yes] [168 FPS] [5.92 ms]
[12.99 sec] [0.3 deg] [0.2 m/s] [2.1 deg/s] [Yes] [182 FPS] [5.49 ms]
[13.19 sec] [0.2 deg] [0.2 m/s] [2.1 deg/s] [Yes] [181 FPS] [5.51 ms]
[13.39 sec] [0.3 deg] [0.1 m/s] [1.0 deg/s] [Yes] [177 FPS] [5.62 ms]
[13.59 sec] [0.1 deg] [0.2 m/s] [2.2 deg/s] [Yes] [172 FPS] [5.81 ms]
[13.79 sec] [0.2 deg] [0.1 m/s] [1.0 deg/s] [Yes] [161 FPS] [6.20 ms]
[13.99 sec] [0.2 deg] [0.1 m/s] [1.4 deg/s] [Yes] [163 FPS] [6.10 ms]
[14.19 sec] [0.1 deg] [0.2 m/s] [1.8 deg/s] [Yes] [170 FPS] [5.87 ms]
[14.40 sec] [0.2 deg] [0.0 m/s] [0.1 deg/s] [Yes] [157 FPS] [6.34 ms]
[14.60 sec] [0.1 deg] [0.1 m/s] [0.7 deg/s] [Yes] [185 FPS] [5.40 ms]
[14.81 sec] [0.1 deg] [0.1 m/s] [1.0 deg/s] [Yes] [175 FPS] [5.71 ms]
[15.01 sec] [0.0 deg] [0.1 m/s] [0.7 deg/s] [Yes] [172 FPS] [5.81 ms]
[15.21 sec] [0.0 deg] [0.0 m/s] [0.3 deg/s] [Yes] [170 FPS] [5.88 ms]
[15.42 sec] [0.0 deg] [0.0 m/s] [0.3 deg/s] [Yes] [196 FPS] [5.09 ms]
[15.62 sec] [0.0 deg] [0.0 m/s] [0.0 deg/s] [No] [176 FPS] [5.68 ms]
[15.82 sec] [0.0 deg] [0.0 m/s] [0.0 deg/s] [No] [173 FPS] [5.76 ms]
[16.03 sec] [0.0 deg] [0.0 m/s] [0.0 deg/s] [No] [188 FPS] [5.30 ms]
[16.23 sec] [0.0 deg] [0.0 m/s] [0.0 deg/s] [No] [178 FPS] [5.61 ms]
[16.43 sec] [0.0 deg] [0.0 m/s] [0.0 deg/s] [No] [195 FPS] [5.13 ms]
[16.64 sec] [0.0 deg] [0.0 m/s] [0.0 deg/s] [No] [174 FPS] [5.73 ms]
[16.84 sec] [0.0 deg] [0.0 m/s] [0.0 deg/s] [No] [188 FPS] [5.29 ms]
[17.04 sec] [0.0 deg] [0.0 m/s] [0.0 deg/s] [No] [167 FPS] [5.98 ms]
[17.24 sec] [0.0 deg] [0.0 m/s] [0.0 deg/s] [No] [180 FPS] [5.55 ms]
[17.44 sec] [0.0 deg] [0.0 m/s] [0.0 deg/s] [No] [193 FPS] [5.17 ms]
[17.64 sec] [0.0 deg] [0.0 m/s] [0.0 deg/s] [No] [177 FPS] [5.64 ms]
[17.85 sec] [0.0 deg] [0.0 m/s] [0.0 deg/s] [No] [171 FPS] [5.83 ms]
Standalone, Normal Sleep Family:
[0.21 sec] [5.0 deg] [1.6 m/s] [0.0 deg/s] [Yes] [172 FPS] [5.80 ms]
[0.41 sec] [4.7 deg] [0.3 m/s] [3.4 deg/s] [Yes] [169 FPS] [5.90 ms]
[0.62 sec] [3.8 deg] [0.5 m/s] [5.5 deg/s] [Yes] [189 FPS] [5.27 ms]
[0.82 sec] [2.5 deg] [0.7 m/s] [7.8 deg/s] [Yes] [181 FPS] [5.51 ms]
[1.02 sec] [0.6 deg] [0.9 m/s] [10.6 deg/s] [Yes] [195 FPS] [5.12 ms]
[1.22 sec] [1.4 deg] [0.8 m/s] [8.7 deg/s] [Yes] [175 FPS] [5.70 ms]
[1.42 sec] [2.9 deg] [0.5 m/s] [6.0 deg/s] [Yes] [181 FPS] [5.51 ms]
[1.62 sec] [3.8 deg] [0.3 m/s] [3.7 deg/s] [Yes] [183 FPS] [5.45 ms]
[1.83 sec] [4.4 deg] [0.1 m/s] [1.6 deg/s] [Yes] [199 FPS] [5.01 ms]
[2.03 sec] [4.5 deg] [0.0 m/s] [0.0 deg/s] [No] [186 FPS] [5.36 ms]
[2.24 sec] [4.5 deg] [0.0 m/s] [0.0 deg/s] [No] [172 FPS] [5.79 ms]
[2.44 sec] [4.5 deg] [0.0 m/s] [0.0 deg/s] [No] [186 FPS] [5.36 ms]
[2.64 sec] [4.5 deg] [0.0 m/s] [0.0 deg/s] [No] [189 FPS] [5.29 ms]
[2.85 sec] [4.5 deg] [0.0 m/s] [0.0 deg/s] [No] [185 FPS] [5.40 ms]
[3.05 sec] [4.5 deg] [0.0 m/s] [0.0 deg/s] [No] [187 FPS] [5.35 ms]
[3.25 sec] [4.5 deg] [0.0 m/s] [0.0 deg/s] [No] [184 FPS] [5.43 ms]

Although this explicit scenario didn’t demonstrate stuttering or creeping it did demonstrate a totally different problem which I didn’t even consider. The object didn’t zero out its body angle or align itself with bottom geometry to floor geometry. Because when the body is in swinging motion there are peaks and lows where velocity can hit zero and trigger Rigid Body into Sleeping mode.

I can totally imagine how some developers smash their monitor or keyboard, because when dealing with unreal engines physics engine can trigger rage inducing moments.

Custom Gravity

If you do have a custom gravity you need to set your gravity in a way that it respects chaos physics sleeping features. Applying 9.8 m/s acceleration every second will keep the rigid body awake all the time.

This is really good if you have a cluster of players in a small location, for example when the game starts and players spawn at the base, keeping 50 physics actors in a sleep state saves performance until they leave one by one or in small packs. Also if you have 50 players, they have Characters and then they have their own vehicles, you only need to process 50 possessed actors and not 100.

Short Sketch for a Custom Gravity:

void URocketMovementComponent::TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction)
{
    Super::TickComponent(DeltaTime, TickType, ThisTickFunction);

    if (!TargetPrimitiveComponent || !TargetPrimitiveComponent->IsSimulatingPhysics()) return;

    // 1. If Chaos already put the body to sleep, DO NOT apply force (applying force wakes it back up)
    if (!TargetPrimitiveComponent->RigidBodyIsAwake())
    {
        return;
    }

    // 2. Check if the craft is practically stationary on a landing pad
    const float LinearSpeed = TargetPrimitiveComponent->GetPhysicsLinearVelocity().Size();          // cm/s
    const float AngularSpeed = TargetPrimitiveComponent->GetPhysicsAngularVelocityInDegrees().Size(); // deg/s

    // If resting below threshold and touching ground, manually put it to sleep and stop pushing gravity
    if (bIsTouchingGround && LinearSpeed < 1.0f && AngularSpeed < 0.2f)
    {
        TargetPrimitiveComponent->PutRigidBodyToSleep();
        return; // Skip AddForce so Chaos stays asleep
    }

    // 3. Otherwise, apply continuous custom gravity
    FVector GravityForce = CalculateCustomGravity();
    TargetPrimitiveComponent->AddForce(GravityForce);
}

Physical Material

There’s also a Physical Material. This gives you much greater control of physics behavior of colliding surfaces. You can keep Sleep Family Normal and then lower Thresholds and it will zero out velocity properties without dying in a middle of swing. You can set Physical Material in static mesh component details panel or in the mesh details.

Both colliding surfaces should have a Physical Material even if only one is simulating physics and other one is static. Both materials are included in calculations.

Sleep Linear and Angular Thesholds will declare when body is put to sleep.


Good Settings for something like a Rocket, this gives you same result if Sleep Family is Sensitive. If you are using material which you should then keep Sleep Family Normal.

This changes the default behavior from bouncy ball to heavy rock.

Subscribe
Notify of
0 Comments
Oldest
Newest Most Voted
0
Would love your thoughts, please comment.x
()
x