Skip to content
CRUSHFORMV1.1.0
GET IT ON FAB

INTEGRATIONPROFILES AND PRESETS

Profiles and presets

A profile is a data asset that tunes one system for one kind of body: how a vehicle dents, how its tyres deform, how its engine sounds. The plugin reads it from the component that owns the system, so one project can run several profiles at once. This page lists the profile classes, where each one goes, the presets the plugin ships in the Presets folder, /Crushform/Presets, and the other things the word “preset” means in the plugin.

The page has no Blueprint graph. A profile is set in the class defaults or in C++ before play, and no Blueprint function sets it on a component: UCFDeformComponent::Profile is BlueprintReadOnly, and UCFTireComponent::SetProfile is C++ only.

Asset classWhat it tunesSet onProject defaultShipped default
UCFProfileHow a body dents, scrapes its paint and takes dirtUCFDeformComponent::Profile, or DeformProfile on the vehicle adapterUCFSettings::DefaultProfile/Crushform/Presets/DA_CF_DefaultProfile
UCFTireProfileHow a tyre traces the ground and deformsUCFTireComponent::Profile, or TireProfile on the vehicle adapterUCFTireSettings::DefaultProfile/Crushform/Presets/DA_CF_DefaultTireProfile
UCFEngineSoundProfileThe loops, pitch and fades of an engineUCFEngineAudioComponent::Profile, or EngineSoundProfile on the vehicle adapterUCFEngineSettings::DefaultProfile/Crushform/Engine/DA_CF_DefaultEngineSound

The other data assets of the plugin are definitions rather than profiles. Glass panes take a UCFGlassDefinition, breakable props a UCFBreakablePropDefinition, trees a UCFTreeConfig, and impact sounds a UCFImpactFeedbackSet. Each has its own page in this guide. Surfaces, which give the dirt and the rolling sound of each ground, take a UCFSurfaces asset named in UCFSettings::Surfaces.

Create every one of these with Add > Miscellaneous > Data Asset in the Content Browser, and pick the class. The plugin registers no factory and no asset category of its own.

A component with no profile does nothing. For UCFDeformComponent that is silent: the lattice is not built. The component reads its profile when play begins, so set it in one of two places:

  • In the class defaults of the Blueprint, in the Profile field of the component’s Details.
  • In C++, between SpawnActorDeferred and FinishSpawning, before the component begins play.

On a vehicle with the adapter, leave the adapter’s profile field empty to take the project default. The adapter gives its deform and tyre components the project default when the field is empty. The engine component falls back to its project default when it has no profile of its own. An explicit value in the adapter’s field always wins.

If a profile is set but no mesh of the owner can deform, the component logs a warning and stays off:

%s has a profile but no deformable mesh components; Crushform stays off

The usual cause is an Include Tags list that matches no mesh, or an owner whose meshes are all excluded by Exclude Tags.

A UCFProfile holds the settings of one body. Its properties are grouped by the category they show in the Details panel. The table lists the ones that decide the look and the feel of the damage. The complete list is in the API reference.

PropertyWhat it doesDefault
UCFProfile::ResolutionLattice nodes per axis. Every axis is a multiple of 4, and the lattice must fit one atlas slot16, 8, 8
UCFProfile::LatticeMarginHow far, in cm, the lattice reaches past the body’s collision on every side10
UCFProfile::bUseExplicitBoundsTakes ExplicitBounds as the lattice box instead of the collision’s boxOff
UCFProfile::IncludeTagsOnly mesh components with one of these tags deform. Empty means every static and skeletal meshEmpty
UCFProfile::ExcludeTagsMesh components with one of these tags never deform. Use it for parts that move, such as doorsEmpty
UCFProfile::bDentsOff: hits, crush presses and reports never dent or scratch the bodyOn
UCFProfile::bDeformCollisionThe body’s collision follows its dentsOn
UCFProfile::bHingedPartsOff: hinged parts never swing, come off or tear offOn
UCFProfile::MinDeltaVHit speed, in m/s, before the body dents0.5
UCFProfile::StiffnessDent depth, in cm, per m/s above MinDeltaV3
UCFProfile::MaxDentPerHitThe deepest dent one hit can make, in cm, where a zone’s stiffness is 120
UCFProfile::CrumpleRatioHow far into the body a point hit crumples the metal, as a share of its depth3
UCFProfile::MaxDisplacementThe furthest any node moves, in cm. Body materials use it as Max World Position Offset Displacement60
UCFProfile::StiffnessZonesBoxes where the body is stiffer or softer than the restEmpty
UCFProfile::DentAbrasionPaint wear added per cm of dent0.002
UCFProfile::MinScrapeSpeedSliding speed, in m/s, below which contacts leave the paint alone1.5
UCFProfile::MaxPlausibleDeltaVThe fastest hit or slide a client may report, in m/s. The server rejects anything above it40
UCFProfile::DirtScaleMultiplies every dirt deposit on the body. Zero keeps it clean1
Lattice
Resolution1688
Lattice Margin10.0
Use Explicit Bounds
Explicit Bounds
Min Radius in Cells1.25
Components
Include Tags0 Array element
Exclude Tags0 Array element
Dents
Dents
Deform Collision
Hinged Parts
Dented Part Collision
Min Delta V0.5
Stiffness3.0
Max Dent Per Hit20.0
Base Radius30.0
Radius Per Delta V1.5
Lateral Scale1.5
Crumple Ratio3.0
Drag Fraction0.3
Noise Amount0.3
Bulge0.5
Bulge Down Share0.3
Max Displacement60.0
Stiffness Zones0 Array element
The Lattice, Components and Dents groups of the default dent profile.

The dent settings describe how metal bends, and the ones to change first are Stiffness, MaxDentPerHit and MaxDisplacement. Keep MaxDentPerHit well under MaxDisplacement, so that repeated hits still go deeper. Then check the materials: their Max World Position Offset Displacement must be at least MaxDisplacement plus the fold amplitude. Materials and shaders explains the bound.

UCFProfile::StiffnessZones is a list of boxes, in the root component’s space. Each zone has its own Stiffness, where 1 dents like the rest of the body, a value of 3 dents a third as deep and 0.5 twice as deep. Each zone also has an EdgeWidth, a MaxDepth (zero takes the profile’s MaxDisplacement) and a bMirrored switch, which applies the zone across the body’s centre line too. A Name is kept for the editor only. Zones are set with the Zone Editor, and Crushform.ShowZones 1 draws them.

UCFTireProfile sets how one kind of tyre traces the ground and deforms. The main settings are:

PropertyWhat it doesDefault
UCFTireProfile::TraceChannelThe channel the tyre traces against: terrain, rocks and the roadECC_WorldStatic
UCFTireProfile::NumArcSamplesRays across the contact arc. An odd count keeps one ray straight down13
UCFTireProfile::NumLateralRowsRows across the tread. Three covers both shoulders and the centre3
UCFTireProfile::MaxDeflectionThe deepest visual dent, in cm14
UCFTireProfile::RestingDeflectionHow far a resting tyre is squashed, as a share of its radius0.05
UCFTireProfile::LoadSensitivityHow much the resting sink grows with the wheel’s live load1
UCFTireProfile::MaxLoadFactorThe ceiling on the load factor the sink may reach2.5
UCFTireProfile::MergeAngleDegClose contacts merge into one only when their normals differ by no more than this, in degrees. A low value lets a small round obstacle under a big tyre take all four contacts, so the ground loses its own45
UCFTireProfile::MinObstacleRadiusThe smallest radius, in cm, a round obstacle’s curvature is read as. A thinner one, such as a pipe, shapes the dent as if it were this thick3
UCFTireProfile::RimRadiusOverrideThe rim radius, in cm. 0 reads the RimRadius parameter of the tyre material0
UCFTireProfile::RubberMarginThe rubber kept between an obstacle and the rim, in cm, once the wheel is pushed off it2
UCFTireProfile::MaxPushThe farthest, in cm, the whole wheel is shifted off an obstacle. Past it the rim may enter the obstacle10

The three rim settings, RimRadiusOverride, RubberMargin and MaxPush, matter only for a wheel whose host accepts the push; see Host interfaces.

A tyre component with no profile keeps its tyres round. It logs a verbose line and does nothing else. On a vehicle with the adapter, the project default DA_CF_DefaultTireProfile is used when the adapter’s TireProfile is empty. The budget that decides which tyres deform is set in Crushform Tire, not in the profile.

UCFEngineSoundProfile holds the engine’s loops and how they play:

  • Layers: the loops, in any order. The component sorts them by RPM, and a layer with no sound is left out.
  • Attenuation: required. Without it the engine sound stays off.
  • Coast Volume: the share of full volume heard with no load. The default is 0.6.
  • Min Pitch and Max Pitch: the lowest and highest pitch a loop is played at, relative to its recorded speed. The defaults are 0.5 and 2.
  • Starter Sound and Shutdown Sound: the starter loop while the engine cranks, and the sound when a running engine turns off.

With no profile on the component and no project default, the engine stays silent, and the log says so.

The presets are plugin content. In the Content Browser, open Settings and tick Plugin Content, then open Plugins › Crushform Content › Presets, the folder of /Crushform/Presets. The folder holds four assets:

AssetClassRole
/Crushform/Presets/DA_CF_DefaultProfileUCFProfileThe project default for a body that names no profile
/Crushform/Presets/DA_CF_DefaultTireProfileUCFTireProfileThe project default for a tyre on the adapter
/Crushform/Presets/DA_CF_GlassLaminatedUCFGlassDefinitionA laminated glass pane
/Crushform/Presets/DA_CF_GlassTemperedUCFGlassDefinitionA tempered glass pane

The plugin’s sedan has its own profiles, /Crushform/Blueprints/Sedan/DA_CF_Profile_Sedan and /Crushform/Blueprints/Sedan/DA_CF_TireProfile_CitySample. Duplicate a preset into your project before you tune it, so that a plugin update does not overwrite your values.

“Preset” means three other things in the plugin. None of them is a profile.

  • Zone presets are named sets of zone values, for the Zone Editor. They are kept in UCFEditorSettings::ZonePresets, in Project Settings > Crushform Zone Editor. Each has a Name, a Stiffness, a MaxDepth and an EdgeWidth. They exist in the editor only.
  • Debug damage presets fill a body with damage in debug mode: Light gives three soft hits, Medium six, Heavy ten, and Wreck eighteen hits near the plausible cap.
  • Debug dirt presets fill a body with a dirt mix in debug mode: Dusty is dust only, Muddy is mud with a third of that amount of dust, Snowy is snow only, and Wet is wetness only.

The debug presets live in the CrushformDebug module and change nothing in your project. They are for trying the systems in the debug panel.

  • In the Content Browser, open the profile and check that its Details show the groups above.
  • Run Validate Assets on the profile. A resolution the atlas cannot hold, or invalid stiffness zones, is reported as an error.
  • In a non-Shipping build, run Crushform.Debug 1 on a body with the profile set. Its damaged nodes show where the body dented.

Cause. The component has no profile. The lattice is not built, and nothing is logged for that case.

Fix. Set the profile in the class defaults or in C++ before play. On a vehicle with the adapter, set Deform Profile, or leave it empty to take DA_CF_DefaultProfile.

%s: profile %s resolution %s does not fit an atlas slot, clamped to %s

Cause. The resolution does not fit one atlas slot, so the lattice is shrunk. The slot holds ResX * ResZ nodes at most and ResY rows at most.

Fix. Lower Resolution until the lattice fits, or raise the slot size in Project Settings > Plugins > Crushform > Atlas. Data Validation reports the same problem as an error.

Cause. The tyre component has no tyre profile. The log says so only at the verbose level:

%s: no tyre profile is set, the vehicle's tyres stay round

Fix. Set a UCFTireProfile on the tyre component, or set Tire Profile on the vehicle adapter, which takes the project default when it is empty.

Cause. There is no engine sound profile on the component, and the project has no default. The log says:

%s: no engine sound profile here or in Project Settings > Plugins > Crushform Engine; the engine stays silent

Fix. Set a UCFEngineSoundProfile on the component, or set the default in Project Settings > Plugins > Crushform Engine. The profile also needs an attenuation.