Motion · Simulation Types
기준: OverAnim 0.1.0 Beta · Unreal Engine 5.8
헤더: OverAnimation/Runtime/OverAnimSimulationTypes.h, OverAnimation/Runtime/OverAnimMotionSignalProfile.h, OverAnimation/Runtime/OverAnimMotionPhaseAnalyzer.h
이 페이지는 UOverAnimMeshDeformer의 SimulationSettings와 MotionSignalSettings 구조체를 필드 단위로 설명합니다. 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를 변경 |
Conservative는 0.16 / 0.14 / 0.50 / 0.07, Balanced는 0.12 / 0.10 / 0.40 / 0.06, Sensitive는 0.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 범위, StartingPoseReturnTolerance의 0..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 Model이 Automatic 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에 곱합니다. GroundProbeScale은 GroundProbeDistance에만 곱합니다. 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한 RegionSignalReleaseThresholdRatio를 0..1에 clamp합니다. ratio가 non-finite면 0.75를 사용합니다. |