INSODIMENSIONStudios
FoleyGuides

Surface Setup

Configure physical materials, surface types, and per-surface VFX for Agentic Foley

Surface Setup

How the foley system detects surfaces and how to configure per-surface audio and VFX.


How Surface Detection Works

On each foot contact, UAgenticFoleyComponent traces downward from the foot socket. The trace hits geometry, reads the PhysicalMaterial->SurfaceType, and looks up that surface in the active UAgenticFoleyDataAsset.

AnimNotify fires (foot_l plants)
  → TraceFeetResolved(foot_l)
    → Line trace downward from foot_l socket
    → Hit result → PhysicalMaterial → EPhysicalSurface
    → FoleyData->ResolveSurfaceEffect(Surface, EventTag)
    → Returns: AudioBank + VFX + NoiseLevel + StampIntensity
  → DispatchFoleyResolved(result)

If the trace hits geometry with no physical material, it falls back to SurfaceType_Default (usually concrete).


Shipped Physical Materials

The plugin ships 13 pre-configured PM_* assets:

AssetSurface TypeIndex
PM_ConcreteConcrete1
PM_DirtDirt2
PM_GrassGrass3
PM_MetalMetal4
PM_WoodWood5
PM_WaterWater6
PM_SoilSoil7
PM_StoneStone8
PM_SandSand9
PM_SnowSnow10
PM_MudMud11
PM_ForestForest12
PM_FleshFlesh13

Assign these to your level meshes via Details > Physics > Phys Material Override.


Per-Surface VFX Overrides

Inside each FAgenticFoleySurface entry in the DataAsset, the Effects array lets you assign different Niagara systems per event tag:

EventWhenExample VFX
Foley.Event.WalkSlow gaitSmall dust puff
Foley.Event.RunModerate gaitMedium dust cloud
Foley.Event.SprintFast gaitLarge dust plume
Foley.Event.JumpJump pushoffGround burst
Foley.Event.LandLanding impactLarge impact cloud
Foley.Event.Slide.LoopSlide contactContinuous trail particles

Events not in the Effects array fall back to DefaultVFX for that surface.


Per-Surface Volume Tuning

When one surface's WAVs are mastered quieter or louder than the others in the same pack, set VolumeMultiplier on the FAgenticFoleySurface entry (clamped to 0.1-5.0, default 1.0). The value is multiplied into the final audio volume alongside the per-call volume and the DataAsset's GlobalVolumeMultiplier:

final_volume = per-call Volume × surface VolumeMultiplier × DA GlobalVolumeMultiplier

Typical use: a marketplace pack ships its Concrete WAVs at -12 dB RMS and its Dirt WAVs at -6 dB — set VolumeMultiplier = 3.5 on the Concrete row to bring both surfaces to parity without re-authoring the wavs or the MetaSound presets.

Applies to both PlayMetaSoundFoley (the managed AudioComponent path) and PlayFoleyAtOwner (the BP one-shot path). Equipment SlotBank layers compose their own per-event VolumeMultiplier on top, so armor/gear mixes are unaffected by surface-level tuning.


Adding a Custom Surface

  1. Register the surface in Config/DefaultEngine.ini:

    +PhysicalSurfaces=(Type=14,Name="Carpet")
  2. Create a PM_Carpet Physical Material asset, set Surface Type = Carpet

  3. In your UAgenticFoleyDataAsset, add a new entry to SurfaceEffects:

    • SurfaceType = Carpet
    • DefaultVFX = your carpet Niagara system (or None for no VFX)
    • AudioBank = your carpet AudioBank DataAsset
    • NoiseLevel = 0.1 (carpet is quiet)
  4. Assign PM_Carpet to carpet meshes in your level


The Shipped Config

The plugin ships exactly one config out of the box: DA_FoleyConfig_Simple (concrete-only, routes GASP's built-in sneaker wavs). For more surfaces, author your own UAgenticFoleyDataAsset pointing at any Fab audio pack you own — see Compatible Audio Packs.

A fully-populated config has one SurfaceEffects entry per physical surface, each pointing to an AudioBank and optional per-event VFX overrides:

DA_FoleyConfig_Dy internals — SurfaceEffects array with all 13 surfaces

See Compatible Audio Packs for details on each marketplace integration.