Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
# Unreleased
- Update to Rapier 0.32. This migrates most public APIs and internals to use `glam` instead of `nalgebra`.
- Fix a GPU validation error / panic on simulations with more than ~4.19M particles, caused by
compute kernels dispatching more than 65535 workgroups along a single dimension. The affected
kernels now clamp the dispatch and grid-stride over the particles.
Expand Down
7 changes: 6 additions & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,16 @@ members = [
"crates/slosh_testbed3d",
"crates/slosh2d",
"crates/slosh3d",
# "validation_tests",
# "validation_tests",
]
resolver = "2"

[workspace.dependencies]
glam = { version = "0.30", default-features = false, features = [
"std",
"encase",
"bytemuck",
] }
nalgebra = { version = "0.34", features = ["convert-bytemuck"] }
wgpu = { version = "27", features = ["naga-ir"] }
encase = "0.12"
Expand Down
15 changes: 8 additions & 7 deletions crates/slosh2d/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,12 @@ required-features = ["dim2"]
default = ["dim2"]
dim2 = []

comptime = [ "slosh_testbed2d/comptime", "stensor/comptime" ]
runtime = [ "slosh_testbed2d/runtime", "stensor/runtime" ]
webgpu = [ "slosh_testbed2d/webgpu", "stensor/webgpu" ]
comptime = ["slosh_testbed2d/comptime", "stensor/comptime"]
runtime = ["slosh_testbed2d/runtime", "stensor/runtime"]
webgpu = ["slosh_testbed2d/webgpu", "stensor/webgpu"]

[dependencies]
nalgebra = { workspace = true }
glam = { workspace = true }
wgpu = { workspace = true }
encase = { workspace = true }
slang-hal = { workspace = true }
Expand All @@ -37,20 +37,21 @@ static_assertions = { workspace = true }
bvh = "0.12.0"

# TODO: make rapier optional?
rapier2d = "0.31"
rapier2d = "0.32"

# For wasm?
getrandom = { version = "0.3.1", features = ["wasm_js"] }
uuid = { version = "1", features = ["js"] }


[dev-dependencies]
nalgebra = { version = "0.34", features = ["rand"] }
futures-test = "0.3"
serial_test = "3"
approx = "0.5"
async-std = { version = "1", features = ["attributes"] }
slosh_testbed2d = { path = "../slosh_testbed2d", features = ["dim2"], default-features = false }
slosh_testbed2d = { path = "../slosh_testbed2d", features = [
"dim2",
], default-features = false }
kiss3d = { version = "0.37.0" }

[build-dependencies]
Expand Down
8 changes: 4 additions & 4 deletions crates/slosh2d/examples/centilever_beam2.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use slosh_testbed2d::{RapierData, slosh};

use nalgebra::{point, vector};
use glam::vec2;
use rapier2d::prelude::{ColliderBuilder, RigidBodyBuilder};
use slang_hal::backend::WebGpu;
use slosh::{
Expand Down Expand Up @@ -33,7 +33,7 @@ pub fn beam_demo(backend: &WebGpu, app_state: &mut AppState) -> PhysicsContext {
let mut particles = vec![];
for i in 0..ni {
for j in 0..nj {
let position = point![i as f32, j as f32] * diameter;
let position = vec2(i as f32, j as f32) * diameter;
let density = 1000.0;
let radius = diameter / 2.0;
let model = ParticleModel::elastic_neo_hookean(young_modulus, poisson_ratio);
Expand All @@ -48,13 +48,13 @@ pub fn beam_demo(backend: &WebGpu, app_state: &mut AppState) -> PhysicsContext {
};

let params = SimulationParams {
gravity: vector![0.0, -9.81] * app_state.gravity_factor,
gravity: vec2(0.0, -9.81) * app_state.gravity_factor,
dt: 1.0 / 60.0,
padding: 0.0,
};

let rb = RigidBodyBuilder::fixed()
.translation(vector![0.0, height / 2.0])
.translation(vec2(0.0, height / 2.0))
.build();
let rb_handle = rapier_data.bodies.insert(rb);
let co = ColliderBuilder::cuboid(fixed_part, height);
Expand Down
16 changes: 8 additions & 8 deletions crates/slosh2d/examples/elastic_cut2.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use slosh_testbed2d::{RapierData, slosh};

use nalgebra::{Vector2, point, vector};
use glam::vec2;
use rapier2d::prelude::{ColliderBuilder, RigidBodyBuilder};
use slang_hal::backend::WebGpu;
use slosh::{
Expand All @@ -25,7 +25,7 @@ pub fn elastic_cut_demo(backend: &WebGpu, app_state: &mut AppState) -> PhysicsCo
for i in 0..700 {
for j in 0..700 {
let position =
point![i as f32 + 0.5, j as f32 + 0.5] * cell_width / 2.0 + Vector2::y() * offset_y;
vec2(i as f32 + 0.5, j as f32 + 0.5) * cell_width / 2.0 + vec2(0.0, offset_y);

let density = 1000.0;
let radius = cell_width / 4.0;
Expand All @@ -40,7 +40,7 @@ pub fn elastic_cut_demo(backend: &WebGpu, app_state: &mut AppState) -> PhysicsCo
};

let params = SimulationParams {
gravity: vector![0.0, -9.81] * app_state.gravity_factor,
gravity: vec2(0.0, -9.81) * app_state.gravity_factor,
dt: 1.0 / 60.0,
padding: 0.0,
};
Expand All @@ -50,7 +50,7 @@ pub fn elastic_cut_demo(backend: &WebGpu, app_state: &mut AppState) -> PhysicsCo
/*
* Static platforms.
*/
let rb = RigidBodyBuilder::fixed().translation(vector![35.0, 20.0]);
let rb = RigidBodyBuilder::fixed().translation(vec2(35.0, 20.0));
let rb_handle = rapier_data.bodies.insert(rb);
let co = ColliderBuilder::cuboid(70.0, 1.0);
rapier_data
Expand All @@ -60,12 +60,12 @@ pub fn elastic_cut_demo(backend: &WebGpu, app_state: &mut AppState) -> PhysicsCo
let mut polyline = vec![];
let subdivs = 100;
let length = 84.0;
let start = point![35.0, 70.0] - vector![length / 2.0, 0.0];
let start = vec2(35.0 - length / 2.0, 70.0);

for i in 0..=subdivs {
let step = length / (subdivs as f32);
let dx = i as f32 * step;
polyline.push(start + vector![dx, dx.sin()])
polyline.push(start + vec2(dx, dx.sin()))
}

let rb = RigidBodyBuilder::fixed();
Expand All @@ -80,8 +80,8 @@ pub fn elastic_cut_demo(backend: &WebGpu, app_state: &mut AppState) -> PhysicsCo
let rb_handle = rapier_data.bodies.insert(rb);
let co = ColliderBuilder::polyline(
vec![
point![0.0 + k as f32 * 15.0, 20.0],
point![-10.0 + k as f32 * 15.0, 45.0],
vec2(0.0 + k as f32 * 15.0, 20.0),
vec2(-10.0 + k as f32 * 15.0, 45.0),
],
None,
)
Expand Down
14 changes: 7 additions & 7 deletions crates/slosh2d/examples/elasticity2.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use slosh_testbed2d::{RapierData, slosh};

use nalgebra::{Vector2, point, vector};
use glam::vec2;
use rapier2d::prelude::{ColliderBuilder, RigidBodyBuilder};
use slang_hal::backend::WebGpu;
use slosh::{
Expand All @@ -25,8 +25,8 @@ pub fn elasticity_demo(backend: &WebGpu, app_state: &mut AppState) -> PhysicsCon
for i in 0..700 {
for j in 0..700 {
let position =
point![i as f32 + 0.5 + (i / 50) as f32 * 2.0, j as f32 + 0.5] * cell_width / 2.0
+ Vector2::y() * offset_y;
vec2(i as f32 + 0.5 + (i / 50) as f32 * 2.0, j as f32 + 0.5) * cell_width / 2.0
+ vec2(0.0, offset_y);
let density = 1000.0;
let radius = cell_width / 4.0;
let model = ParticleModel::elastic(5.0e6, 0.2);
Expand All @@ -40,20 +40,20 @@ pub fn elasticity_demo(backend: &WebGpu, app_state: &mut AppState) -> PhysicsCon
};

let params = SimulationParams {
gravity: vector![0.0, -9.81] * app_state.gravity_factor,
gravity: vec2(0.0, -9.81) * app_state.gravity_factor,
dt: 1.0 / 60.0,
padding: 0.0,
};

let rb = RigidBodyBuilder::fixed().translation(vector![0.0, -1.0]);
let rb = RigidBodyBuilder::fixed().translation(vec2(0.0, -1.0));
let rb_handle = rapier_data.bodies.insert(rb);
let co = ColliderBuilder::cuboid(1000.0, 1.0);
rapier_data
.colliders
.insert_with_parent(co, rb_handle, &mut rapier_data.bodies);

let rb = RigidBodyBuilder::fixed()
.translation(vector![-20.0, 0.0])
.translation(vec2(-20.0, 0.0))
.rotation(0.5);
let rb_handle = rapier_data.bodies.insert(rb);
let co = ColliderBuilder::cuboid(1.0, 60.0);
Expand All @@ -62,7 +62,7 @@ pub fn elasticity_demo(backend: &WebGpu, app_state: &mut AppState) -> PhysicsCon
.insert_with_parent(co, rb_handle, &mut rapier_data.bodies);

let rb = RigidBodyBuilder::fixed()
.translation(vector![90.0, 0.0])
.translation(vec2(90.0, 0.0))
.rotation(-0.5);
let rb_handle = rapier_data.bodies.insert(rb);
let co = ColliderBuilder::cuboid(1.0, 60.0);
Expand Down
22 changes: 11 additions & 11 deletions crates/slosh2d/examples/sand2.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use slosh_testbed2d::{RapierData, slosh};

use nalgebra::{Vector2, point, vector};
use glam::vec2;
use rapier2d::prelude::{ColliderBuilder, RigidBodyBuilder};
use slang_hal::backend::WebGpu;
use slosh::{
Expand All @@ -25,7 +25,7 @@ pub fn sand_demo(backend: &WebGpu, app_state: &mut AppState) -> PhysicsContext {
for i in 0..700 {
for j in 0..700 {
let position =
point![i as f32 + 0.5, j as f32 + 0.5] * cell_width / 2.0 + Vector2::y() * offset_y;
vec2(i as f32 + 0.5, j as f32 + 0.5) * cell_width / 2.0 + vec2(0.0, offset_y);
let density = 1000.0;
let radius = cell_width / 4.0;
let young_modulus = 1.0e7;
Expand All @@ -43,7 +43,7 @@ pub fn sand_demo(backend: &WebGpu, app_state: &mut AppState) -> PhysicsContext {
};

let params = SimulationParams {
gravity: vector![0.0, -9.81] * app_state.gravity_factor,
gravity: vec2(0.0, -9.81) * app_state.gravity_factor,
dt: 1.0 / 60.0,
padding: 0.0,
};
Expand All @@ -53,15 +53,15 @@ pub fn sand_demo(backend: &WebGpu, app_state: &mut AppState) -> PhysicsContext {
/*
* Static platforms.
*/
let rb = RigidBodyBuilder::fixed().translation(vector![35.0, -1.0]);
let rb = RigidBodyBuilder::fixed().translation(vec2(35.0, -1.0));
let rb_handle = rapier_data.bodies.insert(rb);
let co = ColliderBuilder::cuboid(42.0, 1.0);
rapier_data
.colliders
.insert_with_parent(co, rb_handle, &mut rapier_data.bodies);

let rb = RigidBodyBuilder::fixed()
.translation(vector![-25.0, 45.0])
.translation(vec2(-25.0, 45.0))
.rotation(0.5);
let rb_handle = rapier_data.bodies.insert(rb);
let co = ColliderBuilder::cuboid(1.0, 52.0);
Expand All @@ -70,7 +70,7 @@ pub fn sand_demo(backend: &WebGpu, app_state: &mut AppState) -> PhysicsContext {
.insert_with_parent(co, rb_handle, &mut rapier_data.bodies);

let rb = RigidBodyBuilder::fixed()
.translation(vector![95.0, 45.0])
.translation(vec2(95.0, 45.0))
.rotation(-0.5);
let rb_handle = rapier_data.bodies.insert(rb);
let co = ColliderBuilder::cuboid(1.0, 52.0);
Expand All @@ -82,7 +82,7 @@ pub fn sand_demo(backend: &WebGpu, app_state: &mut AppState) -> PhysicsContext {
* Rotating platforms.
*/
let rb = RigidBodyBuilder::kinematic_velocity_based()
.translation(vector![5.0, 35.0])
.translation(vec2(5.0, 35.0))
.angvel(ANGVEL);
let rb_handle = rapier_data.bodies.insert(rb);
let co = ColliderBuilder::cuboid(1.0, 10.0);
Expand All @@ -91,7 +91,7 @@ pub fn sand_demo(backend: &WebGpu, app_state: &mut AppState) -> PhysicsContext {
.insert_with_parent(co, rb_handle, &mut rapier_data.bodies);

let rb = RigidBodyBuilder::kinematic_velocity_based()
.translation(vector![35.0, 35.0])
.translation(vec2(35.0, 35.0))
.angvel(-ANGVEL);
let rb_handle = rapier_data.bodies.insert(rb);
let co = ColliderBuilder::cuboid(10.0, 1.0);
Expand All @@ -100,7 +100,7 @@ pub fn sand_demo(backend: &WebGpu, app_state: &mut AppState) -> PhysicsContext {
.insert_with_parent(co, rb_handle, &mut rapier_data.bodies);

let rb = RigidBodyBuilder::kinematic_velocity_based()
.translation(vector![65.0, 35.0])
.translation(vec2(65.0, 35.0))
.angvel(ANGVEL);
let rb_handle = rapier_data.bodies.insert(rb);
let co = ColliderBuilder::cuboid(1.0, 10.0);
Expand All @@ -109,7 +109,7 @@ pub fn sand_demo(backend: &WebGpu, app_state: &mut AppState) -> PhysicsContext {
.insert_with_parent(co, rb_handle, &mut rapier_data.bodies);

let rb = RigidBodyBuilder::kinematic_velocity_based()
.translation(vector![20.0, 20.0])
.translation(vec2(20.0, 20.0))
.angvel(-ANGVEL);
let rb_handle = rapier_data.bodies.insert(rb);
let co = ColliderBuilder::ball(5.0);
Expand All @@ -118,7 +118,7 @@ pub fn sand_demo(backend: &WebGpu, app_state: &mut AppState) -> PhysicsContext {
.insert_with_parent(co, rb_handle, &mut rapier_data.bodies);

let rb = RigidBodyBuilder::kinematic_velocity_based()
.translation(vector![50.0, 20.0])
.translation(vec2(50.0, 20.0))
.angvel(-ANGVEL);
let rb_handle = rapier_data.bodies.insert(rb);
let co = ColliderBuilder::capsule_y(5.0, 3.0);
Expand Down
11 changes: 5 additions & 6 deletions crates/slosh3d/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,12 @@ required-features = ["dim3"]
default = ["dim3"]
dim3 = []

comptime = [ "stensor/comptime", "slosh_testbed3d/comptime" ]
runtime = [ "stensor/runtime", "slosh_testbed3d/runtime" ]
webgpu = [ "stensor/webgpu", "slosh_testbed3d/webgpu" ]
comptime = ["stensor/comptime", "slosh_testbed3d/comptime"]
runtime = ["stensor/runtime", "slosh_testbed3d/runtime"]
webgpu = ["stensor/webgpu", "slosh_testbed3d/webgpu"]

[dependencies]
nalgebra = { workspace = true }
glam = { workspace = true }
wgpu = { workspace = true }
encase = { workspace = true }
bytemuck = { workspace = true }
Expand All @@ -37,10 +37,9 @@ bvh = "0.12.0"
serde = "1"

# TODO: make rapier optional?
rapier3d = "0.31"
rapier3d = "0.32"

[dev-dependencies]
nalgebra = { version = "0.34", features = ["rand"] }
futures-test = "0.3"
serial_test = "3"
approx = "0.5"
Expand Down
8 changes: 4 additions & 4 deletions crates/slosh3d/examples/centilever_beam3.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use slosh_testbed3d::{PhysicsState, RapierData, slosh};

use nalgebra::{point, vector};
use glam::vec3;
use rapier3d::prelude::{ColliderBuilder, RigidBodyBuilder};
use slang_hal::backend::WebGpu;
use slosh::{
Expand Down Expand Up @@ -34,7 +34,7 @@ pub fn beam_demo(backend: &WebGpu, app_state: &mut AppState) -> PhysicsContext {
for i in 0..ni {
for j in 0..njk {
for k in 0..njk {
let position = point![i as f32, j as f32, k as f32] * diameter;
let position = vec3(i as f32, j as f32, k as f32) * diameter;
let density = 1000.0;
let radius = diameter / 2.0;
let model = ParticleModel::elastic_neo_hookean(young_modulus, poisson_ratio);
Expand All @@ -52,12 +52,12 @@ pub fn beam_demo(backend: &WebGpu, app_state: &mut AppState) -> PhysicsContext {
};

let params = SimulationParams {
gravity: vector![0.0, -9.81, 0.0] * app_state.gravity_factor,
gravity: vec3(0.0, -9.81, 0.0) * app_state.gravity_factor,
dt: 1.0 / 60.0,
};

let rb = RigidBodyBuilder::fixed()
.translation(vector![0.0, height / 2.0, height / 2.0])
.translation(vec3(0.0, height / 2.0, height / 2.0))
.build();
let rb_handle = rapier_data.bodies.insert(rb);
let co = ColliderBuilder::cuboid(fixed_part, height, height);
Expand Down
Loading
Loading