개요
인게임 플레이시에는 충돌 처리 문제가 없다가,
시퀀서에서 나이아가라 충돌 모듈이 오류를 일으키는 경우 해결법이다.
내용
핵심은 시퀀서가 시간을 다루는 방식(Desired Age/Seek, 비실시간 델타타임, 일시정지 등) 때문에
충돌 쿼리/보정(substep)이 건너뛰어지거나 부정확해지는 데 있다.
따라서 시스템 라이프 사이클 세팅이 큰 원인이다.
해결법
Desired Age 대신 Tick Delta Time, 또는 Desired Age No Seek 사용

Seek이란?
타임라인의 특정 시점으로 “점프(Seek)”하는 것을 말한다.
이때 나이아가라를 빠르게 시뮬레이션하면서 많은 프레임을 큰 델타로 건너뛴다.
해결법 상세
🧠 문제 이해
- ⚙️ 나이아가라 이펙트: Collision 모듈에서 Ray Trace(트레이스/라인 트레이스 기반) 사용
- 🎮 게임 플레이: 정상 충돌
- 🎬 시퀀서 재생: 지면을 관통 후 하강
🤔 왜 그럴까? (원인 후보)
- 🧭 Age Update Mode(Desired Age/Seek) 문제
시퀀서는 타임라인의 특정 시점으로 “점프(Seek)”하면서 나이아가라를 빠르게 재현(sim) 하는데, 이 때 많은 프레임을 큰 델타로 건너뜁니다. - ⏱️ 큰 ΔTime & 서브스텝 부족
시퀀서는 종종 비실시간(예: 30→1프레임 점프)으로 평가합니다. 충돌 모듈에 서브스텝/최대 스텝 수가 부족하면 입자가 바닥 아래로 통과합니다.
🛠️ 바로 적용할 해결책 (우선순위)
✅ 1) 시퀀서의 나이아가라 “Age Update Mode”를 바꾸기 (가장 효과적)
- 🎛️ Niagara 트랙 선택 → 트랙 속성(Properties)
Age Update Mode 를- Tick Delta Time (권장) 으로 변경
→ 시퀀서도 게임과 같은 방식으로 매 프레임을 틱하며 충돌이 안정적으로 작동 - 또는 Desired Age (No Seek)
→ 시간 점프 시 재시뮬(Seek) 하지 않아서 충돌 스킵이 크게 줄어듭니다.
- Tick Delta Time (권장) 으로 변경
- 💡 “Desired Age”를 꼭 써야 한다면, Seek Delta 를 아주 작게(예: 0.0083~0.016s) 설정해 서브스텝 효과를 만드세요.
✅ 2) 나이아가라 시스템/모듈의 서브스텝 & 델타 제한 강화
- 🧩 System/Emitter 설정에서
- 고정 ΔTime(예: 1/60) 또는 Max Tick ΔTime(클램프) 값을 설정
- Determinism 활성화 시 Fixed Tick Delta Time 도 함께 설정
- 🧲 Collision 모듈에서
- 서브스텝/최대 스텝 수/최대 반복 횟수(이름은 버전마다 다름: Max Substeps, Max Iterations, Step Size 등)를 상향
- Sweep/Continuous 방식(지원 시) 사용
- 반발/마찰 값 조정으로 재침투 최소화
- 💡 큰 중력/속도면 Max Speed/Accel 제한을 걸어 터널링 완화
✅ 3) “Pause 중에도 Tick” 허용
- 🧩 NiagaraComponent 선택 → Details
- Tick Even When Paused 체크 (컴포넌트)
- 🧑💻 C++일 경우:→ 시퀀서가 월드를 일시정지로 평가해도 충돌/트레이스가 정상 평가됩니다.
- NiagaraComp->PrimaryComponentTick.bTickEvenWhenPaused = true; // (필요시) 액터에도 PrimaryActorTick.bTickEvenWhenPaused = true;
✅ 4) 충돌 방식 검토 (혼용 시 주의)
- 🧪 Ray Trace(라인 트레이스) 만 쓰는 게 목표라면 계속 사용하되,
- Trace 채널/프로파일 이 지면 메시와 맞는지 재확인 (Query Enabled, Block?)
- Draw Debug 옵션으로 실제 히트 확인
- 🧊 Scene Depth 기반 충돌을 일부라도 섞었다면 → Distance Field 또는 Ray Trace 로 통일 권장
- Project Settings → Rendering → Generate Mesh Distance Fields 활성화
- 지면 메시 Affect Distance Field 켜기
✅ 5) (시네마틱 최상 안정) Sim Cache 사용
- 🧷 Niagara System 에디터 → Toolbar: Sim Cache → New Cache 생성 & Bake
- 필요 시 Warmup 설정 포함
- 🎬 시퀀서에서 해당 Sim Cache 트랙을 추가/할당
→ 실제 플레이에서 충돌 포함한 결과를 캐싱하고, 시퀀서는 캐시만 재생하므로 프레임/시킹/일시정지 영향을 제거.
→ 무결성 최고, 렌더에도 강력 추천 ✔️
🔎 추가 체크리스트 (디버깅 팁)
- 🧭 Niagara 트랙 → Play Rate 가 1.0인지 확인 (비정상 배속은 터널링 유발)
- 🧱 Ground Mesh 충돌 세팅: Collision Enabled(Queries), 적절한 채널 Block
- 🧪 라인 트레이스 디버그: Niagara CollisionQuery/Trace 모듈의 Debug Draw 켜서 히트여부 확인
- 🌍 레벨 스트리밍/월드 파티션: 시퀀서 평가 시 지면 레벨이 로드/Visible 상태인지
- 📦 Emitter 타입: Ray Trace는 CPU 시뮬레이션에서만 정상. GPU Emitter에선 동일 방식 적용X
- 🧭 Bounds: Niagara Fixed Bounds 설정(너무 타이트하면 시퀀서 카메라/포커싱에서 컬링될 수 있음)
- 🎞️ Movie Render Queue 사용 시
- Game Overrides → Use Fixed Time Step (예: 1/60)
- 또는 Sim Cache로 확정 후 렌더
📦 시네마틱-안정 워크플로 (추천)
- 💡 개발 중엔: Age Update Mode = Tick Delta Time + 충돌 서브스텝 상향 + Tick Even When Paused
- 🎥 최종 렌더 전엔: Sim Cache로 굳히기 (한 번 베이크 → 어떤 재생/렌더 조건에서도 동일 결과)
📋 요약
- ❗원인: 시퀀서의 시간 “Seek/비실시간 델타/일시정지”로 인해 충돌 쿼리·서브스텝이 건너뛰어져 바닥을 놓침
- ✅해결:
- Age Update Mode = Tick Delta Time (또는 Desired Age No-Seek)
- Seek Delta 축소 + 고정 ΔTime/서브스텝 강화
- Tick Even When Paused 활성화
- (옵션) 충돌을 Distance Field/Trace로 일원화
- (최종) Sim Cache로 캐싱 재생
'이펙트 (FX) > 이펙트 팁 : Unreal' 카테고리의 다른 글
| [Unreal] 텍스처 익스포트 기능 만들기 (스크립팅된 에셋 액션) (1) | 2025.08.15 |
|---|---|
| [Unreal] 스크립팅된 에셋 액션 만들기 (Scripted Asset Actions) (0) | 2025.08.15 |
| [Unreal/Houdini] Fluid VAT 사용법 (Vertex Animation Texture, Dynamic Remeshing) (0) | 2025.08.12 |
| [Unreal/Niagara] 나이아가라에서 메시 파티클 충돌 후 회전 멈춤 구현하기 (튜토리얼 소개) (0) | 2025.08.11 |
| [Unreal] '스텔라 블레이드 나이아가라 활용' 요약 (언리얼 페스트 2024 서울) (0) | 2025.08.11 |
댓글