All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Breaking changes are denoted with
⚠️ Changed thecenter_of_mass
property ofPhysicsDirectBodyState3D
to be a relative global position rather than an absolute global position, to match Godot Physics.⚠️ Changed the ray-cast parameterhit_back_faces
to no longer hit the back/inside of convex shapes, to better match Godot Physics. This meanshit_back_faces
will only have an effect onConcavePolygonShape3D
andHeightMapShape3D
.⚠️ Changed the ray-cast parameterhit_back_faces
to only hit back-faces of aConcavePolygonShape3D
if itsbackface_collision
property is set totrue
, to better match Godot Physics.⚠️ Changed theget_applied_force
andget_applied_torque
methods ofJoltHingeJoint3D
,JoltSliderJoint3D
,JoltConeTwistJoint3D
andJoltGeneric6DOFJoint3D
to now also include forces/torque applied by any enabled motor or spring as well.
- Added support for
WorldBoundaryShape3D
. - Added support for
face_index
in ray-cast results. - Added project setting "World Boundary Shape Size", to allow changing the effective size of
WorldBoundaryShape3D
. - Added project setting "Use Legacy Ray Casting", to allow reverting back to the (now legacy)
behavior of the
hit_back_faces
ray-cast parameter. - Added project setting "Enable Ray Cast Face Index", to allow opting in to the additional memory
needed to support
face_index
, which is roughly an additional 25% to everyConcavePolygonShape3D
. - Added "Max Force"/"Max Torque" to the spring properties of
JoltGeneric6DOFJoint3D
.
- Fixed issue with
SoftBody3D
not waking up when doing things like changing itstotal_mass
,damping_coefficient
,simulation_precision
, or when moving any of its pinned points. - Fixed issue where bodies with multiple shapes could end up clipping through other bodies if the "Use Enhanced Internal Edge Detection" setting was enabled (which it is by default).
- Fixed crash when changing the mesh of an in-tree
SoftBody3D
that has pinned vertices. - Fixed issue where the joint substitute nodes (
JoltHingeJoint3D
, etc.) would not display their angle properties in degrees when using aDISABLE_DEPRECATED
build of Godot. - Fixed crash when a
SoftBody3D
collided with the border of aHeightMapShape3D
using non-power-of-two dimensions. - Fixed issue where CCD would have no effect against a
ConcavePolygonShape3D
that hadbackface_collision
enabled. - Fixed crash when using a
SeparationRayShape3D
in aRigidBody3D
that had CCD enabled. - Fixed issue where the behavior of the
body_test_motion
method ofPhysicsServer3D
(which powersmove_and_collide
andmove_and_slide
) may have differed from Godot Physics when dealing with aSeparationRayShape3D
that hadslide_on_slope
enabled.
0.13.0 - 2024-08-15
⚠️ Removed anyJoltPhysicsServer3D.G6DOF_*
enums that were previously (i.e. before Godot 4.3) not exposed by Godot itself. These can now be found asPhysicsServer3D.G6DOF_*
instead.
⚠️ Changed the way that thebody_test_motion
method ofPhysicsServer3D
discards contacts, which should fix issues related to jitter/ping-ponging. This affectsmove_and_slide
,move_and_collide
andtest_move
.⚠️ Changed the inertia of shapeless bodies to be(1, 1, 1)
, to match Godot Physics.- Changed
SeparationRayShape3D
to not treat other convex shapes as solid, meaning it will now only ever collide with the hull of other convex shapes, which better matches Godot Physics. - Changed so that modifying joint properties now wake up any bodies connected to them.
- Added support for
SoftBody3D
. - Added support for double-precision.
- Added
compatibility_maximum
togodot-jolt.gdextension
for controlling the maximum allowed Godot version. Note that changing this may expose you to subtle (or not so subtle) incompatibilities in the extension API. Change at your own risk. ⚠️ Added new project setting, "Use Enhanced Internal Edge Detection", which can help alleviate collisions with internal edges ofConcavePolygonShape3D
andHeightMapShape3D
shapes, also known as ghost collisions. This setting is enabled by default and may change the behavior of character controllers relying things likemove_and_slide
ormove_and_collide
.- Added support for partial custom inertia, where leaving one or two components at zero will use the automatically calculated values for those specific components.
- Added error-handling for invalid scaling of bodies/shapes.
- Added project settings "Body Pair Cache Enabled", "Body Pair Cache Distance Threshold" and "Body Pair Cache Angle Threshold" to allow fine-tuning the scale by which collision results are reused inbetween physics ticks.
- Added the appropriate floating-point precision feature tag to
godot-jolt.gdextension
to prevent accidentally loading a single-precision build of Godot Jolt in a double-precision build of Godot and vice versa.
⚠️ Fixed issue with shape queries not returning the full contact manifold. This applies to thecollide_shape
method ofPhysicsDirectSpaceState3D
as well as thebody_test_motion
method ofPhysicsServer3D
, which subsequently affects thetest_move
andmove_and_collide
methods ofPhysicsBody3D
as well as themove_and_slide
method ofCharacterBody3D
.⚠️ Fixed issue with thebody_get_direct_state
method ofPhysicsServer3D
returning a non-null reference when the body has no space.- Fixed issue with not being able to pass a physics space
RID
toarea_get_param
,area_attach_object_instance_id
andarea_get_object_instance_id
. - Fixed issue where the
inverse_inertia
property ofPhysicsDirectBodyState3D
would have some of its components swapped. - Fixed issue where shapeless bodies wouldn't have custom center-of-mass applied to them.
- Fixed issue with high (>1) damping values producing different results across different update frequencies.
- Fixed issue where physics queries performed within the editor (e.g. editor plugins or tool scripts) would end up ignoring potentially large swathes of bodies in scenes with many physics bodies.
- Fixed crash when setting a negative
max_contacts_reported
onRigidBody3D
. - Fixed issue with certain
generic_6dof_joint_*
methods onJoltPhysicsServer3D
not having the correct parameter names. - Fixed issue where sleep timer would not reset when applying force/torque to a
RigidBody3D
. - Fixed issue where
Area3D
would fail to report overlap with certainConcavePolygonShape3D
. - Fixed crash when re-enabling the node processing of a disabled body that's connected to a two-body joint.
- Fixed issue where re-adding previously used physics bodies to the scene tree could result in many "Unhandled override mode" errors in the Output log.
- Fixed memory leak when changing the data/properties of
CapsuleShape3D
,CylinderShape3D
,SeparationRayShape3D
,ConcavePolygonShape3D
, andHeightMapShape3D
.
0.12.0 - 2024-01-07
⚠️ Changed so that single-body joints now implicitly setsnode_a
to be the "world node" rather thannode_b
. This diverges from how Godot Physics behaves, but matches how Bullet behaves in Godot 3, and yields more intuitive outcomes for the 6DOF joints.⚠️ ChangedGeneric6DOFJoint3D
andConeTwistJointImpl3D
, as well as their substitute joints, to use pyramid-shaped angular limits instead of cone-shaped limits, to better match Godot Physics.⚠️ Reversed the direction of theequilibrium_point
properties forGeneric6DOFJoint3D
andJoltGeneric6DOFJoint3D
, to match the direction of the angular limits.⚠️ Changed the rotation order of theequilibrium_point
properties forGeneric6DOFJoint3D
andJoltGeneric6DOFJoint3D
, from ZXY to XYZ, to match the rotation order of the angular limits.- Mirrored the way in which linear limits are visualized for
JoltSliderJoint3D
andJoltGeneric6DOFJoint3D
.
- Added new project setting, "World Node", for controlling which of the two nodes in a single-body joint becomes the "world node" when omitting one of the nodes. This allows for reverting back to the behavior of Godot Physics if needed, effectively undoing the breaking change mentioned above.
- Added new project setting, "Report All Kinematic Contacts", for allowing
RigidBody3D
frozen withFREEZE_MODE_KINEMATIC
to report contacts/collisions with other kinematic/static bodies, at a potentially heavy performance/memory cost. - Added support for using NaN to indicate holes in
HeightMapShape3D
. - Added support for holes in a non-square
HeightMapShape3D
.
⚠️ Fixed issue with non-squareHeightMapShape3D
not using back-face collision.- Fixed issue where contact shape indices would sometimes always be the same index across all contacts with a particular body.
- Fixed runtime crash when setting the
max_contacts_reported
property to a lower value. - Fixed issue where
Generic6DOFJoint3D
andJoltGeneric6DOFJoint3D
would yield odd limit shapes when using both linear and angular asymmetrical limits. - Fixed issue where the equilibrium point for
Generic6DOFJoint3D
andJoltGeneric6DOFJoint3D
would be moved when using asymmetrical limits. - Fixed crash that could occur under rare circumstances when shutting down the editor after having added/removed collision shapes.
- Fixed issue where a
RigidBody3D
with locked axes colliding with aStaticBody3D
(or another frozenRigidBody3D
usingFREEZE_MODE_STATIC
) would result in NaNs. - Fixed issue where
HingeJoint3D
andJoltHingeJoint3D
would sometimes dull forces applied to either of its bodies when at either of its limits. - Fixed issue with iOS
Info.plist
missing theMinimumOSVersion
key.
0.11.0 - 2023-12-01
⚠️ ChangedHeightMapShape3D
to always use back-face collision, to match Godot Physics.
- Fixed issue with project randomly freezing up when having many active physics spaces.
- Fixed issue with static and kinematic bodies not correctly incorporating surface velocities, also
known as "constant velocities", as part of their reported velocities. This also makes it so
move_and_slide
will respect such velocities. - Fixed issue with global transform not being preserved when reparenting a
RigidBody3D
. - Fixed issue where the callback passed to
body_set_force_integration_callback
could be called even when the body is sleeping.
0.10.0 - 2023-11-12
⚠️ Changedgravity_point_unit_distance
forArea3D
to result in a constant gravity when set to zero, rather than resulting in a zero gravity, to match Godot Physics.⚠️ Changed so that ray-casts using thehit_from_inside
parameter report a zero normal when hitting a convex shape from inside, to match Godot Physics.- Changed the
space_get_contacts
method ofPhysicsServer3D
(and thus also the "Visible Collision Shapes" debug rendering) to no longer include contacts generated by overlaps withArea3D
.
- Added support for Android (ARM64, ARM32, x86-64 and x86).
- Added support for iOS.
- Fixed issue where an error saying
Parameter "body" is null
would be emitted after freeing certain bodies while they were in contact with aCharacterBody3D
. - Fixed issue where a
RigidBody3D
could sometimes still be moved by anotherRigidBody3D
despite the first body not having the second body in its collision mask.
0.9.0 - 2023-10-12
- Changed
ConvexPolygonShape3D
to no longer emit errors about failing to build the shape when adding one to the scene tree with 0 points.
- Added new project setting, "Active Edge Threshold", for tuning the cut-off angle for Jolt's active edge detection, which can help balance trade-offs related to triangle edge collisions.
⚠️ Fixed issue whereGeneric6DOFJoint
andJoltGeneric6DOFJoint
would lock up any axis that used a spring stiffness/frequency of 0.- Greatly reduced creation/modification/loading times for
ConcavePolygonShape3D
.
0.8.0 - 2023-09-28
⚠️ Changedapply_force
andapply_impulse
to be applied at an offset relative to the body's origin rather than at an offset relative to the body's center-of-mass, to match Godot Physics.⚠️ Changed collision layers and masks forArea3D
to behave like they do in Godot Physics, allowing for asymmetrical setups, where overlaps are only reported if the mask of anArea3D
contains the layer of the overlapping object.⚠️ Changed thebody_set_force_integration_callback
method ofPhysicsServer3D
to behave like it does with Godot Physics, where omitting the binding ofuserdata
requires that the callback also doesn't take anyuserdata
. It also will no longer be called when the body is sleeping.
- Added timings of Jolt's various jobs to the "Physics 3D" profiler category.
- Added registering of
JoltPhysicsServer3D
as an actual singleton, which makes Jolt-specific server methods (e.g.pin_joint_get_applied_force
) easier to deal with from dynamic scripting languages like GDScript. - Added
space_dump_debug_snapshot
toJoltPhysicsServer3D
, for dumping a binary debug snapshot of a particular physics space. - Added
dump_debug_snapshots
toJoltPhysicsServer3D
, for dumping binary debug snapshots of all currently active physics spaces. - Added a "Dump Debug Snapshots" menu option to "Project / Tools / Jolt Physics", for dumping binary debug snapshots of all the editor's physics spaces.
- Fixed issue with
move_and_slide
, where under certain conditions you could get stuck on internal edges of aConcavePolygonShape3D
if the floor was within 5-ish degrees offloor_max_angle
. - Fixed issue with
move_and_slide
, where under certain conditions, while using aBoxShape3D
orCylinderShape3D
shape, you could get stuck on internal edges of aConcavePolygonShape3D
. - Fixed issue where collision with
ConvexPolygonShape3D
could yield a flipped contact normal. - Fixed issue where an
Area3D
withmonitoring
disabled wouldn't emit any entered events for already overlapping bodies oncemonitoring
was enabled. - Fixed issue where changing the center-of-mass of a
RigidBody3D
attached to a joint would shift its transform relative to the joint. - Fixed issue where the
total_gravity
property onPhysicsDirectBodyState3D
would always return a zero vector for kinematic bodies. - Fixed issue with
Area3D
detecting overlaps slightly outside of its collision shapes.
0.7.0 - 2023-08-29
⚠️ Disabled theJoltDebugGeometry3D
node for all distributed builds. If you still need it, build from source using the*-development
or*-debug
configurations.
⚠️ Ray-casts will no longer hit the back-faces ofConcavePolygonShape3D
if itshit_back_faces
parameter is set tofalse
, regardless of what thebackface_collision
property of theConcavePolygonShape3D
is set to.⚠️ Changed the triangulation ofHeightMapShape3D
to match Godot Physics.
⚠️ Fixed regression where a motoredHingeJoint3D
(orJoltHingeJoint3D
) would rotate counter-clockwise instead of clockwise.- Fixed issue where ray-casting a
ConcavePolygonShape3D
that hadbackface_collision
enabled, you would sometimes end up with a flipped normal. - Fixed issue where a
CharacterBody3D
usingmove_and_slide
could sometimes get stuck when sliding along a wall. - Fixed issue where attaching a
RigidBody3D
with locked axes to a joint could result in NaN velocities/position and subsequently a lot of random errors being emitted from within Godot.
0.6.0 - 2023-08-17
- Changed the editor gizmo for
JoltPinJoint3D
. - Changed the editor gizmo for
JoltHingeJoint3D
. - Changed the editor gizmo for
JoltSliderJoint3D
. - Changed the editor gizmo for
JoltConeTwistJoint3D
. - Changed the editor gizmo for
JoltGeneric6DOFJoint3D
.
- Added support for
HeightMapShape3D
with non-power-of-two dimensions. - Added support for
HeightMapShape3D
with non-square dimensions. - Added support for
HeightMapShape3D
with no heights.
- Fixed issue where bodies would catch on internal edges of
ConcavePolygonShape3D
.
0.5.0 - 2023-08-08
⚠️ Removed the ability to lock all six axes of aRigidBody3D
. Consider freezing the body as static instead.
- Added substitutes for all the joint nodes, to better align with the interface that Jolt offers,
which consist of
JoltPinJoint3D
,JoltHingeJoint3D
,JoltSliderJoint3D
,JoltConeTwistJoint3D
andJoltGeneric6DOFJoint3D
. These differ in the following ways:- You can enable/disable the limits on all joints.
- You can enable/disable the joint itself using its
enabled
property. - You can fetch the magnitude of the force/torque that was last applied to keep the joint
together, using the
get_applied_force
andget_applied_torque
methods. These coupled with theenabled
property allows for creating breakable joints. - You can increase the joint's solver iterations, to improve stability, using its
solver_velocity_iterations
andsolver_position_iterations
properties. - Springs use frequency and damping instead of stiffness and damping.
- Soft limits are achieved with limit springs.
JoltConeTwistJoint3D
can be configured with a motor.- Angular motor velocities are set in radians per second, but displayed in degrees per second.
- Any motion parameters like bias, damping and relaxation are omitted.
- Any angular motion parameters for the slider joint are omitted.
- Fixed issue where linear axis locks could be budged a bit if enough force was applied.
- Fixed issue where
CharacterBody3D
and other kinematic bodies wouldn't respect locked axes. - Fixed issue where passing
null
to theresult
parameter (or omitting it entirely) of thebody_test_motion
method inPhysicsServer3D
would cause a crash. - Fixed issue where the
body_is_omitting_force_integration
method inPhysicsServer3D
would always returnfalse
.
0.4.1 - 2023-07-08
- Fixed issue where colliding with certain types of degenerate triangles in
ConcavePolygonShape3D
would cause the application to hang or emit a vast amount of errors.
0.4.0 - 2023-07-08
⚠️ Changed thecast_motion
method inPhysicsDirectSpaceState3D
to return[1.0, 1.0]
instead of[]
when no collision was detected, to match Godot Physics.⚠️ Changed contact positions to be absolute global positions instead of relative global positions, to match the new behavior in Godot Physics.
- Added support for springs in
Generic6DOFJoint3D
.
- Fixed issue where angular surface velocities (like
constant_angular_velocity
onStaticBody3D
) wouldn't be applied as expected if the imparted upon body was placed across the imparting body's center of mass. - Fixed issue where going from
CENTER_OF_MASS_MODE_CUSTOM
toCENTER_OF_MASS_MODE_AUTO
wouldn't actually reset the body's center-of-mass. - Fixed issue where any usage of
PhysicsServer3D
,PhysicsDirectBodyState3D
orPhysicsDirectSpaceState3D
in C# scripts would trigger an exception. - Fixed issue where the
recovery_as_collision
parameter in themove_and_collide
andtest_move
methods on bodies would always betrue
. - Fixed issue where the
input_ray_pickable
property on bodies and areas would always betrue
.
0.3.0 - 2023-06-28
⚠️ Changed collision layers and masks to behave as they do in Godot Physics, allowing for asymmetrical collisions, where the body whose mask does not contain the layer of the other body effectively gets infinite mass and inertia in the context of that collision.
- Added new project setting, "Use Shape Margins", which when disabled leads to all shape margins being ignored and instead set to 0, at a slight performance cost.
- Added new project setting, "Areas Detect Static Bodies", to allow
Area3D
to detect overlaps with static bodies (includingRigidBody3D
usingFREEZE_MODE_STATIC
) at a potentially heavy performance/memory cost.
- Fixed issue where a
RigidBody3D
usingFREEZE_MODE_KINEMATIC
wouldn't have its_integrate_forces
method called when monitoring contacts. - Fixed issue where scaling bodies/shapes with negative values would break them in various ways.
- Fixed issue where
CharacterBody3D
platform velocities would always be zero. - Fixed issue where the velocity of kinematic colliders would always be zero in
_physics_process
.
0.2.3 - 2023-06-16
- Fixed issue where bodies would transform in unintuitive ways when attached to a rotated joint.
- Fixed issue where bodies would sometimes transform in unintuitive ways when attached to a
Generic6DOFJoint
that used both linear and angular limits. - Fixed issue where setting the limits of a
SliderJoint3D
to the same value would make it free instead of fixed. - Fixed issue where you could still rotate a
RigidBody3D
slightly while usinglock_rotation
. - Fixed issue where friction would be applied more on one axis than the other.
0.2.2 - 2023-06-09
- Fixed issue where
AnimatableBody3D
would de-sync from its underlying body when moved. - Fixed issue where
CharacterBody3D
and other kinematic bodies would sometimes maintain a velocity after having moved.
0.2.1 - 2023-06-06
- Fixed issue where having scaled bodies attached to a joint would result in the bodies being displaced from their starting position.
0.2.0 - 2023-06-06
⚠️ Changed friction values to be combined in the same way as in Godot Physics.⚠️ Changed bounce values to be combined in the same way as in Godot Physics.⚠️ Changed the direction ofGeneric6DOFJoint
angular motors to match Godot Physics.⚠️ Changed how linear/angular velocities are applied to a frozenRigidBody3D
, to better match Godot Physics. They now apply a surface velocity, also known as a "constant velocity", instead of actually moving the body.⚠️ Changed shape margins to be interpreted as an upper bound. They are now scaled according to the shape's extents, which removes the ability to have an incorrect margin, thereby removing any warnings about that.- Changed warning/error messages to provide more context, such as the names of any bodies related/connected to that particular thing.
- Added new project setting "Bounce Velocity Threshold".
- Added support for the
custom_integrator
property onRigidBody3D
andPhysicalBone3D
. - Added support for the
integrate_forces
method onPhysicsDirectBodyState3D
. - Added support for the
rough
andabsorbent
properties onPhysicsMaterial
. - Added support for surface velocities, also known as "constant velocities", for both static and kinematic bodies.
- Added support for more flexible limits for
HingeJoint3D
andSliderJoint3D
.
- Fixed issue where
CharacterBody3D
and other kinematic bodies wouldn't elicit a proper collision response from dynamic bodies. - Fixed issue where setting friction on an already entered body would instead set bounce.
- Fixed issue where disabling or removing a body connected to a joint would error or crash.
- Fixed issue where
RigidBody3D
would de-sync from its underlying body after freezing with the "Static" freeze mode. - Fixed issue where bodies connected to a
Generic6DOFJoint
would lose their relative pose when changing any of the joint's limits
0.1.0 - 2023-05-24
Initial release.