Changelog: v2.7

v2.7.0 (2026-09-28)

Pin joints and closed loops

  • Much faster closed-loop solves: Minitaur step 16.7 µs → 8.0 µs, solver sweeps 31 → 2.1 per step; pin rows warm-started.

  • Exact pin/self-contact inverse mass (sparse J·M⁻¹·Jᵀ).

  • Correct pin Jacobians (own anchor per body, fixed world basis, floating-base rotation columns kept); robust 3×3 effective mass for planar/redundant pins; 30% per-step position correction.

  • Sleeping objects no longer apply stale constraints; pins stay closed under mouse-drag and wire forces.

  • New Cassie closed-loop URDF (res/cassie/cassie_v4_raisim.urdf).

Granular and deformable

  • Faster granular contacts (contact-history index, incremental grid, cheaper pair rejection): 1,536-grain pool 0.71 s → 0.55 s.

  • Opt-in GranularPoolSleepController (1.09–1.34× faster settled pools).

  • Removing particles remaps/drops tendons attached to them (fixed out-of-bounds write).

  • Deformable particle pairs use a sparse grid.

Assets

  • .rasset descriptor (raisim::Rasset::load/save/instantiate/addStaticColliders); the TCP viewer resolves .rasset visuals.

Contacts

  • Fixed: primitives falling through rotated meshes, box–cylinder rim contacts, parallel capsules, tilted cylinder on plane, plane–mesh normal flip, NaN AABBs in SAP, heightmap depth 5–300× too deep, frictionless contacts, static–static problems, pinned deformable normals, swept CCD stopping mid-air.

  • Contact::getSolverPosition().

ArticulatedSystem

  • Fixed: sensors on movable links aborting, Child constructor options and root pose, getAngularMomentum, SparseJacobian resize, 0-DOF getInverseMassMatrix, fixed-base setBasePos COM, getNonlinearities overwriting frame accelerations, RNE constraint-force lever arm, spherical effort limit, prismatic ref.

  • setJointLimits/setJointVelocityLimits validate sizes; getFrameAcceleration documented as specific force.

Loaders

  • MJCF: <freejoint/>, multi-joint bodies, rotated joint frames, quaternion/xyaxes/zaxis validation, extrinsic uppercase Euler.

  • XML: collision_group hang, templated robots survive save/reload, duplicate names on export.

  • USD: collision meshes through symlinked directories.

RaisimServer

  • Fixed: send-buffer overflow on large scenes, SIGPIPE on viewer close, short polylines exiting, dangling focusOn, tag 0 matching, sensor exchange dropping clients, invalid wires; mouse force stays on the same body point.

  • License activation is thread-safe (one World per thread).

rayrai

  • Breaking: glm::vec4 orientations are (w, x, y, z) everywhere.

  • Glass: Material::glass(), progressive path-traced geometry refraction, optional Vulkan ray-query backend; rayrai_glass, rayrai_nested_glass, rayrai_multiple_lights examples.

  • Foliage: automatic mesh LOD, async preparation, GPU/Hi-Z occlusion, batching, depth prepasses, wind, BC7; dense-forest examples.

  • Lighting: baked irradiance and sky-visibility grids, soft directional shadows, deep parallax, linear HDR; range-culled local lights.

  • Multithreaded/multi-window rendering; lower frame overhead.

  • Fixes: batch upload cache, upscale blit, camera frame cache, additional-light shadows on ≤32 texture units, sampler/cascade unit clash, foliage submesh offsets, LOD on line/point meshes, point size, weather resets, lidar angle grid, depth linearization.

TCP viewer

  • Filmic and AgX tone mapping; auto-connect to a local server.

  • Fixes: crash on disconnect with frustum shown, use-after-free on removal, unique recording names, atomic settings, live resource-dir edits, stale replay geometry.

Build

  • Windows short build dirs and raisim-imported-config.cmake; Linux shader-manifest check; Vulkan headers and SPIR-V are vendored; CMake verifies the source manifest without Python.