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.
Where each profile goes
Section titled “Where each profile goes”| Asset class | What it tunes | Set on | Project default | Shipped default |
|---|---|---|---|---|
UCFProfile | How a body dents, scrapes its paint and takes dirt | UCFDeformComponent::Profile, or DeformProfile on the vehicle adapter | UCFSettings::DefaultProfile | /Crushform/Presets/DA_CF_DefaultProfile |
UCFTireProfile | How a tyre traces the ground and deforms | UCFTireComponent::Profile, or TireProfile on the vehicle adapter | UCFTireSettings::DefaultProfile | /Crushform/Presets/DA_CF_DefaultTireProfile |
UCFEngineSoundProfile | The loops, pitch and fades of an engine | UCFEngineAudioComponent::Profile, or EngineSoundProfile on the vehicle adapter | UCFEngineSettings::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.
Setting a profile on a body
Section titled “Setting a profile on a body”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
SpawnActorDeferredandFinishSpawning, 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 offThe usual cause is an Include Tags list that matches no mesh, or an owner whose meshes are all excluded by Exclude Tags.
UCFProfile
Section titled “UCFProfile”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.
| Property | What it does | Default |
|---|---|---|
UCFProfile::Resolution | Lattice nodes per axis. Every axis is a multiple of 4, and the lattice must fit one atlas slot | 16, 8, 8 |
UCFProfile::LatticeMargin | How far, in cm, the lattice reaches past the body’s collision on every side | 10 |
UCFProfile::bUseExplicitBounds | Takes ExplicitBounds as the lattice box instead of the collision’s box | Off |
UCFProfile::IncludeTags | Only mesh components with one of these tags deform. Empty means every static and skeletal mesh | Empty |
UCFProfile::ExcludeTags | Mesh components with one of these tags never deform. Use it for parts that move, such as doors | Empty |
UCFProfile::bDents | Off: hits, crush presses and reports never dent or scratch the body | On |
UCFProfile::bDeformCollision | The body’s collision follows its dents | On |
UCFProfile::bHingedParts | Off: hinged parts never swing, come off or tear off | On |
UCFProfile::MinDeltaV | Hit speed, in m/s, before the body dents | 0.5 |
UCFProfile::Stiffness | Dent depth, in cm, per m/s above MinDeltaV | 3 |
UCFProfile::MaxDentPerHit | The deepest dent one hit can make, in cm, where a zone’s stiffness is 1 | 20 |
UCFProfile::CrumpleRatio | How far into the body a point hit crumples the metal, as a share of its depth | 3 |
UCFProfile::MaxDisplacement | The furthest any node moves, in cm. Body materials use it as Max World Position Offset Displacement | 60 |
UCFProfile::StiffnessZones | Boxes where the body is stiffer or softer than the rest | Empty |
UCFProfile::DentAbrasion | Paint wear added per cm of dent | 0.002 |
UCFProfile::MinScrapeSpeed | Sliding speed, in m/s, below which contacts leave the paint alone | 1.5 |
UCFProfile::MaxPlausibleDeltaV | The fastest hit or slide a client may report, in m/s. The server rejects anything above it | 40 |
UCFProfile::DirtScale | Multiplies every dirt deposit on the body. Zero keeps it clean | 1 |
| Lattice | ||
|---|---|---|
| Resolution | 1688 | |
| Lattice Margin | 10.0 | |
| Use Explicit Bounds | ||
| Explicit Bounds | ||
| Min Radius in Cells | 1.25 | |
| Components | ||
| Include Tags | 0 Array element | |
| Exclude Tags | 0 Array element | |
| Dents | ||
| Dents | ||
| Deform Collision | ||
| Hinged Parts | ||
| Dented Part Collision | ||
| Min Delta V | 0.5 | |
| Stiffness | 3.0 | |
| Max Dent Per Hit | 20.0 | |
| Base Radius | 30.0 | |
| Radius Per Delta V | 1.5 | |
| Lateral Scale | 1.5 | |
| Crumple Ratio | 3.0 | |
| Drag Fraction | ||
| Noise Amount | ||
| Bulge | ||
| Bulge Down Share | ||
| Max Displacement | 60.0 | |
| Stiffness Zones | 0 Array element | |
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.
Stiffness zones
Section titled “Stiffness zones”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
Section titled “UCFTireProfile”UCFTireProfile sets how one kind of tyre traces the ground and deforms. The main settings are:
| Property | What it does | Default |
|---|---|---|
UCFTireProfile::TraceChannel | The channel the tyre traces against: terrain, rocks and the road | ECC_WorldStatic |
UCFTireProfile::NumArcSamples | Rays across the contact arc. An odd count keeps one ray straight down | 13 |
UCFTireProfile::NumLateralRows | Rows across the tread. Three covers both shoulders and the centre | 3 |
UCFTireProfile::MaxDeflection | The deepest visual dent, in cm | 14 |
UCFTireProfile::RestingDeflection | How far a resting tyre is squashed, as a share of its radius | 0.05 |
UCFTireProfile::LoadSensitivity | How much the resting sink grows with the wheel’s live load | 1 |
UCFTireProfile::MaxLoadFactor | The ceiling on the load factor the sink may reach | 2.5 |
UCFTireProfile::MergeAngleDeg | Close 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 own | 45 |
UCFTireProfile::MinObstacleRadius | The 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 thick | 3 |
UCFTireProfile::RimRadiusOverride | The rim radius, in cm. 0 reads the RimRadius parameter of the tyre material | 0 |
UCFTireProfile::RubberMargin | The rubber kept between an obstacle and the rim, in cm, once the wheel is pushed off it | 2 |
UCFTireProfile::MaxPush | The farthest, in cm, the whole wheel is shifted off an obstacle. Past it the rim may enter the obstacle | 10 |
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
Section titled “UCFEngineSoundProfile”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.
Shipped presets
Section titled “Shipped presets”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:
| Asset | Class | Role |
|---|---|---|
/Crushform/Presets/DA_CF_DefaultProfile | UCFProfile | The project default for a body that names no profile |
/Crushform/Presets/DA_CF_DefaultTireProfile | UCFTireProfile | The project default for a tyre on the adapter |
/Crushform/Presets/DA_CF_GlassLaminated | UCFGlassDefinition | A laminated glass pane |
/Crushform/Presets/DA_CF_GlassTempered | UCFGlassDefinition | A 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.
Other presets
Section titled “Other presets”“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 aName, aStiffness, aMaxDepthand anEdgeWidth. They exist in the editor only. - Debug damage presets fill a body with damage in debug mode:
Lightgives three soft hits,Mediumsix,Heavyten, andWreckeighteen hits near the plausible cap. - Debug dirt presets fill a body with a dirt mix in debug mode:
Dustyis dust only,Muddyis mud with a third of that amount of dust,Snowyis snow only, andWetis 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.
Check that it works
Section titled “Check that it works”- 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 1on a body with the profile set. Its damaged nodes show where the body dented.
Troubleshooting
Section titled “Troubleshooting”Nothing dents, and the log has no warning
Section titled “Nothing dents, and the log has no warning”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.
The log says the resolution was clamped
Section titled “The log says the resolution was clamped”%s: profile %s resolution %s does not fit an atlas slot, clamped to %sCause. 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.
The tyres stay round
Section titled “The tyres stay round”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 roundFix. Set a UCFTireProfile on the tyre component, or set Tire Profile on the vehicle adapter, which takes the project default when it is empty.
The engine is silent
Section titled “The engine is silent”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 silentFix. Set a UCFEngineSoundProfile on the component, or set the default in Project Settings > Plugins > Crushform Engine. The profile also needs an attenuation.