콘텐츠로 이동

Motion · Simulation Types

기준: OverAnim 0.1.0 Beta · Unreal Engine 5.8
헤더: OverAnimation/Runtime/OverAnimSimulationTypes.h, OverAnimation/Runtime/OverAnimMotionSignalProfile.h, OverAnimation/Runtime/OverAnimMotionPhaseAnalyzer.h

이 페이지는 UOverAnimMeshDeformerSimulationSettingsMotionSignalSettings 구조체를 필드 단위로 설명합니다. analyzer가 만든 Signal의 출력 형식은 Signal · Impact Types, response stage 사용법은 Response Types를 참조합니다.

FOverAnimSimulationSettings

Details UI 이름 C++ 속성명 기본값 · 범위 런타임 영향
Fixed Rate FixedRateHz 60 Hz, 15..240 fixed simulation delta를 결정합니다. 유효하지 않으면 내부에서 60 Hz로 정리합니다.
Max Substeps MaxSubsteps 4, 1..16 frame마다 수행 가능한 fixed step 상한입니다.
Max Accumulated Time MaxAccumulatedTime 1/15 s, 0..0.25 catch-up에 보존할 누적 시간을 제한합니다. 실제 값은 fixed delta와 max substep이 허용하는 범위로 clamp됩니다.
Maximum Continuous Pose Gap MaximumContinuousPoseGap 0.5 s, 0.1..2 연속 pose source로 인정할 최대 sample 간격입니다. 이보다 큰 gap은 Reset On Discontinuity가 켜져 있을 때 source motion과 dynamic history reset을 요청합니다.
Reset On Discontinuity bResetOnDiscontinuity true teleport, pose cut, stale source gap에서 history와 dynamic state를 reset합니다.
Component Teleport Distance Threshold ComponentTeleportDistanceThreshold 300 cm, 10+ component transform 이동이 이 값을 넘으면 discontinuity로 봅니다.
Component Teleport Rotation Threshold ComponentTeleportRotationThreshold 150 deg, 1..180 component rotation discontinuity threshold입니다.
Pose Distance Threshold Ratio PoseDistanceThresholdRatio 0.75, 0.1..5 mesh sphere radius에 곱해 pose discontinuity distance를 구합니다.
Minimum Pose Distance Threshold MinimumPoseDistanceThreshold 50 cm, 10+ pose distance discontinuity threshold의 하한입니다.
Pose Rotation Threshold PoseRotationThreshold 150 deg, 1..180 pose rotation discontinuity threshold입니다.
Source Motion Prediction Threshold Scale SourceMotionPredictionThresholdScale 0.25, 0.05..1 derived velocity/acceleration을 억제할 더 엄격한 source motion error threshold의 비율입니다.
Dynamic History Cut Threshold Scale DynamicHistoryCutThresholdScale 0.5, 0.1..1 Spring/Follow Through history를 clear할 prediction error threshold의 비율입니다.

bResetOnDiscontinuity이 false면 gap/prediction error가 있어도 source motion suppression과 dynamic history reset이 일어나지 않습니다. pose source gap reset은 MaximumContinuousPoseGap을 사용하지만 consumer가 pose snapshot을 stale로 판단하는 기준은 계속 sanitized MaxAccumulatedTime입니다.

C++ simulation helper contracts

FOverAnimSimulationSettings의 아래 helper는 Blueprint 노드가 아닌 C++ 함수입니다. 모든 값은 설정을 수정하지 않고 sanitize된 계산 결과를 반환합니다.

C++ 선언 반환 입력 · 경계 계약
float GetFixedDeltaSeconds() const fixed step의 초 단위 delta FixedRateHz를 finite하면 15..240 Hz로 clamp하고, finite하지 않으면 60 Hz를 사용한 역수입니다.
int32 GetSanitizedMaxSubsteps() const 1..16 step 수 MaxSubsteps를 해당 범위로 clamp합니다.
float GetSanitizedMaxAccumulatedTime() const 허용 accumulated time 요청값을 한 fixed delta 이상, fixed delta × sanitized max substeps 이하로 clamp합니다. 요청값이 finite하지 않으면 상한을 사용합니다.
float GetMaximumContinuousPoseGap() const 허용 continuous pose gap finite한 요청값을 0.1..2 s로 clamp하고, non-finite이면 0.5 s를 사용합니다.
double GetEarliestAllowedFixedTime(double CurrentFrameTimeSeconds) const 가장 이른 허용 fixed time 현재 시간이 finite하면 sanitized accumulated time을 뺀 값, 아니면 0.0입니다.
float CalculateFrameInterpolationAlpha(double SampleTimeSeconds, double PreviousTimeSeconds, double CurrentTimeSeconds) const 0..1 frame interpolation alpha 세 시간이 finite하지 않거나 frame duration이 0 이하이면 1입니다. 그 외에는 sample의 frame 내 위치를 clamp해 반환합니다.
float CalculateRenderInterpolationAlpha(double CurrentFrameTimeSeconds, double LastFixedTimeSeconds) const 0..1 render interpolation alpha 시간 또는 fixed delta가 유효하지 않으면 0입니다. 그 외에는 마지막 fixed step 이후 경과 시간을 fixed delta로 나눈 뒤 clamp합니다.
bool ShouldResetForPoseSourceGap(double PreviousSampleTimeSeconds, double CurrentSampleTimeSeconds) const source gap reset 여부 bResetOnDiscontinuity가 true이고 두 시간이 finite하며 증가 방향이고 gap이 GetMaximumContinuousPoseGap()보다 클 때만 true입니다.
bool IsPoseSampleStale(double ConsumerTimeSeconds, double SampleTimeSeconds) const consumer 기준 stale 여부 두 시간이 finite하고 sample age가 sanitized accumulated time보다 클 때만 true입니다.

Discontinuity threshold · decision helpers

FOverAnimSourceMotionDiscontinuityMetrics는 아래 두 판단 함수의 C++ 입력 구조체입니다. translation 값 세 개는 cm, rotation 값 세 개는 degree이며, 같은 pose transition에서 계산된 값이어야 합니다.

필드 의미
PositionPredictionError, RotationPredictionErrorDegrees 현재 source motion이 예측값에서 벗어난 크기
CurrentTranslationDistance, PreviousTranslationDistance 현재·이전 transition의 translation 거리
CurrentRotationDistanceDegrees, PreviousRotationDistanceDegrees 현재·이전 transition의 rotation 거리
C++ 선언 반환 계산 계약
float GetComponentTeleportDistanceThreshold() const cm threshold non-finite 값은 300, 그 외에는 최소 10 cm입니다.
float GetComponentTeleportRotationThreshold() const degree threshold non-finite 값은 150, 그 외에는 1..180으로 clamp합니다.
float GetPoseDistanceThreshold(float MeshSphereRadius) const cm threshold max(sanitized MinimumPoseDistanceThreshold, MeshSphereRadius × sanitized PoseDistanceThresholdRatio)입니다. 기본 fallback은 50 cm, ratio fallback은 0.75입니다.
float GetPoseRotationThreshold() const degree threshold non-finite 값은 150, 그 외에는 1..180으로 clamp합니다.
float GetSourceMotionPositionErrorThreshold(float MeshSphereRadius) const cm threshold pose distance threshold에 sanitized SourceMotionPredictionThresholdScale을 곱하고 최소 2.5 cm를 적용합니다.
float GetSourceMotionRotationErrorThreshold() const degree threshold pose rotation threshold에 sanitized prediction scale을 곱하고 최소 5 deg를 적용합니다.
float GetDynamicHistoryPositionErrorThreshold(float MeshSphereRadius) const cm threshold source-motion threshold와 pose distance threshold에 sanitized DynamicHistoryCutThresholdScale을 곱한 값 중 큰 값입니다.
float GetDynamicHistoryRotationErrorThreshold() const degree threshold source-motion threshold와 pose rotation threshold에 sanitized dynamic-history scale을 곱한 값 중 큰 값입니다.
bool ShouldSuppressSourceMotion(const FOverAnimSourceMotionDiscontinuityMetrics& Metrics, float MeshSphereRadius) const derived source motion suppression 여부 reset이 허용되고 prediction error가 source-motion threshold를 넘으며 현재 translation 또는 rotation 변화가 이전 변화보다 threshold × 0.25 이상 더 클 때 true입니다.
bool ShouldResetDynamicHistory(const FOverAnimSourceMotionDiscontinuityMetrics& Metrics, float MeshSphereRadius) const Spring/Follow Through history reset 여부 위와 같은 비교를 더 큰 dynamic-history threshold로 수행합니다. bResetOnDiscontinuity가 false면 항상 false입니다.

Motion direction · detection Enum

Enum 의미
EOverAnimVerticalImpactDirectionMode WorldUp, OwnerUp, ComponentUp vertical impact normal/direction의 up axis 출처입니다.
OppositeVelocity 현재 velocity의 반대 방향을 사용합니다. velocity가 0이면 방향을 만들지 못합니다.
EOverAnimMotionDirectionMode WorldUp/Down, OwnerUp/Down, ComponentUp/Down fixed up/down axis 기반 direction입니다.
Velocity, OppositeVelocity, PreviousVelocity, OppositePreviousVelocity, VelocityChange, OppositeVelocityChange actor motion vector를 기반으로 하는 direction입니다. 필요한 current/previous sample이 없으면 usable direction이 없습니다.
EOverAnimMotionPhaseInputSource RootRelativeAnimationPose Skeleton root relative final animation pose만 automatic stage에 사용합니다. actor travel/extracted root motion은 제외됩니다.
FullFinalPoseMotion absolute component-space final-pose motion을 automatic stage에 사용합니다.
EOverAnimMotionPhaseActivationScope Automatic 이전 asset의 Montage boundary 연동을 보존하는 legacy compatibility 값입니다.
ContinuousAnimation 모든 final animation pose에서 automatic stages를 분석합니다.
AuthoredActionWindow Montage boundary 또는 explicit action window 안에서만 분석합니다.
EOverAnimAutomaticStageTimeBasis ActionTempoRelative measured action tempo에 따라 stage guard, response timing, optional delay를 scale합니다.
FixedSeconds stage guard와 timing을 authored seconds로 유지합니다.
EOverAnimMotionPhaseSensitivity Conservative, Balanced, Sensitive, Custom preset은 EntryEnergy, PreparationEntryEnergy, ActionEnergy, SettleEnergy를 묶어 설정합니다. 개별 threshold가 preset과 다르면 Custom입니다.

FOverAnimMotionPhaseDetectionSettings

기본 stage 계약

Details UI 이름 C++ 속성명 기본값 · 범위 영향 · 표시 조건
Motion Input InputSource RootRelativeAnimationPose automatic stage의 motion source입니다. 다른 Region motion Signal에는 적용되지 않습니다.
Analyze Automatic Stages ActivationScope ContinuousAnimation automatic analyzer를 항상 실행할지 Montage/explicit action window 안에서만 실행할지 선택합니다. Gameplay, Notify와 다른 motion Signal을 억제하지 않습니다.
Use Montage Action Boundaries bUseMontageActionBoundaries true Montage 시작에 새 action cycle을 엽니다. 중단된 Montage는 blend-out에서 닫지만 정상 blend-out은 Montage 종료까지 분석하여 Recoil/Settle을 보존합니다.
Treat Montage Parts as Separate Actions bTreatMontageSectionsAsSeparateActions false 이전 bool이 true일 때 표시됩니다. Section 또는 embedded Animation Sequence 전환을 새 action cycle로 취급합니다.
Rebase On Anim State Transitions bRebaseOnAnimStateTransitions true Anim Blueprint state crossfade가 갑작스러운 Region motion으로 검출되지 않도록 derivative를 전환 중과 종료 시 재기준화합니다. 다른 Signal과 deformation simulation은 reset하지 않습니다.
Stage Timing TimeBasis ActionTempoRelative detected tempo와 fixed seconds 중 timing basis를 선택합니다.
Detection Sensitivity Sensitivity Balanced built-in threshold preset 또는 Custom 상태입니다.
Start Motion Energy EntryEnergy 0.12, 0..1 Starting Pose를 떠나는 normalized energy입니다. Expert tuning일 때 표시됩니다.
Anticipation Entry Energy PreparationEntryEnergy 0.10, 0..1 visible action 전에 Anticipation을 열 수 있는 acceleration evidence입니다.
Action Entry Energy ActionEnergy 0.40, 0..1 Anticipation을 Action으로 commit하는 energy입니다.
Settle Entry Energy SettleEnergy 0.06, 0..1 Settle Pose 진입 energy입니다. EntryEnergy보다 작아야 합니다.
Maximum Anticipation Prediction MaximumPredictionLeadTime 0.10 s, 0..0.25 causal prediction으로 Anticipation을 앞당길 최대 시간입니다.
Infer Counter-Motion Anticipation bInferOppositeActionAxisFromPreparation true preparation을 counter motion으로 보고 action axis를 반대로 예측합니다.
Maximum Anticipation Duration MaximumAnticipationDuration 0.10 s, 0.01+ Action이 오지 않는 Anticipation의 최대 시간입니다. 지나면 Settle로 취소합니다.
Settle Pose Duration SettleDuration 0.08 s, 0.01+ Starting Pose로 돌아가기 전 필요한 quiet time입니다.
Starting Pose Confirmation StartingPoseConfirmationTime 0.15 s, 0..0.5 다음 action cycle을 rearm하기 위한 continuous quiet time입니다.
Starting Pose Return Tolerance StartingPoseReturnTolerance 0.35, 0..1 root-relative Region motion이 cycle 최대 이동량의 이 비율 안으로 시작 pose에 돌아와야 cycle을 닫습니다. 1은 위치 복귀 guard를 끄는 값입니다.
Show Expert Detection Tuning bShowAdvancedTuning false 아래 expert fields의 표시 조건입니다. visual peak amount를 바꾸지 않습니다.

Expert detection tuning

Details UI 이름 C++ 속성명 기본값 · 범위 영향
Action Commit Direction ActionCommitDirectionDotThreshold 0, -1..1 predicted counter-motion axis와 measured motion의 최소 dot입니다. bInferOppositeActionAxisFromPreparation도 true여야 표시됩니다.
Detect Chained Actions During Recovery bDetectChainedActionsDuringRecovery false Starting Pose 전에 recovery가 다시 상승해도 새 cycle을 열 수 있게 합니다.
Build / Recovery Trend Threshold TrendThreshold 0.40, 0+ normalized energy trend의 build/recovery 구분 threshold입니다.
Trend Smoothing TrendSmoothingRate 14, 0+ energy trend exponential smoothing rate입니다. 0은 raw trend입니다.
Adaptive Trend Response AdaptiveTrendResponse 2, 0..4 decisive motion에서 trend filter의 반응성을 올립니다.
Anticipation Confirmation Time AnticipationConfirmationTime 0.025 s, 0..0.05 isolated acceleration spike를 거르는 onset confirm 시간입니다.
Anticipation Cancellation Time AnticipationCancellationTime 0.04 s, 0..0.20 evidence가 없는 Anticipation을 Settle로 취소하는 시간입니다.
Overshoot Peak Drop PeakDropEnergy 0.06, 0..1 Action peak에서 이만큼 떨어지면 Overshoot에 진입합니다.
Recoil Direction Threshold ReversalDotThreshold -0.10, -1..1 action axis와 dot이 이 값 이하이면 Recoil로 판단합니다.
Minimum Stage Duration MinimumPhaseDuration 0.025 s, 0+ 연속 stage transition 사이의 최소 시간입니다.
Angular Action Energy Weight AngularActionWeight 0.65, 0..2 angular speed의 Action Energy 기여도입니다.
Linear Anticipation Energy Weight LinearPreparationWeight 0.75, 0..2 linear acceleration의 Anticipation Energy 기여도입니다.
Angular Anticipation Energy Weight AngularPreparationWeight 0.65, 0..2 angular acceleration의 Anticipation Energy 기여도입니다.
Direction Conflict Threshold DirectionConflictDotThreshold -0.25, -1..1 이 값보다 반대인 directional evidence는 action axis 평균에 넣지 않습니다.
Default Action Stroke Duration DefaultActionTempoSeconds 0.10 s, 0.01..1 learned tempo가 없을 때 Action commitment부터 peak까지의 fallback입니다.
Minimum / Maximum Action Stroke Duration MinimumActionTempoSeconds, MaximumActionTempoSeconds 0.05 / 0.25 s, 0.01..1 measured action tempo의 clamp 범위입니다. default는 두 값 사이여야 합니다.
Action Stroke Learning Rate ActionTempoLearningRate 0.35, 0..1 observed Action peak가 다음 cycle의 expected tempo를 갱신하는 blend amount입니다.
Minimum Anticipation Strength MinimumAnticipationStrength 0.15, 0..1 Anticipation 중 출력할 최소 strength입니다.
Recovery Peak Retention RecoveryPeakRetention 0.20, 0..1 Overshoot/Recoil에서 유지할 cycle peak의 최소 fraction입니다.

IsValid()SettleEnergy < EntryEnergy < ActionEnergy, PreparationEntryEnergy < ActionEnergy, action tempo의 min/default/max 순서, duration/range/finite 조건을 동시에 검사합니다.

Automatic stage C++ helper contracts

C++ 선언 반환 · 상태 변화 계약
void ApplySensitivityPreset() 구조체의 네 energy threshold를 변경 Conservative0.16 / 0.14 / 0.50 / 0.07, Balanced0.12 / 0.10 / 0.40 / 0.06, Sensitive0.08 / 0.06 / 0.28 / 0.04를 각각 Entry / PreparationEntry / Action / Settle에 기록합니다. Custom은 값을 바꾸지 않습니다.
void ClassifySensitivityFromThresholds() Sensitivity만 변경 네 threshold가 위 preset 조합과 거의 같으면 해당 preset, 하나라도 다르면 Custom입니다. threshold 값은 바꾸지 않습니다.
float ResolveActionTimingScale(float ActionTempoSeconds) const timing multiplier FixedSeconds, non-finite tempo, non-finite 또는 0 이하 default tempo에서는 1입니다. 그 외에는 입력 tempo를 min/max action tempo에 clamp한 뒤 default tempo로 나눈 값입니다.
float ResolveMaximumActionTimingScale() const 가능한 최대 timing multiplier MaximumActionTempoSeconds를 입력으로 위 resolver를 호출한 결과입니다.
bool IsValid() const settings 유효 여부 energy 순서와 모든 clamp 범위, StartingPoseReturnTolerance0..1, time 값, action tempo min/default/max 순서, smoothing·weight·retention·dot 범위 및 finite 조건을 함께 만족해야 합니다.

FOverAnimMotionSignalSettings

Signal enable flags

Details UI 이름 C++ 속성명 기본값 영향 · 표시 조건
Enable Motion Signals bEnableMotionSignals false actor motion-generated signal master switch입니다.
Enable Jump Fall Landing Signals bEnableJumpFallLandingSignals true jump start, falling, vertical impact 생성을 허용합니다.
Enable Speed Drop Signal bEnableSpeedDropSignal true planar deceleration episode signal을 허용합니다.
Enable Speed Burst Signal bEnableSpeedBurstSignal false positive planar acceleration signal을 허용합니다.
Enable Direction Change Signal bEnableDirectionChangeSignal true planar direction change signal을 허용합니다.
Enable Acceleration Signal bEnableAccelerationSignal false actor acceleration signal을 허용합니다.
Enable Region Motion Signals bEnableRegionMotionSignals true Region-level signal master switch입니다.
Enable Region Speed / Acceleration / Direction Change / Angular Speed / Tip Speed / Angular Acceleration Signal bEnableRegionSpeedSignal, bEnableRegionAccelerationSignal, bEnableRegionDirectionChangeSignal, bEnableRegionAngularSpeedSignal, bEnableRegionTipSpeedSignal, bEnableRegionAngularAccelerationSignal 모두 false bEnableRegionMotionSignals일 때만 표시되고 각각 해당 feature signal을 만듭니다.
Generate Automatic Six-Stage Motion bEnableRegionMotionPhaseSignal false Region motion signal master가 켜졌을 때만 표시됩니다. MotionPhaseDetection을 사용해 six-stage Signal을 만듭니다.

Signal names

C++ 속성명 기본값 생성 대상
JumpStartSignalName, FallingSignalName, VerticalImpactSignalName Motion.JumpStart, Motion.Falling, Motion.VerticalImpact jump/fall/landing
SpeedDropSignalName, SpeedBurstSignalName, DirectionChangeSignalName, AccelerationSignalName Motion.SpeedDrop, Motion.SpeedBurst, Motion.DirectionChange, Motion.Acceleration actor motion
RegionSpeedSignalName, RegionAccelerationSignalName, RegionDirectionChangeSignalName Motion.Region.Speed, Motion.Region.Acceleration, Motion.Region.DirectionChange Region linear motion
RegionAngularSpeedSignalName, RegionTipSpeedSignalName, RegionAngularAccelerationSignalName Motion.Region.AngularSpeed, Motion.Region.TipSpeed, Motion.Region.AngularAcceleration Region angular/tip motion
RegionMotionPhaseSignalName Motion.Region.Phase bEnableRegionMotionPhaseSignal일 때 automatic six-stage Signal

Direction fields

Details UI 이름 C++ 속성명 기본값 적용 범위
Vertical Impact Direction VerticalImpactDirectionMode OwnerUp vertical impact
Jump Start Direction JumpStartDirectionMode OwnerUp jump start
Falling Direction FallingDirectionMode Velocity falling
Speed Drop Direction SpeedDropDirectionMode PreviousVelocity speed drop
Speed Burst Direction SpeedBurstDirectionMode Velocity speed burst
Direction Change Direction DirectionChangeDirectionMode VelocityChange direction change
Acceleration Direction AccelerationDirectionMode VelocityChange acceleration

Actor and landing thresholds

C++ 속성명 기본값 · 최소 영향
MinJumpSpeed, MaxJumpSpeed 150 / 1200, 0+ / 1+ jump signal magnitude의 linear speed range입니다.
MinFallingSpeed, MaxFallingSpeed, MinFallingMagnitude 80 / 1200 / 0.1, 0+ / 1+ / 0..1 falling signal 진입과 magnitude 범위입니다.
MinFallTime, GroundProbeDistance, GroundedVelocityThreshold 0.08 s / 80 / 80, 0+ airborne 시간, ground probe, grounded 판정 기준입니다.
MinVerticalImpactSpeed, MaxVerticalImpactSpeed, VerticalImpactVelocityMemory 350 / 1200 / 0.5 s, 0+ / 1+ / 0+ landing impact range와 최근 downward velocity 기억 시간입니다.
MinPlanarSpeedDrop, MaxPlanarSpeedDrop 300 / 1000, 0+ / 1+ deceleration episode magnitude range입니다.
MinPlanarSpeedBurstAcceleration, MaxPlanarSpeedBurstAcceleration 600 / 6000 cm/s², 0+ / 1+ positive planar acceleration burst magnitude range입니다.
SpeedBurstSmoothingRate, SpeedBurstReleaseThresholdRatio 6 / 0.5, 0+ / 0..1 burst differentiation smoothing과 rearm release fraction입니다.
MinActorAcceleration, MaxActorAcceleration 600 / 6000 cm/s², 0+ / 1+ actor acceleration signal magnitude range입니다.
SpeedDropAccumulationWindow, SpeedDropSettleTime 0.35 / 0.06 s, 0.01+ / 0+ speed-drop episode accumulation/finalization timing입니다.
SpeedDropStopSpeed, SpeedDropRecoveryThreshold, SpeedDropRearmSpeedIncrease 25 / 10 / 50 cm/s, 0+ / 0+ / 1+ stop finalization, recovery finalization, next episode rearm 기준입니다.
MinDirectionChangeSpeed, MinDirectionChangeAngleDegrees, MaxDirectionChangeAngleDegrees 250 cm/s / 35 / 135 deg, 0+ / 0..180 / 1..180 planar turn signal의 speed 및 angle range입니다.
DirectionChangeAccumulationWindow, MinDirectionChangeSpeedRetentionRatio 0.20 s / 0.65, 0.01+ / 0..1 turn을 누적할 시간과 speed retention requirement입니다.
bSuppressLocomotionSignalsAfterCollision, LocomotionCollisionSuppressionWindow true / 0.10 s accepted collision 뒤 locomotion signal을 잠시 억제합니다. collision submission이 있어야 contact 정보를 가집니다.

Region thresholds · filtering

C++ 속성명 기본값 · 최소 영향
MinRegionSpeed, MaxRegionSpeed 100 / 1200, 0+ / 1+ Region linear speed signal range입니다.
MinRegionAcceleration, MaxRegionAcceleration 500 / 8000, 0+ / 1+ Region linear acceleration signal range입니다.
MinRegionDirectionChangeAngleDegrees, MaxRegionDirectionChangeAngleDegrees 30 / 150 deg, 0..180 / 1..180 Region direction change range입니다.
MinRegionAngularSpeedDegrees, MaxRegionAngularSpeedDegrees 90 / 1440 deg/s, 0+ / 1+ Region angular speed range입니다.
MinRegionTipSpeed, MaxRegionTipSpeed 150 / 1800 cm/s, 0+ / 1+ Region tip speed range입니다.
MinRegionAngularAccelerationDegrees, MaxRegionAngularAccelerationDegrees 720 / 20000 deg/s², 0+ / 1+ Region angular acceleration range입니다.
RegionVelocitySmoothingRate, RegionAccelerationSmoothingRate 18 / 12, 0+ linear velocity/acceleration smoothing입니다. 0은 raw sample입니다.
RegionAngularVelocitySmoothingRate, RegionTipVelocitySmoothingRate, RegionAngularAccelerationSmoothingRate 18 / 18 / 12, 0+ angular/tip feature smoothing입니다.
RegionSignalReleaseThresholdRatio 0.75, 0..1 active sustained Region signal이 entry threshold의 이 fraction 아래에서 종료됩니다.

Timing · diagnostics

C++ 속성명 기본값 · 범위 영향
JumpStartCooldown, FallingDebugInterval, VerticalImpactCooldown 0.12 / 0.12 / 0.12 s, 0+ jump/fall/impact dispatch 또는 diagnostic intervals입니다.
AccelerationCooldown, SpeedDropCooldown, SpeedBurstCooldown, DirectionChangeCooldown 0.08 / 0.12 / 0.08 / 0.12 s, 0+ actor motion signal re-trigger 제한입니다.
RegionDirectionChangeCooldown, RegionSignalDebugInterval 0.12 / 0.12 s, 0+ Region turn re-trigger와 diagnostic interval입니다.
bLogGeneratedSignals false generated signal log를 출력합니다.
bDrawGeneratedSignals false generated signal debug drawing을 켭니다.
DebugDrawDuration, DebugDrawScale 0.75 / 80, 0+ / 1+ debug drawing 유지 시간과 크기입니다.

automatic stage의 별도 허용

bEnableRegionMotionPhaseSignal이 true여도 Response Rule의 Timing ModelAutomatic Six-Stage Motion이어야 automatic stage가 response에 사용됩니다. module 자체가 automatic stage를 지원하지 않으면 계약 검증에서 route가 거부됩니다.

FOverAnimMotionSignalSettings C++ helper contracts

아래 함수는 모두 Blueprint 노드가 아닌 C++ helper입니다. ResolveFor… 계열은 원본을 수정하지 않고 복사본을 반환하며, 계산 helper는 signal을 발행하지 않습니다.

C++ 선언 반환 · 상태 변화 입력 · 경계 계약
FOverAnimMotionSignalSettings ResolveForLinearScale(float LinearScale) const linear-scale이 적용된 설정 복사본 ResolveForLinearScales(LinearScale, LinearScale)와 같습니다.
FOverAnimMotionSignalSettings ResolveForLinearScales(float MotionScale, float GroundProbeScale) const 설정 복사본 각 scale은 finite하면 최소 0.01, 아니면 1입니다. MotionScale은 jump/fall/impact/speed-drop/speed-burst/actor acceleration/direction-change/Region speed·acceleration·tip speed/debug draw scale의 모든 linear threshold에 곱합니다. GroundProbeScaleGroundProbeDistance에만 곱합니다. angle, time, smoothing, cooldown은 바꾸지 않습니다.
static float CalculateExponentialSmoothingAlpha(float SmoothingRate, float DeltaTime) 0..1 alpha delta가 non-finite 또는 0 이하이면 0; rate가 non-finite 또는 0 이하이면 1; 그 외에는 1 - exp(-rate × delta)입니다.
static FVector CalculateAngularVelocity(const FQuat& PreviousRotation, const FQuat& CurrentRotation, float DeltaTime) rad/s world-space angular velocity delta가 non-finite 또는 0 이하이거나 rotation delta 축이 0이면 zero vector입니다. 유효한 경우 shortest-arc quaternion delta의 axis에 angle/delta를 곱합니다.
static float CalculatePositivePlanarSpeedAcceleration(const FVector& PreviousVelocityWS, const FVector& CurrentVelocityWS, float DeltaTime) 양의 planar acceleration Z를 제외한 속도 크기의 증가분만 사용합니다. delta가 non-finite 또는 0 이하이면 0, 감속이면 0입니다.
static float CalculateFilteredPositivePlanarAcceleration(float PreviousFilteredPlanarSpeed, float CurrentPlanarSpeed, float DeltaTime, float SmoothingRate, float& OutFilteredPlanarSpeed) 양의 filtered acceleration, out에 다음 filtered speed 기록 current speed가 non-finite면 out을 0으로 둡니다. previous speed 또는 delta가 유효하지 않으면 0을 반환합니다. 그 외에는 exponential alpha로 이전·현재 speed를 보간하고 증가분만 반환합니다.

Automatic Motion Analyzer C++ API

이 절은 OverAnimMotionPhaseAnalyzer.h의 exported C++ 계약입니다. Editor의 preview state와 runtime Instance Manager는 지원 범위가 아닙니다.

입력과 authored timing

타입 주요 필드 · 의미
FOverAnimPhaseEvidence (OverAnimMotionPhase::FEvidence) linear/tip/angular/preparation direction, Region axis, MotionPointPosition, ChainExtensionDirection과 각 존재 flag입니다. IsValid()는 vector NaN과 finite extension 값을 검사합니다. 기존 FOverAnimMotionPhaseSpatialEvidence는 이 타입의 호환 alias입니다.
FOverAnimMotionPhaseAnalyzerInput (OverAnimMotionPhase::FInput) linear/tip/acceleration/angular/chain-extension energy, spatial evidence, sample time과 positive sample delta입니다. IsValid()는 모든 energy와 시간이 finite하고 delta가 양수인지 검사합니다.
FOverAnimAuthoredMotionPhaseInput (OverAnimMotionPhase::FAuthoredInput) authored Phase, TimingSource, ActionAxisWS, StageProgress, MotionStrength, sample time과 ActionScopeSerial입니다.
FOverAnimAuthoredMotionPhaseState (OverAnimMotionPhase::FAuthoredState) authored timing의 현재/직전 Stage, Action 진입 Stage, duration/strength, cycle과 scope serial을 유지합니다. Reset()은 cycle ID를 보존합니다.

Boundary와 continuity

타입 · 값 의미
EOverAnimMotionPhaseBoundaryRequest::RebasePoseDerivative Stage state는 보존하고 pose derivative 기준만 다시 잡습니다.
ResetForStateTransition Anim state transition으로 인해 analyzer state를 reset합니다.
CancelCurrentAction 현재 action을 닫고 starting-pose confirmation을 기다립니다.
StartNewAction 새 명시적 action boundary를 엽니다.
FOverAnimMotionPhaseBoundaryQueue::Queue() lifecycle boundary를 queue합니다. 이미 StartNewAction이 대기 중이면 뒤따른 cancel로 강등하지 않습니다.
FOverAnimMotionPhaseBoundaryQueue::QueueTransitionRebase() transition rebase/reset을 queue합니다. lifecycle boundary를 덮어쓰지 않으며 ResetForStateTransition을 단순 rebase로 강등하지 않습니다.
OverAnimMotionPhase::ESampleContinuity Continuous, RebaseDerivative, ResetState로 source motion/history 연속성을 분류합니다.

Routing과 update 함수

C++ 선언 반환 · 계약
bool DecodeAuthoredStageCurveValue(float CurveValue, EStage& OutStage, float& OutStageProgress) curve의 정수 부분을 Stage, 소수 부분을 0–1 progress로 해석합니다. 유효한 stage 범위를 해석하지 못하면 false입니다.
FUpdate Update(const FSettings&, const FInput&, FState&) automatic evidence로 analyzer state를 갱신하고 snapshot 및 StateUpdate/StateEnd 여부를 반환합니다. 입력과 설정은 유효해야 합니다.
FUpdate UpdateFromAuthoredTiming(const FAuthoredInput&, FAuthoredState&) curve/marker 입력으로 authored stage state를 갱신합니다. snapshot의 TimingSource와 authored progress를 보존합니다.
FRegionDecision EvaluateDominantRegion(TConstArrayView<FRegionCandidate>, const FSettings&, double EvaluationTimeSeconds, const FRegionSelection& CurrentState, FRegionSelection& OutNextState) Action Group candidate를 평가하고 선택 index, Action ID, decision reason을 반환합니다. 입력 state는 변경하지 않고 다음 state를 out에 씁니다.
int32 SelectDominantRegion(TConstArrayView<FRegionCandidate>, const FSettings&, double EvaluationTimeSeconds, FRegionSelection& State) 위 평가를 state에 적용하고 선택 index 또는 INDEX_NONE을 반환합니다.

OverAnimMotionPhase::ERoutePolicy::Compete는 Automatic route의 단일 dominant Region 선택, BroadcastSharedPhase는 selected-animation route의 Stage 공유를 뜻합니다. ResolveRoutePolicy(), IsAnimationRoutedCandidateEligible(), ShouldSuspendSelectedRouteState()는 이 routing 판단을 상태 변경 없이 수행합니다. | float GetRegionVelocitySmoothingAlpha(float DeltaTime) const | alpha | RegionVelocitySmoothingRate를 위 exponential helper에 전달합니다. | | float GetRegionAccelerationSmoothingAlpha(float DeltaTime) const | alpha | RegionAccelerationSmoothingRate를 사용합니다. | | float GetRegionAngularVelocitySmoothingAlpha(float DeltaTime) const | alpha | RegionAngularVelocitySmoothingRate를 사용합니다. | | float GetRegionTipVelocitySmoothingAlpha(float DeltaTime) const | alpha | RegionTipVelocitySmoothingRate를 사용합니다. | | float GetRegionAngularAccelerationSmoothingAlpha(float DeltaTime) const | alpha | RegionAngularAccelerationSmoothingRate를 사용합니다. | | float GetRegionSignalReleaseThreshold(float EntryThreshold) const | sustained Region signal의 release threshold | entry를 최소 0으로 정리하고, finite한 RegionSignalReleaseThresholdRatio0..1에 clamp합니다. ratio가 non-finite면 0.75를 사용합니다. |