Release v0.5.0 - #34
Merged
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
v0.5.0 (16 August 2026)
Breaking changes
NexusState::insert_rigid_body/insert_rigid_body_intake an extraRbdCouplingargument.Pass
RbdCoupling::Nonefor a rigid-body-only scene.contact_damping_ratio5.0→10.0,normalized_allowed_linear_error0.001→0.005,normalized_max_corrective_velocity10.0→3.0,normalized_prediction_distance0.002→0.02.BackendType::Rapier(CPU rapier reference backend) was removed. The remainingbackends all run the nexus pipeline:
Gpu,Cpu,Cuda,Metal.boxes3→rbd_boxes3). Thebench_joints3,bench_multibody_pendulum3andbench_urdf3benchmarks were removed.dimforge-nexus3d(the import name staysnexus3d).0.35and parry0.30(was rapier0.34/parry0.29).Added
nexus_mpm: a GPU Material Point Method solver, in 2D and 3D, behind thempmfeature.Particles are added and removed by chunk (
NexusState::add_particles,extend_chunk,remove_chunk), on a sparse sorted grid with substepping and a CFL timestep bound.a weakly-compressible fluid, and the Stomakhin snow model, all built through
ParticleModel.RbdCoupling::MpmOneWay: colliders act as moving boundaries for the particles, with per-bodystick/slip/separate/non-reflectingconditions and optional CPIC for thin obstacles.RbdCoupling::MpmTwoWayhands a body over to MPM entirely: the rigid-body pipeline treats it asstatic while MPM integrates it from the particle impulses. At most 16 coupled bodies (CPIC limit).
disables self-contacts.
velocity measured at the start of the step.
(
GpuMultibodySet::set_link_external_wrench), and DOF couplings between two joint axes.GpuMultibodySet::set_motor,set_motors,motor), plusset_num_internal_pgs_iterationsandset_implicit_coriolis.RbdSimParams::static_contact_natural_frequency/static_contact_damping_ratio: contactstouching a fixed body get their own, stiffer by default, softness coefficients.
RbdSimParams::normalized_max_linear_velocity(default400.0m/s) caps the linear velocityafter each substep so speculative contacts stay reliable. Set to
f32::MAXto disable.64 colliders.
NexusState::rbd_world_mut_untracked: mutate a rapier world afterfinalizewithout markingthe GPU state dirty.
snap_rgbframe capture, configurable resolution, a headless mode, a vsync toggle,pipelined capture (
render_async/render_flush) and kiss3d's GPU path tracer(
raytrace_frame), all exposed to Python (PRs Add NexusViewer.render() to export frames off-screen #7, Add ability to generate python raytracing renderering #8 and Python: headless viewer, vsync control, pipelined frame capture #11 by @haixuanTao).set_mpm_params,add_particles,ParticleModel, …).web-compatfeature on the shader crates, enabled automatically when targetingwasm32.Modified
from the post-integration poses, instead of stripping CFM and bias from the constraints in place.
NexusState::set_rbd_gravityapplies to free rigid-bodies and multibody links alike, and worksin 2D (where the third component is ignored). It used to be 3D- and multibody-only.
bucket-sorted by color, fused colored sweeps, a shared-memory multibody PGS sweep, an SoA link
workspace, LBVH subtree pruning, and skipping the pipelines that are provably inert.
Fixed
RbdState::from_rapierzero-filled the velocity buffer, dropping every body's initial linearand angular velocity (PR fix: upload initial body velocities in the from_rapier bulk path #10 by @haixuanTao).
bounds, where it can never apply an impulse (PR perf(rbd): skip inactive joint-limit constraint rows #14 by @haixuanTao).
which WebGPU rejects; the loop bound is now a uniform holding the max over all multibodies.
padded capacity instead of the real contact count.
whileloop, which naga might miscompile on macos.