Some small performance improvements.
This commit is contained in:
@@ -52,7 +52,7 @@ impl CCDSolver {
|
|||||||
* crate::utils::inv(body.max_point_velocity()))
|
* crate::utils::inv(body.max_point_velocity()))
|
||||||
.min(dt);
|
.min(dt);
|
||||||
// println!("Min toi: {}, Toi: {}", min_toi, toi);
|
// println!("Min toi: {}, Toi: {}", min_toi, toi);
|
||||||
body.integrate_next_position(toi.max(min_toi), false);
|
body.integrate_next_position(toi.max(min_toi));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ pub struct IntegrationParameters {
|
|||||||
/// Each cached impulse are multiplied by this coefficient in `[0, 1]`
|
/// Each cached impulse are multiplied by this coefficient in `[0, 1]`
|
||||||
/// when they are re-used to initialize the solver (default `1.0`).
|
/// when they are re-used to initialize the solver (default `1.0`).
|
||||||
pub warmstart_coeff: Real,
|
pub warmstart_coeff: Real,
|
||||||
/// Correction factor to avoid large warmstart impulse after a strong impact.
|
/// Correction factor to avoid large warmstart impulse after a strong impact (default `10.0`).
|
||||||
pub warmstart_correction_slope: Real,
|
pub warmstart_correction_slope: Real,
|
||||||
|
|
||||||
/// 0-1: how much of the velocity to dampen out in the constraint solver?
|
/// 0-1: how much of the velocity to dampen out in the constraint solver?
|
||||||
@@ -165,7 +165,7 @@ impl Default for IntegrationParameters {
|
|||||||
velocity_solve_fraction: 1.0,
|
velocity_solve_fraction: 1.0,
|
||||||
velocity_based_erp: 0.0,
|
velocity_based_erp: 0.0,
|
||||||
warmstart_coeff: 1.0,
|
warmstart_coeff: 1.0,
|
||||||
warmstart_correction_slope: 1.0,
|
warmstart_correction_slope: 10.0,
|
||||||
allowed_linear_error: 0.005,
|
allowed_linear_error: 0.005,
|
||||||
prediction_distance: 0.002,
|
prediction_distance: 0.002,
|
||||||
allowed_angular_error: 0.001,
|
allowed_angular_error: 0.001,
|
||||||
|
|||||||
@@ -457,15 +457,14 @@ impl RigidBody {
|
|||||||
shift * Isometry::new(self.linvel * dt, self.angvel * dt) * shift.inverse()
|
shift * Isometry::new(self.linvel * dt, self.angvel * dt) * shift.inverse()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn integrate_next_position(&mut self, dt: Real, apply_damping: bool) {
|
pub(crate) fn apply_damping(&mut self, dt: Real) {
|
||||||
// TODO: do we want to apply damping before or after the velocity integration?
|
self.linvel *= 1.0 / (1.0 + dt * self.linear_damping);
|
||||||
if apply_damping {
|
self.angvel *= 1.0 / (1.0 + dt * self.angular_damping);
|
||||||
self.linvel *= 1.0 / (1.0 + dt * self.linear_damping);
|
}
|
||||||
self.angvel *= 1.0 / (1.0 + dt * self.angular_damping);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
pub(crate) fn integrate_next_position(&mut self, dt: Real) {
|
||||||
self.next_position = self.integrate_velocity(dt) * self.position;
|
self.next_position = self.integrate_velocity(dt) * self.position;
|
||||||
let _ = self.next_position.rotation.renormalize();
|
let _ = self.next_position.rotation.renormalize_fast();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// The linear velocity of this rigid-body.
|
/// The linear velocity of this rigid-body.
|
||||||
|
|||||||
@@ -77,7 +77,8 @@ impl IslandSolver {
|
|||||||
|
|
||||||
counters.solver.velocity_update_time.resume();
|
counters.solver.velocity_update_time.resume();
|
||||||
bodies.foreach_active_island_body_mut_internal(island_id, |_, rb| {
|
bodies.foreach_active_island_body_mut_internal(island_id, |_, rb| {
|
||||||
rb.integrate_next_position(params.dt, true)
|
rb.apply_damping(params.dt);
|
||||||
|
rb.integrate_next_position(params.dt);
|
||||||
});
|
});
|
||||||
counters.solver.velocity_update_time.pause();
|
counters.solver.velocity_update_time.pause();
|
||||||
} else {
|
} else {
|
||||||
@@ -87,7 +88,8 @@ impl IslandSolver {
|
|||||||
bodies.foreach_active_island_body_mut_internal(island_id, |_, rb| {
|
bodies.foreach_active_island_body_mut_internal(island_id, |_, rb| {
|
||||||
// Since we didn't run the velocity solver we need to integrate the accelerations here
|
// Since we didn't run the velocity solver we need to integrate the accelerations here
|
||||||
rb.integrate_accelerations(params.dt);
|
rb.integrate_accelerations(params.dt);
|
||||||
rb.integrate_next_position(params.dt, true);
|
rb.apply_damping(params.dt);
|
||||||
|
rb.integrate_next_position(params.dt);
|
||||||
});
|
});
|
||||||
counters.solver.velocity_update_time.pause();
|
counters.solver.velocity_update_time.pause();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user