콘텐츠로 이동

Transform Spring

UOverAnimTransformSpringModule은 선택한 guide bone의 Position, Rotation, Scale에 지연·overshoot·settle을 적용하는 Dynamics Phase 모듈입니다. 설정은 OverAnimation/Asset/OverAnimModule.h에 선언되어 있으며, 이 페이지는 OverAnim 0.1.0 Beta / UE 5.8 기준입니다.

목적

애니메이션의 목표 transform을 즉시 따라가지 않도록 하여, 선택한 bone에 남은 관성·되튐·정착 동작을 만듭니다. Position, Rotation, Scale 채널은 서로 독립적으로 활성화하고 각각의 simulation space, follow speed, bounciness를 가집니다.

Details 레이아웃

SimpleSimpleLag, SimpleBounce, SimpleRange와 자산 공통 Master Effect Intensity를 표시합니다. 아래 나머지 표는 Details에서 표시되는 실제 category 순서입니다. 레이아웃은 표시할 property만 바꾸며, runtime은 항상 Simple knob를 Detailed 작성값에 적용합니다.

공통 및 자산 강도

UI 이름 C++ 속성 기본값 / 단위 / 범위 영향 표시 조건 연동
Input Composition CompositionMode Additive Offset; Additive Offset / Re-Skinning Additive Offset은 이 모듈의 displacement를 현재 합성 결과에 더합니다. Re-Skinning은 현재 control-point transform을 기준으로 모듈을 평가합니다. Details 레이아웃 모든 Module에 공통입니다. 실행 순서는 이 값이 아니라 Module Stack의 같은 Phase 내 순서가 결정합니다.
Master Effect Intensity UOverAnimMeshDeformer::MasterEffectIntensity 1.0; 최소 0, UI 상한 3 이 asset의 모든 Module이 계산한 authored strength를 배율 조정합니다. Module별 safety limit은 별도로 적용됩니다. Simple·Details 모두, 선택 Module의 OverAnim|Intensity row Spring impulse와 Automatic phase target offset에도 곱해집니다. Module 전용 속성이 아니라 asset 전역 속성입니다.

Simple

UI 이름 C++ 속성 기본값 / 단위 / 범위 영향 표시 조건 연동
Lag SimpleLag 1.0; 0–5 authored Position/Rotation/Scale Follow Speed에 역비율을 적용합니다. 2.0은 speed를 절반으로 만들어 더 늦게 따릅니다. 0은 안전 비율 0.01로 해석되어 authored speed의 100배가 됩니다. Simple에서 표시, runtime은 항상 적용 Detailed 값을 변경하지 않습니다.
Bounce SimpleBounce 1.0; 0–5 authored Position/Rotation/Scale Bounciness에 고정 span을 더합니다. 1.0은 변화 없음, 0-1, 5+1이며 결과는 0–1로 제한됩니다. Simple에서 표시, runtime은 항상 적용 활성화된 채널에만 사용됩니다.
Range SimpleRange 1.0; 0–5 authored output limit들에 같은 비율을 적용합니다. 2.0은 허용 travel을 두 배로, 0은 모두 닫습니다. Simple에서 표시, runtime은 항상 적용 Enable Output Limits가 꺼져 있으면 런타임 결과에 영향을 주지 않습니다.

런타임에서 해석하는 Detailed 기본값

Simple knob 해석 대상 처리
SimpleLag PositionFollowSpeed, RotationFollowSpeed, ScaleFollowSpeed authored speed에 KnobInverseRatio를 곱합니다. 높은 Lag일수록 낮은 speed입니다.
SimpleBounce PositionBounciness, RotationBounciness, ScaleBounciness authored bounciness에 KnobSpan을 더하고 0–1로 제한합니다.
SimpleRange MaxPositionOffset, MaxRotationOffsetDegrees, MaxChainRotationDegrees, MaxScaleDeviation authored limit에 knob 비율을 곱하고 각 안전 상한으로 제한합니다.

OverAnim

UI 이름 C++ 속성 기본값 / 단위 / 범위 영향 표시 조건 연동
Target Bones ControlBones 빈 배열 spring state를 만들 guide bone 목록입니다. Details 레이아웃 하나도 없으면 module은 inactive 경고를 냅니다. 각 bone은 Target Skeleton과 preview mesh에 존재하고 소속 Bone Group 안에 있어야 합니다.

OverAnim | Chain

UI 이름 C++ 속성 기본값 / 단위 / 범위 영향 표시 조건 연동
Propagate To Descendants bPropagateToDescendants true control bone이 아닌 descendant도 simulated parent에 붙은 상태로 transform을 전파합니다. 항상 다른 Module이 descendant transform을 소유할 때는 이 전파가 같은 control point에 영향을 줄 수 있습니다.
Use Root To Tip Influence bUseChainInfluenceProfile false Control Bone chain distance를 이용하여 root~tip influence profile을 사용합니다. 항상 켜면 아래 세 profile 속성이 나타납니다.
Root Influence RootSpringInfluence 0.25; 01 chain의 root 쪽 Spring output 비율입니다. Use Root To Tip Influence가 켜짐 Tip Influence, Influence Exponent와 함께 control bone별 influence를 만듭니다.
Tip Influence TipSpringInfluence 1.0; 01 chain의 tip 쪽 Spring output 비율입니다. Use Root To Tip Influence가 켜짐 root와 tip 값 사이의 보간 끝값입니다.
Influence Exponent ChainInfluenceExponent 1.0; 최소 0.1, UI 0.14.0 root-to-tip 보간 곡선의 지수입니다. Use Root To Tip Influence가 켜짐 validator는 0.1 미만을 오류로 처리합니다.

OverAnim | Position

UI 이름 C++ 속성 기본값 / 단위 / 범위 영향 표시 조건 연동
Spring Position bSpringPosition true position spring 채널을 활성화합니다. 항상 꺼지면 Position 하위 속성은 비활성 상태가 되며 Signal도 지원되지 않습니다.
Simulation Space PositionSimulationSpace Parent position spring을 Parent, Component, World 기준 중 하나에서 계산합니다. Spring Position이 켜짐; 꺼지면 read-only Position channel만 사용합니다.
Follow Speed PositionFollowSpeed 2.0; 0 이상 UI 범위 0.110.0 position target을 따라가는 속도입니다. 낮을수록 지연이 커집니다. Spring Position이 켜짐; 꺼지면 read-only runtime validation은 유한한 0 초과 값을 요구합니다. 최종 speed에는 SimpleLag의 역비율이 항상 곱해집니다.
Bounciness PositionBounciness 0.3; 01 position channel의 overshoot·wobble 양입니다. Spring Position이 켜짐; 꺼지면 read-only 최종 값에는 SimpleBounce의 additive span이 항상 적용됩니다.

OverAnim | Rotation

UI 이름 C++ 속성 기본값 / 단위 / 범위 영향 표시 조건 연동
Spring Rotation bSpringRotation true rotation spring 채널을 활성화합니다. 항상 세 채널이 모두 꺼지면 module은 inactive입니다.
Simulation Space RotationSimulationSpace Parent rotation spring의 좌표 기준을 Parent, Component, World 중에서 선택합니다. Spring Rotation이 켜짐; 꺼지면 read-only Rotation channel만 사용합니다.
Follow Speed RotationFollowSpeed 2.0; 0 이상 UI 범위 0.110.0 rotation target을 따라가는 속도입니다. Spring Rotation이 켜짐; 꺼지면 read-only validator는 유한한 0 초과 값을 요구합니다. Lag가 반비례 변경합니다.
Bounciness RotationBounciness 0.3; 01 rotation channel의 overshoot·wobble 양입니다. Spring Rotation이 켜짐; 꺼지면 read-only Bounce가 additive 변경합니다.

OverAnim | Scale

UI 이름 C++ 속성 기본값 / 단위 / 범위 영향 표시 조건 연동
Spring Scale bSpringScale true scale spring 채널을 활성화합니다. 항상 세 채널이 모두 꺼지면 module은 inactive입니다.
Simulation Space ScaleSimulationSpace Parent scale spring의 좌표 기준을 Parent, Component, World 중에서 선택합니다. Spring Scale이 켜짐; 꺼지면 read-only Scale channel만 사용합니다.
Follow Speed ScaleFollowSpeed 2.0; 0 이상 UI 범위 0.110.0 scale target을 따라가는 속도입니다. Spring Scale이 켜짐; 꺼지면 read-only validator는 유한한 0 초과 값을 요구합니다. Lag가 반비례 변경합니다.
Bounciness ScaleBounciness 0.3; 01 scale channel의 overshoot·wobble 양입니다. Spring Scale이 켜짐; 꺼지면 read-only Bounce가 additive 변경합니다.

OverAnim | Safety

UI 이름 C++ 속성 기본값 / 단위 / 범위 영향 표시 조건 연동
Preserve Bone Length bPreserveBoneLength false 각 simulated child가 현재 animation segment length를 유지하도록 position output을 제약합니다. Spring Position이 켜짐 Signal impulse나 낮은 follow speed로 joint가 늘어나는 것을 제한합니다.
Enable Output Limits bEnableOutputLimits false final per-bone / chain-wide guard를 활성화합니다. 항상 root-to-tip influence 적용 후 limit이 적용됩니다. 켜야 아래 limit과 SimpleRange가 의미를 가집니다.
Max Position Offset MaxPositionOffset 20 cm; 최소 0, UI 상한 100 cm parent-propagated animation target으로부터 position offset의 상한입니다. Enable Output LimitsSpring Position이 모두 켜짐 0이면 이 limit을 사용하지 않습니다. Range가 비율 변경합니다.
Max Rotation Offset MaxRotationOffsetDegrees 60°; 0180° control bone 하나의 rotation lag 상한입니다. Enable Output LimitsSpring Rotation이 모두 켜짐 0이면 per-bone rotation limit을 사용하지 않습니다. Max Chain Rotation Budget과 함께 작동합니다.
Max Chain Rotation Budget MaxChainRotationDegrees 120°; 0360° 모든 control bone에 누적된 rotation lag 상한입니다. Enable Output LimitsSpring Rotation이 모두 켜짐 0이면 chain-wide limit을 사용하지 않습니다. RangeMax Rotation Offset과 함께 변경합니다.
Max Scale Deviation MaxScaleDeviation 0.5; 최소 0, UI 상한 2.0 animation target scale의 각 축에서 허용할 절대 변화량입니다. Enable Output LimitsSpring Scale이 모두 켜짐 0이면 scale limit을 사용하지 않습니다. Range가 비율 변경합니다.

실행·Response 호환성

항목 동작
Module Phase Dynamics
Signal 지원 Spring Position이 켜져 있을 때만 지원합니다. Rotation 또는 Scale만 켠 경우에는 Response Rule이 이 모듈을 대상으로 할 수 없습니다.
Response Mode Pulse, Sustained를 지원합니다.
Automatic Six-Stage Motion Sustained + AutomaticMotionPhase 조합만 지원합니다. 기본 stage coverage는 Anticipation 비활성, Action 0.65, Overshoot 1.0, Recoil 0.35, Settle 0.1이며 timing role은 Dynamics입니다.
Response parameter type FOverAnimSpringResponseParameters

Pulse는 방향을 가진 일회성 linear impulse이고, Automatic Six-Stage Motion의 Sustained는 terminal ControlBones에 연속 target offset을 제출합니다. 일반 Sustained response는 이 모듈에서 허용되지 않습니다.

공개 Enum

EOverAnimSpringSimulationSpace

PositionSimulationSpace, RotationSimulationSpace, ScaleSimulationSpace가 각각 독립적으로 사용하는 BlueprintType enum입니다. 세 채널이 같은 값을 공유할 필요는 없으며, 선택값은 해당 채널의 spring state를 적분하고 결과를 다시 component transform으로 돌리는 기준을 바꿉니다.

C++ 값 Editor UI 의미
Parent Parent 현재 control point의 parent transform에 상대적인 좌표에서 spring을 계산합니다. parent control point가 없으면 component-space transform을 그대로 사용합니다.
Component Component Skeletal Mesh Component 좌표에서 spring을 계산합니다. parent-relative 변환이나 component의 world transform을 별도로 합성하지 않습니다.
World World component-space transform에 현재 component world transform을 합성한 world 좌표에서 spring을 계산하고, 출력 시 다시 component 좌표로 변환합니다.

Response Rule 파라미터와 입력 조건

Response Rule의 Module Response at 100%에는 FOverAnimSpringResponseParameters가 사용됩니다.

UI 이름 C++ 속성 기본값 / 단위 / 범위 영향 적용 조건 연동
Linear Impulse Scale LinearImpulseScale 100 cm/s; 최소 0 Pulse가 direction에 따라 누적하는 velocity impulse의 크기입니다. One-shot Pulse Master Effect Intensity, resolved magnitude와 곱해진 뒤 Max Linear Impulse로 clamp됩니다.
Max Linear Impulse MaxLinearImpulse 1000 cm/s; 최소 0 누적 가능한 linear impulse의 최대 길이입니다. One-shot Pulse LinearImpulseScale이 만드는 PendingSignalLinearImpulseCS를 제한합니다.
Target Offset Ratio PhaseTargetOffsetRatio 0.08; 00.5, UI 상한 0.25 Automatic phase의 현재 strength를 terminal control bone용 연속 target offset으로 변환하는 region 기준 길이 비율입니다. Sustained + AutomaticMotionPhase direction × resolved magnitude × Master Effect Intensity × 이 비율 × region offset reference length로 계산됩니다. reference length를 얻지 못하면 character height의 25%를 사용합니다.

Response request는 다음 조건을 모두 충족해야 합니다.

  • Spring Position이 켜져 있고, FOverAnimSpringResponseParameters가 해당 Rule에 들어 있어야 합니다.
  • ResolvedMagnitude는 유한하고 0보다 커야 하며 LinearImpulseScale, MaxLinearImpulse도 유한하고 음수가 아니어야 합니다.
  • Signal의 DirectionWS는 NaN이 아니고 정규화 후 0 vector가 아니어야 합니다. Contact point나 contact normal은 요구하지 않습니다.
  • Pulse 이외의 요청은 Automatic Six-Stage Motion의 Sustained여야 합니다. 그 경우 PhaseTargetOffsetRatio00.5여야 합니다.

제한·성능·Validation

안전 제한

  • output limit은 channel별로 independent입니다. Enable Output Limits가 꺼져 있거나 해당 limit이 0이면 그 limit은 적용되지 않습니다.
  • Preserve Bone Length는 Position channel에만 적용됩니다. Rotation/Scale의 output을 제한하려면 각각의 rotation·scale limit이 필요합니다.
  • Max Chain Rotation Budget은 control bone 전체의 남은 rotation budget을 소비하므로, per-bone Max Rotation Offset만으로는 허용되는 누적 회전을 제한하지 않습니다.

성능 특성

  • Spring state와 output transform은 ControlBones 및 전파 대상 control point마다 계산됩니다. control bone 수와 Propagate To Descendants가 영향을 받는 control point 수를 늘립니다.
  • Position, Rotation, Scale 중 꺼진 채널은 해당 채널의 Spring 계산과 Simple knob 해석 대상에서 제외됩니다.

Validation 및 비활성 조건

  • Target Bones는 오류가 아니라 inactive 경고입니다. 모든 Position/Rotation/Scale 채널이 꺼진 경우도 inactive 경고입니다.
  • 각 target bone은 Target Skeleton에 존재하고 preview skeletal mesh에도 있어야 하며, module이 속한 Bone Group의 resolved bone 안에 있어야 합니다. 위반 시 오류 또는 mesh 누락 경고가 발생합니다.
  • 활성 채널의 follow speed는 유한한 0 초과, bounciness는 유한한 01이어야 합니다.
  • Root-to-tip profile을 쓰면 Root/Tip Influence는 01, Influence Exponent0.1 이상이어야 합니다.
  • output limits를 쓰면 position·scale limit은 유한한 0 이상, rotation limit은 0180°, chain rotation budget은 0360°여야 합니다.