Skip to content

Impact Ripple

Purpose

UOverAnimImpactRippleModule is an Offset / Smear module that creates compression and shear waves which begin at a gameplay contact point and normal and travel across the surface.

  • Header: OverAnimation/Asset/OverAnimModule.h
  • Class: UOverAnimImpactRippleModule
  • Execution Phase: Offset / Smear (EOverAnimModulePhase::Smear)
  • Default Input Composition: Additive Offset
  • Default Phase order: 10 (execution order within the same Phase; hidden in Details)

Shared by Simple and Details

Module Id, Module Name, enabled state, and Order Within Module Phase are managed by the Module Stack and are therefore omitted from this Details reference.

UI name Owning C++ property Default / range Effect
Master Effect Intensity UOverAnimMeshDeformer::MasterEffectIntensity 1.0 / minimum 0.0, UI maximum 3.0 Asset-wide value also shown in the selected module's Details. It scales authored strength for all modules in the asset, while each module's safety limits remain independent.
UI name C++ property Default / range Effect
Input Composition CompositionMode Additive Offset Adds the wave offset to the composed result. The constructor sets this value to AdditiveOffset.
Impact SimpleImpact 1.0 / 0–5 Multiplies authored Maximum Compression and Maximum Shear by the same ratio, preserving the ratio between the two waves.
Reach SimpleReach 1.0 / 0–5 Multiplies authored Effect Radius by a ratio. Because the other lengths and displacements are ratios of the resolved radius, the world size of the entire wave changes with it.
Snap SimpleSnap 1.0 / 0–5 Applies an inverse ratio to authored Compression Travel Time and a direct ratio to Damping Rate. 2.0 halves travel time and doubles damping.
Focus SimpleFocus 1.0 / 0–5 Applies an inverse ratio to authored Wave Width and a direct ratio to Oscillation Cycles. 2.0 halves the width and doubles the cycle count.

Runtime interpretation of Simple knobs

Simple values do not modify Detailed fields. Runtime resolves the following values from authored Detailed values regardless of the current layout.

Simple knob Resolved properties Processing
SimpleImpact MaximumCompressionDisplacementRatio, MaximumShearDisplacementRatio Applies the same ratio to both authored values and limits each to 0–0.25.
SimpleReach EffectRadiusRatio Applies a ratio to the authored radius and limits it to 0.1–3.0.
SimpleSnap CompressionTravelTime, DampingRate Applies an inverse ratio to travel time and a direct ratio to damping.
SimpleFocus WaveWidthRatio, OscillationCycles Applies an inverse ratio to wave width and a direct ratio to the cycle count.

Details: Ripple

UI name C++ property Default / range Effect and relationship
Effect Radius EffectRadiusRatio 1.25 / 0.1–3.0 Maximum surface travel-radius multiplier applied to the Region's measured bounds radius. The Response's Ripple Radius multiplies this result again.
Compression Travel Time CompressionTravelTime 0.18 s / 0.03–1.0 s Time for the faster compression wave to cross the Effect Radius. Compression Speed is calculated as EffectRadius / CompressionTravelTime.
Maximum Compression MaximumCompressionDisplacementRatio 0.06 / 0.0–0.25 Maximum displacement ratio in the contact-normal direction relative to resolved Effect Radius. Multiplied by the Response's Wave Strength and the Asset's Master Effect Intensity.
Maximum Shear MaximumShearDisplacementRatio 0.035 / 0.0–0.25 Maximum tangential-displacement ratio relative to resolved Effect Radius. Multiplied by Wave Strength and Master Effect Intensity.
Shear Speed Ratio ShearSpeedRatio 0.62 / 0.1–0.95 Shear-wave speed / compression-wave speed. A value lower than 1 visually separates the second, trailing wave.
Wave Width WaveWidthRatio 0.16 / 0.03–0.5 Authored Gaussian wave-band width relative to Effect Radius. The inverse ratio from SimpleFocus is always applied to the final value.
Surface Depth NormalDepthRatio 0.75 / 0.05–2.0 Normal-depth slab depth relative to Effect Radius. It limits equal-strength motion from reaching the opposite surface of a thin limb.
Damping Rate DampingRate 5.0 / 0.0–30.0 Exponential time-decay rate. Higher values make the ripple disappear sooner.
Oscillation Cycles OscillationCycles 0.75 / 0.0–3.0 Number of sign-changing lobes within one wave width. 0 produces a single smooth traveling band.

Shear Speed Ratio, Wave Width, Surface Depth, Damping Rate, and Oscillation Cycles are Advanced Display properties. Advanced Display only hides them; it does not change runtime behavior or validity conditions.

Details: Safety

UI name C++ property Default / range Effect
Maximum Simultaneous Ripples MaximumActiveRipples 4 / 1–4 Fixed runtime budget for independent ripples retained simultaneously in the Region. At the limit, an incoming ripple replaces the currently weakest ripple only if it has higher priority/magnitude/sequence precedence. Otherwise, the request is rejected.

4 is the global maximum (GOverAnimMaximumImpactRipples), so runtime limits even a larger serialized value to 4.

Execution · Signal · Response scope

Item Support
Signal Uses gameplay contact Signals only.
Response Mode Supports Pulse only. Sustained is not supported.
Response Parameters FOverAnimImpactRippleResponseParameters
Automatic Six-Stage Motion Not supported. This module requires a gameplay contact point and normal.
Required Signal data bHasContactPoint, bHasContactNormal, a valid contact point, and a nonzero normal. Contact Bone Name is optional, but pins the wave to the bone when valid.

Submit OverAnim Impact Signal, Hit Result, Collision, and Trace/Point/Radial Damage families are Signal paths that include contact data. The module rejects Response Modes other than Pulse.

Response Rule parameters and Signal conditions

The Module Parameters of a Response Rule use FOverAnimImpactRippleResponseParameters.

UI name C++ property Default / range Effect
Wave Strength WaveStrengthAtMax 1.0 / 0.0–2.0 Multiplies both compression and shear displacement at maximum response.
Ripple Radius RadiusScale 1.0 / 0.25–2.0 Per-response multiplier applied to the module's Region-relative travel radius.

All of the following must be satisfied for a request to be accepted.

  • Response Mode must be Pulse.
  • WaveStrengthAtMax must be finite and within 0.0–2.0, and RadiusScale must be finite and within 0.25–2.0.
  • ResolvedMagnitude and BlendWeight must be finite and both greater than 0.
  • The Signal must contain a contact point and a nonzero contact normal, neither containing NaN.

If Contact Bone Name is empty, the contact frame is fixed in component space. If it names a valid bone, the contact point/normal are stored in that bone's local space and move with subsequent pose changes. The request is rejected if the named bone does not exist on the mesh.

Limitations and performance

  • Automatic Six-Stage Motion is unavailable. Automatic stage generation is explicitly rejected for this module.
  • It is Pulse-only. Sustained Response Rules are incompatible.
  • Maximum ripple lifetime is calculated as CompressionTravelTime × (1 + 3 × WaveWidthRatio) / ShearSpeedRatio. An active ripple is removed after this time or when its response weight becomes inactive.
  • If the contact point is farther from the Region center than RegionBoundsRadius + EffectRadius, that ripple produces no output during the build stage.
  • Active ripple count is limited by Maximum Simultaneous Ripples, so only that many are passed to the runtime proxy even during many simultaneous contacts.