Effect Modules
Baseline: OverAnim
0.1.0 Beta· Unreal Engine5.8
Header:OverAnimation/Asset/OverAnimModule.h
This index links to the public authoring contracts for the nine modules that can be added to the Module Stack. Each page follows the actual public C++ fields, EditCondition, runtime validation, and runtime interpretation of Simple knobs. Renderer proxy and shader state are excluded because they are not external authoring contracts.
Simple and Details
Simple and Details in the Asset Editor author the same runtime parameters at different levels. Transform Spring, Follow Through, Mesh Bulge, Smear, Contact Dent + Ring Bulge, Joint Volume Corrective, Impact Ripple, and Bone Scaler have Simple* knobs applied to Detailed properties.
- Simple knobs range from
0.0–5.0and default to1.0. 1.0means100%of the value authored in Detailed;2.0means200%for ordinary ratio-based properties.- Simple knobs are always applied to runtime parameters regardless of the currently visible layout. Switching
Simple / Detailschanges only which properties are displayed. - Simple knobs do not write values back to Detailed properties. Results are recalculated from Detailed authored values whenever a runtime instance is created, so they do not accumulate.
- Direct-ratio, inverse-ratio, and fixed-range additive properties use different interpretations, and final results are limited to each Detailed property's safe range. For inverse-ratio properties, knob
0uses a safe ratio of0.01. Squash & Stretchhas no Simple knobs. Its Simple view uses the Response authoring UI andMaster Effect Intensityonly.
Shared module contract
| Shared item | C++ property | Meaning |
|---|---|---|
| Input Composition | CompositionMode |
Additive Offset adds a delta to the previous composed result; Re-Skinning reevaluates from the current control-point transform. This value does not determine execution Phase or stack order. |
| Module identity | ModuleId, ModuleName, bEnabled |
Identity, name, and enabled state managed by the Module Stack. They are hidden from module parameter references in custom Details. Rule routing uses ModuleName. |
| Phase order | PhaseOrder |
Composed order within the same Phase. It is not a stage selector for Automatic Six-Stage Motion stages such as Starting Pose or Action. |
| Asset intensity | UOverAnimMeshDeformer::MasterEffectIntensity |
Asset-wide multiplier for all authored module strength. Per-module safety limits remain in effect. |
UOverAnimDeformerModule extension · query contract
UOverAnimDeformerModule is a public base class marked Abstract, BlueprintType, EditInlineNew, and DefaultToInstanced. This class does not itself create an executable effect in the Module Stack; concrete module classes override the factories and queries below to declare their execution, Signal, and Response contracts. These are C++ virtual functions, not Blueprint nodes.
Runtime factory · identity
| C++ declaration | Base implementation · return | Extension contract |
|---|---|---|
virtual UOverAnimDeformerInstance* CreateInstance(UObject* Outer, UOverAnimDeformerInstanceSettings* Settings, FGuid BoneGroupId, FName BoneGroupName) const |
The base class returns nullptr. |
An executable concrete module overrides it to create a runtime instance for the Bone Group. Outer, Settings, and Group ID/name are creation context; ownership of the returned instance is managed by the calling path. |
virtual FText GetModuleDisplayName() const |
The base class returns ModuleName as FText. |
Override when a separate rule supplies the name displayed in the Module Stack. This return value does not change the ModuleName route used by Response Rules. |
virtual EOverAnimModulePhase GetPhase() const |
The base-class default is Shape. |
Returns the module's execution Phase. PhaseOrder orders only modules whose return value is the same. |
virtual const UScriptStruct* GetResponseParameterStruct() const |
The base class returns nullptr. |
Returns the user parameter struct delivered to this module by a Response Rule. nullptr means there is no module-specific Response parameter struct contract. |
Signal · Response · Automatic Motion queries
| C++ declaration | Base implementation · return | Contract |
|---|---|---|
virtual bool SupportsSignals() const |
false |
Only modules returning true can react to Signals. The return may depend on the concrete module's current driver/configuration. |
virtual bool SupportsResponseMode(EOverAnimResponseMode ResponseMode) const |
true only for Pulse |
Queries whether the Response mode is allowed for the module. |
virtual bool SupportsResponseModeForTimingDriver(EOverAnimResponseMode ResponseMode, EOverAnimResponseTimingDriver TimingDriver) const |
The base class does not distinguish TimingDriver and returns SupportsResponseMode(ResponseMode). |
Modules that must consider the timing driver override this query. |
virtual EOverAnimResponseMode GetPreferredAutomaticMotionPhaseResponseMode() const |
Sustained if supported, otherwise Pulse |
Preferred Response mode when Automatic Six-Stage Motion creates a rule targeting the module. Actual permission is evaluated together with the next query. |
virtual FOverAnimMotionPhaseResponseSettings GetPreferredAutomaticMotionPhaseSettings() const |
Default-constructed FOverAnimMotionPhaseResponseSettings |
Default module timing/phase settings for an Automatic Motion rule. |
virtual EOverAnimResponseTimingRole GetAutomaticMotionPhaseTimingRole() const |
Shape |
Timing role for Automatic Motion. Per-module override values are used to interpret Response timing. |
virtual bool CanCreateAutomaticMotionPhaseResponse(FText& OutFailureReason) const |
Returns true with empty OutFailureReason on success. |
The base class checks bEnabled, ModuleName, SupportsSignals(), and the preferred mode's SupportsResponseModeForTimingDriver(... AutomaticMotionPhase) in order. On failure, it returns false with a reason. Concrete modules can additionally check required bone, chain, history, or contact conditions. |
Editor change classification
These three functions exist only under WITH_EDITOR. They are not runtime/Blueprint call contracts.
| C++ declaration | Base implementation · state change | Extension contract |
|---|---|---|
virtual bool IsStructuralProperty(FName PropertyName) const |
false |
A property or member-property change for which this returns true is classified as an asset change of type Structure. |
virtual void PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent) |
If the Outer is UOverAnimMeshDeformer, calls NotifyAssetChanged() with Structure for changes to bEnabled or properties identified by IsStructuralProperty(), and Parameters otherwise. |
Override IsStructuralProperty() when the module class must identify a Details change as structural. |
virtual void PostEditUndo() |
If the Outer is the asset, reports a Structure change. |
Override when module editor state requires separate synchronization after Undo, while preserving the asset-change classification contract. |
Module execution enums
EOverAnimModuleTuningSource
Current built-in module runtime does not read UOverAnimMeshDeformer::TuningSource. This enum and serialized field remain for compatibility with existing assets, but do not control Simple / Details panel selection or runtime parameter calculation.
| Value | Meaning |
|---|---|
Detailed |
Compatibility-only serialized value. It does not change built-in module runtime behavior. |
Simple |
Compatibility-only serialized value. Simple knobs are applied to Detailed authored values regardless of this value. |
EOverAnimModulePhase
EOverAnimModulePhase divides modules into execution sections. PhaseOrder applies only among modules with the same value; it is not a stage selector such as Starting Pose or Action in Automatic Six-Stage Motion.
| Value · UI display name | Meaning | Built-in modules in OverAnim 0.1.0 Beta |
|---|---|---|
Dynamics · Dynamics |
Execution section for dynamic deformation of guide bones. | Transform Spring, Follow Through, Bone Scaler |
Shape · Shape |
Execution section for changing surface/volume shape. | Mesh Bulge, Squash & Stretch, Contact Dent + Ring Bulge, Joint Volume Corrective |
Smear · Offset / Smear |
Execution section for offset or smear deformation. | Smear, Impact Ripple |
Presentation · Presentation |
Public execution section for final presentation effects. | None of the nine built-in modules in this release returns this value. Concrete extension modules may return this Phase. |
EOverAnimModuleCompositionMode
EOverAnimModuleCompositionMode supplies the values for Input Composition in Module Details and the CompositionMode property. The default is AdditiveOffset.
| Value · UI display name | Input/composition meaning | Relationship to Phase · order |
|---|---|---|
AdditiveOffset · Additive Offset |
Adds the module's displacement to the current composed result. | Does not select a Phase or change PhaseOrder. |
ReSkinning · Re-Skinning |
Reevaluates the module using the current control-point transform as input. | Does not select a Phase or change PhaseOrder. |
Module index
| Phase | Module | Signal · Response | Automatic Six-Stage Motion |
|---|---|---|---|
Dynamics |
Transform Spring | Pulse, automatic Sustained when Position Spring is enabled |
Conditional support |
| Follow Through | Pulse, Sustained with a Signal-enabled driver |
Conditional support | |
Shape |
Mesh Bulge | Pulse, Sustained with a signal-enabled driver |
Conditional support |
| Squash & Stretch | Pulse, Sustained |
Conditional support | |
| Contact Dent + Ring Bulge | Valid-contact Pulse only |
Not supported | |
| Joint Volume Corrective | Not supported | Not supported | |
Offset / Smear |
Smear | Pulse, Sustained with a signal-enabled driver |
Conditional support |
| Impact Ripple | Valid-contact Pulse only |
Not supported | |
Dynamics |
Bone Scaler | Pulse, Sustained with a signal-enabled driver |
Conditional support |
Cross-reference
- Signal route, activation policy, envelope, and module response parameter structs: Response Types
- Signal contact/motion input fields: Signal · Impact Types
- Region coverage, mask, LOD, and module stack ownership: Bone Group · Region
- Runtime Blueprint/C++ Signal nodes: UOverAnimComponent: Signals and Impact Signals
Matching a Response target
A Response Rule must pass all of Signal Name, Bone Group Name, Module Name, the Module's Signal support, Response parameter struct, and lifecycle/timing conditions. If any condition does not match, no response is created for that module even when the Signal is accepted.