diff options
Diffstat (limited to 'src/dynamics/solver')
6 files changed, 20 insertions, 16 deletions
diff --git a/src/dynamics/solver/contact_constraint/one_body_constraint.rs b/src/dynamics/solver/contact_constraint/one_body_constraint.rs index 1243d11..cf9fe67 100644 --- a/src/dynamics/solver/contact_constraint/one_body_constraint.rs +++ b/src/dynamics/solver/contact_constraint/one_body_constraint.rs @@ -333,7 +333,8 @@ impl OneBodyConstraintBuilder { } } - constraint.cfm_factor = if is_fast_contact { 1.0 } else { cfm_factor }; + constraint.cfm_factor = cfm_factor; + // constraint.cfm_factor = if is_fast_contact { 1.0 } else { cfm_factor }; } } diff --git a/src/dynamics/solver/contact_constraint/one_body_constraint_simd.rs b/src/dynamics/solver/contact_constraint/one_body_constraint_simd.rs index 5710bc4..131702c 100644 --- a/src/dynamics/solver/contact_constraint/one_body_constraint_simd.rs +++ b/src/dynamics/solver/contact_constraint/one_body_constraint_simd.rs @@ -330,7 +330,8 @@ impl SimdOneBodyConstraintBuilder { } } - constraint.cfm_factor = SimdReal::splat(1.0).select(is_fast_contact, cfm_factor); + constraint.cfm_factor = cfm_factor; + // constraint.cfm_factor = SimdReal::splat(1.0).select(is_fast_contact, cfm_factor); } } diff --git a/src/dynamics/solver/contact_constraint/two_body_constraint.rs b/src/dynamics/solver/contact_constraint/two_body_constraint.rs index 1511d4f..e98305a 100644 --- a/src/dynamics/solver/contact_constraint/two_body_constraint.rs +++ b/src/dynamics/solver/contact_constraint/two_body_constraint.rs @@ -432,7 +432,8 @@ impl TwoBodyConstraintBuilder { } } - constraint.cfm_factor = if is_fast_contact { 1.0 } else { cfm_factor }; + constraint.cfm_factor = cfm_factor; + // constraint.cfm_factor = if is_fast_contact { 1.0 } else { cfm_factor }; } } diff --git a/src/dynamics/solver/contact_constraint/two_body_constraint_simd.rs b/src/dynamics/solver/contact_constraint/two_body_constraint_simd.rs index 4c4ef52..4af0d10 100644 --- a/src/dynamics/solver/contact_constraint/two_body_constraint_simd.rs +++ b/src/dynamics/solver/contact_constraint/two_body_constraint_simd.rs @@ -317,7 +317,8 @@ impl TwoBodyConstraintBuilderSimd { } } - constraint.cfm_factor = SimdReal::splat(1.0).select(is_fast_contact, cfm_factor); + constraint.cfm_factor = cfm_factor; + // constraint.cfm_factor = SimdReal::splat(1.0).select(is_fast_contact, cfm_factor); } } diff --git a/src/dynamics/solver/island_solver.rs b/src/dynamics/solver/island_solver.rs index 159bfa7..718542b 100644 --- a/src/dynamics/solver/island_solver.rs +++ b/src/dynamics/solver/island_solver.rs @@ -47,8 +47,6 @@ impl IslandSolver { let mut params = *base_params; params.dt /= num_solver_iterations as Real; - params.damping_ratio /= num_solver_iterations as Real; - // params.joint_damping_ratio /= num_solver_iterations as Real; /* * diff --git a/src/dynamics/solver/velocity_solver.rs b/src/dynamics/solver/velocity_solver.rs index 9d5c279..a4e03b2 100644 --- a/src/dynamics/solver/velocity_solver.rs +++ b/src/dynamics/solver/velocity_solver.rs @@ -205,17 +205,19 @@ impl VelocitySolver { /* * Resolution without bias. */ - for _ in 0..params.num_internal_stabilization_iterations { - joint_constraints - .solve_wo_bias(&mut self.solver_vels, &mut self.generic_solver_vels); - contact_constraints.solve_restitution_wo_bias( - &mut self.solver_vels, - &mut self.generic_solver_vels, - ); - } + if params.num_internal_stabilization_iterations > 0 { + for _ in 0..params.num_internal_stabilization_iterations { + joint_constraints + .solve_wo_bias(&mut self.solver_vels, &mut self.generic_solver_vels); + contact_constraints.solve_restitution_wo_bias( + &mut self.solver_vels, + &mut self.generic_solver_vels, + ); + } - contact_constraints - .solve_friction(&mut self.solver_vels, &mut self.generic_solver_vels); + contact_constraints + .solve_friction(&mut self.solver_vels, &mut self.generic_solver_vels); + } } } |
