콘텐츠로 이동

Impact Ripple

목적

UOverAnimImpactRippleModule은 gameplay contact point와 normal에서 시작해 표면을 가로질러 이동하는 압축(compression)·전단(shear) 파동을 만드는 Offset / Smear 모듈입니다.

  • 헤더: OverAnimation/Asset/OverAnimModule.h
  • 클래스: UOverAnimImpactRippleModule
  • 실행 Phase: Offset / Smear (EOverAnimModulePhase::Smear)
  • 기본 Input Composition: Additive Offset
  • 기본 Phase 순서: 10 (동일 Phase 내 실행 순서; Details에서는 숨김)

Simple과 Details 공통

Module Id, Module Name, 활성 상태 및 Order Within Module Phase는 Module Stack에서 관리되므로 이 Details 레퍼런스에는 포함하지 않습니다.

UI 이름 소유 C++ 속성 기본값 / 범위 영향
Master Effect Intensity UOverAnimMeshDeformer::MasterEffectIntensity 1.0 / 최소 0.0, UI 최대 3.0 선택한 모듈의 Details에서도 보이는 asset 공용 값입니다. asset 안의 모든 module authored strength를 배율 조정하며, 각 module의 safety limit은 별도로 유지됩니다.
UI 이름 C++ 속성 기본값 / 범위 영향
Input Composition CompositionMode Additive Offset 구성된 결과에 파동 offset을 더합니다. 생성자는 이 값을 AdditiveOffset으로 설정합니다.
Impact SimpleImpact 1.0 / 0–5 authored Maximum Compression과 Maximum Shear에 같은 비율을 곱하여 두 파동의 비율을 보존합니다.
Reach SimpleReach 1.0 / 0–5 authored Effect Radius에 비율을 곱합니다. 다른 길이와 변위는 resolved radius의 비율이므로 파동 전체의 world 크기가 함께 바뀝니다.
Snap SimpleSnap 1.0 / 0–5 authored Compression Travel Time에는 역비율, Damping Rate에는 정비율을 적용합니다. 2.0은 travel time을 절반으로 하고 damping을 두 배로 만듭니다.
Focus SimpleFocus 1.0 / 0–5 authored Wave Width에는 역비율, Oscillation Cycles에는 정비율을 적용합니다. 2.0은 width를 절반으로 하고 cycle 수를 두 배로 만듭니다.

Simple knob의 런타임 해석

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

Simple knob 해석되는 속성 처리
SimpleImpact MaximumCompressionDisplacementRatio, MaximumShearDisplacementRatio 두 authored 값에 같은 비율을 적용하고 각각 0–0.25로 제한합니다.
SimpleReach EffectRadiusRatio authored radius에 비율을 적용하고 0.1–3.0으로 제한합니다.
SimpleSnap CompressionTravelTime, DampingRate travel time에는 역비율, damping에는 정비율을 적용합니다.
SimpleFocus WaveWidthRatio, OscillationCycles wave width에는 역비율, cycle 수에는 정비율을 적용합니다.

Details: Ripple

UI 이름 C++ 속성 기본값 / 범위 영향과 관계
Effect Radius EffectRadiusRatio 1.25 / 0.1–3.0 Region의 측정 bounds radius에 곱하는 최대 표면 이동 반경입니다. Response의 Ripple Radius가 이 결과에 다시 곱해집니다.
Compression Travel Time CompressionTravelTime 0.18 s / 0.03–1.0 s 더 빠른 compression wave가 Effect Radius를 통과하는 시간입니다. Compression Speed는 EffectRadius / CompressionTravelTime으로 계산됩니다.
Maximum Compression MaximumCompressionDisplacementRatio 0.06 / 0.0–0.25 resolved Effect Radius에 대한 contact-normal 방향 최대 변위 비율입니다. Response의 Wave Strength 및 Asset의 Master Effect Intensity가 곱해집니다.
Maximum Shear MaximumShearDisplacementRatio 0.035 / 0.0–0.25 resolved Effect Radius에 대한 접선 방향 최대 변위 비율입니다. Wave Strength 및 Master Effect Intensity가 곱해집니다.
Shear Speed Ratio ShearSpeedRatio 0.62 / 0.1–0.95 shear wave 속도 / compression wave 속도입니다. 1보다 낮으면 뒤따르는 두 번째 파동이 분리되어 보입니다.
Wave Width WaveWidthRatio 0.16 / 0.03–0.5 Effect Radius 대비 authored Gaussian wave band 폭입니다. 최종 값에는 SimpleFocus의 역비율이 항상 곱해집니다.
Surface Depth NormalDepthRatio 0.75 / 0.05–2.0 Effect Radius 대비 normal-depth slab 깊이입니다. 얇은 limb의 반대편 표면까지 같은 세기로 움직이는 것을 제한합니다.
Damping Rate DampingRate 5.0 / 0.0–30.0 지수 시간 감쇠율입니다. 높을수록 ripple이 빨리 사라집니다.
Oscillation Cycles OscillationCycles 0.75 / 0.0–3.0 wave width 하나 안에 들어가는 부호가 바뀌는 lobe 수입니다. 0이면 단일 부드러운 traveling band입니다.

Shear Speed Ratio, Wave Width, Surface Depth, Damping Rate, Oscillation Cycles는 Advanced Display 속성입니다. Advanced Display는 숨기기만 하며 runtime 동작이나 유효성 조건을 바꾸지 않습니다.

Details: Safety

UI 이름 C++ 속성 기본값 / 범위 영향
Maximum Simultaneous Ripples MaximumActiveRipples 4 / 1–4 Region에서 동시에 유지할 독립 ripple 수의 고정 runtime budget입니다. 한도일 때 들어오는 ripple은 현재 가장 약한 ripple보다 높은 priority/magnitude/sequence 우선순위를 가져야 교체합니다. 그렇지 않으면 요청이 거부됩니다.

4는 전역 최대치(GOverAnimMaximumImpactRipples)이므로 더 큰 값을 직렬화해도 runtime에서는 4로 제한됩니다.

실행·Signal·Response 범위

항목 지원 내용
Signal gameplay contact Signal만 사용합니다.
Response Mode Pulse만 지원합니다. Sustained는 지원하지 않습니다.
Response Parameters FOverAnimImpactRippleResponseParameters
Automatic Six-Stage Motion 지원하지 않습니다. 이 모듈은 gameplay contact point와 normal이 필요합니다.
필수 Signal 데이터 bHasContactPoint, bHasContactNormal, 유효한 contact point·0이 아닌 normal. Contact Bone Name은 선택 사항이지만 유효하면 파동을 bone에 고정합니다.

Submit OverAnim Impact Signal, Hit Result, Collision, Trace/Point/Radial Damage 계열이 contact 데이터를 포함하는 Signal 경로입니다. Pulse 이외의 Response Mode는 모듈에서 거부됩니다.

Response Rule 파라미터와 Signal 조건

Response Rule의 Module Parameters는 FOverAnimImpactRippleResponseParameters입니다.

UI 이름 C++ 속성 기본값 / 범위 영향
Wave Strength WaveStrengthAtMax 1.0 / 0.0–2.0 최대 response에서 compression과 shear 변위를 함께 곱합니다.
Ripple Radius RadiusScale 1.0 / 0.25–2.0 모듈의 Region-relative travel radius에 곱하는 response별 배율입니다.

요청이 수락되려면 다음을 모두 만족해야 합니다.

  • Response Mode가 Pulse여야 합니다.
  • WaveStrengthAtMax가 유한수 0.0–2.0, RadiusScale이 유한수 0.25–2.0이어야 합니다.
  • ResolvedMagnitudeBlendWeight가 유한수이며 둘 다 0보다 커야 합니다.
  • Signal에 contact point와 0이 아닌 contact normal이 있어야 하며 NaN을 포함할 수 없습니다.

Contact Bone Name이 비어 있으면 contact frame은 component space에 고정됩니다. 유효한 bone 이름이 있으면 contact point/normal을 그 bone local space에 저장해 이후 pose 변화에 따라 함께 움직입니다. 지정한 bone이 mesh에 없으면 요청은 거부됩니다.

제한 사항과 성능

  • Automatic Six-Stage Motion은 사용할 수 없습니다. 이 모듈의 자동 단계 생성은 명시적으로 거부됩니다.
  • Pulse 전용입니다. Sustained Response Rule은 호환되지 않습니다.
  • ripple의 최대 lifetime은 CompressionTravelTime × (1 + 3 × WaveWidthRatio) / ShearSpeedRatio로 계산됩니다. 이 시간이 지나거나 response weight가 비활성화되면 active ripple이 제거됩니다.
  • contact point가 Region center에서 RegionBoundsRadius + EffectRadius보다 멀면 build 단계에서 해당 ripple은 출력하지 않습니다.
  • active ripple 수는 Maximum Simultaneous Ripples로 제한되므로, 동시에 접촉이 많아도 그 수만큼만 runtime proxy에 전달됩니다.