Struct jumpy::core::physics::collisions::rapier::IntegrationParameters
pub struct IntegrationParameters {Show 17 fields
pub dt: f32,
pub min_ccd_dt: f32,
pub erp: f32,
pub damping_ratio: f32,
pub joint_erp: f32,
pub joint_damping_ratio: f32,
pub warmstart_coefficient: f32,
pub length_unit: f32,
pub normalized_allowed_linear_error: f32,
pub normalized_max_penetration_correction: f32,
pub normalized_prediction_distance: f32,
pub num_solver_iterations: NonZero<usize>,
pub num_additional_friction_iterations: usize,
pub num_internal_pgs_iterations: usize,
pub num_internal_stabilization_iterations: usize,
pub min_island_size: usize,
pub max_ccd_substeps: usize,
}Expand description
Parameters for a time-step of the physics engine.
Fields§
§dt: f32The timestep length (default: 1.0 / 60.0)
min_ccd_dt: f32Minimum timestep size when using CCD with multiple substeps (default 1.0 / 60.0 / 100.0)
When CCD with multiple substeps is enabled, the timestep is subdivided
into smaller pieces. This timestep subdivision won’t generate timestep
lengths smaller than min_ccd_dt.
Setting this to a large value will reduce the opportunity to performing CCD substepping, resulting in potentially more time dropped by the motion-clamping mechanism. Setting this to an very small value may lead to numerical instabilities.
erp: f320-1: multiplier for how much of the constraint violation (e.g. contact penetration)
will be compensated for during the velocity solve.
(default 0.1).
damping_ratio: f320-1: the damping ratio used by the springs for Baumgarte constraints stabilization.
Lower values make the constraints more compliant (more “springy”, allowing more visible penetrations
before stabilization).
(default 20.0).
joint_erp: f320-1: multiplier for how much of the joint violation
will be compensated for during the velocity solve.
(default 1.0).
joint_damping_ratio: f32The fraction of critical damping applied to the joint for constraints regularization.
(default 1.0).
warmstart_coefficient: f32The coefficient in [0, 1] applied to warmstart impulses, i.e., impulses that are used as the
initial solution (instead of 0) at the next simulation step.
This should generally be set to 1. Can be set to 0 if using a large Self::erp value.
(default 1.0).
length_unit: f32The approximate size of most dynamic objects in the scene.
This value is used internally to estimate some length-based tolerance. In particular, the
values IntegrationParameters::allowed_linear_error,
IntegrationParameters::max_penetration_correction,
IntegrationParameters::prediction_distance, [RigidBodyActivation::linear_threshold]
are scaled by this value implicitly.
This value can be understood as the number of units-per-meter in your physical world compared
to a human-sized world in meter. For example, in a 2d game, if your typical object size is 100
pixels, set the [Self::length_unit] parameter to 100.0. The physics engine will interpret
it as if 100 pixels is equivalent to 1 meter in its various internal threshold.
(default 1.0).
normalized_allowed_linear_error: f32Amount of penetration the engine won’t attempt to correct (default: 0.001m).
This value is implicitly scaled by IntegrationParameters::length_unit.
normalized_max_penetration_correction: f32Maximum amount of penetration the solver will attempt to resolve in one timestep.
This value is implicitly scaled by IntegrationParameters::length_unit.
normalized_prediction_distance: f32The maximal distance separating two objects that will generate predictive contacts (default: 0.002m).
This value is implicitly scaled by IntegrationParameters::length_unit.
num_solver_iterations: NonZero<usize>The number of solver iterations run by the constraints solver for calculating forces (default: 4).
num_additional_friction_iterations: usizeNumber of addition friction resolution iteration run during the last solver sub-step (default: 4).
num_internal_pgs_iterations: usizeNumber of internal Project Gauss Seidel (PGS) iterations run at each solver iteration (default: 1).
num_internal_stabilization_iterations: usizeThe number of stabilization iterations run at each solver iterations (default: 2).
min_island_size: usizeMinimum number of dynamic bodies in each active island (default: 128).
max_ccd_substeps: usizeMaximum number of substeps performed by the solver (default: 1).
Implementations§
§impl IntegrationParameters
impl IntegrationParameters
pub fn inv_dt(&self) -> f32
pub fn inv_dt(&self) -> f32
The inverse of the time-stepping length, i.e. the steps per seconds (Hz).
This is zero if self.dt is zero.
pub fn set_dt(&mut self, dt: f32)
👎Deprecated: You can just set the IntegrationParams::dt value directly
pub fn set_dt(&mut self, dt: f32)
IntegrationParams::dt value directlySets the time-stepping length.
pub fn set_inv_dt(&mut self, inv_dt: f32)
pub fn set_inv_dt(&mut self, inv_dt: f32)
Sets the inverse time-stepping length (i.e. the frequency).
This automatically recompute self.dt.
pub fn erp_inv_dt(&self) -> f32
pub fn erp_inv_dt(&self) -> f32
The ERP coefficient, multiplied by the inverse timestep length.
pub fn joint_erp_inv_dt(&self) -> f32
pub fn joint_erp_inv_dt(&self) -> f32
The joint ERP coefficient, multiplied by the inverse timestep length.
pub fn cfm_factor(&self) -> f32
pub fn cfm_factor(&self) -> f32
The CFM factor to be used in the constraints resolution.
pub fn joint_cfm_coeff(&self) -> f32
pub fn joint_cfm_coeff(&self) -> f32
The CFM (constraints force mixing) coefficient applied to all joints for constraints regularization
pub fn allowed_linear_error(&self) -> f32
pub fn allowed_linear_error(&self) -> f32
Amount of penetration the engine won’t attempt to correct (default: 0.001 multiplied by
Self::length_unit).
pub fn max_penetration_correction(&self) -> f32
pub fn max_penetration_correction(&self) -> f32
Maximum amount of penetration the solver will attempt to resolve in one timestep.
This is equal to Self::normalized_max_penetration_correction multiplied by
Self::length_unit.
pub fn prediction_distance(&self) -> f32
pub fn prediction_distance(&self) -> f32
The maximal distance separating two objects that will generate predictive contacts
(default: 0.002m multiped by Self::length_unit).
pub fn tgs_soft() -> IntegrationParameters
pub fn tgs_soft() -> IntegrationParameters
Initialize the simulation parameters with settings matching the TGS-soft solver with warmstarting.
This is the default configuration, equivalent to IntegrationParameters::default().
pub fn tgs_soft_without_warmstart() -> IntegrationParameters
pub fn tgs_soft_without_warmstart() -> IntegrationParameters
Initialize the simulation parameters with settings matching the TGS-soft solver without warmstarting.
The IntegrationParameters::tgs_soft() configuration should be preferred unless
warmstarting proves to be undesirable for your use-case.
pub fn pgs_legacy() -> IntegrationParameters
pub fn pgs_legacy() -> IntegrationParameters
Initializes the integration parameters to match the legacy PGS solver from Rapier version <= 0.17.
This exists mainly for testing and comparison purpose.
Trait Implementations§
§impl Clone for IntegrationParameters
impl Clone for IntegrationParameters
§fn clone(&self) -> IntegrationParameters
fn clone(&self) -> IntegrationParameters
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more§impl Debug for IntegrationParameters
impl Debug for IntegrationParameters
§impl Default for IntegrationParameters
impl Default for IntegrationParameters
§fn default() -> IntegrationParameters
fn default() -> IntegrationParameters
impl Copy for IntegrationParameters
Auto Trait Implementations§
impl Freeze for IntegrationParameters
impl RefUnwindSafe for IntegrationParameters
impl Send for IntegrationParameters
impl Sync for IntegrationParameters
impl Unpin for IntegrationParameters
impl UnwindSafe for IntegrationParameters
Blanket Implementations§
§impl<T, U> AsBindGroupShaderType<U> for T
impl<T, U> AsBindGroupShaderType<U> for T
§fn as_bind_group_shader_type(&self, _images: &RenderAssets<Image>) -> U
fn as_bind_group_shader_type(&self, _images: &RenderAssets<Image>) -> U
T [ShaderType] for self. When used in [AsBindGroup]
derives, it is safe to assume that all images in self exist.§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> CloneToUninit for Twhere
T: Copy,
impl<T> CloneToUninit for Twhere
T: Copy,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit)source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§default unsafe fn clone_to_uninit(&self, dst: *mut T)
default unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit)§impl<T> Conv for T
impl<T> Conv for T
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.§impl<T> DowncastSync for T
impl<T> DowncastSync for T
§impl<T> FmtForward for T
impl<T> FmtForward for T
§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
§impl<S> FromSample<S> for S
impl<S> FromSample<S> for S
fn from_sample_(s: S) -> S
§impl<T> FromWorld for Twhere
T: Default,
impl<T> FromWorld for Twhere
T: Default,
§fn from_world(_world: &mut World) -> T
fn from_world(_world: &mut World) -> T
Self using data from the given [World]§impl<T> FromWorld for Twhere
T: Default,
impl<T> FromWorld for Twhere
T: Default,
§fn from_world(_world: &World) -> T
fn from_world(_world: &World) -> T
Self using data from the given World.§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
§impl<T> IntoArcAny for T
impl<T> IntoArcAny for T
source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more§impl<F, T> IntoSample<T> for Fwhere
T: FromSample<F>,
impl<F, T> IntoSample<T> for Fwhere
T: FromSample<F>,
fn into_sample(self) -> T
§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read more§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read more§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.§impl<T> Pointable for T
impl<T> Pointable for T
§impl<T> RawDefault for Twhere
T: Default,
impl<T> RawDefault for Twhere
T: Default,
§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read more§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.§impl<T> Tap for T
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read more§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.