Changelog: v2.11
v2.11.0 (2026-10-28)
RaiSim
- Build: the RaiSim and rayrai packages no longer contain debug information.
cmake --installstrips it from every installed binary on Linux and macOS (the DWARF data, and on macOS the debug map), and the Windows packages no longer include assimp's.pdbfiles; the install fails if a.pdbfile would be shipped. The Debug libraries keep theirRSDEBUGchecks and their symbols, so error messages and backtraces still name RaiSim's functions, and they are much smaller (libraisimd.so187 MB → 41 MB,librayraid.so61 MB → 20 MB).-DRAISIM_STRIP_INSTALLED_DEBUG_INFO=OFFinstalls them with their debug information. See Debug and Release package variants. - Deformables: the distance constraints of a cloth, rope or volume are solved along runs of edges that continue each other in a nearly straight line (the rows, columns and diagonals of a grid cloth, a rope), a whole run in every iteration, and so is their stiffness damping. A stiff cloth now holds its rest lengths under loads far above its weight, and a pull reaches its far side within a step: a 0.2 kg cloth on the ground pulled at one edge with 20 N stretched by up to 6 % at the default 6 iterations, and its far side started to move 7 ms after the pull, now less than 0.01 % and within 2 ms. A heavy ball on a hammock pinned at its edges sinks 6 mm instead of 6 cm (
distanceCompliance0, 20 iterations, 4 substeps). WithsetMonolithicDeformables(false), a heavy body sliding over a cloth now drags more of the cloth along, since the whole cloth follows the part under it: a 5 kg box over a cloth that the ground holds decelerates 24 % below the Coulomb value (12 % before), and one carrying a cloth over slippery ground 19 % (14 %); solved together with the bodies (the default) the first is within 0.1 % and the second 4.4 % above. In the coupling of v2.10 (setMonolithicDeformables(false)), a step of a cloth alone costs 34 % more than in v2.10.3 (a 300 × 300 cloth 55 %), a step with bodies on a cloth 5 to 15 % more (a box on two layers of cloth 28 %), and the first step of a 300 × 300 cloth takes 20 ms longer. - Deformables: the stiffness damping (
damping) stops iterating once an iteration changes no velocity by more than 10⁻⁹ m/s, so a deformable that moves without deforming steps faster: a 33 × 33 cloth sliding down a slope by 25 % in either coupling, a cloth under a resting 10 kg ball by 22 %. - Deformables: stiff bending is solved as a whole. When the hinges of a surface are stiff for its particle masses (paper, plastic film, cardboard, sheet metal: the inverse mass weight of a hinge's curvature exceeds 4 times its compliance / h²), all of its hinges are solved together in every iteration through a sparse Cholesky factorization of their stiffness, computed again only when the substep length or a mass changes, instead of by sweeps that carried a bending moment one hinge further each. Hinges with a curved rest shape (shells, closed meshes, and sheets whose mesh file rounded their coordinates) enter with the exact derivative of their turning rest curvature, by two conjugate gradient iterations preconditioned with the same factorization, and need no torque cancellation. Such a sheet sagged like cloth: a 0.3 m strip clamped at one end sagged 16 times (33 particles along it) and 19 times (65 particles) as far as beam theory at the default 6 iterations, a stiff half cylinder clamped along its edges 6 to 8 times its converged deflection, and a plate resting on two rods folded between them and fell through with a box on it. The strip now sags 1.2 to 1.3 times as far as beam theory, with 2 iterations as with 6 (the rest is the discretization of the bending, which shrinks with the mesh), the half cylinder settles with 3, and the plate carries the box. A step of a 64 × 64 flat stiff sheet costs about three times as much as with the sweeps. Fabrics stay far below the threshold and keep the sweeps, so their results do not change. See Bending.
- Deformables: stiff membranes (a triangle mesh with a
youngsModulusthat is large for its particle masses) are solved as a whole, by conjugate gradients on the multipliers of their triangles, preconditioned with a sparse Cholesky factorization of a membrane that bounds their stiffness in every orientation; the iteration count follows the square root of the stiffness ratio, from 2 to 8. A hanging sheet of 64 × 64 particles and 0.2 kg/m² stretched 2.8 times as far as plane stress at the default 6 iterations with E t = 1000 N/m, and 23 times with 10⁴ N/m; both now stretch within 3 % of it, at 6.7 and 15.8 ms per step instead of 0.7 ms (the sweeps needed 200 iterations, 21 ms per step, to come as close for the softer sheet and were still 17 % off for the stiffer one). See Elastic Modulus. - Deformables: in the joint solve, the contact rows of a heavy body on a stiff flat sheet, and those of the sheet's supports, see the particles move with the sheet (the mobility between them from the factorization of its hinges) while the elastic constraints are projected. A box on a stiff plate resting on two rods used to ride it on a soft, slow spring (a swing of 16 mm with a period of about 2 s at 6 iterations, where the plate's period is 0.26 s) and now settles within a few periods. See Solving deformables together with the bodies.
- Deformables: the new
deformable_stiff_sheetbenchmark compares stiff sheets with theory: a clamped 33 × 33 plate and one on two rods under a box with beam theory (0.59 and 0.89 ms per step, 20 % and 2 % more sag), and a hanging 33 × 33 membrane with plane stress (1.1 ms per step, 2.5 % less stretch). MuJoCo's flex with shell bending and membrane elasticity (discrete integrator) takes 1.9, 1.3 and 1.1 ms, sags 63 % more when clamped, lets the plate fall between the rods, and stretches the membrane three times as far. - Deformables: a large cloth or mesh is created faster: creating a 300 × 300 cloth takes 36 ms instead of 138 ms, and 82 ms instead of 252 ms with bending.
- Deformables: the elastic constraints of deformables are now solved together with every contact, joint limit and pin of the world instead of after them;
World::setMonolithicDeformables(false)restores the coupling of v2.10. The weight of a deformable then reaches the ground through the bodies under it within the step (a 5 kg cloth pressed a 1 kg box 19 mm into the ground, now 0.04 mm), and a heavy body on a cloth, or on several layers of cloth, rests on what supports the cloth instead of pressing the particles into it (a 10 kg ball on a cloth on the ground pushed particles 12 mm into the ground, now less than 0.001 mm). The ground holds the cloth under a body with the friction of the body's weight, so a box on a cloth on a slope below the friction angle stays (before, both slid down at 0.2 m/s). A body sliding over a cloth meets the friction of whichever contact grips less: a 5 kg box decelerates within 0.1 % of the Coulomb value over a cloth that the ground holds, and one carrying the cloth over slippery ground decelerates 4.4 % faster than the ground's friction alone, most of that the drag of the cloth outside it (24 % and 19 % off before). A body on a cloth on a slope steeper than the friction angle slides down with the Coulomb acceleration, also with the same friction above and below the cloth (1.7 times as fast before). The edges of a cloth beside a body that presses it onto a support stretch less while the friction under the body changes between sticking and sliding (a cloth pulled from under a 1 kg box: up to 3.9 % on single edges, now 3.1 %). The particles that pass under the edge of a body meet its face rather than its edge, so a cloth pulled out from under a box at metres per second gives it the Coulomb friction (the box received up to three times that and was kicked up). A deformable withsubstepsgreater than one makes the whole world step in substeps, also while it sleeps. A cloth that touches only static objects costs up to a tenth more per step than before (it is also held with static friction and meets its self contacts again at the end of the step); most scenes of thedeformable_rigid_couplingbenchmark cost up to a third more per step, a body dragging or carrying a cloth over slippery ground 1.6 to 2.2 times as much, a cloth pulled out from under a body 2.2 times, a box and a cloth sliding down a steep slope 2.2 times, a heavy cloth draped over a box 2.6 times, and a box on two stacked cloths a fifth (5.5 → 1.0 ms); see Solving deformables together with the bodies for the measurements and the known limitations.
rayrai
- New: water.
RayraiWindow::setWaterBody()adds an ocean that reaches the horizon or a rectangular pool, pond or tank (WaterBody; presets fromdefaultWaterBody()). The surface moves with Gerstner waves (generateGerstnerWaves()) on its own clock (setWaterTimeSeconds(),advanceWaterTime()), so a render at a given water time is repeatable. It reflects the sky and the objects on screen, refracts the scene below it, and dims and tints that scene by absorption and scattering coefficients given per metre. The waves gather sunlight into caustics on the floor, and foam forms on shorelines and compressed crests. A camera under the surface looks through the water and up through Snell's window.sampleWaterSurface()returns the height and normal of the surface as it is drawn. Thewater*fields ofRenderQualitySettingsset the cost: an ocean adds about 0.85 ms (Fast), 1.7 ms (High) and 1.85 ms (Ultra) to a 1600 x 900 frame on an RTX 2070 SUPER. Water is visual only: it is not seen by depth, segmentation or LiDAR renders and casts no shadows. See Water. - New: flowing water.
WaterBody::flowsimulates a rectangle as shallow water on the GPU. The water runs downhill over the scene below it under gravity and bed friction (Manning), fills hollows, flows around rocks, piers and banks, and leaves through open edges; its waves travel at the shallow-water speed, still water stays still over any bed, and the volume changes only by what the sources (WaterFlowSource) add and drain. RaiSim bodies that move push the water aside and leave wakes. The surface is drawn from the simulated depth and velocity, with ripples, foam and caustics that drift with the current and foam where the water runs fast and shallow.sampleWaterFlow()returns the depth, surface and velocity of the water, and around a body the water it sits in, for buoyancy and drag;resetWaterFlow()starts a body over. A 240 x 240-cell pool adds about 1.6 ms to a High frame (0.7 ms at 120 x 120). See Flowing water.
Examples
- New
rayrai_inverse_kinematicsexample: drag a target with the mouse, and a simulated Kinova arm with a Robotiq gripper follows it.ArticulatedSystem::solveIK()solves for the target every frame from the previous solution, and the arm's joint PD targets move towards that solution, so the arm pushes, grasps and lifts the cubes on its workbench. See Rayrai Example: Inverse Kinematics. - New
robotiq_cloth_foldexample: a Kinova arm with a Robotiq 2F-85 holds a cloth by one corner, lays half of it on the table, folds the other half over it, then unfolds and lifts it. The fold follows the line where the cloth actually landed, solved withArticulatedSystem::solveIK(), and the cloth is solved together with the arm (World::setMonolithicDeformables()). See Server Example: Robotiq Cloth Fold. - New examples with cloth solved together with the bodies:
heavy_objects_on_cloth(a 10 kg ball on a cloth, a box on two stacked cloths and a heavy blanket on a light box rest on what carries the cloth),cloth_on_slope(a box on a cloth stays on a ramp below the friction angle and slides above it) andtablecloth_pull(the tablecloth trick). See Server Example: Heavy Objects on Cloth, Server Example: Cloth on a Slope and Server Example: Tablecloth Pull. - New
rayrai_water_pondexample: a pond in a meadow drawn with rayrai water. Grass, trees, mossy rocks and a wooden jetty stand on its banks, ripples move over it, the afternoon sun glitters on it and volumetric clouds hang above. See Rayrai Example: Water Pond. - New
rayrai_water_streamexample: a creek runs down a hillside between mossy rocks into a pool, simulated as flowing water, and wooden balls float down it with the buoyancy and drag of the simulated current. See Rayrai Example: Water Stream. rayrai_warehouse: the flat ambient light ofrsc/warehouse/rayrai_warehouse.rsceneis 0.12 instead of 0.32. It lit every surface of the closed hall evenly, brighter than the sun lights the floor, so the hall looked washed out; the racks and the aisles now keep their shading.