Skip to main content

Physics Server

RapierPhysicsServer2D and RapierPhysicsServer3D extend Godot's physics servers the new methods below (that Godot does not have).

All methods are static: RapierPhysicsServer2D.method(...). The 3D server has the same API with 3D types.

Body parameters​

RapierPhysicsServer2D.body_set_extra_param(rid, param, value)
RapierPhysicsServer2D.body_get_extra_param(rid, param)
ConstantValueType
BODY_PARAM_CONTACT_SKIN0float
BODY_PARAM_DOMINANCE1int
BODY_PARAM_SOFT_CCD2float
BODY_PARAM_MASSLESS3bool
BODY_PARAM_ADDITIONAL_SOLVER_ITERATIONS4int

See Body Nodes for what each does.

Contact queries​

MethodReturns
body_set_contact_force_threshold(body, threshold)Contact force a contact must exceed before it is reported.
body_get_contact_force_threshold(body)The threshold above.
body_get_total_contact_impulse(body)Total contact impulse on the body this step, as a vector.
body_get_max_contact_impulse(body)Strongest single contact impulse magnitude this step.
body_get_total_friction_impulse(body)Total friction impulse magnitude this step.
body_get_contact_tangent_impulse(body, contact_idx)Friction impulse at one reported contact.
bodies_get_contact_impulse(body_a, body_b)Impulse body_a receives from body_b specifically.

Impulses are read straight from the solver. Divide by the step delta for a force.

Body state​

MethodReturns
body_get_kinetic_energy(body)Kinetic energy combining linear and angular motion.
body_is_ccd_active(body)Whether continuous collision detection actually ran for this body last step.

Joints​

Create a joint with PhysicsServer2D.joint_create(), then shape it:

# Rope: bodies move freely while closer than max_distance.
RapierPhysicsServer2D.joint_make_rope(joint, anchor_a, anchor_b, max_distance, body_a, body_b)

# Fixed: locks all relative motion.
RapierPhysicsServer2D.joint_make_fixed(joint, anchor, body_a, body_b)

Anchors are in world space.

Joint parameters​

RapierPhysicsServer2D.joint_set_extra_param(joint, param, value)
RapierPhysicsServer2D.joint_get_extra_param(joint, param)
ConstantValueMeaning
JOINT_TYPE0The parameter selecting impulse vs multibody.
JOINT_TYPE_IMPULSE_JOINT0Solved iteratively by constraints.
JOINT_TYPE_MULTIBODY_JOINT1Solved exactly in reduced coordinates; cannot drift.
JOINT_TYPE_MULTIBODY_KINEMATIC_JOINT2Multibody with a kinematic root.

Tuning​

MethodWhat it does
joint_set_softness(joint, natural_frequency, damping_ratio)How rigidly the joint holds; damping ratio 1 is critically damped.
joint_set_enabled(joint, enabled)Toggle without destroying: breakable constraints.
joint_set_motor_position_options(joint, target_pos, stiffness, damping, enabled)Drive the joint to an angle like a spring. See motor position targets.

Reading forces​

MethodReturns
joint_get_reaction_impulse(joint)World-space linear impulse the joint applied last step.
joint_get_reaction_angular_impulse(joint)World-space angular impulse last step.

Useful for breakable joints and rope tension. Multibody joints return zero.

Inverse kinematics​

For multibody joints only. See Multibody Joints and IK.

MethodWhat it does
joint_solve_inverse_kinematics(joint, target_transform)Solve the chain towards a target and apply the result.
joint_set_ik_options(joint, damping, max_iterations, constrained_axes, epsilon_linear, epsilon_angular)Custom solver options for one joint.
joint_reset_ik_options(joint)Back to Rapier defaults.

Fluids​

Backing API of the fluid nodes. RIDs come from fluid_create().

MethodWhat it does
fluid_create()Create a fluid, returns its RID.
fluid_set_space(fluid, space)Put the fluid in a space.
fluid_set_density(fluid, density)Set density.
fluid_set_effects(fluid, effects)Set effect resources (viscosity, elasticity, surface tension).
fluid_set_points(fluid, points)Replace all particles.
fluid_set_points_and_velocities(fluid, points, velocities)Replace particles and velocities.
fluid_add_points_and_velocities(fluid, points, velocities)Add particles.
fluid_delete_points(fluid, indices)Remove particles by index.
fluid_get_points(fluid)Particle positions.
fluid_get_velocities(fluid)Particle velocities.
fluid_get_accelerations(fluid)Particle accelerations.
fluid_get_particles_in_aabb(fluid, aabb)Indices of particles inside a box.
fluid_get_particles_in_ball(fluid, center, radius)Indices of particles inside a sphere.
fluid_set_collision_masks(fluid, mask, layer)Interaction groups.
fluid_get_collision_mask(fluid) / fluid_get_collision_layer(fluid)Read them back.

Spaces and stepping​

MethodWhat it does
space_step(space, delta)Step one space manually. Requires disabling automatic stepping.
space_flush_queries(space)Flush queued callbacks after space_step.
space_get_active_bodies(space)RIDs of the active bodies.
space_get_bodies_transform(space, bodies)Transforms for a list of bodies.

Identity and diagnostics​

MethodWhat it does
get_rapier_id(rid)Stable id of an object; survives scene reload, used with serialization.
get_global_id() / set_global_id(id)The server's id counter; restore it when loading a saved state.
get_stats()Dictionary of internal counters.

State saving​

Exporting and importing whole-space state lives on the RapierStateManager2D / RapierStateManager3D nodes, not the server. See Serialization.