[][src]Struct rapier3d::dynamics::IntegrationParameters

pub struct IntegrationParameters {
    pub dt: Real,
    pub return_after_ccd_substep: bool,
    pub erp: Real,
    pub joint_erp: Real,
    pub warmstart_coeff: Real,
    pub restitution_velocity_threshold: Real,
    pub allowed_linear_error: Real,
    pub prediction_distance: Real,
    pub allowed_angular_error: Real,
    pub max_linear_correction: Real,
    pub max_angular_correction: Real,
    pub max_stabilization_multiplier: Real,
    pub max_velocity_iterations: usize,
    pub max_position_iterations: usize,
    pub min_island_size: usize,
    pub max_ccd_position_iterations: usize,
    pub max_ccd_substeps: usize,
    pub multiple_ccd_substep_sensor_events_enabled: bool,
    pub ccd_on_penetration_enabled: bool,
}

Parameters for a time-step of the physics engine.

Fields

dt: Real

The timestep length (default: 1.0 / 60.0)

return_after_ccd_substep: bool

If true, the world's step method will stop right after resolving exactly one CCD event (default: false). This allows the user to take action during a timestep, in-between two CCD events.

erp: Real

The Error Reduction Parameter in [0, 1] is the proportion of the positional error to be corrected at each time step (default: 0.2).

joint_erp: Real

The Error Reduction Parameter for joints in [0, 1] is the proportion of the positional error to be corrected at each time step (default: 0.2).

warmstart_coeff: Real

Each cached impulse are multiplied by this coefficient in [0, 1] when they are re-used to initialize the solver (default 1.0).

restitution_velocity_threshold: Real

Contacts at points where the involved bodies have a relative velocity smaller than this threshold wont be affected by the restitution force (default: 1.0).

allowed_linear_error: Real

Amount of penetration the engine wont attempt to correct (default: 0.005m).

prediction_distance: Real

The maximal distance separating two objects that will generate predictive contacts (default: 0.002).

allowed_angular_error: Real

Amount of angular drift of joint limits the engine wont attempt to correct (default: 0.001rad).

max_linear_correction: Real

Maximum linear correction during one step of the non-linear position solver (default: 0.2).

max_angular_correction: Real

Maximum angular correction during one step of the non-linear position solver (default: 0.2).

max_stabilization_multiplier: Real

Maximum nonlinear SOR-prox scaling parameter when the constraint correction direction is close to the kernel of the involved multibody's jacobian (default: 0.2).

max_velocity_iterations: usize

Maximum number of iterations performed by the velocity constraints solver (default: 4).

max_position_iterations: usize

Maximum number of iterations performed by the position-based constraints solver (default: 1).

min_island_size: usize

Minimum number of dynamic bodies in each active island (default: 128).

max_ccd_position_iterations: usize

Maximum number of iterations performed by the position-based constraints solver for CCD steps (default: 10).

This should be sufficiently high so all penetration get resolved. For example, if CCD cause your objects to stutter, that may be because the number of CCD position iterations is too low, causing them to remain stuck in a penetration configuration for a few frames.

The highest this number, the highest its computational cost.

max_ccd_substeps: usize

Maximum number of substeps performed by the solver (default: 1).

multiple_ccd_substep_sensor_events_enabled: bool

Controls the number of Proximity::Intersecting events generated by a trigger during CCD resolution (default: false).

If false, triggers will only generate one Proximity::Intersecting event during a step, even if another colliders repeatedly enters and leaves the triggers during multiple CCD substeps.

If true, triggers will generate as many Proximity::Intersecting and Proximity::Disjoint/Proximity::WithinMargin events as the number of times a collider repeatedly enters and leaves the triggers during multiple CCD substeps. This is more computationally intensive.

ccd_on_penetration_enabled: bool

Whether penetration are taken into account in CCD resolution (default: false).

If this is set to false two penetrating colliders will not be considered to have any time of impact while they are penetrating. This may end up allowing some tunelling, but will avoid stuttering effect when the constraints solver fails to completely separate two colliders after a CCD contact.

If this is set to true, two penetrating colliders will be considered to have a time of impact equal to 0 until the constraints solver manages to separate them. This will prevent tunnelling almost completely, but may introduce stuttering effects when the constraints solver fails to completely separate two colliders after a CCD contact.

Implementations

impl IntegrationParameters[src]

pub fn new(
    dt: Real,
    erp: Real,
    joint_erp: Real,
    warmstart_coeff: Real,
    restitution_velocity_threshold: Real,
    allowed_linear_error: Real,
    allowed_angular_error: Real,
    max_linear_correction: Real,
    max_angular_correction: Real,
    prediction_distance: Real,
    max_stabilization_multiplier: Real,
    max_velocity_iterations: usize,
    max_position_iterations: usize,
    max_ccd_position_iterations: usize,
    max_ccd_substeps: usize,
    return_after_ccd_substep: bool,
    multiple_ccd_substep_sensor_events_enabled: bool,
    ccd_on_penetration_enabled: bool
) -> Self
[src]

👎 Deprecated:

Use IntegrationParameters { dt: 60.0, ..Default::default() } instead

Creates a set of integration parameters with the given values.

pub fn dt(&self) -> Real[src]

👎 Deprecated:

You can just read the IntegrationParams::dt value directly

The current time-stepping length.

pub fn inv_dt(&self) -> Real[src]

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: Real)[src]

👎 Deprecated:

You can just set the IntegrationParams::dt value directly

Sets the time-stepping length.

pub fn set_inv_dt(&mut self, inv_dt: Real)[src]

Sets the inverse time-stepping length (i.e. the frequency).

This automatically recompute self.dt.

Trait Implementations

impl Clone for IntegrationParameters[src]

impl Default for IntegrationParameters[src]

Auto Trait Implementations

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> Downcast for T where
    T: Any
[src]

impl<T> DowncastSync for T where
    T: Send + Sync + Any
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> Pointable for T

type Init = T

The type for initializers.

impl<T> Same<T> for T

type Output = T

Should always be Self

impl<SS, SP> SupersetOf<SS> for SP where
    SS: SubsetOf<SP>, 
[src]

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

The resulting type after obtaining ownership.

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.

impl<V, T> VZip<V> for T where
    V: MultiLane<T>,