Bounded Beams

Bounded beams are beams that can change stiffness and damping based on extension and velocity. They are primarily used for dampers and suspension limiters, as they allow for multistage dampers and bump stops.

The use of bounded beams should be limited as their advanced properties come with a performance penalty. For a lot of applications you can use precompressed support beams instead.

You can use multiple bounded beams between the same pair of nodes to simulate different suspension components. Unlike with normal beams, the console will not report an error then.

Bound properties

The bounding effect changes from the standard stiffness and damping to a second set of stiffness and damping when the beam is expanded/compressed beyond a certain amount. This effect is commonly used to simulate bump stops and limit straps on suspension, and can be used to limit the movement range of some objects.

The properties change progressively from the initial beam properties to the bound properties when reaching the limits. The lenght of this transition is changed with the “boundZone” parameter.

Advanced damping properties

Damping can be divided in bound and rebound, along with slow and fast. If you are using a separate rebound damping value, the regular damping value applies only when the beam gets compressed, with the rebound damping being used when the beam expands. This is often used either to fine tune weight transfer behavior, as well as bump absorption vs how fast the suspension settles back.

Fast damping is also separated into bound and rebound, and represents the damping value used when the beam expands/contracts above a certain rate defined by the velocity split setting. On road cars and track cars, this value is often lower than the slow damping to allow for the suspension to be effectively softer when it comes to hard hits like curbs and potholes, while still allowing for weight transfer control with the slow damping. On off-road cars, the fast bump damping will often be much closer to the slow damping in order to help absorb larger impacts without bottoming out.

You can also often see on vanilla cars the use of damping beams on the steering and other suspension parts, in order to avoid oscillations, especially in loss of grip situations (wheels spin and locked wheels). These beams are set-up with 0 or very little slow damping, with fast damping to help keep oscillations in check.

The resulting forces will always keep going up as the speed increases, however the resulting damping force curves will change if the values are progressive (in red), or digressive (in blue)

Required arguments

See the beams page .

Optional arguments

number
type
1.0
default
How far the beam can expand before limit properties begin to apply.

0.0 would mean that the limit properties begin to apply as soon as the beam expands.

0.5 would mean that the beam can expand to 150% of its spawned length before limit properties begin to apply.

1.0 would mean that the beam can expand to 200% of its spawned length before limit properties begin to apply.

string
type
Function that defines the change of beamLongBound based on the cargoGroup load in career mode delivery gameplay

Example usage:

{"beamLongBoundFunction":"=0.1*(1-$load/1000)","cargoGroup":"RoofbarTank1"},
number
type
1.0
default
How short the beam can go before limit properties begin to apply.

0.0 would mean that the limit properties begin to apply as soon as the beam contracts.

0.5 would mean that the beam can contract to 50% of its spawned length limit properties begin to apply.

1.0 would mean that the beam can contract its entire length before limit properties begin to apply.

string
type
Function that defines the change of beamShortBound based on the cargoGroup load in career mode delivery gameplay

Example usage:

{"beamShortBoundFunction":"=0.3*(1-$load/1000)","cargoGroup":"RoofbarTank1"},
number
type
1
default
The deformation (meters) it takes after reaching the bound before the full limit properties apply
Keep in mind the default value is 1 meter, resulting in a very progressive switch to the bound properties. This might be too long for a lot of applications.
number
type
How much the beam needs to expand before the bound properties apply in meters

A value of 0.5 means the beam needs to expand by 0.5 meters before the limit properties apply.

Using this property will overwrite beamLongBound.

number
type
How much the beam needs to compress before the bound properties apply in meters

A value of 0.5 means the beam needs to contract by 0.5 meters before the limit properties apply.

Using this property will overwrite beamShortBound.

number
type
1.0
default
The spring that begins to be applied when the beam length reaches longBound or shortBound (N/m).
string
type
Function that defines the change of beamLimitSpring based on the cargoGroup load in career mode delivery gameplay

Example usage:

{"beamLimitSpringFunction":"=100*$load*($load/1000)+80000","cargoGroup":"RoofbarTank1"},
number
type
1.0
default
The damping that begins to be applied when the beam length reaches longBound or shortBound (N/m/s), but only when beam is compressing
string
type
Function that defines the change of beamLimitDamp based on the cargoGroup load in career mode delivery gameplay

Example usage:

{"beamLimitDampFunction":"=0.3*$load*($load/1000)+100","cargoGroup":"RoofbarTank1"},
number
type
beamLimitDamp
default
The damping that begins to be applied when the beam length reaches longBound or shortBound (N/m/s), but only when beam is expanding.
number
type
beamDamp
default
The damping value applied only when the beam is expanding(N/m/s).
number
type
beamDamp
default
The damping value for the beam when the beam’s rate of contraction or expansion is > beamDampVelocitySplit (N/m/s).
number
type
beamDampRebound
default
The rebound damping value for the beam when the beam’s rate of expansion is > beamDampVelocitySplit (N/m/s).
number
type
FLT_MAX
default
The rate (m/s) of contraction/expansion over which beamDampFast and beamDampReboundFast take effect (m/s).
number
type
FLT_MAX
default
The rate (m/s) of contraction/expansion over which beamDampReboundFast takes effect (m/s).
Overrides beamDampVelocitySplit for rebound.

Bounded beams also support the same optional arguments as standard beams .

Simple Examples

Set of simple car dampers.

//front dampers
{"beamPrecompression":1.0, "beamType":"|BOUNDED", "beamLongBound":1.0 "beamShortBound":1.0},
{"beamDeform":12000,"beamStrength":140000},
{"beamLimitSpring":0,"beamLimitDamp":0},
{"beamSpring":0,"beamDamp":850},
["fh1r","fs1r", {"beamDampRebound":1700,"dampCutoffHz":500}],
["fh1l","fs1l", {"beamDampRebound":1700,"dampCutoffHz":500}],

Steering damper beams, used to keep steering oscillations in check.

//steering damper
{"beamPrecompression":1.0, "beamType":"|BOUNDED", "beamLongBound":1.0, "beamShortBound":1.0},
{"beamSpring":0,"beamDeform":15120,"beamStrength":37800},
{"beamLimitSpring":0,"beamLimitDamp":0},
{"beamDamp":100},
["fh3r","fx1r", {"beamDampVelocitySplit":0.1,"beamDampFast":1000,"dampCutoffHz":1000}],
["fh3l","fx1l", {"beamDampVelocitySplit":0.1,"beamDampFast":1000,"dampCutoffHz":1000}],
["fh5r","fx2r", {"beamDampVelocitySplit":0.1,"beamDampFast":1000,"dampCutoffHz":1000}],
["fh5l","fx2l", {"beamDampVelocitySplit":0.1,"beamDampFast":1000,"dampCutoffHz":1000}],
{"beamPrecompression":1.0, "beamType":"|NORMAL", "beamLongBound":1, "beamShortBound":1},

Advanced Example

Set of rally dampers, with two pairs of beams for the dampers with different velocity splits, one for bump and one for rebound, along with a soft hydraulic bumpstop.

//dampers
{"beamPrecompression":1, "beamType":"|BOUNDED", "beamLongBound":1, "beamShortBound":1},
{"beamSpring":0,"beamDamp":3700},
{"beamLimitSpring":0,"beamLimitDamp":0},
//bump
["fh1r","fs1r", {"name":"shock_FR", "beamDampRebound":0,"beamDampVelocitySplit":0.35,"beamDampFast":2500,"beamDampReboundFast":0,"dampCutoffHz":500}],
["fh1l","fs1l", {"name":"shock_FL", "beamDampRebound":0,"beamDampVelocitySplit":0.35,"beamDampFast":2500,"beamDampReboundFast":0,"dampCutoffHz":500}],
//rebound
{"beamSpring":0,"beamDamp":0},
["fh1r","fs1r", {"beamDampRebound":6700,"beamDampVelocitySplit":0.25,"beamDampFast":0,"beamDampReboundFast":3400,"dampCutoffHz":500}],
["fh1l","fs1l", {"beamDampRebound":6700,"beamDampVelocitySplit":0.25,"beamDampFast":0,"beamDampReboundFast":3400,"dampCutoffHz":500}],
//hydraulic bump stop
{"beamSpring":0,"beamDamp":0},
{"beamLimitSpring":15000,"beamLimitDamp":15000},
["fh1r","fs1r", {"longBoundRange":2,"shortBoundRange":0.03,"boundZone":0.01,"beamLimitDampRebound":1000,"dampCutoffHz":250}],
["fh1l","fs1l", {"longBoundRange":2,"shortBoundRange":0.03,"boundZone":0.01,"beamLimitDampRebound":1000,"dampCutoffHz":250}],
{"beamPrecompression":1, "beamType":"|NORMAL", "beamLongBound":1.0, "beamShortBound":1.0},
Last modified: April 16, 2024

Any further questions?

Join our discord
Our documentation is currently incomplete and undergoing active development. If you have any questions or feedback, please visit this forum thread.