Changelog: v2.4.5 (upcoming)

RaiSim v2.4.5 focuses on physics correctness in degenerate/contact-rich scenes, solver and articulated-system hot paths, path handling, and CMake package configuration. These notes describe changes targeted for the next public binary package; package metadata remains at the latest published version until the release is made. The engine implementation remains closed source.

Contact and collision correctness

  • Multi-box-prune broadphase now pairs overflow proxies correctly regardless of proxy order, while preserving full-width body ids, collision groups, and masks.

  • Worlds containing deformables maintain a separate rigid-only detector view, preventing deformable entries from corrupting rigid collision pairing.

  • Unsupported heightmap rotation is checked from the authoritative body rotation matrix in every build configuration. Heightmaps remain translation-only collision geometry; use a mesh for a rotated surface.

  • MPR portal discovery/refinement is iteration-bounded so degenerate or deeply interpenetrating convex pairs cannot spin forever.

  • Degenerate sphere-cylinder contact now produces a deterministic finite normal, and rays starting inside a sphere return the forward exit hit.

  • Capsule inertia, deformable substep velocity recovery, heightmap update-size validation, and several articulated/contact edge cases were corrected.

See Collision Detection and Colliders, Contact and Collision, and Height Map for the current behavior and configuration surface.

Solver and articulated-system performance

The contact solver now reuses cached dense/sparse velocity accessors and maps fixed-size articulated contact-response blocks in setup hot paths. Articulated dynamics and matrix/vector operations also avoid repeated temporary work. These changes preserve the public API; measure them with the workloads and single-thread benchmark procedure in Build, Test, and Benchmark and Performance.

MJCF and path behavior

  • MJCF geom elements without a type attribute now follow the MJCF default and load as spheres. At least one size value is required.

  • raisim::Path now normalizes . and .. component-wise, collapses repeated separators, preserves POSIX roots, Windows drive roots, and UNC shares, and no longer mistakes .. inside an ordinary filename for a parent-directory reference.

See World for the supported MJCF subset.

CMake package configuration

The installed RaiSim target requires C++20. Debug and Release installations can coexist in one prefix: imported-target configuration mapping selects an available matching binary and propagates RSDEBUG with that binary. A Debug consumer of a Release-only package therefore uses Release semantics, while a merged package selects its Debug library for Debug consumers. See Installation and Build, Test, and Benchmark.

Internal Engine 2 development

Engine 2 project-loading work was completed internally during this development cycle, but Engine 2 is not shipped in the public raisim2Lib distribution. There are no public Engine 2 executables, headers, libraries, or build targets in v2.4.5. Public users should use RaiSim XML, MJCF, OpenUSD, or the public world-construction APIs; reinforcement-learning workloads belong in RaisimGymTorch. See RaiSim Engine 2 and .rscene File for the availability boundary.