Godot Jolt RigidBody3D velocity halt on land

Godot Version

4.3

Question

I’ve had this issue with Godot set to JoltPhysics3D for quite a while now, I couldn’t solve by tweaking any of the Physics Settings.

I built a RigidBody3D based character controller, and when it lands on a StaticBody3D, it loses most/all of it’s velocity, resulting in a very visible “movement halt” on landing. The intended ideal result would be for the rigidbody to clip/transition to a normal grounded velocity, but not lose all it’s velocity just because of landing:

In this video you will notice the rigidbody practically loses all of it’s velocity (sometimes it actually does go to 0 velocity) as soon as it lands on the ground diagonally from a jump.

This also occurs with Godot’s inbuilt phyisics (but it’s much less noticeable than with Jolt).

Here’s a minimal reproduction project I’ve been keeping updated in order to debug this problem (and for anyone interested in 3D rigidbody character controlling):

It uses phantomcamera for the camera, which can get pretty jittery, but it’s a quick way to make the character halt on landing issue much more visible. The debug logs also help a lot in seeing that the velocity reaches nearly 0 on all axis, on landing.

According to jolt dev on godot github (and summed up):

  • The velocity halt is to be expected due to how the jolt physics engine does its calculations, which follow a simplified version of real life physics.
  • However, this can be “worked around” by dynamically setting the friction. The key here is to have no friction the first landing frame.

Full rigidbody3d (2 rigidbodies pinjointed together for different frictions) implementation with this issue fixed here: GitHub - Mangonels/Godot-RigidBody3D-character-movement: Godot 4.4 RigidBody3D based character movement testing