콘텐츠로 이동

Contact Dent + Ring Bulge

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

목적

Contact Dent + Ring Bulge는 gameplay contact point와 contact normal을 기준으로 표면 중심을 안쪽으로 누르고, 그 주변에 바깥쪽 ring을 만드는 signal-driven Shape 모듈입니다. contact shape의 길이값은 모두 Region-relative Effect Radius에서 파생됩니다.

Details 속성

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

Simple

UI 이름 C++ 속성 기본값·단위·범위 변경 영향과 상호작용
Impact SimpleImpact 1.0, 단위 없음, 0–5 authored Maximum Dent DepthMaximum Ring Height에 같은 비율을 곱해 dent:ring 균형을 보존합니다.
Reach SimpleReach 1.0, 단위 없음, 0–5 authored Effect Radius에 비율을 곱합니다. 나머지 길이·변위가 radius 비율이므로 contact 전체의 절대 크기가 함께 변합니다.
Focus SimpleFocus 1.0, 단위 없음, 0–5 authored Dent Falloff·Ring Falloff에는 정비율, Dent Radius에는 가중치 0.5의 역비율을 적용합니다. 2.0은 falloff를 두 배로 하고 radius는 약 0.707배로 줄입니다.
Rebound SimpleRebound 1.0, 단위 없음, 0–5 authored Maximum Dent Depth에는 역비율, Maximum Ring Height에는 정비율을 적용하여 안쪽 dent와 바깥 ring의 균형을 바꿉니다. 전체 impact 크기는 SimpleImpact가 담당합니다.

Simple 값은 Detailed 필드를 수정하지 않습니다. runtime은 현재 레이아웃과 관계없이 authored Detailed 값으로부터 위 필드를 해석합니다.

OverAnim | Contact Shape

UI 이름 C++ 속성 기본값·단위·범위 변경 영향과 상호작용
Effect Radius EffectRadiusRatio 0.55, 0.05–2.0 Region의 measured bounds radius와 focal reference radius 중 큰 값에 곱하는 contact 반지름입니다. 최종 값에는 SimpleReach가 항상 곱해집니다.
Dent Radius DentRadiusRatio 0.45, 0.05–1.0 Effect Radius 안에서 central inward dent가 차지하는 반지름 비율입니다. 최종 값에는 SimpleFocus의 가중 역비율이 항상 곱해집니다.
Ring Start RingInnerRadiusRatio 0.35, 0–1.0 Effect Radius에 대한 peripheral ring의 안쪽 반지름 비율입니다.
Ring End RingOuterRadiusRatio 1.0, 0.05–1.0 Effect Radius에 대한 peripheral ring의 바깥 반지름 비율입니다. analytic shape는 Ring End > Ring Start를 요구합니다. 해당 관계는 Details에서 자동 clamp되지 않습니다.
Normal Depth NormalDepthRatio 0.75, 0.05–2.0 contact normal 방향으로 effect를 허용하는 slab depth의 Effect Radius 비율입니다. 반대편 표면까지 동일한 강도로 이동하는 범위를 제한합니다.
Maximum Dent Depth MaximumDentDepthRatio 0.15, 0–0.5 authored 값에 SimpleImpact × inverse(SimpleRebound)를 곱한 최대 inward displacement 비율입니다. master effect intensity 및 response의 Dent Strength가 이후에 추가로 곱해집니다.
Maximum Ring Height MaximumBulgeHeightRatio 0.10, 0–0.5 authored 값에 SimpleImpact × SimpleRebound를 곱한 최대 outward ring displacement 비율입니다. master effect intensity 및 response의 Ring Bulge Strength가 이후에 추가로 곱해집니다.
Dent Falloff DentFalloffExponent 1.5, 0.25–8.0 central dent의 radial weight 지수입니다. 최종 값에는 SimpleFocus가 항상 곱해집니다.
Ring Falloff RingFalloffExponent 1.25, 0.25–8.0 ring bell profile의 weight 지수입니다. 최종 값에는 SimpleFocus가 항상 곱해집니다.
Maximum Simultaneous Contacts MaximumActiveContacts 4, 1–4 이 Region에 동시에 유지할 independent contact slot 수입니다. runtime 상한도 4입니다. slot이 찬 상태에서는 priority, magnitude, sequence가 더 높은 새 contact만 가장 약한 contact을 대체합니다.

OverAnim (상속)

UI 이름 C++ 속성 기본값·단위·범위 변경 영향
Input Composition CompositionMode Re-Skinning 이 모듈 constructor가 설정하는 기본값입니다. Re-Skinning은 현재 control-point transform을 기준으로 module을 평가합니다.

실행·Signal·Response 범위

항목 동작
Phase Shape
Signal 지원합니다. 그러나 valid contact point와 contact normal을 가진 Signal만 effect request를 수락합니다.
Response Mode Pulse 전용입니다. Sustained는 지원하지 않습니다.
Automatic Six-Stage Motion 호환되지 않습니다. 이 모듈은 gameplay contact point와 normal이 필요한 contact shape이므로 Automatic Six-Stage Motion Response를 만들 수 없습니다.

Response Rule 전용 파라미터

UOverAnimContactDentBulgeModule의 Module Response struct는 FOverAnimContactDentBulgeResponseParameters입니다.

UI 이름 C++ 속성 기본값·단위·범위 영향
Dent Strength DentStrengthAtMax 1.0, 0–2.0 full response strength에서 Maximum Dent Depth에 곱합니다. 0이면 dent만 제거되고 ring은 계속 처리됩니다.
Ring Bulge Strength BulgeStrengthAtMax 1.0, 0–2.0 full response strength에서 Maximum Ring Height에 곱합니다. 0이면 ring만 제거되고 dent는 계속 처리됩니다.
Contact Radius RadiusScale 1.0, 0.25–2.0 module의 Region-relative Effect Radius에 적용하는 response별 배율입니다.

Signal 입력 규칙

요청은 Pulse여야 하며, 유효한 Mesh Component, 양수·finite resolved magnitude 및 blend weight, 유효 범위의 위 Response 파라미터를 필요로 합니다. contact frame 초기화는 다음 값을 모두 검사합니다.

Signal 필드 필요 조건 runtime 동작
bHasContactPoint / ContactPointWS flag가 true이고 값이 finite component space contact point로 변환합니다. 없거나 NaN이면 요청을 거부합니다.
bHasContactNormal / ContactNormalWS flag가 true, 값이 finite이며 0 vector가 아님 component space normal로 변환·정규화합니다. 없거나 NaN/zero이면 요청을 거부합니다.
ContactBoneName 선택 사항. 지정한다면 Mesh Component에서 bone을 찾을 수 있어야 함 유효한 bone이면 contact point/normal을 그 bone local space로 보관하여 response 동안 따라갑니다. bone을 찾지 못하면 요청을 거부합니다. 비어 있으면 component-space contact frame을 사용합니다.

Slot Name이 비어 있지 않고 기존 active contact과 같으면 해당 contact의 weight state를 갱신합니다. 비어 있으면 매 요청을 독립 contact로 취급합니다.

안전·성능·검증

  • effect radius가 0에 가깝거나 contact가 Region center에서 RegionBoundsRadius + EffectRadius보다 멀면 proxy에 추가하지 않습니다.
  • analytic contact shape는 Dent Radius <= Effect Radius, Ring Start >= 0, Ring End > Ring Start, Ring End <= Effect Radius, 양수 normal depth와 finite falloff exponent를 요구합니다. 이 조건을 만족하지 않는 shape는 sample을 만들지 않습니다.
  • active contact은 fixed tick에서 envelope weight를 갱신하며, inactive 상태가 되면 제거됩니다. Maximum Simultaneous Contacts가 많을수록 동시에 보관·평가하는 contact 수가 늘어납니다.
  • 현재 public runtime constant GOverAnimMaximumContactDentBulgeContacts4이므로 Details 값도 그 이상으로 늘어나지 않습니다.