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
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
Request override
An advanced FootstepTriggerRequest can provide the highest-priority profile for one contact.
- 2
Component override
Set Footwear Profile Override supplies the loaded profile for subsequent contacts.
- 3
Provider
FootstepFootwearProvider can derive a loaded profile from explicit provider, owner, or owner component state.
- 4
Profile default
Default Footwear Profile on the active Footstep Profile is the final non-null fallback.
- 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
Create project profiles
Author project-owned assets such as DA_FSP_Footwear_Barefoot, DA_FSP_Footwear_LeatherBoots, or creature-specific contact profiles.
- 2
Reference them from equipment data
Add a loaded FootstepFootwearProfile reference to the project-owned equipment definition.
- 3
Set on equip
From the feet-equipment change event, call Set Footwear Profile Override on the same FootstepComponent that receives contacts.
- 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
Create the Data Asset
Create Data Asset > Footstep Footwear Profile under a project-owned /Game folder.
- 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
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
Add contact routes
Add unique Left Foot, Right Foot, or exact named Custom Socket routes when generic stages are insufficient.
| Texture authoring | Left route | Right route |
|---|---|---|
| One right-foot texture | Same texture with Mirror Material U enabled | Texture without mirroring |
| Separate left/right textures | Authored left texture without mirroring | Authored right texture without mirroring |
| Generic contact set | Falls back to generic stages when no route matches | Falls 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
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
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
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
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
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.
| Mode | Behavior | Cost model |
|---|---|---|
| Modulate Surface Audio | Multiplies the resolved surface sound volume and pitch | No additional voice when modulation is sufficient |
| Play Overlay | Emits a separate weighted footwear sound layer | Can add one voice and one local/world audio admission per contact |
| Audio Route | Overrides the default footwear presentation for one exact Physical Surface and event pair | Still 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 family | Included assets | Purpose |
|---|---|---|
| Material Functions | MF_FSP_SourceExclusion; MF_FSP_DecalReceiverNormalFilter; MF_FSP_SurfaceImpressionCoverage | Source filtering, receiver-normal filtering, and bounded field coverage |
| Master templates | M_FSP_Decal_ColorRSM_Template; M_FSP_Decal_ColorNormalRSM_Template; M_FSP_SurfaceImpression_Template | Explicit non-Normal and Normal-writing Deferred Decal contracts plus the opaque impression Surface graph |
| Ready instances | MI_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_Template | Neutral project starting points without third-party artwork |
- 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
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
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
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
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 required | Master | Result |
|---|---|---|
| Color or mask only | M_FSP_Decal_ColorRSM_Template | Color plus scalar Roughness, Specular, and Metallic; never writes Normal |
| Color or mask plus ORM | M_FSP_Decal_ColorRSM_Template | Roughness from ORM green, Metallic from blue, scalar Specular; never writes Normal |
| Color or mask plus Normal | M_FSP_Decal_ColorNormalRSM_Template | Color, tangent Normal, and scalar RSM |
| Color or mask plus Normal and ORM | M_FSP_Decal_ColorNormalRSM_Template | Color, 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
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
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
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
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
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
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
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
Enable the renderer contract
Set Custom Depth-Stencil Pass to Enabled with Stencil and keep r.CustomDepth.Order at 0 or 2.
- 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.
| Setting | Documented behavior |
|---|---|
| Emission Count Range | Inclusive randomized count; the documented default 3 to 4 yields three or four eligible contacts |
| Max Carry Duration Seconds | Default 8.0; 0.0 intentionally disables time expiry |
| Shared Owner Trail | One trail for the owner, suitable for one alternating biped sequence |
| Per Contact Trail | Independent bounded state for feet, paws, hooves, hands, wheels, or custom sockets |
| Attachment Auto | Attaches to movable hit components and otherwise spawns in the world |
| Projection Placement | Surface 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.
| Stage | Start progress | 3 emissions | 4 emissions |
|---|---|---|---|
| Fresh | 0.0 | Contact 1 | Contact 1 |
| Damp | 0.25 | Contact 2 | Contacts 2 and 3 |
| Faint | 0.75 | Contact 3 | Contact 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
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
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
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
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
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
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
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
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
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
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
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.
| Contract | Behavior |
|---|---|
| Persistent stamps | Retained without permanent component Tick |
| Finite stamps | Redraw the bounded list only at the authored interval until expiration |
| Bundled receiver field | Lazily 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 interface | C++/Blueprint extension seam for project-owned RVT, atlas, or GPU-field backends; those backends remain project-owned extensions |
| Physical boundary | Visual material response only; no deep-snow simulation or collision deformation |
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
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
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
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
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
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
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
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
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
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
Retain authored events
Keep Skip Anim Notifiers disabled on every section and verify the Footstep AnimNotifies at the intended contacts.
- 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
Replicate project identity
Keep authority for actors, movement, animation, possession, relevancy, dormancy, AI, and equipped-footwear identity in project networking code.
- 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
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
Submit once
Choose one cosmetic route per contact. Do not combine a local AnimNotify submission with a multicast of the same footstep.
- 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.