Skip to content

UOverAnimMeshDeformer

Baseline: OverAnim 0.1.0 Beta · Unreal Engine 5.8
Header: OverAnimation/Asset/OverAnimMeshDeformer.h

UOverAnimMeshDeformer is a per-Skeleton OverAnim authoring asset. It stores Regions, Module Stacks, Response Rules, and motion, simulation, and protocol settings, and is installed at runtime by UOverAnimComponent.

Properties

Details UI Name C++ Property Default · Range Effect · Relationship
Target Skeleton TargetSkeleton None Must match the target Skeletal Mesh's Skeleton. A mismatch fails contract validation and installation.
Applied Animations AppliedAnimations Empty array If empty, all Animations are allowed. Otherwise, a full-length Activation Window is injected only into the specified Animations.
Scope Activation Channel ScopeActivationChannel None Optional channel delivered by the Window created by AppliedAnimations. It connects only to a Rule's Notify Activation Channel filter.
Master Effect Intensity MasterEffectIntensity 1.0, 0+ · UI maximum 3 Multiplied into the authored strength of every Module in the asset. Per-module safety limits remain in effect.
C++ legacy tuning source TuningSource Detailed Serialized field retained for compatibility with existing assets. Current built-in module runtime does not read it, and it does not control the Simple / Details layout or whether Simple knobs are applied. It is not exposed directly in Details/Blueprint.
Simulation Settings SimulationSettings Structure defaults Controls fixed updates, substeps, and discontinuity/history resets. See Motion · Simulation.
Motion Signal Settings MotionSignalSettings Structure defaults Analysis and Signal settings for Automatic Six-Stage Motion. See Motion · Simulation.
Proportion Calibration ProportionCalibration Automatic calibration enabled Calibrates linear distance, speed, and acceleration thresholds for character/Region size. See Region · Calibration.
Signal Protocol Settings SignalProtocolSettings Structure defaults Converts Protocol Channels into actual FName Signals. See Signal · Impact Types.
Impact Signal Settings ImpactSignalSettings Structure defaults Magnitude, deduplication, and contact-processing rules for Hit, Collision, and Damage requests.
Overlapping Region Policy RegionCompositionPolicy AdditiveClamped Composes deformations from Regions with overlapping vertex masks using Additive Delta or Strongest Delta.
Request Budget RequestBudget 256 / 64 / 32 / 1/60 s / 2 s Per-frame limits for Signals/Requests and active response slots. Excess requests may not be processed.
Bone Group Descs BoneGroupDescs Empty array Authoring data documented in Bone Group · Region.
Response Sets ResponseSets Empty array Named sets selected by Rules. See Response Types.
Response Rules ResponseRules Empty array Routes Signals to specific Region/Module Responses.

Blueprint / Call In Editor Authoring

Blueprint Display Name C++ Declaration Inputs · Return Preconditions · Failure/State Change
Add or Update Automatic Six-Stage Response int32 AddOrUpdateAutomaticMotionPhaseRule(FName BoneGroupName, FName ModuleName) Accepts a Region name and Module name and returns a Rule index. The Group, Module, and Region Motion Phase Signal name must be valid, and the Module must support automatic responses. Returns INDEX_NONE on failure. On success, enables motion/Region/phase Signals and sets activation scope to AuthoredActionWindow. An existing Rule preserves authored stage settings; a new Rule creates the module's default response parameters and an automatic Response Set.

Public C++ Functions

These are not Blueprint nodes. They form the supported boundary for asset-authoring tools and C++ integrations.

Validation · Animation Scope · Skeleton

C++ Declaration Return · State Change Preconditions · Rejection Conditions
bool HasAppliedAnimations() const Returns true when AppliedAnimations contains at least one entry and false when empty. Queries whether the asset specifies an Animation Scope. Does not check whether array entries can be loaded or whether target Animation Skeletons match. Scope-notify injection synchronously loads each entry and skips entries that cannot be loaded.
bool SetTargetSkeleton(USkeleton* InTargetSkeleton) Sets the Skeleton and broadcasts the change delegate. InTargetSkeleton must be valid; otherwise returns false.
bool ValidateContract(const USkeletalMesh* SkeletalMesh, TArray<FText>& OutErrors, TArray<FText>& OutWarnings) const Populates OutErrors and OutWarnings; returns true when no errors exist. Compares the Mesh/Skeleton, unique IDs and names, mask ranges, Rule routes, module support, and budget. A false return means the contract is not installable.
FOverAnimAssetChanged& GetAssetChangedDelegate() Returns the asset-change multicast delegate. Native C++ delegate accepting the three FOverAnimAssetChanged arguments below. It is not a Blueprint Event.
void NotifyAssetChanged(EOverAnimAssetChangeType ChangeType, UObject* ChangedObject) Broadcasts AssetChangedDelegate as (this, ChangeType, ChangedObject). Reports an authoring-change category; it is not an API for controlling rendering or the instance lifecycle.

Asset Change Delegate

FOverAnimAssetChanged is a native multicast delegate with three arguments: UOverAnimMeshDeformer*, EOverAnimAssetChangeType, and UObject*. It has no return value and is not exposed to Blueprint. Subscribing C++ code must remove any delegate handle it retains before its own lifetime ends.

Broadcast Argument Type Contract
Asset UOverAnimMeshDeformer* Asset reporting the change. It is the same asset that returned GetAssetChangedDelegate().
ChangeType EOverAnimAssetChangeType Change category in the table below. Subscribers can use it to choose the scope of cache or display refreshes.
ChangedObject UObject* Direct target of the change. The asset itself or its Module may be supplied; the delegate does not transfer ownership.
EOverAnimAssetChangeType Value Meaning Current Built-In Authoring Path
Parameters Members are unchanged, but values such as names, mask policy, LOD policy, view stylization, or module parameters changed. Parameter setters and ordinary module Details changes broadcast this category.
Structure Installation or composition structure changed, such as the Target Skeleton or Bone Group/Module addition, removal, order, or activation. Skeleton assignment, Group/Module structural editing, Undo, and structural module-property changes broadcast this category.
PreviewOnly Public enum value for distinguishing preview-only changes. Built-in authoring paths in OverAnim 0.1.0 Beta do not call NotifyAssetChanged() with this value. External integrations may provide it.

Bone Group Authoring

C++ Declaration Return · State Change Preconditions · Rejection Conditions
FGuid AddBoneGroup() Returns the new Group's ID. A successful ID is appended to BoneGroupDescs.
bool RemoveBoneGroup(FGuid GroupId) Removes the Group. Returns false if no matching ID exists. Rules referencing the Group must be validated separately.
FGuid DuplicateBoneGroup(FGuid GroupId) Returns the duplicate Group ID. Returns an invalid GUID if the source ID does not exist. Module/Region data is duplicated.
bool MoveBoneGroup(FGuid GroupId, int32 TargetIndex) Changes array order. Returns false if the ID or target index is invalid.
bool SetBoneGroupName(FGuid GroupId, FName NewName) Changes GroupName. Returns false for an empty name or a name duplicated by another Group. Rule BoneGroupName values are not replaced automatically.
bool SetBoneGroupAlwaysEnabled(FGuid GroupId, bool bIsAlwaysEnable) Changes Always Active. Returns false if the target ID does not exist.
bool SetBoneGroupAffectedBone(FGuid GroupId, FName BoneName, bool bAffected) Adds or removes one bone from the mask. The Group and bone must be valid.
bool SetBoneGroupAffectedBones(FGuid GroupId, TConstArrayView<FName> BoneNames, bool bAffected) Changes mask state for multiple bones. The Group ID and every bone name must be valid.
bool SetBoneGroupHierarchyExpansion(FGuid GroupId, int32 ExpandTowardsRoot, int32 ExpandTowardsLeaf) Changes root/leaf expansion. Root must be 0+; leaf must be -1 or 0+.
bool SetBoneGroupMotionSampleBone(FGuid GroupId, FName MotionSampleBone) Changes Fixed Analysis Bone. Returns false if the Group ID does not exist. None selects automatic resolution using Analysis Method.
bool SetBoneGroupAutomaticActionGroup(FGuid GroupId, FName AutomaticActionGroup) Changes Action Group. Returns false if the Group ID does not exist or the value is unchanged. None denotes an independent Region.
bool SetBoneGroupAutomaticActionMotionAnalysis(FGuid GroupId, OverAnimMotionPhase::EMotionAnalysis MotionAnalysis) Changes Analysis Method. Returns false if the Group ID does not exist or the value is unchanged. The function does not separately sanitize the enum value.
bool SetBoneGroupAutomaticPhaseAnimationRouting(FGuid GroupId, OverAnimMotionPhase::EAnimationRouting AnimationRouting) Changes the Analyze Animations route. Returns false if the Group ID does not exist or the value is unchanged. Saved Allowed Animations are retained and may be ignored with a validation warning on other routes.
bool SetBoneGroupAutomaticPhaseAnimations(FGuid GroupId, TConstArrayView<TSoftObjectPtr<UAnimSequenceBase>> Animations) Replaces Allowed Animations. Returns false if the Group ID does not exist. Stores a sanitized array with null entries, entries absent from AppliedAnimations, and duplicate paths removed; also returns false if the sanitized result equals the current value.
bool SetBoneGroupAuthoredMotionPhaseCurves(FGuid GroupId, FName CurveName, FName CurveWeightName) Sets the Stage Curve and companion weight curve together. Returns false if the Group ID does not exist or both values are unchanged. The function can store a weight-only combination, so validate afterward. A weight curve alone is a contract error.
bool SetBoneGroupMaskPolicy(FGuid GroupId, const FOverAnimRegionMaskPolicy& MaskPolicy) Changes mask falloff. Requires ZeroWeight < FullWeight.
bool SetBoneGroupLodPolicy(FGuid GroupId, EOverAnimRegionLodPolicy LodPolicy) Changes the LOD contract. Returns false if the Group ID does not exist.
bool SetBoneGroupViewStylization(FGuid GroupId, const FOverAnimRegionViewStylizationSettings& ViewStylization) Changes Region Camera Readability permission/strength. Actual correction also requires the Component's Camera Readability master switch to be enabled.

Module Stack Authoring

C++ Declaration Return · State Change Preconditions · Rejection Conditions
FGuid AddModule(FGuid GroupId, TSubclassOf<UOverAnimDeformerModule> ModuleClass) Returns the created Module ID. The Group and ModuleClass must be valid. Returns an invalid GUID on failure.
bool RemoveModule(FGuid GroupId, FGuid ModuleId) Removes the Module. Returns false if the Group/Module ID does not exist. Rules referencing the Module must be updated separately.
int32 RemoveMissingModuleEntries(FGuid GroupId) Returns the number of missing-class entries removed. Returns 0 if the Group ID does not exist.
FGuid DuplicateModule(FGuid GroupId, FGuid ModuleId) Returns the duplicate Module ID. Returns an invalid GUID if the target ID does not exist.
bool MoveModule(FGuid GroupId, FGuid ModuleId, int32 TargetIndex) Changes Module Stack order. Returns false if the target ID/index is invalid. Order within the same Phase affects the composition result.
bool SetModuleEnabled(FGuid GroupId, FGuid ModuleId, bool bEnabled) Changes the Module's enabled state. Returns false if the target ID does not exist.
bool RenameModule(FGuid GroupId, FGuid ModuleId, FName NewName) Changes Module Name. Requires a valid target and unique name. It must match the Rule's ModuleName route.
bool ResetModuleParameters(FGuid GroupId, FGuid ModuleId) Restores exposed parameters to class defaults. Returns false if the target ID does not exist. Module Id remains as the identifier.

Lookup Queries

C++ Declaration Return · State Change Preconditions · Rejection Conditions
int32 FindBoneGroupIndex(FGuid GroupId) const Returns the array index of the first entry in BoneGroupDescs whose GroupId matches. Does not modify the asset. Returns INDEX_NONE when no ID matches. An invalid GUID also returns the same value if it has no matching entry.
int32 FindModuleIndex(const FOverAnimBoneGroupDesc& BoneGroupDesc, FGuid ModuleId) const Returns the array index of the first non-null Module in BoneGroupDesc.Modules whose ModuleId matches. Does not modify the asset. BoneGroupDesc is already obtained by the caller; the function does not resolve its Group ID again. Returns INDEX_NONE if no Module matches or all entries are null.
int32 FindAutomaticMotionPhaseRuleIndex(FName BoneGroupName, FName ModuleName) const Returns the first Rule index whose Region Motion Phase Signal, source/target Region, Module, and AutomaticMotionPhase timing all match. Returns INDEX_NONE if no Rule matches and does not modify the asset.
static FName MakeAutomaticMotionPhaseResponseSetName(FName BoneGroupName) Returns an automatic Response Set name in the form Motion.ActionPhrase.<sanitized group>. Only creates the name; it does not add a Response Set.

Static Resolution Helpers

C++ Declaration Return · Output Preconditions
static bool BuildExplicitBoneChain(const USkeleton* Skeleton, FName StartBoneName, FName EndBoneName, TArray<FName>& OutBoneChain) Writes a parent-child connected chain to OutBoneChain. Returns true only if the Skeleton and both bones are valid and Start lies on End's ancestor path.
static void BuildResolvedAffectedBones(const FReferenceSkeleton& RefSkeleton, const FOverAnimBoneGroupDesc& BoneGroupDesc, TArray<FName>& OutBoneNames) Outputs the bone list after applying the explicit mask and hierarchy expansion. Only bones present in the input skeleton are meaningful in the returned list.
static OverAnimMotionPhase::FActionChain ResolveAutomaticActionMotionChain(const FReferenceSkeleton& RefSkeleton, const FOverAnimBoneGroupDesc& BoneGroupDesc) Returns bone names and counts of valid and ignored explicit bones for PrimaryGuideChain. IsUsable() is true when at least two explicit connected Affected Bones exist. Helper branches and disconnected explicit bones may be excluded from the analysis chain.
static FName ResolveMotionSampleBone(const FReferenceSkeleton& RefSkeleton, const FOverAnimBoneGroupDesc& BoneGroupDesc) Returns Fixed Analysis Bone or, as a legacy fallback, the deepest resolved Region bone. This does not mean all Automatic Action analysis uses only this one bone. If Fixed bone is empty, Analysis Method and ResolveAutomaticActionMotionChain() may take precedence. Returns None if no bone can be resolved.

FOverAnimAutomaticActionMotionChain exposes BoneNames, ValidExplicitBoneCount, and IgnoredExplicitBoneCount. IsUsable() is true when BoneNames.Num() >= 2.

UOverAnimDeformerInstanceSettings

UOverAnimDeformerInstanceSettings is a UCLASS(Transient) C++ runtime context derived from UMeshDeformerInstanceSettings. External module classes that override UOverAnimDeformerModule::CreateInstance() receive this pointer and can read resolved measurements. This class is not BlueprintType and is not user-authored settings stored in Details or an asset.

C++ Field Value at Creation Lifetime · Exposure Contract
FOverAnimResolvedCharacterProportions CharacterProportions Character proportions resolved by CreateSettingsInstance(UMeshComponent*) from the Target Mesh and the asset's ProportionCalibration. Per-installation transient snapshot. Not exposed to Blueprint/Details and not saved to the asset.
FOverAnimProportionCalibrationSettings ProportionCalibration Copy of the asset's ProportionCalibration. Calibration rules used to create the snapshot above. Users author them under Proportion Calibration; this runtime context is not the settings storage location.

UOverAnimMeshDeformer::CreateSettingsInstance() creates this object and retains it for the Mesh Deformer lifecycle. Its public fields are read context for custom module extensions, but persistence or reinstallation behavior from direct construction or modification is not guaranteed as public API.

Pre-installation contract

UOverAnimComponent::ApplyOverAnim() becomes ready only when contracts for the Target Mesh, TargetSkeleton, Regions, Rules, and Modules all match. Every Rule must simultaneously satisfy its Signal name, Bone Group name, Module name, activation conditions, and Module support range.