Bone Scaler
UOverAnimBoneScalerModule is an advanced Dynamics Phase module that changes skeletal transform scale using bone velocity. It can propagate the effect to descendants of the target bone and to socket and attachment positions. Its settings are declared in OverAnimation/Asset/OverAnimModule.h; this page covers OverAnim 0.1.0 Beta / UE 5.8.
Purpose
Converts the selected bones' velocity into bone-local scale delta and applies the result to target bone transforms. This module changes skeletal proportions rather than surface displacement. When Overwrite Bone Transform is enabled, the changed parent transform propagates to descendant control points.
Details layout
Simple shows SimpleStrength, SimpleRange, and the asset-wide Master Effect Intensity. The remaining tables below follow the actual category order in Details. Simple knobs do not change Detailed values.
Shared properties and asset intensity
| UI name |
C++ property |
Default / unit / range |
Effect |
Visibility |
Interaction |
| Input Composition |
CompositionMode |
Additive Offset; Additive Offset / Re-Skinning |
Additive Offset adds this module's displacement to the current composed result; Re-Skinning evaluates from the current control-point transform. |
Details layout |
Shared by all Modules. The Module Stack manages execution order within the same Phase. |
| Master Effect Intensity |
UOverAnimMeshDeformer::MasterEffectIntensity |
1.0; minimum 0, UI maximum 3 |
Asset-wide intensity multiplied into velocity-to-scale gain. |
Both Simple and Details, OverAnim|Intensity row |
Not multiplied directly into response request weight; it is multiplied into ScalePerVelocity every tick. |
Simple
| UI name |
C++ property |
Default / unit / range |
Effect |
Visibility |
Interaction |
| Strength |
SimpleStrength |
1.0; 0–5 |
Applies a ratio to authored Scale Per Velocity. 2.0 doubles velocity gain; 0 removes growth. |
Shown in Simple, always applied at runtime |
Does not change Axis Mask. |
| Range |
SimpleRange |
1.0; 0–5 |
Applies a ratio to authored Max Scale. |
Shown in Simple, always applied at runtime |
The knob position at which the cap becomes 1.0 or lower depends on authored Max Scale. |
Detailed defaults resolved at runtime
| Simple knob |
Target |
Processing |
SimpleStrength |
ScalePerVelocity |
Multiplies the authored value by the knob ratio and limits it to a minimum of 0. |
SimpleRange |
MaxScale |
Multiplies the authored cap by the knob ratio and limits it to a minimum of 0. The point where final scale growth stops depends on the authored cap. |
OverAnim | Activation
| UI name |
C++ property |
Default / unit / range |
Effect |
Visibility |
Interaction |
| Driver Mode |
DriverMode |
Automatic + Signal Boost |
Automatic Motion uses only velocity-derived scale. In Signal Gated Motion, the output multiplier is 0 without response weight. Automatic + Signal Boost adds response weight to a base multiplier of 1. |
Always |
Automatic Motion rejects Response Rule requests. The other modes support Pulse and Sustained. |
OverAnim
| UI name |
C++ property |
Default / unit / range |
Effect |
Visibility |
Interaction |
| Target Bones |
BoneMask |
Empty array |
Source-bone list to which skeletal scale is applied. |
Details layout |
With no valid bone, neither tick nor render proxy produces output. An Automatic Six-Stage Motion response requires at least one bone other than None. |
| Overwrite Bone Transform |
bOverwriteBoneTransform |
true |
Recalculates descendant control points of scaled target bones from the new parent transform. |
Always |
When enabled, child bones and socket/attachment positions move together. When disabled, only bones directly specified in the mask change. |
OverAnim | Velocity
| UI name |
C++ property |
Default / unit / range |
Effect |
Visibility |
Interaction |
| Velocity Space |
VelocitySpace |
Component Space |
Measurement frame for source-bone velocity driving scale. Component Space uses control-point linear velocity; World Space recalculates velocity from current and previous component world transforms. |
Always |
Selecting World Space makes Use Component Scale editable. |
| Use Component Scale |
bUseComponentScale |
true |
Whether component scale is respected when converting world velocity back to component space. |
Velocity Space = World Space; read-only otherwise |
Uses InverseTransformVector when true, InverseTransformVectorNoScale when false. |
| Apply Bone Scale to Velocity |
bUseBoneScale |
false |
Whether current bone scale is respected when converting component-space velocity to bone space. |
Always |
Uses InverseTransformVector when true, InverseTransformVectorNoScale when false. Absolute velocity then becomes the scale-delta input. |
OverAnim | Scale
| UI name |
C++ property |
Default / unit / range |
Effect |
Visibility |
Interaction |
| Axis Mask |
AxisMask |
(1, 1, 1); each component minimum 0 |
Per-local-X/Y/Z-axis weights for velocity-derived scale. |
Always |
Runtime sanitizes negative components to 0. Even with Uniform Scale enabled, axes with mask 0 do not change. |
| Scale Per Velocity |
ScalePerVelocity |
0.01; minimum 0 |
Gain converting bone-space absolute velocity to skeletal scale delta. |
Always |
Actual delta is abs(VelocityBS) × AxisMask × ScalePerVelocity × SimpleStrength × Master Effect Intensity × MotionScaleMultiplier. |
| Uniform Scale |
bUnifyAxis |
false |
Makes scale deltas on enabled mask axes equal to the largest of those deltas. |
Always |
Axis Mask first creates per-axis values, then this option unifies them. No delta is added to axes whose mask is 0. |
| Max Scale |
MaxScale |
3.0; minimum 0 |
Upper cap for each component of final current bone scale. |
Always |
Runtime limits each axis to min(current scale + delta, Max Scale × SimpleRange). The final cap has a minimum of 0. |
Execution · Response compatibility
| Item |
Behavior |
| Module Phase |
Dynamics |
| Signal support |
Supported only when Driver Mode is not Automatic Motion. |
| Response Mode |
Supports Pulse and Sustained. |
| Automatic Six-Stage Motion |
Uses a Sustained response. The default profile disables Anticipation, Recoil, and Settle, uses Overshoot strength 0.25, and retains the default Action value 1.0. Timing role is Shape. |
| Response parameter type |
FOverAnimBoneScalerResponseParameters |
Automatic Motion uses velocity-derived scale without a response. Signal Gated Motion uses active response weight as the velocity-derived scale multiplier, while Automatic + Signal Boost adds that multiplier to the existing 1.
Public Enums
EOverAnimProceduralMotionDriverMode
The BlueprintType enum used by DriverMode. It determines how velocity-derived scale and Signal Response weight are combined.
| C++ value |
Editor UI |
Meaning |
MotionOnly |
Automatic Motion |
Uses only velocity-derived scale. SupportsSignals() is false, so Response requests are not accepted. |
SignalGatedMotion |
Signal Gated Motion |
Multiplies velocity-derived scale by active response weight. Without a response, the output multiplier is 0. |
MotionWithSignalBoost |
Automatic + Signal Boost |
Retains velocity-derived scale and adds active response weight to the base multiplier 1. |
A reused BlueprintType enum used by VelocitySpace. Although its name is also used for transform buffers, Bone Scaler uses it to select the source-bone velocity measurement frame.
| C++ value |
Editor UI |
Meaning |
Local |
Component Space |
Uses the current control point's component-space linear velocity. |
World |
World Space |
Calculates world velocity from current and previous component world transforms, then converts it back to component space. bUseComponentScale determines whether that conversion respects scale. |
Module Response at 100% in a Response Rule uses FOverAnimBoneScalerResponseParameters.
| UI name |
C++ property |
Default / unit / range |
Effect |
Application condition |
Interaction |
| Motion Scale Strength at Full Response |
MotionScaleStrengthAtMax |
1.0; 0–1 |
Weight applied to velocity-derived skeletal scaling at maximum response. |
Driver Mode is not Automatic Motion |
Resolved magnitude × this value is clamped to 0–1 and stored as response weight. It does not replace Axis Mask or Scale Per Velocity. |
A Response request must satisfy all of the following.
Driver Mode is not Automatic Motion, and the Rule contains FOverAnimBoneScalerResponseParameters.
Motion Scale Strength at Full Response and ResolvedMagnitude are finite, and the parameter is within 0–1.
- Response-envelope Attack, Hold, and Release times are all finite and at least
0. Response weight state manages Pulse or Sustained weight.
- Direction, contact point, contact normal, and mesh component are not request-acceptance conditions.
Creating an Automatic Six-Stage Motion response requires the Module to be enabled and named, Driver Mode to permit Signals, and Target Bones to contain at least one bone other than None.
Safety limits
- Because this module directly changes skeletal transforms, enabling
Overwrite Bone Transform changes socket and attachment positions as well as descendant transforms.
Max Scale is an upper cap. If the product of the authored value and SimpleRange is 1.0 or lower, it can prevent growth or create a cap below current scale. Runtime only limits the final cap to a minimum of 0.
Axis Mask and Scale Per Velocity do not produce negative scale delta. Runtime uses absolute velocity and sanitizes Axis Mask and gain to a minimum of 0.
- Each fixed tick finds masked bones and converts velocity to scale delta. When
Overwrite Bone Transform is enabled, it then reconstructs descendant control-point transforms.
- Tick exits immediately when
Target Bones is empty or fixed delta is 0 or lower.
- Runtime state stores
BoneMask and the previous component world transform. It does not use a transform-history buffer.
Validation and inactive conditions
- Empty
Target Bones, a mask containing only None, or a mask with no bone resolved in the current build context produces no output proxy.
- Automatic Six-Stage Motion response creation is rejected when there are no valid target bones.
- Runtime sanitizes negative
ScalePerVelocity, AxisMask, and MaxScale values to 0, but there is no separate Bone Scaler validation error that automatically corrects semantic errors in Details input.
- When response weight reaches
0 in Signal Gated Motion, the calculated velocity-derived scale is not applied.