Follow Through
UOverAnimFollowThroughModule은 Anchor에서 Falloff까지의 parent-to-child bone chain에 pose history 기반 지연을 적용하는 Dynamics Phase 모듈입니다. 설정은 OverAnimation/Asset/OverAnimModule.h에 선언되어 있으며, 이 페이지는 OverAnim 0.1.0 Beta / UE 5.8 기준입니다.
목적
현재 chain pose와 이전에 보관한 pose 사이의 차이를 이용해, Anchor에서 Falloff 방향으로 지연된 transform을 만듭니다. 이 모듈은 명시적인 bone chain, pose history buffer, bend·pose-cut·direction-change safety layer를 함께 사용합니다.
Details 레이아웃
Simple은 SimpleLag, SimpleLooseness, SimpleSnap, 필수 Anchor Bone·Falloff Bone, 자산 공통 Master Effect Intensity를 표시합니다. Anchor와 Falloff는 두 레이아웃이 공유하지만 Simple knob는 Detailed 값을 변경하지 않습니다. 아래 나머지 표는 Details의 실제 category 순서입니다.
공통 및 자산 강도
| UI 이름 |
C++ 속성 |
기본값 / 단위 / 범위 |
영향 |
표시 조건 |
연동 |
| Input Composition |
CompositionMode |
Additive Offset; Additive Offset / Re-Skinning |
Additive Offset은 이 module의 displacement를 현재 합성 결과에 더하고, Re-Skinning은 현재 control-point transform 기준으로 평가합니다. |
Details 레이아웃 |
모든 Module에 공통입니다. 같은 Phase 안에서의 실행 순서는 Module Stack이 관리합니다. |
| Master Effect Intensity |
UOverAnimMeshDeformer::MasterEffectIntensity |
1.0; 최소 0, UI 상한 3 |
이 asset의 authored effect strength를 모두 배율 조정합니다. |
Simple·Details 모두, OverAnim|Intensity row |
Follow Through response weight도 이 값을 곱한 뒤 0–1로 제한합니다. asset 전역 속성입니다. |
Simple
| UI 이름 |
C++ 속성 |
기본값 / 단위 / 범위 |
영향 |
표시 조건 |
연동 |
| Lag |
SimpleLag |
1.0; 0–5 |
authored Buffer Size의 비율입니다. 2.0은 history frame 수를 두 배로 늘립니다. |
Simple에서 표시, runtime은 항상 적용 |
결과는 2–64 frames로 제한되며 pose 간격은 바꾸지 않습니다. |
| Looseness |
SimpleLooseness |
1.0; 0–5 |
authored chain budget와 single-segment swing에는 비율을, bend guard 각도에는 additive span을 적용합니다. |
Simple에서 표시, runtime은 항상 적용 |
실제 사용값은 Safety와 Single Segment mode에 따라 달라집니다. |
| Snap |
SimpleSnap |
1.0; 0–5 |
authored attenuation/recovery time에는 역비율을 적용하고 guard angle과 history retention에는 additive span을 적용합니다. |
Simple에서 표시, runtime은 항상 적용 |
Use Direction Change Guard가 꺼져 있으면 결과에 영향이 없습니다. 0은 guard 비활성 방향입니다. |
런타임에서 해석하는 Detailed 기본값
| Simple knob |
해석 대상 |
처리 |
SimpleLag |
NumFrames (Buffer Size) |
authored frame 수에 knob 비율을 곱하고 반올림한 뒤 2–64로 제한합니다. |
SimpleLooseness |
BendGuardStartAngleDegrees, BendGuardLimitAngleDegrees, MaximumCumulativeChainBendDegrees, MaximumSingleSegmentSwingAngleDegrees |
authored budget·swing에는 비율을 곱하고 guard start/limit에는 각각 최대 +30°/+5° span을 더한 뒤 안전 범위로 제한합니다. |
SimpleSnap |
DirectionChangeGuardStartAngleDegrees, FullReversalHistoryRetention, DirectionChangeAttenuationTime, DirectionChangeRecoveryTime |
authored start angle에서 최대 60°, retention에서 최대 0.2를 빼며 두 time에는 역비율을 곱합니다. |
OverAnim | Activation
| UI 이름 |
C++ 속성 |
기본값 / 단위 / 범위 |
영향 |
표시 조건 |
연동 |
| Driver Mode |
DriverMode |
Automatic + Signal Boost |
history와 Response Rule의 결합 방식을 선택합니다. Automatic Motion은 response 없이 authored history를 유지합니다. Signal Gated Motion은 history weight에 response weight를 곱합니다. Automatic + Signal Boost는 history weight를 min(history × (1 + response), 1)로 만듭니다. |
항상 |
Automatic Motion은 Signal을 거부합니다. 나머지 두 mode는 Pulse와 Sustained response를 받습니다. |
OverAnim | Anchor
| UI 이름 |
C++ 속성 |
기본값 / 단위 / 범위 |
영향 |
표시 조건 |
연동 |
| Anchor Bone |
AnchorBone |
None |
Follow Through chain의 시작 bone입니다. |
Simple·Details |
Falloff Bone과 달라야 하며 Target Skeleton의 단일 parent-to-child chain으로 연결되어야 합니다. |
| Falloff Bone |
FalloffBone |
None |
Follow Through chain의 끝 bone입니다. |
Simple·Details |
chain의 tip 역할을 하며 direction-change guard도 이 bone의 최근 이동 방향을 사용합니다. |
OverAnim | Buffer
| UI 이름 |
C++ 속성 |
기본값 / 단위 / 범위 |
영향 |
표시 조건 |
연동 |
| Buffer Size |
NumFrames |
2 frames; 2–64 |
보관하는 transform history frame 수입니다. |
항상 |
최종 frame 수에는 SimpleLag가 항상 곱해집니다. frame 수는 transform buffer memory와 history depth에 직접 영향을 줍니다. |
| Transform Buffer Space |
TransformBufferSpace |
World Space |
delayed pose를 저장·재기준화하는 좌표 기준입니다. Component Space는 parent-relative animation pose를 재생하고, World Space는 과거 world motion을 현재 component 기준으로 rebase합니다. |
항상 |
Follow Through constructor가 base class의 기본값을 World Space로 바꿉니다. |
| History Source |
HistorySource |
Source Animation Pose |
history를 source animation pose에서 읽을지, simulated guide에서 읽을지 선택합니다. |
항상 |
Source Animation Pose는 source pose의 delayed local delta를 guide pose에 합성합니다. |
OverAnim | History
| UI 이름 |
C++ 속성 |
기본값 / 단위 / 범위 |
영향 |
표시 조건 |
연동 |
| Buffer Weight To History Curve |
BufferWeightToHistoryCurve |
기본 key (0, 0), (1, 1) |
chain alpha를 history weight로 바꿉니다. runtime은 curve 결과를 0–1로 제한합니다. |
항상 |
chain의 각 control point가 사용하는 delayed pose 비율을 결정합니다. Response는 이 authored history weight를 gate 또는 boost합니다. |
OverAnim | Safety
| UI 이름 |
C++ 속성 |
기본값 / 단위 / 범위 |
영향 |
표시 조건 |
연동 |
| Bend Guard Start Angle |
BendGuardStartAngleDegrees |
150°; 0–180° |
이 angle보다 작은 bend는 감쇠하지 않습니다. guard는 거의 역방향이 된 joint에서 시작합니다. |
항상 |
Bend Guard Limit Angle보다 클 수 없습니다. Looseness가 additive 변경합니다. |
| Bend Guard Limit Angle |
BendGuardLimitAngleDegrees |
175°; 0–180° |
거의 reversal인 joint에서의 final safety limit입니다. 180°이면 이 guard는 사실상 비활성입니다. |
항상 |
Start 이상이어야 합니다. Looseness가 additive 변경합니다. |
| Chain Safety Mode |
SafetyMode |
Segment Guard + Chain Budget |
Segment Guard Only는 joint별 guard만, Segment Guard + Chain Budget은 primary chain의 누적 bend도 제한합니다. |
항상 |
후자일 때 Maximum Cumulative Chain Bend가 표시됩니다. authored budget에는 SimpleLooseness가 항상 곱해집니다. |
| Maximum Cumulative Chain Bend |
MaximumCumulativeChainBendDegrees |
240°; 1–720° |
primary chain 전체의 positional bend 또는 local rotation deviation 합계 상한입니다. |
Chain Safety Mode = Segment Guard + Chain Budget |
Single joint limit과 별도로 누적 exaggeration을 제한합니다. |
| Single Segment Mode |
SingleSegmentMode |
Rigid Swing |
Anchor와 Falloff가 하나의 segment만 만들 때의 solve 방식을 선택합니다. Rigid Swing은 leaf-local transform을 보존하면서 Anchor 주위로 회전하고, Full Transform Delay는 delayed leaf transform을 직접 재생합니다. |
항상 |
Full Transform Delay는 큰 rotation에서 linear skinning geometry를 얇게 만들 수 있다는 validation warning 대상입니다. |
| Maximum Single Segment Swing |
MaximumSingleSegmentSwingAngleDegrees |
45°; 1–179° |
one-segment branch가 현재 방향에서 회전할 수 있는 최대 authored angle입니다. |
Single Segment Mode = Rigid Swing |
최종 angle에는 SimpleLooseness가 항상 곱해집니다. |
OverAnim | Safety | Pose Cut
| UI 이름 |
C++ 속성 |
기본값 / 단위 / 범위 |
영향 |
표시 조건 |
연동 |
| Reset History on Pose Cut |
bResetHistoryOnPoseCut |
true |
한 sample에서 source chain이 과도하게 바뀌면 이 module의 history만 초기화합니다. |
항상 |
abrupt montage 또는 animation transition의 stale history를 차단합니다. |
| Pose Cut Relative Tip Distance |
PoseCutRelativeTipDistanceRatio |
0.75; 0.1–3.0 |
Anchor 대비 tip의 one-sample 이동 허용량을 현재 chain length의 비율로 설정합니다. |
Reset History on Pose Cut이 켜짐, Advanced |
이 값 또는 segment angle 기준을 넘으면 history가 reset됩니다. |
| Pose Cut Segment Angle |
PoseCutSegmentAngleDegrees |
90°; 1–180° |
chain segment의 one-sample 방향 또는 local rotation 변화 허용량입니다. |
Reset History on Pose Cut이 켜짐, Advanced |
위 relative tip distance와 함께 pose-cut 판정에 쓰입니다. |
OverAnim | Safety | Direction Change
| UI 이름 |
C++ 속성 |
기본값 / 단위 / 범위 |
영향 |
표시 조건 |
연동 |
| Use Direction Change Guard |
bUseDirectionChangeGuard |
true |
Falloff tip이 급격히 방향을 바꿀 때 stale history를 일시 감쇠합니다. |
항상 |
꺼지면 현재·이전·target history scale을 1로 되돌리고 아래 네 속성을 사용하지 않습니다. |
| Guard Start Angle |
DirectionChangeGuardStartAngleDegrees |
120°; 0–180° |
이 angle보다 작은 방향 변화에서는 full history response를 유지합니다. |
Use Direction Change Guard가 켜짐, Advanced |
Snap을 높이면 이 angle이 낮아져 더 작은 turn에서도 guard가 시작합니다. |
| Full Reversal History Retention |
FullReversalHistoryRetention |
0.2; 0–1 |
정확히 180° reversal일 때 남길 history의 비율입니다. |
Use Direction Change Guard가 켜짐, Advanced |
Snap을 높이면 이 값이 낮아집니다. |
| History Attenuation Time |
DirectionChangeAttenuationTime |
0.025 s; 최소 0 |
stale history까지 낮아지는 시간입니다. |
Use Direction Change Guard가 켜짐, Advanced |
short non-zero 시간은 guard 자체의 one-frame pose jump를 완화합니다. Snap이 높을수록 짧아집니다. |
| History Recovery Time |
DirectionChangeRecoveryTime |
0.12 s; 최소 0 |
direction reversal 이후 full Follow Through strength로 돌아가는 시간입니다. |
Use Direction Change Guard가 켜짐, Advanced |
Snap이 높을수록 짧아집니다. |
실행·Response 호환성
| 항목 |
동작 |
| Module Phase |
Dynamics |
| Signal 지원 |
Driver Mode가 Automatic Motion이 아닐 때만 지원합니다. |
| Response Mode |
Pulse, Sustained를 지원합니다. |
| Automatic Six-Stage Motion |
Sustained response를 사용합니다. 기본 stage coverage는 Anticipation 비활성, Action 0.55, Overshoot 1.0, Recoil 0.45, Settle 0.15이며 timing role은 Dynamics입니다. |
| Response parameter type |
FOverAnimFollowThroughResponseParameters |
Automatic Motion은 response를 받지 않고 authored history weight만 사용합니다. Signal Gated Motion은 response weight가 있을 때만 history를 노출하고, Automatic + Signal Boost는 기존 history weight를 유지한 뒤 response weight만큼 강화합니다.
공개 Enum
EOverAnimProceduralMotionDriverMode
DriverMode가 사용하는 BlueprintType enum입니다. Follow Through의 pose-history 출력과 Response Rule weight를 결합하는 방식을 정합니다.
| C++ 값 |
Editor UI |
의미 |
MotionOnly |
Automatic Motion |
authored pose history만 사용합니다. SupportsSignals()가 거짓이므로 Response 요청을 수락하지 않습니다. |
SignalGatedMotion |
Signal Gated Motion |
authored history weight에 active response weight를 곱합니다. response가 없으면 출력 weight는 0입니다. |
MotionWithSignalBoost |
Automatic + Signal Boost |
authored history를 유지하고 response weight만큼 history weight를 강화합니다. 최종 weight는 1을 넘지 않습니다. |
TransformBufferSpace가 사용하는 BlueprintType enum입니다. transform history의 저장·재기준화 좌표를 정합니다.
| C++ 값 |
Editor UI |
의미 |
Local |
Component Space |
parent-relative animation pose를 지연 재생합니다. |
World |
World Space |
과거 world motion을 현재 component 기준으로 rebase하여 visible trailing inertia를 보존합니다. |
EOverAnimTransformHistorySource
HistorySource가 사용하는 BlueprintType enum입니다.
| C++ 값 |
Editor UI |
의미 |
SourceAnimationPose |
Source Animation Pose |
source animation pose를 history 입력으로 사용합니다. |
SimulatedGuide |
Simulated Guide |
앞 단계 procedural guide transform을 history 입력으로 사용합니다. |
EOverAnimFollowThroughSafetyMode
SafetyMode가 사용하는 BlueprintType enum입니다.
| C++ 값 |
Editor UI |
의미 |
SegmentGuardOnly |
Segment Guard Only |
각 joint의 bend guard만 적용합니다. chain 전체의 누적 bend budget은 사용하지 않습니다. |
SegmentGuardAndChainBudget |
Segment Guard + Chain Budget |
joint별 bend guard와 primary chain 전체의 누적 bend budget을 함께 적용합니다. Maximum Cumulative Chain Bend가 표시됩니다. |
EOverAnimFollowThroughSingleSegmentMode
SingleSegmentMode가 사용하는 BlueprintType enum입니다. Anchor와 Falloff가 단일 segment를 만들 때의 solve 방식을 선택합니다.
| C++ 값 |
Editor UI |
의미 |
RigidSwing |
Rigid Swing |
현재 leaf-local transform을 보존한 채 Anchor 주위로 짧은 branch를 회전시킵니다. Maximum Single Segment Swing이 적용됩니다. |
FullTransformDelay |
Full Transform Delay |
지연된 leaf transform을 직접 재생합니다. Maximum Single Segment Swing은 사용하지 않습니다. |
Response Rule 파라미터와 입력 조건
Response Rule의 Module Response at 100%에는 FOverAnimFollowThroughResponseParameters가 사용됩니다.
| UI 이름 |
C++ 속성 |
기본값 / 단위 / 범위 |
영향 |
적용 조건 |
연동 |
| History Strength at Full Response |
HistoryStrengthAtMax |
1.0; 0–1 |
response가 최대일 때 노출할 authored pose history의 비율입니다. |
Driver Mode가 Automatic Motion이 아님 |
resolved magnitude × Master Effect Intensity × 이 값을 0–1로 clamp한 weight가 됩니다. chain, history curve, safety guard 자체를 대체하지 않습니다. |
Response request는 다음 조건을 모두 충족해야 합니다.
Driver Mode가 Automatic Motion이 아니고, FOverAnimFollowThroughResponseParameters가 Rule에 있어야 합니다.
History Strength at Full Response와 ResolvedMagnitude는 유한해야 하며 parameter는 0–1 범위여야 합니다.
- Response envelope의 Attack, Hold, Release time은 모두 유한한
0 이상이어야 합니다. Response weight state가 이를 받아 Pulse 또는 Sustained weight를 관리합니다.
- direction, contact point, contact normal은 request 수락 조건이 아닙니다. 이 module은 request의 mesh component도 직접 사용하지 않습니다.
Automatic Six-Stage Motion response를 만들려면 Module이 활성 상태이고 이름이 있으며, Driver Mode가 Signal을 허용하고 Buffer Size >= 2, 서로 다른 Anchor/Falloff bone이 지정되어야 합니다.
제한·성능·Validation
안전 제한
- Anchor와 Falloff는 서로 달라야 하고, Target Skeleton에서 하나의 parent-to-child chain으로 연결되어야 합니다. 참조 chain의 길이가 0이면 오류입니다.
Bend Guard Start Angle <= Bend Guard Limit Angle <= 180°가 유지되어야 합니다. Chain budget을 쓰면 Maximum Cumulative Chain Bend도 1–720°여야 합니다.
- source chain motion이 연속적이지 않거나 pose-cut 조건이 충족되면 runtime은 history를 reset합니다.
Full Transform Delay와 one-segment chain의 조합은 validation warning 대상입니다. 이 경우 large wrist rotation이 linear skinned geometry를 얇게 만들 수 있습니다.
성능 특성
- runtime state는 transform buffer와 resolved
ChainBoneNames를 보관합니다. Buffer Size가 커질수록 control point당 history memory가 증가합니다.
- pose-history 메모리는 authored
Buffer Size × SimpleLag의 최종 frame 수와 resolved control point 수에 따라 증가합니다. 최종 frame 수는 2–64로 제한됩니다.
- direction-change guard는 falloff tip의 최근 이동 방향과 history duration을 계산합니다. 꺼져 있으면 관련 scale 계산을 하지 않습니다.
Validation 및 비활성 조건
Buffer Size < 2는 history module validation 오류입니다.
- Anchor/Falloff 누락, 동일 bone, parent-to-child chain이 아닌 연결은 오류입니다.
- pose-cut guard가 켜졌을 때 relative tip distance는
0.1–3.0, segment angle은 1–180°이어야 합니다.
- direction-change guard가 켜졌을 때 start angle은
0–180°, full reversal retention은 0–1, 두 time은 0 이상이어야 합니다.