Configuration parameters for Nape

Static variables

@:value(0.75)staticangularCCDSlipScale:Float = 0.75

Angular velocity scaling during CCD slips.

In rare cases, a Body can be moving in such a way that we fail to compute a perfect time of impact; generally when a thin box-like object is rotating very quickly. The time of impact solver in Nape attempts to avoid impacts which are seperating; so that we can catch true impact times; but in a 'slip' case we are unable to achieve this and to avoid a possible tunneling from the other side during later operations we will in these rare cases scale down the angular velocity of a Body by this parameter.

This parameter has no units.

@:value(0.4)staticangularSleepThreshold:Float = 0.4

Angular speed threshold for sleeping of Bodies.

A body in Nape will be considered stationary only if its angular velocity, multiplied by the body radius (never under-estimated) about the origin, falls below this threshold.

The body radius scaling, ensures that a very large body needs to be rotating more slowly to be considered stationary than a very small body. Intuitively we're designating this a threshold on the maximum tangentenial velocity of the body due to rotation.

This parameter has units of px.rad/s

@:value(6)staticarbiterExpirationDelay:Int = 6

Expiration delay length for collision arbiter destruction.

In unstable physics conditions, two colliding shapes may jitter such as to constantly seperate, and then come back together again. This parameter controls the number of time steps during which we will delay this destruction so that cached impulse values may persist and improve stability of strenuous simulations.

This parameter has units of 'steps' I suppose.

@:value(0.0125)staticbulletCCDAngularThreshold:Float = 0.0125

Angular sweep threshold for bullet CCD collisions.

See description of bulletCCDLinearThreshold.

This parameter has units of rad.

@:value(0.125)staticbulletCCDLinearThreshold:Float = 0.125

Linear sweep threshold-ratio for bullet CCD collisions

A dynamic body marked as a bullet, will not necessarigly always be collided with continuously.

Should a body be moving, or rotating fast enough to pass the tests determined by staticCCD#Threshold parameters, and is marked as a bullet, it must then have its velocities checked against the equivalent bullet thresholds to actually be collided continuously against other dynamic bodies too.

This parameter has no units.

@:value(0.2)staticcollisionSlop:Float = 0.2

Amount of overlap permitted between Shapes for collisions.

This parameter has units of pixels.

@:value(0.5)staticcollisionSlopCCD:Float = 0.5

Amount of overlap permitted between Shapes before CCD kicks in.

This parameter has units of pixels, and should always be larger than collisionSlop parameter.

@:value(1e-3)staticconstraintAngularSlop:Float = 1e-3

Amount of angular slop permitted in constraints.

A constraint will be considered to be 'relaxed' during positional iterations only if the angular error falls below this threshold.

Assuming a 'sensible' constraint, this has units of rad

@:value(0.1)staticconstraintLinearSlop:Float = 0.1

Amount of linear slop permitted in constraints.

A constraint will be considered to be 'relaxed' during positional iterations only if the linear error falls below this threshold.

Assuming a 'sensible' constraint, this has units of px

@:value(0.3)staticcontactBiasCoef:Float = 0.3

Fraction of contact slop resolved per-step for dynamic-dynamic discrete collisions.

This value determines, in the case of two non-continuously colliding dynamic objects the fraction of the contact overlap that will attempt to be resolved during positional iterations.

This parameter has units of 1/'step' I suppose.

@:value(0.4)staticcontactContinuousBiasCoef:Float = 0.4

Fraction of contact slop resolved per-step for dynamic-dynamic continuous collisions.

See description of contactBiasCoef; this is the coeffecient for continuous collisions between two dynamic bodies.

This parameter has units of 1/'step' I suppose.

@:value(0.5)staticcontactContinuousStaticBiasCoef:Float = 0.5

Fraction of contact slop resolved per-step for static/kinematic continuous collisions.

See description of contactBiasCoef; this is the coeffecient for continuous collisions between a dynamic, and a static or kinematic object.

This parameter has units of 1/'step' I suppose.

@:value(0.6)staticcontactStaticBiasCoef:Float = 0.6

Fraction of contact slop resolved per-step for static/kinematic discrete collisions.

See description of contactBiasCoef; this is the coeffecient for non-continuous collisions between a dynamic, and a static or kinematic object.

This parameter has units of 1/'step' I suppose.

@:value(0.05)staticdistanceThresholdCCD:Float = 0.05

Biased distance treshold for CCD collisions.

In CCD collision routines, two Shapes will be considered intersecting when the distance between them + collisionSlopCCD falls below this value.

This parameter has units of pixels, and should always be > 0

@:value(0.6)staticdynamicSweepAngularThreshold:Float = 0.6

Relative angular bias threshold for dynamic-dynamic sweeps.

When performing dynamic-dynamic sweep of Body shapes during CCD collision phase, should the relative angular velocity (weighted by the shape bias values) fall beneath this magnitude, they may be considered (based on linear velocities also) to be moving together, and this specific CCD test will be skipped.

The shape bias, is an internal value which indicates the 'amount of radius' of a shape about the centre of rotation that can be considered to change under rotations. eg: A circle at origin has a bias of 0 (Its rotation has no effect on sweeps) whilst A circle far from the origin may have a large bias.

This parameter has units of px.rad/s

@:value(17)staticdynamicSweepLinearThreshold:Float = 17

Relative linear threshold for dynamic-dynamic sweeps.

When performing dynamic-dynamic sweep of Body shapes during CCD collision phase, should the relative velocity of the bodies fall beneath this magnitude, they may be considered (based on angular velocities also) to be moving together, and this specific CCD test will be skipped.

This parameter has units of px/s

@:value(20)staticelasticThreshold:Float = 20

Contact velocity threshold for elastic collisions

This is the threshold on weighted projected normal-contact velocities at which Nape will decide to stop using elastic collisions. Nape will take the normal velocities at contact and scale by the combined elasticity coeffecient for the Arbiter, if this value falls below the threshold, then elasticity is ignored for stability in stacking.

This parameter has units of px/s

@:value(1e-8)staticepsilon:Float = 1e-8

Generic epsilon value for float comparisons

@:value(100)staticfluidAngularDrag:Float = 100

Parameter used in computing shape fluid angular drag coeffecient.

Defines the contribution to the drag coeffecient due to shape's surface area rotating into a fluid.

This global value must be set as the very first thing to ensure all Shapes use your intended value.

This parameter has units kg/px

@:value(2.5)staticfluidAngularDragFriction:Float = 2.5

Parameter used in computing shape fluid angular drag coeffecient.

Defines the contribution to the drag coeffecient due to Material dynamicFriction

This global value must be set as the very first thing to ensure all Shapes use your intended value.

This parameter has units kg/px

@:value(0.5)staticfluidLinearDrag:Float = 0.5

Parameter used in computing shapes linear drag in fluid.

Used in determining the amount of linear drag for the shape based on forward profile.

This parameter has units kg/px

@:value(0.5)staticfluidVacuumDrag:Float = 0.5

Parameter used in computing fluid drags.

Defines an added weight for scaling the contribution of forward drag due to leaving a vaccuum behind the shape pulling it back.

This global value must be set as the very first thing to ensure all Shapes use your intended value.

This parameter has no units.

@:value(2e+8)staticillConditionedThreshold:Float = 2e+8

Ill-conditioned threshold for 2-contact collision constraints.

This is a threshold on the measure of ill-conditioning of the effective-mass-matrix in a 2-contact collision at which the contact manifold will be forced into a 1-contact constraint. This can occur quite readily when two contact points are almost exactly equal or in certain other conditions where the mathematics quite simply breaks down when using a block solver.

This parameter has no units.

@:value(0.2)staticlinearSleepThreshold:Float = 0.2

Linear speed threshold for sleeping of Bodies.

A body in Nape will be considered stationary only if its linear velocity has magnitude under this threshold.

This parameter has units of px/s

@:value(60)staticsleepDelay:Int = 60

Sleep delay for stationary bodies.

By default, Nape considers a body to be stationary even if it has a very small linear or angular velocity. This parameter controls how many steps such a Body will continue to be simulated for, before being put to sleep (Assuming everything else in the island is also stationary for a sufficiently long time).

This parameter has units of 'steps' I suppose.

@:value(0.005)staticstaticCCDAngularThreshold:Float = 0.005

Angular sweep threshold for static CCD collisions

In deciding what non-bullet objects should be collided continuously against static/kinematic objects, the angular speed of the body is considered. ccdCollide if: bodyAngularSpeed * deltaTime > threshold Intuitively, a value of 0.5 would mean that a body would have to rotate more than 0.5 radians in a single time step, before CCD is enabled for this reason. Noting that at 60fps physics, the body would need an angularVel greater than 30rad/s for this limit of 0.5 to be reached; the default is far smaller.

This parameter has units of rad.

@:value(0.05)staticstaticCCDLinearThreshold:Float = 0.05

Linear sweep threshold-ratio for static CCD collisions

In deciding what non-bullet objects should be collided continuously against static/kinematic objects, the linear speed of the body is considered. ccdCollide if: bodyLinearSpeed * deltaTime > threshold * bodyRadius Intuitively, a value of 0.5 would mean that a body, in the worst case scenario will be permitted to move half of its width in a single time step, before CCD is enabled for this reason.

This parameter has no units.

@:value(2)staticstaticFrictionThreshold:Float = 2

Contact velocity threshold for static-dynamic friction

This is the threshold on projected contact velocities at which Nape will use dynamic friction Mateiral values, in place of static friction Material values.

This parameter has units of px/s