Skip to content

Documentation

Feature guides

GuidesPublished

Feature guides

Author immediate and transferred footwear imprints, source-excluded projection, Sequencer continuity, bounded lifecycle behavior, and client-local multiplayer integration.

Product
Footstep Studio
Version
Documentation 2.11.2
Content
13 chapters
On this page

01

Resolve the active footwear profile

One loaded profile is selected only after the contact passes the earlier admission, hit, payload, and probability gates.

  1. 1

    Request override

    An advanced FootstepTriggerRequest can provide the highest-priority profile for one contact.

  2. 2

    Component override

    Set Footwear Profile Override supplies the loaded profile for subsequent contacts.

  3. 3

    Provider

    FootstepFootwearProvider can derive a loaded profile from explicit provider, owner, or owner component state.

  4. 4

    Profile default

    Default Footwear Profile on the active Footstep Profile is the final non-null fallback.

  5. 5

    No footwear

    If every source is null, the contact continues with the pre-2.5 surface-only behavior.

  • Provider identity discovery is deterministic: explicit override, owner, then implementing owner components ordered by component name.
  • Both a found provider and a no-provider result are cached until Refresh Footwear Provider.
  • The provider result itself is queried once per otherwise eligible contact so an equipment change is visible on the next contact.
  • FootwearResolutionSource in the resolved context identifies the winning source.

02

Integrate project equipment

The direct component setter is the lowest-cost path when the equipment system already emits a feet-slot change.

  1. 1

    Create project profiles

    Author project-owned assets such as DA_FSP_Footwear_Barefoot, DA_FSP_Footwear_LeatherBoots, or creature-specific contact profiles.

  2. 2

    Reference them from equipment data

    Add a loaded FootstepFootwearProfile reference to the project-owned equipment definition.

  3. 3

    Set on equip

    From the feet-equipment change event, call Set Footwear Profile Override on the same FootstepComponent that receives contacts.

  4. 4

    Restore on unequip

    Set the barefoot profile, or null to restore provider and Footstep Profile default resolution.

Use FootstepFootwearProvider only when profile selection must be derived per eligible contact, for example from a tag map, slot inventory, or named creature socket. Those mappings remain project code and do not add framework dependencies to the plugin.

03

Author footwear imprint stages

One profile routes generic, left, right, and named custom contacts for both immediate and transferred decal paths.

  1. 1

    Create the Data Asset

    Create Data Asset > Footstep Footwear Profile under a project-owned /Game folder.

  2. 2

    Author the first stage

    The first Generic Imprint Stage or route stage must start at progress 0 and contain at least one non-null positive-weight texture.

  3. 3

    Order later stages

    Later Start Progress 01 thresholds must increase strictly. Immediate decals use the stage active at 0.0; transferred trails can advance through 0.0, 0.25, and 0.75 Fresh, Damp, and Faint stages.

  4. 4

    Add contact routes

    Add unique Left Foot, Right Foot, or exact named Custom Socket routes when generic stages are insufficient.

Texture authoringLeft routeRight route
One right-foot textureSame texture with Mirror Material U enabledTexture without mirroring
Separate left/right texturesAuthored left texture without mirroringAuthored right texture without mirroring
Generic contact setFalls back to generic stages when no route matchesFalls back to generic stages when no route matches

04

Implement the footwear decal material contract

The contacted surface keeps its Deferred Decal material while footwear supplies the resolved texture and optional U-mirror value.

  1. 1

    Expose the canonical texture parameter

    Use FSP_ImprintTexture in the project master Deferred Decal material and route its authored mask channel into opacity. The bundled masters already provide this contract.

  2. 2

    Expose canonical mirroring

    Use FSP_ImprintMirrorU to select original U or 1 - U before every Color, Normal, and ORM sample that belongs to the footprint.

  3. 3

    Configure immediate imprints

    On the resolved Default Payload or Event Override, enable Decal and enter the exact names under Immediate Footwear Imprint > Texture Parameter Name and Mirror Parameter Name.

  4. 4

    Configure transferred imprints

    On the source Surface Transfer, enter the exact Footwear Texture Parameter Name and optional Footwear Mirror Parameter Name, then route the material's final alpha through MF_FSP_SourceExclusion.

  5. 5

    Keep residue intensity separate

    Use FSP_ImprintIntensity for Surface Transfer progression. It multiplies the authored FSP_ImprintOpacity base value; the two controls are not interchangeable.

  • Every immediate material and every transfer material selectable from legacy variants, generic stages, or contact routes must expose the parameters configured for its path.
  • Immediate decals use the current resolved footwear profile and the stage active at progress 0.0.
  • Transferred decals use the footwear profile captured at source acquisition and the retained trail progress.
  • An immediate imprint attempts at most one decal spawn and never acquires, consumes, extends, replaces, expires, or clears Surface Transfer state.
  • Source exclusion is required for Surface Transfer materials; it is not imposed on ordinary immediate decal materials.
  • Surface material stages and footwear texture stages are independent.
  • A decal dynamic material instance is created only when an enabled runtime contract must write intensity, footwear, receiver-normal filtering, or source-exclusion parameters.

05

Add optional footwear audio

Surface audio is unchanged by default; footwear audio behavior is explicitly opt-in.

ModeBehaviorCost model
Modulate Surface AudioMultiplies the resolved surface sound volume and pitchNo additional voice when modulation is sufficient
Play OverlayEmits a separate weighted footwear sound layerCan add one voice and one local/world audio admission per contact
Audio RouteOverrides the default footwear presentation for one exact Physical Surface and event pairStill uses shared audio budgets
  • Surface sound and footwear overlay use independent bounded immediate-repeat histories.
  • An enabled surface-volume multiplier of 0 mutes the surface layer without spawning a silent voice or consuming an audio budget slot.
  • Prefer modulation for inexpensive differentiation; reserve overlays for information that pitch and volume cannot convey.
  • Profile representative equipment mixes with the Unreal Audio Mixer in the target scene.

06

Adopt the bundled material template library

Ready-to-duplicate instances provide the fastest safe path; copied masters support projects that need a different graph while retaining the runtime parameter contract.

Asset familyIncluded assetsPurpose
Material FunctionsMF_FSP_SourceExclusion; MF_FSP_DecalReceiverNormalFilter; MF_FSP_SurfaceImpressionCoverageSource filtering, receiver-normal filtering, and bounded field coverage
Master templatesM_FSP_Decal_ColorRSM_Template; M_FSP_Decal_ColorNormalRSM_Template; M_FSP_SurfaceImpression_TemplateExplicit non-Normal and Normal-writing Deferred Decal contracts plus the opaque impression Surface graph
Ready instancesMI_FSP_Decal_ColorRSM_Immediate_Template; MI_FSP_Decal_ColorRSM_SurfaceTransfer_Template; MI_FSP_Decal_ColorNormalRSM_Immediate_Template; MI_FSP_Decal_ColorNormalRSM_SurfaceTransfer_Template; MI_FSP_SurfaceImpression_TemplateNeutral project starting points without third-party artwork
  1. 1

    Choose the output contract

    Use ColorRSM when the decal must never write DBuffer Normal. Use ColorNormalRSM when it must write tangent Normal; Normal Strength 0 produces a flat normal but does not disable that DBuffer target.

  2. 2

    Duplicate the closest instance

    Copy the matching Immediate or SurfaceTransfer instance under /Game, replace its neutral Unreal textures, and tune only project-owned values.

  3. 3

    Retain the plugin master when possible

    The bundled decal master already applies receiver-normal filtering before source exclusion; the Surface Impression master already maps the interaction field.

  4. 4

    Copy a master only for a different graph

    Preserve every documented runtime-owned parameter name and neutral default when changing the shading model or graph structure.

  5. 5

    Validate on the shipping RHI

    Compile all three functions, all three masters, and the five instances, then perform separate visual acceptance for Immediate, Surface Transfer, and Surface Impression paths.

Maps requiredMasterResult
Color or mask onlyM_FSP_Decal_ColorRSM_TemplateColor plus scalar Roughness, Specular, and Metallic; never writes Normal
Color or mask plus ORMM_FSP_Decal_ColorRSM_TemplateRoughness from ORM green, Metallic from blue, scalar Specular; never writes Normal
Color or mask plus NormalM_FSP_Decal_ColorNormalRSM_TemplateColor, tangent Normal, and scalar RSM
Color or mask plus Normal and ORMM_FSP_Decal_ColorNormalRSM_TemplateColor, tangent Normal, Roughness from ORM green, Metallic from blue, scalar Specular

07

Author a Surface Transfer trail

A source definition can acquire short local decal state and consume it on later eligible contacts outside the same source identity.

  1. 1

    Choose the source

    Use the exact Physical Material or Physical Surface definition for water, mud, snow, blood, ash, sand, paint, or another project-owned residue.

  2. 2

    Configure immediate feedback

    Use the source payload for contact audio, ripple, splash, or an immediate decal. Niagara accepts a Niagara System, not a standalone Emitter.

  3. 3

    Duplicate the transfer instance

    Start from MI_FSP_Decal_ColorRSM_SurfaceTransfer_Template when the mark must not write Normal, or MI_FSP_Decal_ColorNormalRSM_SurfaceTransfer_Template when it must. Duplicate it for Fresh, Damp, and Faint states.

  4. 4

    Enable and assign the transfer decal

    In the resolved source definition, enable Surface Transfer > Decal and assign every project-owned instance through Material Variants, ordered generic stages, or contact-specific stages. Set Intensity Parameter Name to FSP_ImprintIntensity when the curve controls visibility.

  5. 5

    Bind optional footwear

    Set Footwear Texture Parameter Name to FSP_ImprintTexture and Footwear Mirror Parameter Name to FSP_ImprintMirrorU only when every selectable material supports runtime mask replacement. Leave both unset for fixed matched Color, Normal, and ORM sets.

  6. 6

    Anchor and certify placement

    Keep Projection Placement on Surface Anchored, start Normal Offset Cm at 0.1, and keep the automatic correction envelope conservative. Runtime preserves gameplay-hit identity while resolving a render-facing point through a receiver provider or bounded exact-component complex collision.

  7. 7

    Set the trail contract

    Choose inclusive Emission Count Range, Max Carry Duration Seconds, Acquisition Event, Emission Event, and Shared Owner or Per Contact scope.

  8. 8

    Enable the renderer contract

    Set Custom Depth-Stencil Pass to Enabled with Stencil and keep r.CustomDepth.Order at 0 or 2.

  9. 9

    Validate the receiver

    The destination must block the configured trace, retain usable complex query geometry or implement a placement provider, and accept the selected DBuffer response. Its normal payload may emit alongside the transferred decal.

SettingDocumented behavior
Emission Count RangeInclusive randomized count; the documented default 3 to 4 yields three or four eligible contacts
Max Carry Duration SecondsDefault 8.0; 0.0 intentionally disables time expiry
Shared Owner TrailOne trail for the owner, suitable for one alternating biped sequence
Per Contact TrailIndependent bounded state for feet, paws, hooves, hands, wheels, or custom sockets
Attachment AutoAttaches to movable hit components and otherwise spawns in the world
Projection PlacementSurface Anchored is the production default; Centered At Contact is the explicit legacy compatibility mode

08

Control stages, intensity, and lifecycle

Discrete material stages, continuous scalar intensity, and emitted decal lifetime solve separate presentation problems.

StageStart progress3 emissions4 emissions
Fresh0.0Contact 1Contact 1
Damp0.25Contact 2Contacts 2 and 3
Faint0.75Contact 3Contact 4
  • Material resolution order is matching contact route stage, generic stage, then the legacy decal material variants fallback.
  • Initial Intensity, Final Intensity, and Intensity Falloff Exponent define a continuous sequence; the first and last emissions receive the exact endpoints.
  • A contact on the same exact source identity refreshes acquisition rather than emitting a transferred mark.
  • The acquisition profile snapshot keeps already acquired residue coherent across later equipment changes.
  • Every eligible emission consumes a trail contact even when rendering is rejected, preventing deferred bursts.
  • Profile replacement, Set Footsteps Enabled(false), and Clear Surface Transfers remove retained state.

09

Exclude the emitting primitive from transferred decals

The runtime removes the source foot or footwear from each transferred Deferred Decal while preserving the receiving mark and unrelated character decals.

  1. 1

    Use a bundled Surface Transfer instance

    Both MI_FSP_Decal_ColorRSM_SurfaceTransfer_Template and MI_FSP_Decal_ColorNormalRSM_SurfaceTransfer_Template inherit a master that applies receiver-normal filtering before MF_FSP_SourceExclusion. Manual wiring is required only for a different project-owned master.

  2. 2

    Enable stencil support

    Set Project Settings > Rendering > Postprocessing > Custom Depth-Stencil Pass to Enabled with Stencil and retain r.CustomDepth.Order at 0 or 2.

  3. 3

    Declare the complete presentation boundary

    Automatic discovery covers registered mesh components on the source actor. Implement FootstepSourceExclusionProvider when presentation spans actors or when the source actor also owns unrelated mesh components; its normalized snapshot replaces automatic discovery.

  4. 4

    Keep runtime parameters internal

    Do not author FSP_EnableSourceExclusion, FSP_SourceStencil, or FSP_SourceDepthToleranceCm. Runtime supplies the effective project setting, non-zero stencil identity, and 0–5 cm tolerance.

  5. 5

    Validate close contact

    Confirm the complete ground mark remains visible while the emitting foot, footwear, and ankle remain clean during contact, plant, and lift-off.

  • The source lease is reference-counted across overlapping transfer marks.
  • Externally authored Custom Depth/Stencil state is reused without mutation; plugin-authored temporary state is restored after the final lease only when the plugin still owns the installed value.
  • A later emission revalidates an active lease. If another system changed renderer state, the new mark fails closed and cleanup preserves the replacement.
  • Provider results reject transactionally when empty after normalization, cross-world, or explicitly unregistered; the emitting source remains mandatory and the receiver is removed.
  • Missing material or renderer support fails Data Validation and rejects runtime emission instead of spawning a source-contaminating mark.
  • Source exclusion masks every primitive in the acquired source-presentation snapshot; the optional receiver-normal filter addresses adjacent non-source geometry with divergent normals.

10

Author bounded Surface Impressions

Accepted contacts can submit an immutable directional mask to opt-in receivers for shallow visual response without changing collision, navigation, or gameplay state.

  1. 1

    Duplicate the receiver instance

    Copy MI_FSP_SurfaceImpression_Template under /Game, assign project Base Color and Normal textures, then choose packed ORM or scalar fallbacks.

  2. 2

    Place and align the receiver

    Add FootstepSurfaceImpressionReceiverComponent at the field center, align its local XY plane to the surface and local +Z outward, set Field Extent Cm as local half-size, and choose Plane Acceptance Distance and Minimum Surface Normal Dot.

  3. 3

    Bind the rendered primitive

    Preserve FSP_SurfaceImpressionTexture and both world-to-UV row names, then call Bind Primitive Component for the exact rendered surface. Use tagged automatic owner binding only on a dedicated surface actor.

  4. 4

    Enable the matching payload

    Store the footprint in the alpha of a project-owned linear mask, match Receiver Channel exactly, set physical Stamp Size Cm, intensity, heading, and finite lifetime or persistent zero-life policy.

  5. 5

    Tune bounded storage

    Choose field extent, linear RGBA8 resolution, Max Active Stamps, oldest-first eviction, and the finite-stamp redraw interval for the target platform.

  6. 6

    Validate material and collision separately

    Verify red-channel coverage, mapping, tint, normals, roughness, and visual WPO on the target RHI. Version 2.11.1 corrected field-normal precision in the bundled function; local pre-2.11.1 copies must be refreshed. Confirm collision, navigation, and ground traces remain unchanged.

ContractBehavior
Persistent stampsRetained without permanent component Tick
Finite stampsRedraw the bounded list only at the authored interval until expiration
Bundled receiver fieldLazily created, receiver-owned, bounded Canvas Render Target in linear RGBA8: approximately 1 MiB at 512², 4 MiB at 1024², or 16 MiB at 2048² before platform alignment
Custom receiver interfaceC++/Blueprint extension seam for project-owned RVT, atlas, or GPU-field backends; those backends remain project-owned extensions
Physical boundaryVisual material response only; no deep-snow simulation or collision deformation
Custom material field UV and coveragetext
U = Dot(AbsoluteWorldPosition, WorldToUV0.rgb) + WorldToUV0.a
V = Dot(AbsoluteWorldPosition, WorldToUV1.rgb) + WorldToUV1.a
UV = Append(U, V)
Coverage = Saturate(TextureSample(FSP_SurfaceImpressionTexture, UV).r)
  • Use MF_FSP_SurfaceImpressionCoverage for Coverage, Field UV, and Field Normal WS whenever possible; it includes the 2.11.1 reduced-precision correction before Cross and Normalize.
  • All registered receivers whose channel, bounds, plane distance, and normal policy accept a request intentionally receive it. Use distinct channels and coherent non-overlapping ownership to prevent accidental duplication.
  • Receiver registration is weak and performs no world scan. A custom receiver must unregister at teardown, own its render resources, and bound every retained container.
  • Repeated primitive binding is idempotent. Unbinding restores only material slots that still contain the receiver-owned dynamic instance.

11

Override decal projection per destination receiver

Exact Physical Material and Physical Surface routes adapt projection depth, outward clearance, correction envelope, or unresolved policy without taking ownership of source presentation.

  1. 1

    Keep the table empty when no exception exists

    An empty Decal Receiver Projection Overrides table uses the source decal values plus the current project-wide correction envelope and unresolved-placement policy. It does not restore pre-2.11 placement semantics.

  2. 2

    Add the most specific route

    Use an Exact Physical Material override for one receiver identity or a Physical Surface override for a broader receiver family.

  3. 3

    Override only the required field

    Enable Normal Offset first for clearance. Enable Projection Depth only for projector depth; Maximum Placement Correction only for a measured collision-to-render gap; and Preserve Gameplay Hit only when gameplay collision is an accepted placement authority.

  4. 4

    Use a provider for divergent render surfaces

    Implement FootstepDecalProjectionAnchorProvider on the hit component or its Actor for WPO, procedural displacement, missing complex geometry, or another receiver whose visible placement cannot be certified from collision.

  5. 5

    Enable area sampling selectively

    Footprint Area runs an eight-probe fallback only after the central ray fails and accepts only coherent exact-receiver support inside the final projector. Keep Central Ray for sparse or arbitrary decals.

  6. 6

    Compare ordinary and exceptional geometry

    Validate the same project-owned decal on a flat floor and on the stair, modular floor, or finite receiver that requires the override.

12

Keep authored contacts during Level Sequencer playback

Native-length animation sections and event-driven Root Component motion preserve Step admission and AnimNotify continuity without adding component Tick.

  1. 1

    Bind the complete runtime subject

    Bind the Actor that owns FootstepComponent and its active Skeletal Mesh component, then keep the Actor binding alive for the complete shot.

  2. 2

    Use native-length sections

    Duplicate animation sections end to end at the source clip duration instead of stretching one short section across the shot.

  3. 3

    Match root-motion cuts

    At every cut after the first, use Match With Previous on the root bone and set Swap Root Bone to Actor when Sequencer must apply extracted root motion to the bound Actor.

  4. 4

    Retain authored events

    Keep Skip Anim Notifiers disabled on every section and verify the Footstep AnimNotifies at the intended contacts.

  5. 5

    Validate authoring and runtime

    Review sound, Niagara, and decals in editor authoring playback, then repeat in PIE or a packaged build where normal listener-distance culling still applies.

  • Step policy uses the greatest current horizontal motion from the Actor, Root Component, or recent non-teleport Root Component transform updates.
  • The observation is event-driven and stores current-frame motion only; FootstepComponent remains non-ticking.
  • Stretching a short section loops its source animation and can suppress a contact at the exact loop boundary.
  • MovementPolicyRejected means every current horizontal motion source is below Min Speed For Step.

13

Integrate local presentation in multiplayer

The host replicates durable gameplay identity while each presentation machine resolves and emits its own bounded cosmetic result.

  1. 1

    Replicate project identity

    Keep authority for actors, movement, animation, possession, relevancy, dormancy, AI, and equipped-footwear identity in project networking code.

  2. 2

    Resolve a loaded local profile

    Map the replicated compact equipment identity to an already loaded FootstepFootwearProfile on each client and on the listen host.

  3. 3

    Evaluate remote contacts locally

    Ensure remote animation notifies or the project contact source are evaluated on presentation machines that should hear or see the result.

  4. 4

    Submit once

    Choose one cosmetic route per contact. Do not combine a local AnimNotify submission with a multicast of the same footstep.

  5. 5

    Keep gameplay effects authoritative

    Emit AI hearing, damage, stealth, or other gameplay signals from separate server-owned project code.

  • Do not replicate the transient FootstepFootwearProfile object, selected texture variant, per-contact cosmetic payload, or Surface Transfer state.
  • Local transfer state follows the local actor lifecycle and must be cleared when a persistent or pooled pawn is reused across a hard project boundary.
  • The controlled 2.11.2 matrix exercises dedicated-server, autonomous-proxy, simulated-proxy, respawn, possession-change, and listen-server presentation boundaries on each supported engine lane.
  • This validates the local-cosmetic ownership contract; it does not establish packet-loss, latency, bandwidth, travel, or large-session soak performance.