Core concepts
Understand the runtime pipeline, ownership boundaries, result contract, network model, and bounded cost model.
- Product
- Footstep Studio
- Version
- Documentation 2.11.2
- Content
- 6 chapters
01
Runtime pipeline
Every contact crosses ordered gates; the first failure stops work and returns a stable reason.
AnimNotify / project event / existing hit
-> component request
-> enablement / world / network / profile / source
-> movement / listener / rate admission
-> supplied hit OR one line trace
-> exact Physical Material / Surface Type / default / event
-> probability / footwear resolution
-> immediate channels + transfer acquisition or consumption
-> surface stage + footwear imprint stage
-> local and world budgets
-> local spawn + delegatesConfiguration, movement, listener-distance, and rate gates run before a plugin ground trace. Step movement uses the greatest current horizontal motion from the Actor, Root Component, or recent non-teleport Root Component transform updates. A valid caller-supplied blocking hit bypasses the trace while still passing payload, probability, listener, rate, and budget policy.
02
Surface and event resolution
Specific authored identity wins before broader fallback, without first-entry ambiguity.
- 1
Exact Physical Material
Resolve an override by the exact UPhysicalMaterial identity returned by the hit.
- 2
Physical Surface
If no exact override matches, resolve the EPhysicalSurface definition.
- 3
Global default
Fall back to the Surface Data Default Definition.
- 4
Event override
Within the selected definition, prefer the exact built-in or named Custom event.
- 5
Default payload
Use the selected definition's Default Payload when no event override matches.
- 6
NoPayload
Reject when neither a usable immediate channel nor an eligible Surface Transfer route exists.
Transient lookup caches avoid scanning all authored definitions on every accepted event. Data Validation rejects duplicate surface, exact-material, and event keys.
03
Request and result contract
C++ and Blueprint observe the same accepted context and first failure reason.
| Result | Contract |
|---|---|
| Return Value | True after a valid hit and accepted immediate or transfer route; false at the first failed gate |
| FootstepResolvedContext | Owner, source, event, contact, socket, strength, horizontal speed, hit, Physical Material, Surface Type, footwear profile and source, resolved receiver projection fields, and frozen world-space contact heading |
| FootstepRejectReason | None on success or one stable enum value identifying the first failed gate |
| On Footstep Spawned | Fires only when at least one configured channel emitted |
Surface Transfer acquisition can resolve successfully without emitting a transferred decal on that source contact. This is why accepted and spawned are intentionally separate observations.
04
Authoring ownership
Ground, footwear, project integration, and runtime each own a deliberately narrow responsibility.
| Owner | Responsibilities |
|---|---|
| Footstep Profile | Trace, admission, sockets, local channel budgets, retained-state capacities, diagnostics, and default footwear fallback |
| Surface Data | Exact materials, surfaces, event payloads, immediate effects, transfer source, base decal material, projection placement, receiver filter, lifetime, intensity, and transfer policy |
| Footwear Profile | Generic or contact-specific staged imprint textures, per-variant U mirror, optional surface-audio modulation, and optional footwear overlay |
| Consuming project | Contact timing, collision taxonomy, equipment mapping, assets, licensing, authoritative gameplay events, and lifecycle boundaries |
| Runtime component | Ordered admission, resolution, bounded state, local spawn, counters, and delegates |
- The ground remains authoritative for residue type and receiving presentation.
- The footwear profile changes contact identity without selecting the ground surface.
- Gameplay frameworks, inventory, host-project systems, and audio middleware remain optional project concerns, not plugin dependencies.
05
Local cosmetic network model
Replicated actors are supported through a client-local cosmetic model with no per-contact plugin RPC.
- Dedicated servers reject before trace or spawn and retain no Surface Transfer state.
- The host project replicates actors, movement, animation state, possession, relevancy, and compact equipment identity.
- Each client or listen host maps replicated equipment state to a loaded footwear profile and renders locally evaluated contacts.
- Variant choices and transfer state are not replicated.
- One contact must use one cosmetic submission route; do not combine a local AnimNotify with a multicast that submits the same request.
- The 2.11.2 release matrix validates dedicated-server suppression plus autonomous, simulated, respawn, possession-change, and listen-host presentation on UE 5.5.4, 5.6.0, 5.7.4, and 5.8.0.
06
Bounded runtime cost model
The implementation removes permanent polling and bounds retained state, selection history, and effect admissions.
- No permanent component Tick, transfer timer, or ticking world budget subsystem.
- Listener-distance and rate admission happen before a plugin ground trace.
- Audio, Niagara, and footwear-audio anti-repeat histories use profile-bounded least-recently-used storage.
- Per-contact transfer states, contact routes, stages, and variants are validation-bounded.
- Niagara one-shots default to AutoRelease pooling.
- Immediate and transferred imprints share one non-allocating staged texture resolver.
- An immediate footwear binding reuses the existing decal spawn and budget path without a second decal or transfer-state mutation.
- Decal dynamic material instances are created only when an enabled runtime contract must write intensity, footwear, receiver-normal filtering, or source-exclusion parameters.
| World setting | Default | Meaning |
|---|---|---|
| Max World Audio Spawns Per Second | 256 | Aggregate one-second audio ceiling; 0 is unlimited |
| Max World Niagara Spawns Per Second | 128 | Aggregate one-second Niagara ceiling; 0 is unlimited |
| Max World Decal Spawns Per Second | 64 | Aggregate one-second decal ceiling; 0 is unlimited |
| Max World Surface Impression Submissions Per Second | 128 | Aggregate one-second submission ceiling; 0 is unlimited |
| Exempt Locally Controlled Pawns | Enabled | Bypasses only the world layer; profile budgets still apply |