Skip to content

Commit 134f433

Browse files
authored
feat: solver improvements + release v0.29.0 (dimforge#876)
* feat: solver improvements * feat: add function to get/set whether gyroscopic forces are enabled on a rigid-body * chore: switch to released versions of parry and wide instead of local patches * fix cargo doc * chore: typo fixes * chore: clippy fix * Release v0.29.0 * chore: more clippy fixes
1 parent 317322b commit 134f433

File tree

94 files changed

+5100
-8170
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

94 files changed

+5100
-8170
lines changed

CHANGELOG.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,19 @@
1+
## v0.29.0 (05 Sept. 2025)
2+
3+
This version contains a significant rework of the internal velocity constraints solver.
4+
This makes it both simpler and more optimized (making the whole simulation up to 25% faster). For details on all the
5+
changes, see [#876](https://github.com/dimforge/rapier/pull/876).
6+
7+
Notable changes include:
8+
9+
- Update to parry 0.24 (includes a breaking change where all the `*angular_inertia_sqrt` fields and functions have been
10+
replaced by their non-square-root equivalent.
11+
- Fixed bug where friction on kinematic bodies would affect dynamic bodies much more weakly than it should.
12+
- In 3D, added a new friction model that is more efficient than the traditional Coulomb friction. This new simplified
13+
model is enabled by default and can be changed with `IntegrationParameters::friction_model`.
14+
- Removed support for the legacy PGS solver. Removed `IntegrationParameters::pgs_legacy` and
15+
`::tgs_soft_without_warmstart`.
16+
117
## v0.28.0 (08 August 2025)
218

319
### Modified

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ needless_lifetimes = "allow"
3333
#parry3d-f64 = { path = "../parry/crates/parry3d-f64" }
3434
#nalgebra = { path = "../nalgebra" }
3535
#simba = { path = "../simba" }
36+
#wide = { path = "../wide" }
3637

3738
#kiss3d = { git = "https://github.com/sebcrozet/kiss3d" }
3839
#nalgebra = { git = "https://github.com/dimforge/nalgebra", branch = "dev" }

benchmarks3d/joint_revolute3.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ pub fn init_world(testbed: &mut Testbed) {
3838
let mut handles = [curr_parent; 4];
3939
for k in 0..4 {
4040
let density = 1.0;
41-
let rigid_body = RigidBodyBuilder::dynamic().position(positions[k]);
41+
let rigid_body = RigidBodyBuilder::dynamic().pose(positions[k]);
4242
handles[k] = bodies.insert(rigid_body);
4343
let collider = ColliderBuilder::cuboid(rad, rad, rad).density(density);
4444
colliders.insert_with_parent(collider, handles[k], &mut bodies);

benchmarks3d/stacks3.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ fn create_tower_circle(
2323
* Translation::new(0.0, y, radius);
2424

2525
// Build the rigid body.
26-
let rigid_body = RigidBodyBuilder::dynamic().position(pos);
26+
let rigid_body = RigidBodyBuilder::dynamic().pose(pos);
2727
let handle = bodies.insert(rigid_body);
2828
let collider = ColliderBuilder::cuboid(half_extents.x, half_extents.y, half_extents.z);
2929
colliders.insert_with_parent(collider, handle, bodies);

crates/rapier2d-f64/Cargo.toml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "rapier2d-f64"
3-
version = "0.28.0"
3+
version = "0.29.0"
44
authors = ["Sébastien Crozet <sebcrozet@dimforge.com>"]
55
description = "2-dimensional physics engine in Rust."
66
documentation = "https://docs.rs/rapier2d"
@@ -69,8 +69,8 @@ vec_map = { version = "0.8", optional = true }
6969
web-time = { version = "1.1", optional = true }
7070
num-traits = "0.2"
7171
nalgebra = "0.34"
72-
parry2d-f64 = "0.23.0"
73-
simba = "0.9"
72+
parry2d-f64 = "0.24.0"
73+
simba = "0.9.1"
7474
approx = "0.5"
7575
rayon = { version = "1", optional = true }
7676
arrayvec = "0.7"
@@ -84,6 +84,7 @@ log = "0.4"
8484
ordered-float = "5"
8585
thiserror = "2"
8686
profiling = "1.0"
87+
static_assertions = "1"
8788

8889
[dev-dependencies]
8990
bincode = "1"

crates/rapier2d/Cargo.toml

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "rapier2d"
3-
version = "0.28.0"
3+
version = "0.29.0"
44
authors = ["Sébastien Crozet <sebcrozet@dimforge.com>"]
55
description = "2-dimensional physics engine in Rust."
66
documentation = "https://docs.rs/rapier2d"
@@ -33,8 +33,8 @@ default = ["dim2", "f32"]
3333
dim2 = []
3434
f32 = []
3535
parallel = ["dep:rayon"]
36-
simd-stable = ["simba/wide", "simd-is-enabled"]
37-
simd-nightly = ["simba/portable_simd", "simd-is-enabled"]
36+
simd-stable = ["simba/wide", "parry2d/simd-stable", "simd-is-enabled"]
37+
simd-nightly = ["simba/portable_simd", "parry2d/simd-nightly", "simd-is-enabled"]
3838
# Do not enable this feature directly. It is automatically
3939
# enabled with the "simd-stable" or "simd-nightly" feature.
4040
simd-is-enabled = ["dep:vec_map"]
@@ -70,8 +70,8 @@ vec_map = { version = "0.8", optional = true }
7070
web-time = { version = "1.1", optional = true }
7171
num-traits = "0.2"
7272
nalgebra = "0.34"
73-
parry2d = "0.23.0"
74-
simba = "0.9"
73+
parry2d = "0.24.0"
74+
simba = "0.9.1"
7575
approx = "0.5"
7676
rayon = { version = "1", optional = true }
7777
arrayvec = "0.7"
@@ -85,6 +85,10 @@ log = "0.4"
8585
ordered-float = "5"
8686
thiserror = "2"
8787
profiling = "1.0"
88+
static_assertions = "1"
89+
90+
# TODO: should be re-exported from simba
91+
wide = "0.7.1"
8892

8993
[dev-dependencies]
9094
bincode = "1"

crates/rapier3d-f64/Cargo.toml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "rapier3d-f64"
3-
version = "0.28.0"
3+
version = "0.29.0"
44
authors = ["Sébastien Crozet <sebcrozet@dimforge.com>"]
55
description = "3-dimensional physics engine in Rust."
66
documentation = "https://docs.rs/rapier3d"
@@ -72,8 +72,8 @@ vec_map = { version = "0.8", optional = true }
7272
web-time = { version = "1.1", optional = true }
7373
num-traits = "0.2"
7474
nalgebra = "0.34"
75-
parry3d-f64 = "0.23.0"
76-
simba = "0.9"
75+
parry3d-f64 = "0.24.0"
76+
simba = "0.9.1"
7777
approx = "0.5"
7878
rayon = { version = "1", optional = true }
7979
arrayvec = "0.7"
@@ -87,6 +87,7 @@ log = "0.4"
8787
ordered-float = "5"
8888
thiserror = "2"
8989
profiling = "1.0"
90+
static_assertions = "1"
9091

9192
[dev-dependencies]
9293
bincode = "1"

crates/rapier3d-meshloader/Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "rapier3d-meshloader"
3-
version = "0.9.0"
3+
version = "0.10.0"
44
authors = ["Sébastien Crozet <sebcrozet@dimforge.com>"]
55
description = "STL file loader for the 3D rapier physics engine."
66
documentation = "https://docs.rs/rapier3d-meshloader"
@@ -29,4 +29,4 @@ thiserror = "2"
2929
profiling = "1.0"
3030
mesh-loader = "0.1.12"
3131

32-
rapier3d = { version = "0.28.0", path = "../rapier3d" }
32+
rapier3d = { version = "0.29.0", path = "../rapier3d" }

crates/rapier3d-urdf/Cargo.toml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "rapier3d-urdf"
3-
version = "0.9.0"
3+
version = "0.10.0"
44
authors = ["Sébastien Crozet <sebcrozet@dimforge.com>"]
55
description = "URDF file loader for the 3D rapier physics engine."
66
documentation = "https://docs.rs/rapier3d-urdf"
@@ -31,5 +31,5 @@ anyhow = "1"
3131
bitflags = "2"
3232
urdf-rs = "0.9"
3333

34-
rapier3d = { version = "0.28.0", path = "../rapier3d" }
35-
rapier3d-meshloader = { version = "0.9.0", path = "../rapier3d-meshloader", default-features = false, optional = true }
34+
rapier3d = { version = "0.29.0", path = "../rapier3d" }
35+
rapier3d-meshloader = { version = "0.10.0", path = "../rapier3d-meshloader", default-features = false, optional = true }

crates/rapier3d/Cargo.toml

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "rapier3d"
3-
version = "0.28.0"
3+
version = "0.29.0"
44
authors = ["Sébastien Crozet <sebcrozet@dimforge.com>"]
55
description = "3-dimensional physics engine in Rust."
66
documentation = "https://docs.rs/rapier3d"
@@ -74,8 +74,8 @@ vec_map = { version = "0.8", optional = true }
7474
web-time = { version = "1.1", optional = true }
7575
num-traits = "0.2"
7676
nalgebra = "0.34"
77-
parry3d = "0.23.0"
78-
simba = "0.9"
77+
parry3d = "0.24.0"
78+
simba = "0.9.1"
7979
approx = "0.5"
8080
rayon = { version = "1", optional = true }
8181
arrayvec = "0.7"
@@ -89,6 +89,10 @@ log = "0.4"
8989
ordered-float = "5"
9090
thiserror = "2"
9191
profiling = "1.0"
92+
static_assertions = "1"
93+
94+
# TODO: should be re-exported from simba
95+
wide = "0.7.1"
9296

9397
[dev-dependencies]
9498
bincode = "1"

0 commit comments

Comments
 (0)