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
geomelements without atypeattribute now follow the MJCF default and load as spheres. At least onesizevalue is required.raisim::Pathnow 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.