|
1 | 1 | ## Unreleased |
2 | 2 |
|
| 3 | +### Added |
| 4 | + |
| 5 | +- New `PhysicsWorld` convenience wrapper bundling `RigidBodySet`, `ColliderSet`, the broad/narrow |
| 6 | + phases, islands, joints, the CCD solver, gravity, and integration parameters in a single struct, |
| 7 | + for simpler setup of basic simulations. It also exposes helpers for waking bodies (`wake_up`, |
| 8 | + `wake_up_all`), iterating only active bodies (`active_bodies`), and iterating joints — including |
| 9 | + those attached to a given body (`impulse_joints`, `impulse_joints_with`, `multibody_joints`, |
| 10 | + `multibody_joints_with`). |
| 11 | +- `std`/`alloc` feature gating: `no_std` builds are now supported, and a subset of the library |
| 12 | + compiles without `alloc` as well (e.g. for `spirv` targets) |
| 13 | + ([#928](https://github.com/dimforge/rapier/pull/928)). |
| 14 | +- `InteractionGroups` and `Group` now derive `bytemuck::NoUninit` under the `bytemuck` feature, |
| 15 | + and `InteractionTestMode` is `#[repr(u32)]`, making them GPU-uploadable. |
| 16 | +- `MultibodyJoint::joint_rot()` and `MultibodyJoint::coords()` expose the joint’s rotation and |
| 17 | + generalized coordinates publicly. |
| 18 | +- `ImpulseJointSet::set_bodies` rewires an existing impulse joint to a new pair of bodies while |
| 19 | + preserving its handle, configuration, and warm-started impulses. |
| 20 | +- `rapier3d-urdf`: |
| 21 | + - New `UrdfLoaderOptions::mesh_converter` lets the loader replace the original mesh with a |
| 22 | + cheap proxy shape (e.g. `MeshConverter::Obb`) while keeping the source mesh available for |
| 23 | + rendering via the new `UrdfCollider::visual` / `UrdfVisual` types. |
| 24 | + - New `UrdfLoaderOptions::scale` applies a uniform scale to link positions, joint anchors, |
| 25 | + mesh sizes, primitive shape sizes, inertial offsets, and prismatic joint limits. |
| 26 | + - New `UrdfLoaderOptions::squeeze_empty_fixed_links` (default `true`) removes empty links |
| 27 | + connected by fixed joints, splicing the kinematic chain so bodyless “frame-only” links |
| 28 | + (e.g. `world`, `*_tcp`) no longer create mass-less rigid-bodies. |
| 29 | + - URDF files with empty `<geometry></geometry>` blocks are now accepted (sanitized before |
| 30 | + parsing, then skipped when building colliders). |
| 31 | + - The `urdf_rs` crate is re-exported. |
| 32 | + |
3 | 33 | ### Fixed |
4 | 34 |
|
| 35 | +- `QueryPipeline::project_point` now honors its `max_dist` argument (it was previously ignored). |
| 36 | +- Several multibody-related crashes ([#906](https://github.com/dimforge/rapier/issues/906), |
| 37 | + [#907](https://github.com/dimforge/rapier/issues/907), |
| 38 | + [#908](https://github.com/dimforge/rapier/issues/908), |
| 39 | + [#927](https://github.com/dimforge/rapier/issues/927)). |
5 | 40 | - Continuous Collision Detection now consults the user's `PhysicsHooks::filter_contact_pair` |
6 | 41 | hook, matching narrow-phase semantics. Previously, CCD would clamp a fast-moving body's |
7 | | - motion at a predicted impact with a pair the user had filtered out. Closes #754. |
| 42 | + motion at a predicted impact with a pair the user had filtered out |
| 43 | + ([#929](https://github.com/dimforge/rapier/pull/929), closes |
| 44 | + [#754](https://github.com/dimforge/rapier/issues/754)). |
| 45 | +- Corrected the documentation of `RigidBody::add_force` / `add_torque` / `reset_forces` / |
| 46 | + `reset_torques`: user-defined forces and torques are **not** cleared automatically between |
| 47 | + steps and persist until explicitly reset |
| 48 | + ([#903](https://github.com/dimforge/rapier/issues/903)). |
8 | 49 |
|
9 | 50 | ### Modified |
10 | 51 |
|
11 | 52 | - **Breaking (CCD solver direct callers only):** `CCDSolver::find_first_impact` and |
12 | 53 | `CCDSolver::predict_impacts_at_next_positions` now take an extra `hooks: &dyn PhysicsHooks` |
13 | 54 | argument. `PhysicsPipeline::step` callers are unaffected. |
| 55 | +- **Breaking:** `QueryPipeline::project_point_and_get_feature` now takes an additional |
| 56 | + `max_dist: Real` argument. |
| 57 | +- **Breaking (`rapier3d-urdf`):** `UrdfLink::colliders` and `UrdfLinkHandle::colliders` changed |
| 58 | + from `Vec<Collider>` / `Vec<ColliderHandle>` to `Vec<UrdfCollider>` / `Vec<UrdfColliderHandle>` |
| 59 | + to carry the optional visual mesh override. |
| 60 | +- **Behavior change (`rapier3d-urdf`):** with `squeeze_empty_fixed_links` defaulting to `true`, |
| 61 | + empty links bridged by fixed joints are now collapsed by default. Set it to `false` to keep |
| 62 | + the previous behavior. |
| 63 | +- Update `glamx` to 0.3. |
| 64 | +- Updated `wide` version to `1` ([#902](https://github.com/dimforge/rapier/issues/902)). |
14 | 65 |
|
15 | 66 | ## v0.31.0 (09 Jan. 2026) |
16 | 67 |
|
|
0 commit comments