콘텐츠로 이동

Squash & Stretch

공개 타입: UOverAnimSquashStretchModule
헤더: OverAnimation/Asset/OverAnimModule.h
실행 Phase: Shape

목적

Squash & Stretch는 Signal Response에 따라 Bone Group의 주축 길이와 단면을 변형하는 Shape 모듈입니다. Span(길이 구간)을 지정한 경우에는 두 endpoint 사이의 길이·silhouette·attachment propagation을 계산하고, Span을 지정하지 않은 경우에는 pivot과 axis를 기준으로 Region shape을 변형합니다.

Details 속성

Module ID, Module Name, Enabled, Order Within Module Phase는 Details customization에서 숨겨집니다. Input Composition은 상속된 Details 노출 속성입니다.

Optional Span (OverAnim | Span)

Details customization은 속성 위에 다음 저작 도구와 상태를 표시합니다. 이 둘은 직렬화된 C++ 속성이 아닙니다.

UI 동작
Auto Configure 선택한 Bone Group의 명시적 Affected Bones에서 연결된 primary chain을 찾아 Span Start, Span End를 채우고, 두 endpoint에서 분기하는 기존 Region을 Attachment Targets에 추가합니다. 새 Bone Group을 만들거나 이름을 바꾸지 않습니다. 기존 span 또는 attachment가 있으면 덮어쓰기 전 확인합니다.
Shape Scope 두 endpoint가 모두 있으면 Anatomical Span, 하나만 있으면 Incomplete Span, 둘 다 없으면 Local Region을 표시합니다.

Auto Configure에는 Target Skeleton과 같은 parent-child chain에 연결된 명시적 Affected Bones가 최소 2개 필요합니다. 계층 확장으로만 포함된 bone은 primary span 후보가 아닙니다.

UI 이름 C++ 속성 기본값·단위·범위 표시 조건·변경 영향
Span Start SpanStartBone None 해부학적 길이 구간의 첫 bone입니다. Span End와 함께 지정되어야 span propagation이 활성화됩니다. 두 값 중 하나만 있으면 Automatic Six-Stage Motion Response를 만들 수 없습니다.
Span End SpanEndBone None 길이 구간의 마지막 bone입니다. Span Start의 ancestor 또는 descendant이며 같은 Region 안에 있어야 합니다. runtime에서 두 endpoint control point를 찾지 못하면 effect가 생성되지 않습니다.
Anchor Policy AnchorPolicy Keep Start Fixed Span을 사용할 때 표시됩니다. Keep Start Fixed, Keep End Fixed, Split From Center, Keep Contact Fixed로 span pivot을 정합니다. Keep Contact Fixed는 Signal의 유효한 contact point를 요구합니다.
Silhouette Profile SpanProfileMode Smooth Silhouette (Recommended) Span을 사용할 때 표시됩니다. Uniform Scale (Legacy), Tapered Linear, Smooth Silhouette (Recommended), Custom Silhouette 중 span length와 단면의 전이 profile을 정합니다.
Profile Sharpness SpanProfileExponent 1.0, 0.1–8.0 Silhouette Profile = Custom Silhouette일 때 표시됩니다. custom profile의 지수입니다.
Silhouette Balance SilhouetteBalance Balanced Span을 사용할 때 표시됩니다. span 단면 강조를 Balanced, Emphasize Span Start, Emphasize Span End로 배치합니다.
Balance Strength SilhouetteBalanceStrength 0.4, 0–0.8 Silhouette Balance != Balanced일 때 표시됩니다. Start/End 쪽의 profile 치우침량입니다.
Attachment Targets AttachmentTargets 빈 배열 Span을 사용할 때 표시됩니다. endpoint의 translation을 다른 Region으로 전파하는 참조 목록입니다. 이 목록은 source module의 shape mask에 target Region을 추가하지 않습니다.

두 endpoint 중 하나만 설정한 Incomplete Span은 validation error입니다. Local Region에서는 저장된 Attachment Targets가 비활성 상태라는 warning이 표시됩니다.

Attachment Targets 배열의 각 FOverAnimSquashAttachmentTarget 항목은 다음 순서로 표시됩니다.

UI 이름 C++ 속성 기본값·단위·범위 표시 조건·변경 영향
Dependent Region BoneGroupName None 전파 대상 Bone Group 이름입니다. 이름이 비어 있거나 Overall Weight가 0에 가까우면 attachment edge를 만들지 않습니다.
Endpoint Endpoint End Endpoint source span의 Start Endpoint 또는 End Endpoint translation을 선택합니다.
Overall Weight PropagationWeight 1.0, 0–1 대상 Region에 적용할 endpoint translation의 전체 weight입니다.
Propagation Profile FalloffMode Uniform Uniform은 대상 Region을 하나의 attached mass처럼 이동하고, Chain Distance는 target Region root에서 tip까지 bone별 weight를 계산합니다.
Root Weight RootWeight 1.0, 0–1 Propagation Profile = Chain Distance일 때 표시됩니다. target Region chain root의 propagation weight입니다.
Tip Weight TipWeight 0.0, 0–1 Propagation Profile = Chain Distance일 때 표시됩니다. target Region chain tip의 propagation weight입니다.
Distance Exponent FalloffExponent 1.0, 0.1–8.0 Propagation Profile = Chain Distance일 때 표시됩니다. root-to-tip falloff profile의 지수입니다.

OverAnim | Shape

UI 이름 C++ 속성 기본값·단위·범위 표시 조건·변경 영향
Pivot Bone PivotBone None Pivot Mode = Region Bone 또는 Skeleton Bone일 때 표시됩니다. Span을 사용하면 Details customization에서 Pivot Mode와 함께 숨겨집니다. Region Bone은 현재 control point에서, Skeleton Bone은 reference control point를 우선하여 pivot을 찾습니다.
Pivot Mode PivotMode Auto Span을 사용하지 않을 때 표시됩니다. Region Bone/Skeleton BonePivot Bone을 사용하고, Signal OriginOriginWS, Contact PointContactPointWS를 pivot으로 사용합니다. Auto는 첫 번째 유효 control point를 사용합니다.
Prevent Contact Penetration bUseContactPlane true Signal에 유효한 contact point와 normal이 함께 있을 때만 contact plane을 적용합니다. Span이 아니면 shape를 contact plane에 고정하고, Span이면 Anchor Policy = Keep Contact Fixed일 때도 contact plane에 고정합니다. contact data가 없으면 이 toggle만으로 요청을 거부하지 않습니다.
Axis Mode AxisMode LocalZ Span을 사용하지 않을 때 primary axis를 정합니다. LocalX/Y/Z는 pivot transform 축, Signal DirectionDirectionWS, Contact NormalContactNormalWS를 씁니다. Span을 사용하면 두 endpoint 위치 차이가 axis가 되어 이 값은 primary axis 계산에 사용되지 않습니다.
Mass Preservation VolumePreservation 1.0, 0–1 주축 squash에 대응하는 단면 확장량을 조정합니다. Silhouette Profile도 secondary scale 계산에 함께 전달됩니다.

OverAnim | Safety

UI 이름 C++ 속성 기본값·단위·범위 변경 영향
Maximum Width Scale MaxSecondaryScale 2.0, >= 1 계산된 단면 scale의 최종 상한입니다. runtime에서 1.0 이상으로 보정됩니다.
Maximum Length Scale MaxPrimaryScale 3.0, >= 1 Signal Response의 primary scale 최종 상한입니다. runtime에서 1.0 이상으로 보정됩니다.

OverAnim (상속)

UI 이름 C++ 속성 기본값·단위·범위 변경 영향
Input Composition CompositionMode Additive Offset Additive Offset은 이전 compose 결과에 displacement를 더하고, Re-Skinning은 현재 control-point transform을 기준으로 다시 평가합니다.

실행·Signal·Response 범위

항목 동작
Phase Shape
Signal 지원합니다.
Response Mode Pulse, Sustained를 지원합니다. Sustained는 해당 slot을 유지하는 Signal이 들어오는 동안 target magnitude와 polarity를 갱신합니다.
Automatic Six-Stage Motion 호환됩니다. module이 enabled이고 이름이 있으며, Span을 사용할 때 Span StartSpan End가 모두 있거나 둘 다 비어 있어야 합니다. Span이 없고 Pivot ModeRegion Bone 또는 Skeleton Bone이면 Pivot Bone이 필요합니다. Contact Point, Contact Normal, Keep Contact Fixed에 의존하는 설정은 contact data가 필요한 Response이므로 Automatic Six-Stage Motion으로 생성할 수 없습니다.

공개 Enum

EOverAnimSquashAxisMode

AxisMode가 사용하는 BlueprintType enum입니다. Span이 없을 때만 primary axis를 결정하며, Span을 사용하면 두 endpoint 위치 차이가 axis가 됩니다.

C++ 값 Editor UI 의미
LocalX Local X 선택한 pivot transform의 local X 축을 primary axis로 사용합니다.
LocalY Local Y 선택한 pivot transform의 local Y 축을 primary axis로 사용합니다.
LocalZ Local Z 선택한 pivot transform의 local Z 축을 primary axis로 사용합니다.
SignalDirection Signal Direction Signal의 finite, non-zero DirectionWS를 component space로 변환하여 primary axis로 사용합니다. 유효한 방향이 없으면 요청을 거부합니다.
ContactNormal Contact Normal Signal의 finite, non-zero ContactNormalWS를 component space로 변환하여 primary axis로 사용합니다. 유효한 normal이 없으면 요청을 거부합니다.

EOverAnimSquashPivotMode

PivotMode가 사용하는 BlueprintType enum입니다. Span이 없을 때 shape의 pivot transform 또는 pivot location을 정합니다.

C++ 값 Editor UI 의미
BoneGroupPivot Region Bone PivotBone을 현재 Bone Group control point에서 찾아 그 transform을 pivot으로 사용합니다.
SignalOrigin Signal Origin Signal의 finite OriginWS를 component space pivot으로 사용합니다. Mesh Component 또는 Origin이 없으면 요청을 거부합니다.
ContactPoint Contact Point Signal의 유효한 ContactPointWS를 component space pivot으로 사용합니다. contact point가 없으면 요청을 거부합니다.
Auto Auto 첫 번째 유효 control point transform을 pivot으로 사용합니다.
SkeletonBone Skeleton Bone PivotBone을 reference control point에서 우선 해석하여 skeleton 기준 pivot으로 사용합니다.

EOverAnimSquashAnchorPolicy

AnchorPolicy가 사용하는 BlueprintType enum입니다. Span이 있을 때 길이 변화로 인해 endpoint가 이동하는 기준점을 정합니다.

C++ 값 Editor UI 의미
PreserveStart Keep Start Fixed Span Start endpoint를 고정하고 길이 변화량을 End 방향에 적용합니다.
PreserveEnd Keep End Fixed Span End endpoint를 고정하고 길이 변화량을 Start 방향에 적용합니다.
Centered Split From Center Span midpoint를 기준으로 Start와 End의 이동량을 나눕니다.
ContactAnchored Keep Contact Fixed Signal의 유효한 contact point를 pivot으로 사용합니다. contact point가 없으면 요청을 거부합니다.

EOverAnimSquashAttachmentEndpoint

FOverAnimSquashAttachmentTarget::Endpoint가 사용하는 BlueprintType enum입니다.

C++ 값 Editor UI 의미
Start Start Endpoint source Span Start endpoint의 translation delta를 dependent Region으로 전파합니다.
End End Endpoint source Span End endpoint의 translation delta를 dependent Region으로 전파합니다.

EOverAnimSquashAttachmentFalloffMode

FOverAnimSquashAttachmentTarget::FalloffMode가 사용하는 BlueprintType enum입니다.

C++ 값 Editor UI 의미
Uniform Uniform dependent Region 전체를 하나의 attached mass처럼 같은 weight로 이동합니다.
ChainDistance Chain Distance dependent Region root에서 tip까지 chain distance를 사용해 bone별 propagation weight를 계산합니다. RootWeight, TipWeight, FalloffExponent가 활성화됩니다.

EOverAnimSquashSpanProfileMode

SpanProfileMode가 사용하는 BlueprintType enum입니다. Span을 사용할 때 endpoint 사이의 axial mapping과 secondary silhouette profile을 정합니다.

C++ 값 Editor UI 의미
Uniform Uniform Scale (Legacy) endpoint 사이의 선형 axial interpolation과 일정한 axial derivative를 사용합니다.
LinearCenter Tapered Linear 중앙을 기준으로 선형 taper가 있는 profile을 사용합니다.
SmoothCenter Smooth Silhouette (Recommended) endpoint에서 slope jump가 없도록 부드럽게 들어가고 나오는 중앙 profile을 사용합니다.
PowerCenter Custom Silhouette SpanProfileExponent로 중앙 profile의 지수를 조절합니다.

EOverAnimSquashSilhouetteBalance

SilhouetteBalance가 사용하는 BlueprintType enum입니다. Span cross-section profile의 강조 방향을 정합니다.

C++ 값 Editor UI 의미
Balanced Balanced Start와 End 방향에 대칭인 silhouette profile을 사용합니다.
StartHeavy Emphasize Span Start silhouette emphasis를 Span Start 쪽으로 이동합니다.
EndHeavy Emphasize Span End silhouette emphasis를 Span End 쪽으로 이동합니다.

SpanProfileMode = Uniform이면 cross-section profile이 항상 일정하므로 SilhouetteBalance의 세 값은 시각적 차이를 만들지 않습니다.

Response Rule 전용 파라미터

UOverAnimSquashStretchModule의 Module Response struct는 FOverAnimSquashStretchResponseParameters입니다.

UI 이름 C++ 속성 기본값·단위·범위 표시 조건·영향
Shape Scale at Full Strength PrimaryScaleAtMax 0.65, >= 0.05 response magnitude 1일 때의 primary-axis silhouette scale입니다. 1보다 작으면 squash, 크면 stretch이며 runtime에서 최소 0.05로 보정됩니다.
Authored Anticipation AnticipationAmount 0.0, 0–1 Pulse authored envelope 안의 counter-shape 양입니다. Automatic Six-Stage Motion이 별도로 phase를 공급하는 경우에도 이 필드는 response struct에 남아 있으나 module은 automatic phase의 stage 강도를 사용합니다.
Authored Anticipation Timing AnticipationPeakFraction 0.25, 0.05–0.75 Authored Anticipation > 0일 때 표시됩니다. Attack Time 중 counter-shape peak가 도달하는 비율입니다.
Authored Recovery Overshoot bEnableRebound false Pulse authored envelope 안에서 recovery rebound를 사용할지 정합니다.
Authored Overshoot Scale ReboundPrimaryScaleAtMax 1.08, >= 0.05 Authored Recovery Overshoot가 켜졌을 때 표시됩니다. recovery 단계 primary scale입니다. runtime safety limit은 Maximum Length Scale입니다.
Authored Overshoot Timing ReboundPeakFraction 0.35, 0.05–0.95 Authored Recovery Overshoot가 켜졌을 때 표시됩니다. Release Time에서 rebound peak가 도달하는 비율입니다.

Signal 요청은 양수·finite resolved magnitude, finite이며 0이 아닌 Response polarity, finite Attack/Hold/Release envelope와 위 response struct를 요구합니다. 추가 입력 조건은 선택한 설정에 따라 달라집니다.

설정 요청에 필요한 Signal 데이터 거부 조건
Span 없음 + Axis Mode = Signal Direction finite이고 0이 아닌 DirectionWS Mesh Component 또는 유효 방향이 없으면 거부합니다.
Span 없음 + Axis Mode = Contact Normal bHasContactNormal = true, finite이고 0이 아닌 ContactNormalWS 유효 normal이 없으면 거부합니다.
Span 없음 + Pivot Mode = Signal Origin finite OriginWS Mesh Component 또는 Origin이 없으면 거부합니다.
Span 없음 + Pivot Mode = Contact Point bHasContactPoint = true, finite ContactPointWS 유효 contact point가 없으면 거부합니다.
Span + Anchor Policy = Keep Contact Fixed bHasContactPoint = true, finite ContactPointWS 유효 contact point가 없으면 거부합니다.

안전·성능·검증

  • span 구간은 runtime에서 두 control point와 shape skeleton bone coverage를 해석해야 합니다. 해석하지 못하면 proxy를 만들지 않습니다.
  • Attachment Targets는 enabled module이고 유효한 span일 때만 graph edge가 생성됩니다. source endpoint chain alpha 또는 target Region mask를 해석하지 못하면 attachment propagation plan을 만들지 못합니다.
  • Sustained response는 slot name과 priority가 일치하고 request priority가 현재 priority보다 낮지 않을 때 release됩니다. 그렇지 않으면 release가 거부됩니다.
  • contact-dependent pivot/axis/anchor는 signal 입력이 유효할 때만 effect 요청을 수락합니다. Prevent Contact Penetration은 contact data가 존재할 때에만 shape에 반영됩니다.
  • Maximum Width ScaleMaximum Length Scale은 scale의 최종 안전 제한이며, PrimaryScaleAtMax 자체는 response magnitude와 polarity에 의해 먼저 계산됩니다.