Skip to content
CRUSHFORMV1.1.0
GET IT ON FAB

REFERENCEDATA ASSETS

UCFProfile

MODULECrushformINCLUDECFProfile.hPARENTUDataAsset

How one kind of vehicle or prop dents and loses paint. Lengths are in cm, speeds in m/s.

Functions

AUTHORITY · server, every machineLOCAL · this machinePURE · read only
FCFHitParams MakeHitParams(const FVector3f& GridOrigin) const
PUREC++ ONLY

The lattice's hit tuning. GridOrigin is the lattice's origin in root component space: the stiffness zones are moved by it.

FCFDirtShape MakeDirtShape() const
PUREC++ ONLY

The dirt shape of this profile, with the speed scaling from the project settings.

bool UsesExplicitBounds() const
PUREC++ ONLY

Whether Explicit Bounds is on and set, so that the lattice is that box, as it is.

float GetSkinInset() const
PUREC++ ONLY

How far inside the lattice's edge the body's skin lies, cm: Lattice Margin, 0 for Explicit Bounds (FCFHitParams::SkinInset).

Properties

FIntVector Resolution = FIntVector(16, 8, 8)

Lattice nodes per axis. Every axis is a multiple of 4; ResX * ResZ and ResY must fit one atlas slot (Project Settings > Plugins > Crushform).

Default
FIntVector(16, 8, 8)
Category
Lattice
float LatticeMargin = 10.0f

How far, cm, the lattice reaches past the body's collision on every side. Physics reports a fast hit's contact a few cm off the surface, and a contact past the lattice is dropped.

Default
10.0f
Category
Lattice
bool bUseExplicitBounds = false

Whether the lattice takes Explicit Bounds instead of the box of the body's collision.

Default
false
Category
Lattice
FBox ExplicitBounds = FBox(ForceInit)

Lattice bounds in root component space, used as is instead of the collision's box.

Default
FBox(ForceInit)
Category
Lattice
TArray<FName> IncludeTags

Only mesh components with one of these tags deform. Empty: every static and skeletal mesh of the owner.

Category
Components
TArray<FName> ExcludeTags

Mesh components with one of these tags never deform.

Category
Components
bool bDents = true

Off, hits, crush presses and impact reports never dent or scratch the body, and dirt, fills and washes work as usual. For bodies that only get dirty, such as trailers. The lattice is still built: the dirt grid takes its resolution.

Default
true
Category
Dents
bool bDeformCollision = true

Whether the body's collision follows its dents: other vehicles, props and pawns meet the crushed shape. Each box or convex is cut into blocks along the lattice where a dent bends it (Project Settings, Crushform: Collision Block Tolerance, Max Collision Blocks), each block the hull of its points moved by the lattice; spheres and capsules follow by their points. Mass and inertia keep their values. The project's Deform Collision setting, off, wins over this.

Default
true
Category
Dents
bool bHingedParts = true

Off, hinged parts (Crushform Hinge components) never swing, come off or tear off: they stay where the Blueprint put them and dent with the body like any other panel. A profile asset: not switched at runtime.

Default
true
Category
Dents
bool bDentedPartCollision = true

Whether a hinged part, once loose, collides as one convex hull of its dented simple collision, so its collision follows the dent drawn on it. Off: loose parts keep their static meshes' simple collision exactly as the assets have it, undented, so a concave part such as a bumper keeps its own shapes instead of one hull around them. A hinge's own Dented Part Collision overrides it, and the project's Deform Collision setting, off, wins over both. Read when play begins.

Default
true
Category
Dents
float MinDeltaV = 0.5f

Hit speed before the body dents, m/s: the speed it loses along the contact normal, or against a body that gives way, the speed into a fixed wall that would take the same energy. Also filters resting contacts.

Default
0.5f
Category
Dents
float Stiffness = 3.0f

Dent depth per m/s above MinDeltaV, cm. A crash presses its whole contact patch flat to this depth behind the contact, so what stood out of the face goes in the furthest.

Default
3.0f
Category
Dents
float MaxDentPerHit = 20.0f

Deepest dent one hit can make, cm, where a stiffness zone's Stiffness is 1: a softer zone goes past it in proportion (0.5: twice as deep), a stiffer one stays under it. Kept well under MaxDisplacement, so that repeated hits still go deeper: point hits on their own, a hit over a contact patch (a wall) from a contact on the face it dented before.

Default
20.0f
Category
Dents
float BaseRadius = 30.0f

Dent radius at zero speed, cm.

Default
30.0f
Category
Dents
float RadiusPerDeltaV = 1.5f

Dent radius added per m/s of the hit, cm. A fast radius growth spreads the same depth into a shallow bowl that does not read as a dent.

Default
1.5f
Category
Dents
float LateralScale = 1.5f

Width of a dent across the hit, as a share of its radius. Wide, short dents read as crumpled metal; narrow, round ones as rubber.

Default
1.5f
Category
Dents
float CrumpleRatio = 3.0f

How far into the body a point hit crumples the metal, as a share of the hit's depth: a hit with no contact patch measured, past the frame's budget of them or with no other body to measure against. The push fades over that length, so the front of a car folds up like an accordion instead of caving in. A hit over a contact patch presses the face flat instead.

Default
3.0f
Category
Dents
float DragFraction = 0.3f

How far a sliding hit drags the dent along the surface, against its depth: in full when the body slides as fast as the hit stops it, barely when it meets the other head on. A point hit's: a hit over a contact patch (a wall) presses along the hit alone.

Default
0.3f
Category
Dents
float NoiseAmount = 0.3f

Per-node randomness of a point hit's dent depth, so that the metal does not look like rubber. It only takes depth away, so a crash's deepest metal comes out ragged rather than a flat plate at Max Dent Per Hit. A hit over a contact patch (a wall) presses the face onto one flat plane without it.

Default
0.3f
Category
Dents
float Bulge = 0.5f

How far the metal squeezed against a wall or another body's face buckles out across the hit, as a share of the press's depth: a hood tents up, the sides of a front bow out, a roof edge rises over a crushed door. The face against the other body stays flat; the buckle is deepest halfway through the squeezed metal, and no taller than a third of how far the dent spreads across the hit. A point hit does not buckle. Past 0.75 the cells of a car's lattice turn inside out under a hit at an angle to the body.

Default
0.5f
Category
Dents
float BulgeDownShare = 0.3f

Share of Bulge the squeezed metal takes downwards, towards the floor; up and sideways take all of it.

Default
0.3f
Category
Dents
float MaxDisplacement = 60.0f

Furthest any node ever moves, cm. Body materials must use it as Max World Position Offset Displacement.

Default
60.0f
Category
Dents
TArray<FCFStiffnessZone> StiffnessZones

Boxes, in root component space, where the body is stiffer or softer than the rest: a soft crumple zone in front, a cabin that keeps its shape, rails that hold. Where boxes overlap the stiffer one wins; a Mirrored zone covers its reflection across Y = 0 too. Crushform.ShowZones and the zone editor (select the Crushform component in a viewport) draw them; a crush press (UCFDeformComponent::CrushByPlane) ignores them.

Category
Dents
float DentAbrasion = 0.002f

Paint wear added per cm of dent: paint cracks where the metal bends. Small, so that a dent reads as bent metal rather than as a patch of primer.

Default
0.002f
Category
Paint
float MinAbrasionDepth = 3.0f

How far the metal must have moved, cm, before Dent Abrasion wears its paint, and only the travel past it wears: the centimetre or two a crash moves the body far from the hit leaves no chips there. Scrapes wear the paint at any depth. The extra cracking of deep dents in MF_CF_Paint starts at a fixed 3 cm whatever this is.

Default
3.0f
Category
Paint
float MinScrapeSpeed = 1.5f

Sliding speed below which contacts leave the paint alone, m/s. A shove that grinds along the panel stays under it.

Default
1.5f
Category
Paint
float ScrapeRate = 0.05f

Paint wear per metre slid, up to Max Paint Wear. Low, so that one scrape chips the paint rather than stripping it.

Default
0.05f
Category
Paint
float ScratchRate = 0.05f

Scratch cover a node takes per metre the scrape slides over it, up to Max Scratch: thin lines along the slide. A pass over a node adds about Scratch Rate times twice the Scrape Radius (in metres); 0 leaves no lines.

Default
0.05f
Category
Paint
float ScrapeRadius = 30.0f

Radius of a scrape, cm.

Default
30.0f
Category
Paint
float MaxPaintWear = 0.2f

Most paint wear any point of the body takes, 0..1: the share of the paint a wreck can lose to primer and bare metal. 1 lets it all wear off.

Default
0.2f
Category
Paint
float MaxScratch = 0.033f

Most scratch cover any point of the body takes, 0..1: the share of the paint a wreck can lose to scratch lines. The lines cover about 0.36 of it at most, so a higher value adds none.

Default
0.033f
Category
Paint
float MinRadiusInCells = 1.25f

Smallest dent or scrape radius in lattice cells: a smaller one could fall between nodes and vanish.

Default
1.25f
Category
Lattice
float MaxPlausibleDeltaV = 40.0f

The fastest hit or slide a client reports, m/s: a harder one is reported at this limit, and the server rejects anything above it.

Default
40.0f
Category
Network
float BoundsScaleWhenDented = 1.1f

Bounds scale of a dented mesh: dents bulge a little outwards at their rims.

Default
1.1f
Category
Rendering
float DirtScale = 1.0f

Multiplies every dirt deposit on this body; 0 keeps it clean and gives it no dirt grid at all.

Default
1.0f
Category
Dirt
FCFDirtChannelShape DustShape = FCFDirtChannelShape::MakeDefault(ECFDirtChannel::Dust)

Where dust settles on this body.

Default
FCFDirtChannelShape::MakeDefault(ECFDirtChannel::Dust)
Category
Dirt
FCFDirtChannelShape MudShape = FCFDirtChannelShape::MakeDefault(ECFDirtChannel::Mud)

Where mud settles on this body.

Default
FCFDirtChannelShape::MakeDefault(ECFDirtChannel::Mud)
Category
Dirt
FCFDirtChannelShape SnowShape = FCFDirtChannelShape::MakeDefault(ECFDirtChannel::Snow)

Where snow settles on this body.

Default
FCFDirtChannelShape::MakeDefault(ECFDirtChannel::Snow)
Category
Dirt
FCFDirtChannelShape WetShape = FCFDirtChannelShape::MakeDefault(ECFDirtChannel::Wet)

Where water spray settles on this body.

Default
FCFDirtChannelShape::MakeDefault(ECFDirtChannel::Wet)
Category
Dirt