soft_body_settings
A few settings are shared by every soft-body of the world. They are part of the integration
parameters (the softBodies field of R3IntegrationParameters), so they can
be changed between two steps:
- The re-sweep strain
(
r3SoftBodiesSetResweepStrain) is the strain beyond which a constraint is solved once more after the contacts of every substep. This is what keeps a light body buried under heavier ones from being torn apart by them. - The maximum number of extra substeps
(
r3SoftBodiesSetMaxExtraSubsteps) is the number of substeps a soft-body is allowed to ask for while it is hit fast. Those substeps bound the motion of its particles, and the motion of the rigid-bodies approaching them, by about one particle radius per substep. Giving zero disables them. - The contact stiffening
(
r3SoftBodiesSetContactStiffening) multiplies the natural frequencies of the contacts involving a soft-body. Those contacts run stiffer than the rigid ones because the mass behind one contact is the mass of a few particles, and not the mass of the whole body.
In addition, the detection of the penetrations and of the tangles, as well as the way the bodies recover from them, are
configured by the recovery settings (recovery, an R3SoftRecoverySettings), where every mechanism can be switched
off individually (see the contacts section for the ones to look at
first). The tuning of the linear solves of the FEM solver lives there as well (fem, an R3SoftFemParameters):
Each of these settings has its own getter and setter, named after its field: e.g., r3SoftBodiesResweepStrain and
r3SoftBodiesSetResweepStrain, r3RecoveryCrossingRepulsion and r3RecoverySetCrossingRepulsion, or
r3FemLinearTolerance and r3FemSetLinearTolerance. All of them can also be read at once with
r3IntegrationParameters, which returns a copy of the integration parameters of the world: that copy is modified, then
written back with r3SetIntegrationParameters. Note that the fem field, as well as the r3Fem* functions, only
exist when the library is built with the fem feature:
- Example 2D
- Example 3D
// Settings shared by every soft-body of the world.
// Strain beyond which a constraint is re-solved after the contacts of every substep.
// Default: 0.75
r2SoftBodiesSetResweepStrain(world, 0.75);
// Extra substeps a soft-body requests while it is hit fast; 0 disables them.
// Default: 4
r2SoftBodiesSetMaxExtraSubsteps(world, 4);
// Stiffening of the soft-body contacts relative to the rigid ones.
// Default: 4.0
r2SoftBodiesSetContactStiffening(world, 4.0);
// The tangle detection and recovery stack can be switched off mechanism by mechanism.
r2RecoverySetCrossingRepulsion(world, 1);
// The settings can also be read all at once (as a copy), modified, and written back.
R2IntegrationParameters params = r2IntegrationParameters(world);
params.softBodies.recovery.selfStandDown = 1;
r2SetIntegrationParameters(world, ¶ms);
// Settings shared by every soft-body of the world.
// Strain beyond which a constraint is re-solved after the contacts of every substep.
// Default: 0.75
r3SoftBodiesSetResweepStrain(world, 0.75);
// Extra substeps a soft-body requests while it is hit fast; 0 disables them.
// Default: 4
r3SoftBodiesSetMaxExtraSubsteps(world, 4);
// Stiffening of the soft-body contacts relative to the rigid ones.
// Default: 4.0
r3SoftBodiesSetContactStiffening(world, 4.0);
// The tangle detection and recovery stack can be switched off mechanism by mechanism.
r3RecoverySetCrossingRepulsion(world, 1);
// The settings can also be read all at once (as a copy), modified, and written back.
R3IntegrationParameters params = r3IntegrationParameters(world);
params.softBodies.recovery.selfStandDown = 1;
r3SetIntegrationParameters(world, ¶ms);