Releases: godot-jolt/godot-jolt
0.13.0-beta1
This release only supports Godot 4.3 (starting with 4.3-beta1).
Note that this is a beta release, and as such is not available through the Godot Asset Library. It has also not been very thoroughly tested, so please report any issues you may run into, especially when dealing with some of the bigger changes, like the support for SoftBody3D
.
Expect version 0.13.0-stable to be out some time around the release of Godot 4.3-stable.
Changelog
These are the notable changes that have been made since 0.12.0-stable was released. You can also find a list of all the commits here.
Any breaking changes are denoted with
Removed
⚠️ 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
⚠️ 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. - Mirrored the way in which angular limits are visualized for
JoltHingeJoint3D
,JoltConeTwistJoint3D
andJoltGeneric6DOFJoint
.
Added
- 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
⚠️ 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
.
0.12.0-stable
This release only supports Godot 4.2 (including 4.2.x).
Changelog
These are the notable changes that have been made since 0.11.0-stable was released. You can also find a list of all the commits here.
Any breaking changes are denoted with
Changed
⚠️ 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
- 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
⚠️ 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-stable
This release only supports Godot 4.2 (including 4.2.x).
Changelog
These are the notable changes that have been made since 0.10.0-stable was released. You can also find a list of all the commits here.
Any breaking changes are denoted with
Changed
⚠️ ChangedHeightMapShape3D
to always use back-face collision, to match Godot Physics.
Fixed
- 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-stable
This release supports Godot 4.1.
Changelog
These are the notable changes that have been made since 0.9.0-stable was released. You can also find a list of all the commits here.
Any breaking changes are denoted with
Changed
⚠️ 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
- Added support for Android (ARM64, ARM32, x86-64 and x86).
- Added support for iOS.
Fixed
- 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.10.0-rc2
This is the second release candidate for version 0.10.0, and assuming no major bugs/regressions are found is likely to become 0.10.0-stable.
This release supports Godot 4.1.
Changelog
These are the notable changes that have been made since 0.9.0-stable was released. You can also find a list of all the commits here.
Any breaking changes are denoted with
Changed
⚠️ 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
- Added support for Android (ARM64, ARM32, x86-64 and x86).
- Added support for iOS.
Fixed
- Fixed issue where an error saying
Parameter "body" is null
would be emitted after freeing certain bodies while they were in contact with aCharacterBody3D
.
0.10.0-rc1
This is the first release candidate for version 0.10.0, and assuming no major bugs/regressions are found is likely to become 0.10.0-stable.
This release supports Godot 4.1.
Changelog
These are the notable changes that have been made since 0.9.0-stable was released. You can also find a list of all the commits here.
Any breaking changes are denoted with
Changed
⚠️ 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
- Added support for Android (ARM64, ARM32, x86-64 and x86).
- Added support for iOS.
Fixed
- Fixed issue where an error saying
Parameter "body" is null
would be emitted after freeing certain bodies while they were in contact with aCharacterBody3D
.
0.9.0-stable
This release supports Godot 4.1.
Changelog
These are the notable changes that have been made since 0.8.0-stable was released. You can also find a list of all the commits here.
Any breaking changes are denoted with
Changed
- Changed
ConvexPolygonShape3D
to no longer emit errors about failing to build the shape when adding one to the scene tree with 0 points.
Added
- 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
⚠️ 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-stable
This release supports Godot 4.1.
Changelog
These are the notable changes that have been made since 0.7.0-stable was released. You can also find a list of all the commits here.
Any breaking changes are denoted with
Changed
⚠️ 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
- 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
- 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.8.0-rc2
This is the second release candidate for version 0.8.0, and assuming no major bugs/regressions are found is likely to become 0.8.0-stable.
This release supports Godot 4.1.
Changelog
These are the notable changes that have been made since 0.7.0-stable was released. You can also find a list of all the commits here.
Any breaking changes are denoted with
Changed
⚠️ 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
- 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
- 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.8.0-rc1
This is the first release candidate for version 0.8.0, and assuming no major bugs/regressions are found is likely to become 0.8.0-stable.
This release supports Godot 4.1.
Changelog
These are the notable changes that have been made since 0.7.0-stable was released. You can also find a list of all the commits here.
Any breaking changes are denoted with
Changed
⚠️ 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
- 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.
Fixed
- 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.