NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
crates.io · #5045 most downloaded on crates.io
3-dimensional physics engine in Rust.
Last release 12 days ago
25 Sep 2026
Release timing varies
gaps range from 2 weeks to 5 months
Nearly every release is documented
notes for 49 of 52 stable releases
Nothing withdrawn
no release was ever pulled
6 years old
58 releases · first in 2021
One column per quarter.
ci: split the bevy_rapier workflow into parallel jobs
ci: split the bevy_rapier workflow into parallel jobs
Release v0.36.0
SoftBodySet, SoftBody and SoftBodyBuilder (ropes, cloth, trimeshes, volumes…),
simulated together with rigid bodies, contacts and joints; also on PhysicsWorld.SoftBodySet::tear/cut); torn-off
pieces become soft bodies and report a SoftBodyTearEvent.SoftBodySet::add_cluster): rigid proxies that joints and colliders attach to.ColliderSet::insert_deformable binds a DEFORMABLE trimesh (3D) or
polyline (2D) to a soft body through a SoftMeshBinding.fem feature (SoftBodySolver::Fem).IntegrationParameters::soft_bodies, soft-body debug-render modes, and soft bodies in snapshots.RigidBody(Builder)::additional_pgs_iterations: extra PGS iterations per substep for a body's island.DebugRenderMode::PSEUDO_NORMALS draws the pseudo-normals of trimeshes and polylines.ColliderBuilder::polyline_with_flags, RigidBodyHandle::is_invalid, and a public
CoefficientCombineRule::combine.PhysicsWorld::detect_collisions (collision detection without stepping) and
PhysicsWorld::remove_body_with_colliders.CCDSolver::invalidate_fixed_targets_cache, for users calling CCDSolver::solve_continuous directly.Multibody::remove_dof_coupling, retain_dof_couplings and clear_dof_couplings.rapier3d-urdf: UrdfLink::urdf_link_index and UrdfJoint::urdf_joint_index (and
merged_urdf_joint_indices) map loaded links and joints to their URDF counterparts.rapier3d-mjcf: MjcfContactHooks::is_excluded and pair_override query a model's contact rules.bindings/c): 2D/3D, f32/f64, a C11 header with C++ helpers, and a CMake package.PhysicsPipeline::step, RigidBodySet::remove, ColliderSet::remove, DebugRenderPipeline::render
and CCDSolver::solve_continuous take the SoftBodySet.EventHandler has a new required method handle_soft_body_tear_event, and
ChannelEventCollector::new takes a sender for these events.ContactPair::manifolds and solver_clusters moved to ContactPair::contacts: use
pair.manifolds() or pair.rigid().ContactModificationContext moved behind ctx.rigid_mut().SolverFlags::COMPUTE_IMPULSES is renamed COMPUTE_RIGID_IMPULSES.RigidBodyType::SoftFrame: the rigid proxies of soft bodies, counted as dynamic by is_dynamic.DebugRenderObject::SoftBody variant, and new fields in IntegrationParameters,
DebugRenderStyle and PhysicsWorld (soft_bodies, collision_pipeline).CCDSolver::solve_continuous no longer takes scene_changed, and
RigidBodyCcd::is_moving_fast also takes the body's mass properties.std feature of rapier2d and rapier2d-f64 now enables parry2d/spade.bindings/ directory.bevy_rapier2d and bevy_rapier3d plugins now live in this repository, in bindings/bevy_rapier.KinematicCharacterController::solve_character_collision_impulses now pushes every dynamic body
touched by a compound character, not only the last one.dt == 0 no longer produces NaNs: it only applies user changes and detects collisions.CollisionPipeline::step no longer trips a debug assertion when a moving body touches a collider.PhysicsPipeline::counters now fills the contact pair, contact and constraint counts.max_ccd_substeps > 1: end-of-step AABBs cover the full next step, the step splitter uses
the current velocity, and heavy bodies under gravity are no longer flagged as fast.SpringCoefficients no longer divides by zero when damping_ratio is zero.rapier3d-urdf: <origin rpy> angles are now composed as fixed-axis roll-pitch-yaw, as specified.rapier3d-urdf: the fixed children of a squeezed empty link stay rigidly attached, and the joint
taking over the removed link's joint keeps its pivot.camera_rotation and camera_fwd_dir return the actual camera orientation.Release v0.35.3
Release v0.35.3 (#1002)
Multibody: guard against the instabilities the semi-implicit coriolis term can introduce when the mass matrix is near-singular. The free-velocity upda
1 / (num_solver_iterations + 1) and no longer vary with warmstart_coefficient.margin is no longer loaded as a contact_skin, which made geoms rest that far
apart. It is ignored below rapier’s speculative-contact distance, and becomes the body’s
soft-CCD prediction above it (PairOverride::margin is removed).MotorModel::ForceBased, matching MuJoCo gains, which are absolute
generalized forces rather than accelerations.Added public access to the testbed’s Window and GraphicsManager to enable custom rendering on third-party examples.
Window and GraphicsManager to enable custom
rendering on third-party examples.Release v0.35.0
Release v0.35.0 (#982)
ContactForceEvent::started: true on the step a pair's total contact force first
exceeds its contact_force_event_threshold (coming from below it, or from separation),
false while it stays above on consecutive steps — the analogue of PhysX's
"threshold force found" vs "persists" report. The status resets when the force drops
back below the threshold or the colliders separate.
CoefficientCombineRule::GeometricMean: combines friction/restitution as
sqrt(c1 * c2), the convention used by several other engines. It has the highest
rule priority, and clamps negative coefficients to zero before the square root.
DebugRenderStyle::sleep_eligible_color_multiplier: the debug-renderer now draws bodies that
are eligible for sleep but still awake in a distinct color, making it easy to spot what is
keeping a pile awake.
Wheel::rotation now accumulates from the wheel's own rolling direction on the
contact plane (contact normal × axle, the same forward direction used by the
friction update) instead of the chassis' index_forward_axis, so wheels visually
spin whenever the vehicle actually rolls (adapted from PR #950 by @tomo0613).DynamicRayCastVehicleController no longer has unlimited braking friction when a
wheel's side impulse is exactly zero (e.g. braking in a straight line): the skid
clamp now applies to the forward impulse as well, so braking strength is bounded by
friction_slip (PR #947 by @tomo0613).(-π, π): the limit rows now measure the
wrapped joint angle from the middle of the allowed range (with the joint axis as the row's
jacobian, like the angular motor rows), so a range may sit anywhere on the circle
([0, 3π/2] stops the joint at 3π/2 instead of π/2, and ranges crossing the ±π seam like
[3π/4, 5π/4] work at all). A range wider than a full turn is indistinguishable from "no
limit" for an angle read off a relative rotation, so it now leaves the axis free instead of
clamping it at some folded-back angle.IntegrationParameters::max_corrective_velocity, like contacts always did: a deep limit
violation recovers over a few steps instead of catapulting the bodies.DynamicRayCastVehicleController.update_vehicle now excludes the chassis body from
the suspension raycasts by default (their origins sit on its own collider).grounded flag when snap-to-ground is enabled (PR #481 by @ChrisJanssens).ContactForceEvent sums the pair's solver manifolds, so contact clustering no longer
makes the reported force and contact point disagree with what the solver applied.RigidBodyBuilder::additional_mass on a body whose colliders are all massless (zero density)
now derives the angular inertia from the collider shapes instead of leaving it null, so such
bodies rotate (issue #666).x no longer picks
an arbitrarily rolled frame (issue #746).RigidBody::sleep() is now honored immediately, even when the body was repositioned during
the same frame (issue #448).ImpulseJointSet::joints_between now yields every joint between the two bodies instead of
only the first (issue #866).CollisionPipeline::step now clears the rigid-bodies' modified flags, so a collision-only
pipeline no longer accumulates stale change tracking (issue #662).enhanced-determinism.NarrowPhase::contact_pair now returns None for
same-parent colliders instead of a manifold-less pair.block-solver feature, manifolds whose 2x2 constraint matrix is almost singular
(e.g. redundant contact points) are now solved with the sequential solver instead of a
degraded one-point solve, removing residual jiggle in piles. The block solver also uses the
same lexicographic manifold point ordering as the sequential solver.Nothing published for this version
⚠ Removed the simd-stable, simd-nightly and simd-is-enabled features: SIMD is now always on, backed by wide (which falls back to scalar code where uns
simd-stable, simd-nightly and simd-is-enabled features: SIMD is now
always on, backed by wide (which falls back to scalar code where unsupported); the
nightly core::simd backend is gone (we will support it when it get stabilized).
Just drop these features from your Cargo.toml.PhysicsHooks and EventHandler now require Sync instead of Send + Sync (through
the blanket-implemented utils::MaybeSync). Existing implementations keep compiling.IslandManager and RigidBodyActivation serialization formats changed.normalized_linear_threshold defaults to 0.05 (was 0.4,
and is now measured at the body’s farthest point) and time_until_sleep to 0.5 seconds
(was 2.0).IntegrationParameters::min_island_size
was removed.CCDSolver::predict_impacts_at_next_positions/clamp_motions, PredictedImpacts and
TOIEntry were replaced by CCDSolver::solve_continuous.ccd_enabled upgrades
a body to a "bullet" that also sweeps kinematic and dynamic bodies. Set
IntegrationParameters::max_ccd_substeps to 0 to disable CCD entirely.IntegrationParameters::max_linear_velocity() (default 400 units/s) and rotation at
~45° per step (RigidBody::set_allow_fast_rotation bypasses the angular cap).
RigidBodyCcd::ccd_max_dist became RigidBody::max_extent(), which max_point_velocity
now takes as an argument.normalized_prediction_distance is 0.02 (was 0.002),
normalized_max_corrective_velocity is 3.0 (was 10.0) and
normalized_allowed_linear_error is 0.005 (was 0.001), greatly reducing tunneling
through thin walls. Contacts against fixed bodies use a stiffer spring
(IntegrationParameters::static_contact_softness).SolverContact stores per-body anchors instead of a single world point, and friction
and restitution became per-manifold (new friction/restitution fields on
ContactModificationContext, instead of per-contact). Inside
PhysicsHooks::modify_solver_contacts the anchors still hold fresh world-space points,
and dist edits are still honored. ContactModificationContext::solver_contacts is now
a SolverContacts (an inline ArrayVec in 2D, still a Vec in 3D).ContactPair can now store reduced solver clusters alongside its manifolds; use
ContactPair::solver_manifolds() to read what the solver actually sees.RigidBody::additional_solver_iterations now adds whole solver substeps for the
body’s constraint-connected component, converging much better on high mass ratios.PhysicsPipeline::quarantine()/PhysicsWorld::quarantine() (new Quarantine type),
instead of corrupting the rest of the simulation.PhysicsPipeline/PhysicsWorld (parallel feature):
configure_thread_pool, set_thread_pool, thread_pool, clear_thread_pool and
num_threads. When set, the whole step runs inside that pool.enhanced-determinism can now be combined with parallel, with results bitwise
identical for any thread-pool size, and costs no measurable performance anymore
(cross-platform determinism now rests on glam’s shared scalar core plus libm-pinned
transcendentals). It remains incompatible with simd8, and cross-platform reproducibility
still requires matching numeric features (block-solver, f32 vs f64).simd8 feature: widens the solver’s SIMD from 4 to 8 lanes (f32 only; needs an
AVX2-capable target to emit 256-bit instructions).block-solver feature (on by default in 2D): solves adjacent contact points as
coupled 2x2 blocks for better resting-stack stability.unsync-callbacks feature: drops the Sync requirement from PhysicsHooks and
EventHandler for thread-affine callbacks (a JS closure, a GUI handle). Callbacks then
all run on the thread driving step(), and the thread-pool API above is compiled out
(install a pool by stepping from inside it). Parallelism is kept: only the pairs that can
reach a callback are held back for the driving thread.solver-bounds-checks feature: validates the solver’s body indices at constraint
generation, turning a stale index into a clean panic instead of an unchecked SIMD gather.ColliderBuilder::oriented_polyline (2D): a one-sided polyline that only collides on the
side determined by vertex winding.IntegrationParameters::contact_clustering and contact_recycling (both on by default,
plus normalized_contact_recycle_distance): reduce narrow-phase and solver work on
composite-shape and resting contacts.IntegrationParameters::friction_in_bias_pass and warmstart_joints solver tuning knobs.Release v0.34.0
Release v0.34.0 (#958)
Multibody::armature() / armature_mut(). The related
Multibody::dof_inverse_inertia() returns the articulated DoF inverse inertia including armature.MultibodyJoint::set_spring() / spring(), integrated implicitly.MultibodyDofCoupling and Multibody::add_dof_coupling() / couplings().MultibodyLink::assembly_id() exposes the offset of a link's DoFs in the multibody's generalized
coordinate/velocity vectors.rapier3d-mjcf: support for tendons, equality constraints, materials (including visual-mesh
materials), actuator max-force, joint DoF coupling, armature, per-DoF spring/damper, and control.parallel feature enabled.rapier_testbed only): the testbed was reworked to remove the callback-based API.
Harness::add_callback / clear_callbacks and the HarnessPlugin trait were removed, and several
testbed/harness types (RunState, PhysicsState, RapierBroadPhaseType,
TestbedApp::from_builders / set_builders, etc.) were changed. Simulation setup now drives the
physics world directly instead of registering per-step callbacks. The core rapier2d/rapier3d
physics API is unaffected.Release v0.33.0
Release v0.33.0 (#944)
mjcf-rs and rapier3d-mjcf crates: a pure-Rust (no libmujoco/FFI) loader for the MuJoCo
MJCF XML format. mjcf-rs parses MJCF into a typed AST — resolving <include>, <default>
class inheritance, angle units, and the several rotation specs (quat, axisangle, euler,
xyaxes, zaxis) — and rapier3d-mjcf converts a model into rigid-bodies, colliders, and
joints via MjcfRobot. Meshes load behind the stl/wavefront/msh features, and visual
meshes support per-vertex normals with optional smoothing (#936, #943).rapier-py-* crates under python/), generated and published
as installable wheels (#938).PhysicsWorld convenience wrapper bundling RigidBodySet, ColliderSet, the broad/narrow
phases, islands, joints, the CCD solver, gravity, and integration parameters in a single struct,
for simpler setup of basic simulations. It also exposes helpers for waking bodies (wake_up,
wake_up_all), iterating only active bodies (active_bodies), and iterating joints — including
those attached to a given body (impulse_joints, impulse_joints_with, multibody_joints,
multibody_joints_with).std/alloc feature gating: no_std builds are now supported, and a subset of the library
compiles without alloc as well (e.g. for spirv targets) (#928).InteractionGroups and Group now derive bytemuck::NoUninit under the bytemuck feature,
and InteractionTestMode is #[repr(u32)], making them GPU-uploadable.MultibodyJoint::joint_rot() and MultibodyJoint::coords() expose the joint’s rotation and
generalized coordinates publicly.ImpulseJointSet::set_bodies rewires an existing impulse joint to a new pair of bodies while
preserving its handle, configuration, and warm-started impulses.rapier3d-urdf:
UrdfLoaderOptions::mesh_converter lets the loader replace the original mesh with a
cheap proxy shape (e.g. MeshConverter::Obb) while keeping the source mesh available for
rendering via the new UrdfCollider::visual / UrdfVisual types.UrdfLoaderOptions::scale applies a uniform scale to link positions, joint anchors,
mesh sizes, primitive shape sizes, inertial offsets, and prismatic joint limits.UrdfLoaderOptions::squeeze_empty_fixed_links (default true) removes empty links
connected by fixed joints, splicing the kinematic chain so bodyless “frame-only” links
(e.g. world, *_tcp) no longer create mass-less rigid-bodies.<geometry></geometry> blocks are now accepted (sanitized before
parsing, then skipped when building colliders).urdf_rs crate is re-exported.QueryPipeline::project_point now honors its max_dist argument (it was previously ignored).PhysicsHooks::filter_contact_pair
hook, matching narrow-phase semantics. Previously, CCD would clamp a fast-moving body's
motion at a predicted impact with a pair the user had filtered out (#929, closes #754).RigidBody::add_force / add_torque / reset_forces /
reset_torques: user-defined forces and torques are not cleared automatically between
steps and persist until explicitly reset (#903).rapier3d-urdf, rapier3d-meshloader, and rapier3d-mjcf so they
follow the same versioning as the other libraries in the workspace.CCDSolver::find_first_impact and
CCDSolver::predict_impacts_at_next_positions now take an extra hooks: &dyn PhysicsHooks
argument. PhysicsPipeline::step callers are unaffected.QueryPipeline::project_point_and_get_feature now takes an additional
max_dist: Real argument.rapier3d-urdf): UrdfLink::colliders and UrdfLinkHandle::colliders changed
from Vec<Collider> / Vec<ColliderHandle> to Vec<UrdfCollider> / Vec<UrdfColliderHandle>
to carry the optional visual mesh override.rapier3d-urdf): with squeeze_empty_fixed_links defaulting to true,
empty links bridged by fixed joints are now collapsed by default. Set it to false to keep
the previous behavior.glamx to 0.3.wide version to 1 (#902).Nothing published for this version
feat: migrate to glam whenever relevant + migrate testbed to kiss3d i…
feat: migrate to glam whenever relevant + migrate testbed to kiss3d i…
Isometry<Real> → Pose (glamx Pose2/3)Point<Real> → Vector for world-space positions (parry no longer distinguishes Point from Vector)Rotation<Real> → Rotation (glamx Rot2 or Quat)Translation<Real> → removed, use Pose::from_translation()SimdVector<N>, SimdPose<N>, DVector, DMatrix).RigidBody::linvel() returns Vector instead of &Vector<Real>RigidBody::angvel() returns AngVector instead of &Vector<Real> (3D) or Real (2D)RigidBody::center_of_mass() returns Vector instead of &Point<Real>RigidBody::local_center_of_mass() returns Vector instead of &Point<Real>Collider::translation() returns Vector instead of &Vector<Real>Collider::rotation() returns Rotation instead of &Rotation<Real>DebugRenderBackend::draw_line signature changed: takes Vector instead of Point<Real> for line endpoints.DebugRenderBackend::draw_polyline and draw_line_strip now take &Pose and Vector instead of &Isometry<Real> and &Vector<Real>.benchmarks2d and benchmarks3d crates (merged with examples2d and examples3d).If your codebase currently relies on nalgebra, note that nalgebra and glamx provide type conversion. Enable the
corresponding features:
nalgebra = { version = "0.34", features = [ "convert-glam030" ] }glamx = { version = "0.1", features = ["nalgebra"] }
then you can convert between glam and nalgebra types using .into().Isometry<Real> with Pose, and Point<Real> with Vector for positions.Isometry::identity() → Pose::IDENTITYIsometry::translation(x, y, z) → Pose::from_translation(Vector::new(x, y, z))Isometry::rotation(axis_angle) → Pose::from_rotation(Rotation::from_scaled_axis(axis_angle))isometry.translation.vector → pose.translationisometry.rotation.scaled_axis() → pose.rotation.to_scaled_axis()& or .clone() when using linvel(), angvel(), center_of_mass(), translation(), rotation() since they now return by value.DebugRenderBackend implementations to use Vector instead of Point<Real>.glamx crate is re-exported as rapier::glamx for direct glam type access if needed.InteractionGroups struct now contains InteractionTestMode. Continues rapier/pull/170 for rapier/issues/622
InteractionGroups struct now contains InteractionTestMode.
Continues rapier/pull/170
for rapier/issues/622InteractionGroups constructor now requires an InteractionTestMode parameter. If you want same behaviour as before,
use InteractionTestMode::And (eg.
InteractionGroups::new(Group::GROUP_1, Group::GROUP_1, InteractionTestMode::And))CoefficientCombineRule::Min - now makes sure it uses a non zero value as result by using coeff1.min(coeff2).abs()InteractionTestMode: Specifies which method should be used to test interactions. Supports AND and OR.CoefficientCombineRule::ClampedSum - Adds the two coefficients and does a clamp to have at most 1.ColliderChanges::CHANGED to ::IN_CHANGED_SET to make its meaning more precise.RigidBodyChanges::CHANGED to ::IN_CHANGED_SET to make its meaning more precise.IntegrationParameters::contact_natural_frequency and IntegrationParameters::contact_damping_ratio behind
a single IntegrationParameters::contact_softness (#789).Integration_parameters methods related to erp and cfm. They are now methods of the
IntegrationParameters::softness and GenericJoint::softness fields (#789).IntegrationParameters::joint_natural_frequency and IntegrationParameters::joint_damping_ratio in favor of
per-joint softness coefficients GenericJoint::softness (#789).SolverContact::contact_id public so that user code knows what geometric contact it originates from (#888).Release v0.30.1
Release v0.30.1 (#886)
wake_up flag passed to set_linear_velocity and
set_angular_velocity.PdController, PidController and DynamicRaycastVehicle controllers.Update to parry 0.25 (which involves breaking changes in the Voxels API but improves its internal storage to support large voxel maps).
Voxels API but improves its internal storage to support
large voxel maps).Update to parry 0.24 (includes a breaking change where all the *angular_inertia_sqrt fields and functions have been replaced by their non-square-root…
This version contains a significant rework of the internal velocity constraints solver. This makes it both simpler and more optimized (making the whole simulation up to 25% faster). For details on all the changes, see #876.
Notable changes include:
*angular_inertia_sqrt fields and functions have been
replaced by their non-square-root equivalent.IntegrationParameters::friction_model.IntegrationParameters::pgs_legacy and
::tgs_soft_without_warmstart.Update to nalgebra 0.34 and parry 0.23.
IslandSolver has changed slightly to take the broad-phase as input.BroadPhase trait and use the BVH broad-phase directly instead of a trait-object.Collider::compute_broad_phase_aabb to compute the AABB to be used by the broad-phase, taking
into account its contact skin, prediction, and soft-ccd.Modified the QueryPipeline API to take some geometric elements by-value instead of by-reference to make them easier to use.
QueryPipeline API to take some geometric elements by-value instead of by-reference to make them
easier to use.Replace the hierarchical SAP broad-phase by a broad-phase based on parry’s new BVH structure.
QueryPipeline is now and ephemeral object obtained from the broad-phase with broad_phase.as_query_pipeline().
It no longer needs to be updated separately from the broad-phase.Add RigidBodySet::get_pair_mut and ColliderSet::get_pair_mut to get two mutable rigid-bodies or colliders simultaneously.
RigidBodySet::get_pair_mut and ColliderSet::get_pair_mut to get two mutable rigid-bodies or colliders
simultaneously.Update to parry 0.21.0. This changes the initialization of Voxels colliders by removing the primitive geometry argument. This also fixes intersection
Voxels colliders by removing the primitive geometry
argument. This also fixes intersection checks with voxels, and force calculation between voxels and other
voxels or compound shapes.### Modified - Pin parry version to 0.20.1.
Added support for parry’s new Voxels collider shape with ColliderBuilder::voxels, ColliderBuilder::voxels_from_points, and ColliderBuilder::voxelized_
Voxels collider shape with ColliderBuilder::voxels,
ColliderBuilder::voxels_from_points, and ColliderBuilder::voxelized_mesh.MeshConverter now implements Copy.IntegrationParameters now implements PartialEq.
IntegrationParameters now implements PartialEq.parry 0.19).Add PdController and PidController for making it easier to control dynamic rigid-bodies at the velocity level. This can for example be used as a build
PdController and PidController for making it easier to control dynamic rigid-bodies at the velocity level.
This can for example be used as a building block for a dynamic character controller.RigidBodyPosition::pose_errors to compute the translational and rotational delta between
RigidBodyPosition::position and ::next_position.Sub for RigidBodyVelocity.RigidBody::local_center_of_mass() to get its center-of-mass in the rigid-body’s local-space.The broad-phase region key has been replaced by an i64 in the f64 version of rapier, increasing the range before panics occur.
BroadphaseMultiSap not being able to serialize correctly with serde_json.KinematicCharacterController::move_shape not respecting parameters max_slope_climb_angle and
min_slope_slide_angle.KinematicCharacterController. (#715)COMPUTE_IMPULSES.RigidBodySet and ColliderSet have a new constructor with_capacity.profiling crate to provide helpful profiling information in different tools.
puffin_eguiInteractionGroups default value for memberships is now GROUP_1 (#706)ImpulseJointSet::get_mut has a new parameter wake_up: bool, to wake up connected bodies.instant in favor of web-time. This effectively removes the wasm-bindgen transitive
dependency as it's no longer needed.QueryPipeline::intersection_with_shape.Fix crash when removing a multibody joint, or a rigid-body with a multipody-joint attached to it.
BroadphaseMultiSap not being able to serialize a field with serde_json.DebugRenderMode::COLLIDER_SHAPES
enabledDebug for ColliderSet, InteractionGraph,
MultibodyLink, MultibodyJointSet, Multibody, ImpulseJointSetQueryFilterFlags variant so that
the smallest one is 1 instead of 2 (fixes a bug in rapier.js).BroadphaseMultiSap now serializes its colliders_proxy_ids as Vec[(ColliderHandle, BroadPhaseProxyIndex)].Fix NaN values appearing in bodies translation and rotation after a simulation step with a delta time equal to 0 (#660).
NaN values appearing in bodies translation and rotation after a simulation step with a delta time equal to
0 (#660).nalgebra 0.33 and parry 0.16.solve_character_collision_impulses collisions parameter is now an iterator over references.This release introduces two new crates:
This release introduces two new crates:
rapier3d-urdf for loading URDF files into rapier3d. This will load the rigid-bodies,
colliders, and joints.rapier3d-stl for loading an STL file as a collision shape.Multibody::inverse_kinematics, Multibody::inverse_kinematics_delta,
and ::inverse_kinematics_delta_with_jacobian
for running inverse kinematics on a multibody to align one its links pose to the given prescribed pose.InverseKinematicsOption to customize some behaviors of the inverse-kinematics solver.Multibody::body_jacobian to get the jacobian of a specific link.Multibody::update_rigid_bodies to update rigid-bodies based on the multibody links poses.Multibody::forward_kinematics_single_link to run forward-kinematics to compute the new pose and jacobian of a
single link without mutating the multibody. This can take an optional displacement on generalized coordinates that are
taken into account during transform propagation.Debug for ColliderBuilder.Collider::converted_trimesh and MeshConverter for building a collider with a shape computed from a mesh’s
index and vertex buffers. That computed shape can currently be a TriMesh, a Cuboid (covering the mesh’s AABB or
OBB), a convex hull, or a convex decomposition.Default for RigidBodyBuilder. This is equivalent to RigidBodyBuilder::dynamic().Default for ColliderBuilder. This is equivalent to ColliderBuilder::ball(0.5).RevoluteJoint::angle to compute the joint’s angle given the rotation of its attached rigid-bodies.JointAxesMask::X/Y/Z to ::LIN_X/LIN_Y/LIN_Z; and renamed JointAxesMask::X/Y/Z to ::LinX/LinY/LynZ to
make it clear it is not to be used as angular axes (the angular axis are JointAxesMask::ANG_X/ANG_Y/AngZ and
JointAxesMask::AngX/AngY/AngZ).erp/damping_ratio to
natural_frequency/damping_ratio. This helps define them in a timestep-length independent way. The new variables
are named IntegrationParameters::contact_natural_frequency and IntegrationParameters::contact_damping_ratio.IntegrationParameters::normalized_max_penetration_correction has been replaced
by ::normalized_max_corrective_velocity
to make the parameter more timestep-length independent. It is now set to a non-infinite value to eliminate aggressive
"popping effects".Multibody::forward_kinematics method will no longer automatically update the poses of the RigidBody associated
to each joint. Instead Multibody::update_rigid_bodies has to be called explicitly.Multibody::forward_kinematics method will automatically adjust the multibody’s degrees of freedom if the root
rigid-body changed type (between dynamic and non-dynamic). It can also optionally apply the root’s rigid-body pose
instead of the root link’s pose (useful for example if you modified the root rigid-body pose externally and wanted
to propagate it to the multibody).RigidBody::add_collider. This was an implementation detail previously needed by bevy_rapier. To attach
a collider to a rigid-body, use ColliderSet::insert_with_parent or ColliderSet::set_parent.JointAxis::X/Y/Z to ::LinX/LinY/LinZ to avoid confusing it with ::AngX/AngY/AngZ.JointAxesMask::X/Y/Z to ::LIN_X/LIN_Y/LIN_Z to avoid confusing it with ::ANG_X/ANG_Y/ANG_Z.RigidBody::add_collider is now private. It was only public because it was needed for some internal
bevy_rapier plumbings, but it is no longer useful. Adding a collider must always go through the ColliderSet.CharacterController::solve_character_collision_impulses now takes multiple CharacterCollision as parameter:
this change will allow further internal optimizations.QueryPipeline::update now doesn't need the RigidBodySet as parameter.QueryPipelineMode.QueryPipeline::update_with_mode was renamed to ::update_with_generator and now takes
impl QbvhDataGenerator<ColliderHandle> as parameter see [QueryPipeline::updaters] module for more information.Fix crash when simulating a spring joint between two dynamic bodies.
Many stability improvements were added as part of this release. To see illustrations of some of these changes, see #625.
RigidBody::predict_position_using_velocity to predict the next position of the rigid-body
based only on its current velocity.Collider::copy_from to copy most collider attributes to an existing collider.RigidBody::copy_from to copy most rigid-body attributes to an existing rigid-body.BroadPhase trait and expect an implementor of this trait as input to PhysicsPipeline::step.RigidBodyBuilder::soft_ccd_prediction and RigidBody::set_soft_ccd_prediction to enable soft-ccd: a form of
CCD based on predictive contacts. This is helpful for objects moving moderately fast. This form of CCD is generally
cheaper than the normal (time-dropping) CCD implemented so far. It is possible to combine both soft-ccd and
time-dropping ccd.ColliderBuilder::contact_skin, Collider::set_contact_skin, and Collider::contact_skin. This forces the
solver te maintain a gap between colliders with non-zero contact skin, as if they had a slight margin around them.
This helps performance and stability for thin objects (like triangle meshes).TriMeshFlags::FIX_INTERNAL_EDGES and
HeightFieldFlags::FIX_INTERNAL_EDGES flags were added to enable internal edges handling.IntegrationParameters::length_units to automatically adjust internal thresholds when the user relies on custom
length units (e.g. pixels in 2D).Many shape-casting related functions/structs were renamed. Check out the CHANGELOG for parry 0.15.0 for additional details.
BroadPhase to BroadPhaseMultiSap. The BroadPhase is now a trait that can be
implemented for providing a custom broad-phase to rapier. Equivalently, the DefaultBroadPhase type
alias can be used in place of BroadPhaseMultiSap.KinematicCharacterController::normal_nudge_factor used to help getting the character unstuck
due to rounding errors.TOI to ShapeCastHit.toi to time_of_impact.QueryPipeline::cast_shape method now takes a ShapeCastOptions instead of the max_toi
and stop_at_penetration parameters. This allows a couple of extra configurations, including the
ability to have the shape-cast target a specific distance instead of actual shape overlap.The main highlight of this release is the implementation of a new non-linear constraints solver for better stability and increased convergence rates.
The main highlight of this release is the implementation of a new non-linear constraints solver for better stability and increased convergence rates. See #579 for additional information.
In order to adjust the number of iterations of the new solver, simply
adjust IntegrationParameters::num_solver_iterations.
If recovering the old solver behavior is useful to you, call IntegrationParameters::switch_to_standard_pgs_solver().
It is now possible to specify some additional solver iteration for specific rigid-bodies (and everything interacting
with it directly or indirectly through contacts and joints): RigidBodyBuilder::additional_solver_iterations and
RigidBodyBuilder::set_additional_solver_iterations. This allows for higher-accuracy on subsets of the physics scene
without affecting performance of the other parts of the simulation.
SpringJoint and SpringJointBuilder for simulating springs with customizable stiffness and damping
coefficients.SphericalJoint::local_frame1/2, ::set_local_frame1/2, and SphericalJointBuilder::local_frame1/2 to set both
the joint’s anchor and reference orientation.EffectiveCharacterMovement::is_sliding_down_slope to indicate if the character controlled by the kinematic
character controller is sliding on a slope that is too steep.Wheel::side_friction_stiffness to customize the side friction applied to the vehicle controller’s wheel.Wheel::raycast_info to access more wheel information relative to the ground.DebugRenderStyle::disabled_color_multiplier to make the debug-renderer color disabled object differently.Wheel::friction_slip public to customize the front friction applied to the vehicle controller’s wheels.DebugRenderBackend::filter_object predicate that can be implemented to apply custom filtering rules
on the objects being rendered.bevy 0.12 and use its new Gizmos API for rendering lines.NarrowPhase::contacts_with to NarrowPhase::contact_pairs_with.NarrowPhase::intersections_with to NarrowPhase::intersection_pairs_with.Fix issue with convex polyhedron jitter due to missing contacts.
Fix bug resulting in dynamic rigid-bodies acting as kinematic bodies after being disabled and then re-enabled.
Add RigidBody::set_enabled, RigidBody::is_enabled, RigidBodyBuilder::enabled to enable/disable a rigid-body without having to delete it. Disabling a r
RigidBody::set_enabled, RigidBody::is_enabled, RigidBodyBuilder::enabled to enable/disable a rigid-body
without having to delete it. Disabling a rigid-body attached to a multibody joint isn’t supported yet.Collider::set_enabled, Collider::is_enabled, ColliderBuilder::enabled to enable/disable a collider
without having to delete it.GenericJoint::set_enabled, GenericJoint::is_enabled to enable/disable a joint without having to delete it.
Disabling a multibody joint isn’t supported yet.DynamicRayCastVehicleController, a vehicle controller based on ray-casting and dynamic rigid-bodies (mostly
a port of the vehicle controller from Bullet physics).RigidBody::user_force and RigidBody::user_torque to read the forces or torques added by the user to a
dynamic rigid-body.RigidBody::locked_axes to get the rigid-body axes that were locked by the user.QueryPipeline as an optional argument to PhysicsPipeline::step and CollisionPipeline::step. If this
argument is specified, then the query pipeline will be incrementally (i.e. more efficiently) update at the same time
as
these other pipelines. In that case, calling QueryPipeline::update a PhysicsPipeline::step isn’t needed.RigidBody::set_body_type now takes an extra boolean argument indicating if the rigid-body should be woken-up
(if it becomes dynamic).RigidBody::mass_properties now also returns the world-space mass-properties of the rigid-body.### Fix - Fixed docs build on docs.rs.
docs.rs.Implement Copy for CharacterCollision.
Copy for CharacterCollision.From trait) between Group and u32.ColliderBuilder::trimesh_with_flags to build a triangle mesh with specific flags controlling
its initialization.AABB to Aabb to comply with Rust’s style guide.parry 0.11.Add a kinematic character controller implementation. See the control module. The character controller currently supports the following features:
control module. The character controller currently
supports the following features:
serde serialization/deserialization for CollisionEvents when the serde-serialize feature is enabledCollider::set_rotation, RigidBody::set_rotation, and RigidBody::set_next_kinematic_rotation now
take a rotation (UnitQuaternion or UnitComplex) instead of a vector/angle.QueryFilter::exclude_dynamic is now a static method (the self argument was removed).QueryPipeline::cast_shape method has a new argument stop_at_penertation. If set to false, the linear
shape-cast won’t immediately stop if the shape is penetrating another shape at its starting point and its
trajectory is such that it’s on a path to exit that penetration state.InteractionGroups is now a set of explicit bit flags instead of a raw u32.Remove the deprecated methods RigidBodyBuilder::mass, ::principal_angular_inertia, ::principal_inertia.
CollisionPipeline if a collider is both added and removed before a call
to CollisionPipeline::step.RigidBodyBuilder::additional_mass method will now result in the additional angular inertia
being automatically computed based on the shapes of the colliders attached to the rigid-body.RigidBodyBuilder::mass, ::principal_angular_inertia, ::principal_inertia.RigidBodyBuilder::additional_principal_angular_inertia. Use
RigidBodyBuilder::additional_mass_properties instead.Collider::density method now always returns a Real (instead of an Option<Real>).RigidBody::restrict_rotations and RigidBody::restrict_translations to
RigidBody::set_enabled_rotations and RigidBody::set_enabled_translations.RigidBodyBuilder::restrict_rotations and RigidBodyBuilder::restrict_translations to
RigidBodyBuilder::enabled_rotations and RigidBodyBuilder::enabled_translations.RigidBody::recompute_mass_properties_from_colliders to force the immediate computation
of a rigid-body’s mass properties (instead of waiting for them to be recomputed during the next
timestep). This is useful to be able to read immediately the result of a change of a rigid-body
additional mass-properties or a change of one of its collider’s mass-properties.RigidBody::set_additional_mass to set the additional mass for the collider. The additional
angular inertia is automatically computed based on the attached colliders shapes.Collider::set_density, ::set_mass, set_mass_properties, to alter a collider’s mass
properties. Note that ::set_mass will result in the collider’s angular inertia being automatically
computed based on this mass and on its shape.ColliderBuilder::mass to set the mass of the collider instead of its density. Its angular
inertia tensor will be automatically computed based on this mass and its shape.Collider::mass and Collider::volume to retrieve the mass or volume of a collider.QueryFilter that is now used by all the scene queries instead of the CollisionGroups
and Fn(ColliderHandle) -> bool
closure. This QueryFilter provides easy access to most common filtering strategies (e.g. dynamic bodies only,
excluding one particular collider, etc.) for scene queries.EventHandler trait has been modified to include
the method EventHandler::handle_contact_force_event. Contact force events are generated whenever the sum of the
magnitudes of all the forces between two colliders is greater than any of their
Collider::contact_force_event_threshold values (only the colliders wit the ActiveEvents::CONTACT_FORCE_EVENT flag
set are taken into account for this threshold).ContactForceEvent struct that is generated by the ChannelEventCollector to report
contact force events.Fix incorrect sensor events being generated after collider removal.
wake_up: bool argument to the ImpulseJointSet::insert and MultibodyJointSet::insert to
automatically wake-up the rigid-bodies attached to the inserted joint.ImpulseJointSet::remove/remove_joints_attached_to_rigid_body,
MultibodyJointSet::remove/remove_joints_attached_to_rigid_body and
MultibodyjointSet::remove_multibody_articulations no longer require the bodies
and islands arguments.instant dependency optional, behind a profiler cargo feature.ActiveCollisionTypes flags.ImpulseJointSet::joints_with to ::attached_joints. Add the joint’s handle to the closure arguments.MultibodyJointSet::attached_joints to return all the multibody joints attached to a given rigid-body.Fix the simulation when the parallel feature is enabled.
parallel feature is enabled.nalgebra 0.31.parry 0.9.JointHandle to ImpulseJointHandle.RigidBodyMassPropsFlags to LockedAxes.RigidBody::apply_force, ::apply_torque, ::apply_force_at_point to ::add_force,
::add_torque, and ::add_force_at_point to better reflect the fact that they are not cleared at the end
of the timestep.RigidBodyType::Static to RigidBodyType::Fixed to avoid confusion with the static keyword.static rigid-bodies now use fixed instead of static.RigidBodyBuilder::new_static, new_kinematic_velocity_based, new_kinematic_velocity_based to
RigidBodyBuilder::fixed, kinematic_velocity_based, kinematic_velocity_based.ContactEvent and IntersectionEvent have been replaced by a single enum CollisionEvent in order
to simplify the user’s event handling.ActiveEvents::CONTACT_EVENTS and ActiveEvents::INTERSECTION_EVENTS flags have been replaced by a single
flag ActiveEvents::COLLISION_EVENTS.VelocityBased model. The new choices are AccelerationBased and ForceBased
which are more stable..build() function from builders (RigidBodyBuilder, ColliderBuilder, etc.) is no longer necessary
when adding them to sets. It is automatically called thanks to Into<_> implementations.ComponentSet abstractions (and related _generic methods like PhysicsPipeline::step_generic) have been
removed. Custom storage for colliders and rigid-bodies are no longer possible: use the built-in RigidBodySet and
ColliderSet instead.These are changes in the behavior of the physics engine that are not necessarily reflected by an API change. See #304 for extensive details.
RigidBody::set_linvel and RigidBody::set_angvel no longer modify the velocity of static bodies.RigidBody::set_body_type will reset the velocity of a rigid-body to zero if it is static.CollisionEvent::Stopped are now generated after a collider is removed.GenericJoint to one of the more specific joint type.bool argument to RigidBodySet::remove. If set to false, the colliders attached to the rigid-body
won’t be automatically deleted (they will only be detached from the deleted rigid-body instead).RigidBody::reset_forces and RigidBody::reset_torques to reset all the forces and torques added to the
rigid-body by the user.debug-render cargo feature that enables the DebugRenderPipeline: a line-based backend-agnostic
renderer to debug the state of the physics engine.Nothing published for this version
Fixed RigidBody::restrict_rotations to properly take into account the axes to lock.
RigidBody::restrict_rotations to properly take into account the axes to lock.ImpulseJoint. The RevoluteJoint, PrismaticJoint, FixedJoint,
and SphericalJoint (formerly named BallJoint) structures still exist but are just convenient
ways to initialize the generic ImpulseJoint.Default for most of the struct that supports it.Nothing published for this version
Nothing published for this version
Fix a bug causing large moving colliders to miss some collisions after some time.
Check out the user-guide for the JS/Typescript bindings for rapier. It has been fully rewritten and is now exhaustive! Check it out on rapier.rs
Check out the user-guide for the JS/Typescript bindings for rapier. It has been fully rewritten and is now exhaustive! Check it out on rapier.rs
nalgebra 0.29.Add Collider::set_translation_wrt_parent to change the translation of a collider with respect to its parent rigid-body.
Collider::set_translation_wrt_parent to change the translation of a collider with respect to its parent
rigid-body.Collider::set_rotation_wrt_parent to change the translation of a collider with respect to its parent rigid-body.Implement Clone for IslandManager.
Clone for IslandManager.JointSet::insert no longer takes the rigid-body set in its arguments.PartialEq for most collider and rigid-body components.Make the method JointSet::remove_joints_attached_to_rigid_body public so that it can can be called externally for letting component-based Rapier integ
Add rapier::nalgebra so that the vector! and point! macros work out-of-the-box after importing the prelude: use rapier::*
rapier::prelude::nalgebra so that the vector! and point! macros work out-of-the-box after importing
the prelude: use rapier::prelude::*The user-guide has been fully rewritten and is now exhaustive! Check it out on rapier.rs
The user-guide has been fully rewritten and is now exhaustive! Check it out on rapier.rs
use rapier3d::prelude::*RigidBody::set_translation and RigidBody.translation().RigidBody::set_rotation and RigidBody.rotation().RigidBody::set_next_translation for setting the next translation of a position-based kinematic body.RigidBody::set_next_rotation for setting the next rotation of a position-based kinematic body.RigidBodyBuilder::new_kinematic_velocity_based or
RigidBodyType::KinematicVelocityBased.debug-disable-legitimate-fe-exceptions that can be enabled for debugging purpose. This will
disable floating point exceptions whenever they happen at places where we do expect them to happen (for example
some SIMD code do generate NaNs which are filtered out by lane-wise selection).The use of RigidBodySet, ColliderSet, RigidBody, Collider is no longer mandatory. Rigid-bodies and colliders have
been split into multiple components that can be stored in a user-defined set. This is useful for integrating Rapier
with other engines (for example this allows us to use Bevy's Query as our rigid-body/collider sets).
The RigidBodySet, ColliderSet, RigidBody, Collider are still the best option for whoever doesn't want to
provide their own component sets.
BodyStatus to RigidBodyType.RigidBodyBuilder::translation now takes a vector instead of individual components.RigidBodyBuilder::linvel now takes a vector instead of individual components.RigidBodyBuilder::new_kinematic has be replaced by the RigidBodyBuilder::new_kinematic_position_based and
RigidBodyBuilder::new_kinematic_velocity_based constructors.RigidBodyType::Kinematic variant has been replaced by two variants: RigidBodyType::KinematicVelocityBased and
RigidBodyType::KinematicPositionBased.Colliderbuilder::translation now takes a vector instead of individual components.PhysicsHooks are enabled changed. Now, a physics hooks is executed if any of the two
colliders involved in the contact/intersection pair contains the related PhysicsHooksFlag.
These flags are configured on each collider with ColliderBuilder::active_hooks. As a result,
there is no PhysicsHooks::active_hooks method any more.active_events bit mask to ActiveEvents::CONTACT_EVENTS and/or ActiveEvents::PROXIMITY_EVENTS.ColliderBuilder::active_collision_types.InteractionGroups is now a structures with two u32 integers: one integers for the groups
membership and one for the group filter mask. (Before, both were only 16-bits wide, and were
packed into a single u32).ColliderSet::insert
only takes the collider as argument now. In order to attach the collider to a rigid-body,
(i.e., the old behavior of ColliderSet::insert), use ColliderSet::insert_with_parent.FixedJoint::local_anchor1 and FixedJoint::local_anchor2 have been renamed to
FixedJoint::local_frame1 and FixedJoint::local_frame2.ContactPair::pair (which contained two collider handles) has been replaced by two
fields: ContactPair::collider1 and ContactPair::collider2.IslandManager::active_dynamic_bodies
instead of RigidBodySet::iter_active_dynamic.IslandManager::active_kinematic_bodies
instead of RigidBodySet::iter_active_kinematic.NarrowPhase::contacts_with now returns an impl Iterator<Item = &ContactPair> instead of
an Option<impl Iterator<Item = (ColliderHandle, ColliderHandle, &ContactPair)>>. The colliders
handles can be read from the contact-pair itself.NarrowPhase::intersections_with now returns an iterator directly instead of an Option<impl Iterator>.PhysicsHooksFlags to ActiveHooks.EventHandler::handle_contact_event### Modified - Switch to nalgebra 0.26.
Implement Serialize and Deserialize for the CCDSolver.
Serialize and Deserialize for the CCDSolver.Fixed a bug in the broad-phase that could cause non-determinism after snapshot restoration.
RigidBodyBuilder::mass_properties has been deprecated, replaced by ::additional_mass_properties.
QueryPipeline. So far, interaction groups (bit masks)
had to be used to exclude from colliders from a query made with the QueryPipeline. Now it is also
possible to provide a custom closures to apply arbitrary user-defined filters.IntegrationParameters::velocity_based_erp to
a value > 0.0 to enable.).Added the methods:
ColliderBuilder::halfspace to create a collider with an unbounded plane shape.Collider::shape_mut to get a mutable reference to its shape.Collider::set_shape, ::set_restitution_combine_rule, ::set_position_wrt_parent, ::set_collision_groups
::set_solver_groups to change various properties of a collider after its creation.RigidBodyBuilder::ccd_enabled to enable CCD for a rigid-body.target_dist argument of QueryPipeline::cast_shape was removed.RigidBodyBuilder::mass_properties has been deprecated, replaced by ::additional_mass_properties.RigidBodyBuilder::mass has been deprecated, replaced by ::additional_mass.RigidBodyBuilder::principal_angular_inertia has been deprecated, replaced
by ::additional_principal_angular_inertia.SolveContact::data has been replaced by the fields SolverContact::warmstart_impulse,
SolverContact::warmstart_tangent_impulse, and SolverContact::prev_rhs.IntegrationParameters that we don't use have been removed.NarrowPhase::maintain has been renamed to NarrowPhase::handle_user_changes.BroadPhase::maintain has been removed. Use BroadPhase::update directly.Fix a determinism problem that may happen after snapshot restoration, if a rigid-body is sleeping at the time the snapshot is taken.
The support of dominance groups have been added. Each rigid-body is part of a dominance group in [-127; 127] (the default is 0). If two rigid-body are
ContactPairFilter and IntersectionPairFilter traits have been removed. They are both
combined in a single new trait: PhysicsHooks.Breaking changes related to contacts:
In this release we are dropping ncollide and use our new crate parry
instead! This comes with a lot of new features, as well as two new crates: rapier2d-f64 and
rapier3d-f64 for physics simulation with 64-bits floats.
RAPIER.version() function at the root of the package to retrieve the version of Rapier
as a string.Several geometric queries have been added to the QueryPipeline:
QueryPipeline::intersections_with_ray: get all colliders intersecting a ray.QueryPipeline::intersection_with_shape: get one collider intersecting a shape.QueryPipeline::project_point: get the projection of a point on the closest collider.QueryPipeline::intersections_with_point: get all the colliders containing a point.QueryPipeline::cast_shape: get the first collider intersecting a shape moving linearly
(aka. sweep test).QueryPipeline::intersections_with_shape: get all the colliders intersecting a shape.Several new shape types are now supported:
RoundCuboid, Segment, Triangle, RoundTriangle, Polyline, ConvexPolygon (2D only),
RoundConvexPolygon (2D only), ConvexPolyhedron (3D only), RoundConvexPolyhedron (3D only),
RoundCone (3D only).It is possible to build ColliderDesc using these new shapes:
ColliderBuilder::round_cuboid, ColliderBuilder::segment, ColliderBuilder::triangle,
ColliderBuilder::round_triangle,
ColliderBuilder::convex_hull, ColliderBuilder::round_convex_hull, ColliderBuilder::polyline,
ColliderBuilder::convex_decomposition, ColliderBuilder::round_convex_decomposition,
ColliderBuilder::convex_polyline (2D only), ColliderBuilder::round_convex_polyline (2D only),
ColliderBuilder::convex_mesh (3D only),ColliderBuilder::round_convex_mesh (3D
only), ColliderBuilder::round_cone (3D only).It is possible to specify different rules for combining friction and restitution coefficients of the two colliders involved in a contact with:
ColliderDesc::friction_combine_rule, and ColliderDesc::restitution_combine_rule.Various RigidBody-related getter and setters have been added:
RigidBodyBuilder::gravity_scale, RigidBody::gravity_scale, RigidBody::set_gravity_scale to get/set the scale
factor applied to the gravity affecting a rigid-body. Setting this to 0.0 will make the rigid-body ignore gravity.RigidBody::set_linear_damping and RigidBody::set_angular_damping to set the linear and angular damping of
the rigid-body.RigidBodyBuilder::restrict_rotations to prevent rotations along specific coordinate axes. This replaces the three
boolean arguments previously passed to .set_principal_angular_inertia.Breaking changes related to contacts:
parry::query::ContactManifold, parry::query::TrackedContact
and rapier::geometry::ContactManifoldData and rapier::geometry::ContactData for details.Breaking changes related to rigid-bodies:
RigidBodyDesc.setMass takes only one argument now. Use RigidBodyDesc.lockTranslations to lock the
translational
motion of the rigid-body.RigidBodyDesc.setPrincipalAngularInertia no longer have boolean parameters to lock rotations.
Use RigidBodyDesc.lockRotations or RigidBodyDesc.restrictRotations to lock the rotational motion of the
rigid-body.Breaking changes related to colliders:
ColliderShape to SharedShape (now part of the Parry crate).Polygon shape no longer exists. For a 2D convex polygon, use a ConvexPolygon instead.Trimesh have been replaced by TriMesh (note the change in case).Breaking changes related to events:
Proximity to Intersection.Proximity enum has been removed, it's replaced by a boolean.Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →