Godot Jolt is a Godot extension that integrates the Jolt physics engine
This release only supports Godot 4.2 (including 4.2.x).
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 ⚠️.
node_a
to be the "world node" rather than node_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.Generic6DOFJoint3D
and ConeTwistJointImpl3D
, as well as their substitute joints, to use pyramid-shaped angular limits instead of cone-shaped limits, to better match Godot Physics.equilibrium_point
properties for Generic6DOFJoint3D
and JoltGeneric6DOFJoint3D
, to match the direction of the angular limits.equilibrium_point
properties for Generic6DOFJoint3D
and JoltGeneric6DOFJoint3D
, from ZXY to XYZ, to match the rotation order of the angular limits.JoltSliderJoint3D
and JoltGeneric6DOFJoint3D
.RigidBody3D
frozen with FREEZE_MODE_KINEMATIC
to report contacts/collisions with other kinematic/static bodies, at a potentially heavy performance/memory cost.HeightMapShape3D
.HeightMapShape3D
.HeightMapShape3D
not using back-face collision.max_contacts_reported
property to a lower value.Generic6DOFJoint3D
and JoltGeneric6DOFJoint3D
would yield odd limit shapes when using both linear and angular asymmetrical limits.Generic6DOFJoint3D
and JoltGeneric6DOFJoint3D
would be moved when using asymmetrical limits.RigidBody3D
with locked axes colliding with a StaticBody3D
(or another frozen RigidBody3D
using FREEZE_MODE_STATIC
) would result in NaNs.HingeJoint3D
and JoltHingeJoint3D
would sometimes dull forces applied to either of its bodies when at either of its limits.Info.plist
missing the MinimumOSVersion
key.This release only supports Godot 4.2 (including 4.2.x).
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 ⚠️.
HeightMapShape3D
to always use back-face collision, to match Godot Physics.move_and_slide
will respect such velocities.RigidBody3D
.body_set_force_integration_callback
could be called even when the body is sleeping.This release supports Godot 4.1.
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 ⚠️.
gravity_point_unit_distance
for Area3D
to result in a constant gravity when set to zero, rather than resulting in a zero gravity, to match Godot Physics.hit_from_inside
parameter report a zero normal when hitting a convex shape from inside, to match Godot Physics.space_get_contacts
method of PhysicsServer3D
(and thus also the "Visible Collision Shapes" debug rendering) to no longer include contacts generated by overlaps with Area3D
.Parameter "body" is null
would be emitted after freeing certain bodies while they were in contact with a CharacterBody3D
.RigidBody3D
could sometimes still be moved by another RigidBody3D
despite the first body not having the second body in its collision mask.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.
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 ⚠️.
hit_from_inside
parameter report a zero normal when hitting a convex shape from inside, to match Godot Physics.space_get_contacts
method of PhysicsServer3D
(and thus also the "Visible Collision Shapes" debug rendering) to no longer include contacts generated by overlaps with Area3D
.Parameter "body" is null
would be emitted after freeing certain bodies while they were in contact with a CharacterBody3D
.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.
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 ⚠️.
hit_from_inside
parameter report a zero normal when hitting a convex shape from inside, to match Godot Physics.space_get_contacts
method of PhysicsServer3D
(and thus also the "Visible Collision Shapes" debug rendering) to no longer include contacts generated by overlaps with Area3D
.Parameter "body" is null
would be emitted after freeing certain bodies while they were in contact with a CharacterBody3D
.This release supports Godot 4.1.
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 ⚠️.
ConvexPolygonShape3D
to no longer emit errors about failing to build the shape when adding one to the scene tree with 0 points.Generic6DOFJoint
and JoltGeneric6DOFJoint
would lock up any axis that used a spring stiffness/frequency of 0.ConcavePolygonShape3D
.This release supports Godot 4.1.
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 ⚠️.
apply_force
and apply_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.Area3D
to behave like they do in Godot Physics, allowing for asymmetrical setups, where overlaps are only reported if the mask of an Area3D
contains the layer of the overlapping object.body_set_force_integration_callback
method of PhysicsServer3D
to behave like it does with Godot Physics, where omitting the binding of userdata
requires that the callback also doesn't take any userdata
. It also will no longer be called when the body is sleeping.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.space_dump_debug_snapshot
to JoltPhysicsServer3D
, for dumping a binary debug snapshot of a particular physics space.dump_debug_snapshots
to JoltPhysicsServer3D
, for dumping binary debug snapshots of all currently active physics spaces.move_and_slide
, where under certain conditions you could get stuck on internal edges of a ConcavePolygonShape3D
if the floor was within 5-ish degrees of floor_max_angle
.move_and_slide
, where under certain conditions, while using a BoxShape3D
or CylinderShape3D
shape, you could get stuck on internal edges of a ConcavePolygonShape3D
.ConvexPolygonShape3D
could yield a flipped contact normal.Area3D
with monitoring
disabled wouldn't emit any entered events for already overlapping bodies once monitoring
was enabled.RigidBody3D
attached to a joint would shift its transform relative to the joint.total_gravity
property on PhysicsDirectBodyState3D
would always return a zero vector for kinematic bodies.Area3D
detecting overlaps slightly outside of its collision shapes.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.
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 ⚠️.
Area3D
to behave like they do in Godot Physics, allowing for asymmetrical setups, where overlaps are only reported if the mask of an Area3D
contains the layer of the overlapping object.body_set_force_integration_callback
method of PhysicsServer3D
to behave like it does with Godot Physics, where omitting the binding of userdata
requires that the callback also doesn't take any userdata
. It also will no longer be called when the body is sleeping.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.space_dump_debug_snapshot
to JoltPhysicsServer3D
, for dumping a binary debug snapshot of a particular physics space.dump_debug_snapshots
to JoltPhysicsServer3D
, for dumping binary debug snapshots of all currently active physics spaces.move_and_slide
, where under certain conditions you could get stuck on internal edges of a ConcavePolygonShape3D
if the floor was within 5-ish degrees of floor_max_angle
.move_and_slide
, where under certain conditions, while using a BoxShape3D
or CylinderShape3D
shape, you could get stuck on internal edges of a ConcavePolygonShape3D
.ConvexPolygonShape3D
could yield a flipped contact normal.Area3D
with monitoring
disabled wouldn't emit any entered events for already overlapping bodies once monitoring
was enabled.RigidBody3D
attached to a joint would shift its transform relative to the joint.total_gravity
property on PhysicsDirectBodyState3D
would always return a zero vector for kinematic bodies.Area3D
detecting overlaps slightly outside of its collision shapes.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.
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 ⚠️.
Area3D
to behave like they do in Godot Physics, allowing for asymmetrical setups, where overlaps are only reported if the mask of an Area3D
contains the layer of the overlapping object.body_set_force_integration_callback
method of PhysicsServer3D
to behave like it does with Godot Physics, where omitting the binding of userdata
requires that the callback also doesn't take any userdata
. It also will no longer be called when the body is sleeping.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.move_and_slide
, where under certain conditions you could get stuck on internal edges of a ConcavePolygonShape3D
if the floor was within 5-ish degrees of floor_max_angle
.move_and_slide
, where under certain conditions, while using a BoxShape3D
or CylinderShape3D
shape, you could get stuck on internal edges of a ConcavePolygonShape3D
.ConvexPolygonShape3D
could yield a flipped contact normal.Area3D
with monitoring
disabled wouldn't emit any entered events for already overlapping bodies once monitoring
was enabled.RigidBody3D
attached to a joint would shift its transform relative to the joint.total_gravity
property on PhysicsDirectBodyState3D
would always return a zero vector for kinematic bodies.This release supports Godot 4.1.
These are the notable changes that have been made since 0.6.0-stable was released. You can also find a list of all the commits here.
Any breaking changes are denoted with ⚠️.
JoltDebugGeometry3D
node for all distributed builds. If you still need it, build from source using the *-development
or *-debug
configurations.ConcavePolygonShape3D
if its hit_back_faces
parameter is set to false
, regardless of what the backface_collision
property of the ConcavePolygonShape3D
is set to.HeightMapShape3D
to match Godot Physics.HingeJoint3D
(or JoltHingeJoint3D
) would rotate counter-clockwise instead of clockwise.ConcavePolygonShape3D
that had backface_collision
enabled, you would sometimes end up with a flipped normal.CharacterBody3D
using move_and_slide
could sometimes get stuck when sliding along a wall.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.