UE 5.8.3 AddForce and AddTorque limited behavior under some threshold

Summary

When using a blueprint “Add Force” or “Add Torque” block (with or without “Accel Change” toggle enabled), the physics is only correctly applied when the input value is above some threshold.

What Type of Bug are you experiencing?

Simulation

Steps to Reproduce

  1. Create a new Games>Blank project with blueprints
  2. Create a new Basic Level, deleting the floor
  3. Create a Pawn blueprint
  4. Drag the Pawn into the viewport, setting its Location to be in front of the default PlayerStart camera (e.g. X=500, Y=0, Z=0)
  5. In the blueprint editor, add a generic Static Mesh to the pawn, like a Cube
  6. In the pawn’s EventGraph, create “Physics > Add Force (StaticMesh)” and “Add Torque in Degrees (StaticMesh)”, connecting each in series to pawn’s “Event Tick”
  7. In the Static Mesh’s Details pane, ensure that the following values are set under Physics:
    — Simulate Physics = ON
    — Mass = 1.0 kg
    — Linear Damping = 0.0
    — Angular Damping = 0.0
    — Enable Gravity = OFF
    — Advanced > Inertia Tensor Scale: X=0.0 Y=0.0 Z=0.0
  8. In either the “Add Force” or “Add Torque in Degrees”, set one of the inputs to a static value, and all other inputs to 0.0
    — example Add Force input: 6.0 (any direction)
    — example Add Force input: 12.0 (any direction)
    — example Add Torque input: 20.0 (any axis)
    — example Add Torque input: 40.0 (any axis)
  9. Play and observe the Pawn motion
  10. Adjust the “Add Force” or “Add Torque in Degrees” input value, save the blueprint, and play again
  11. Enable the “Accel Change” toggle in both the “Add Force” and “Add Torque in Degrees”, and try adjusting input value again

Expected Result

The linear acceleration (via Add Force) or rotational acceleration (via Add Torque) input should directly correlate to the resulting velocity/position, regardless of input value.

Observed Result

Below some threshold (around 10 for Force, and around 30 for Torque (Degrees)), the linear/rotational velocity does not properly accumulate; the velocity slope appears roughly correct, but the velocity value seems to keep resetting back to 0.0 after several frames. The threshold is not exactly consistent, but is usually roughly the same. The threshold appears to be based on the magnitude of the inputs; for example, Add Force with X=6, Y=0, Z=0 (magnitude 6.0) causes the issue, but Add Force with X=6, Y=6, Z=6 (magnitude ~10.4) behaves as expected.

Affects Versions

5.8

Platform(s)

Windows

Upload an image

For the included plots (uploaded images), the data was collected using the following blueprint functions:

  • Linear velocity: Physics > “Get Physics Linear Velocity”
  • Linear position: Transformation > “Get Actor Location” + “Break Vector”
  • Rotational velocity: Physics > “Get Physics Angular Velocity in Degrees”
  • Rotational position: Transformation > “Get World Rotation” + “Break Rotator”

From there, the data was fed into a basic plugin to utilize UE_LOG for grabbing fairly accurate timestamps alongside the data.

*However* none of this data logging is required for the issue to occur, as simply watching the object in the viewport (per the listed “Steps to Reproduce”) for 5-10 seconds is sufficient to tell if it’s moving as intended. Also while the plots were collected along/about the Z axis, the issue does occur for any axis around the same threshold.

Hi

The issue is likely caused by the sleeping mechanism
If the force/torque is not strong enough, the velocity of the object remains under the threshold to make the object being put to sleep

There’s few way you can control this in the engine

* Component Physics properties
You can find the Sleep related properties here
If you use Custom, you should be able to set the Custom Sleep Threshold Multiplier to adjust how sensitive the sleep mechanism with regard to velocity thresholds

* Physical Materials have Sleep related parameters :
If you have assigned a physical material to your object, you can directly set the Velocities threshold here

Keep in mind that affecting those values, may affect performance if you are using a lot of dynamic objects, as non sleeping dynamic object are more expensive to simulate than sleeping ones

I hope this helps

Ced

Thank you, this resolved the issue. Setting “Sleep Family” to Custom, and “Custom Sleep Threshold Multiplier” to 0.0 allowed even very small values to correctly accumulate over time without any sleep activation. Good to know about the Physical Materials options, as well as the performance considerations.

Not sure if I can mark this as solved/closed, but no further activity should be needed on here.