Skip to content

Release v0.33.0#944

Merged
sebcrozet merged 2 commits into
masterfrom
release-v0.33.0
Jun 5, 2026
Merged

Release v0.33.0#944
sebcrozet merged 2 commits into
masterfrom
release-v0.33.0

Conversation

@sebcrozet

Copy link
Copy Markdown
Member

v0.33.0 (05 June 2026)

Added

  • New 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).
  • Python bindings for Rapier 2D/3D (rapier-py-* crates under python/), generated and published
    as installable wheels (#938).
  • New 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:
    • New 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.
    • New UrdfLoaderOptions::scale applies a uniform scale to link positions, joint anchors,
      mesh sizes, primitive shape sizes, inertial offsets, and prismatic joint limits.
    • New 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.
    • URDF files with empty <geometry></geometry> blocks are now accepted (sanitized before
      parsing, then skipped when building colliders).
    • The urdf_rs crate is re-exported.

Fixed

  • QueryPipeline::project_point now honors its max_dist argument (it was previously ignored).
  • Several multibody-related crashes (#906, #907, #908, #927).
  • Continuous Collision Detection now consults the user's 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).
  • Corrected the documentation of 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).

Modified

  • Unify version numbers for rapier3d-urdf, rapier3d-meshloader, and rapier3d-mjcf so they
    follow the same versioning as the other libraries in the workspace.
  • Breaking (CCD solver direct callers only): CCDSolver::find_first_impact and
    CCDSolver::predict_impacts_at_next_positions now take an extra hooks: &dyn PhysicsHooks
    argument. PhysicsPipeline::step callers are unaffected.
  • Breaking: QueryPipeline::project_point_and_get_feature now takes an additional
    max_dist: Real argument.
  • Breaking (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.
  • Behavior change (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.
  • Update glamx to 0.3.
  • Updated wide version to 1 (#902).

@sebcrozet sebcrozet merged commit 7e72d13 into master Jun 5, 2026
42 checks passed
@sebcrozet sebcrozet deleted the release-v0.33.0 branch June 5, 2026 14:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

CCD Filtering is not implemented

1 participant