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 Depth와 Maximum 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
GOverAnimMaximumContactDentBulgeContacts가4이므로 Details 값도 그 이상으로 늘어나지 않습니다.