PART 1 · 강의 2/3

이미터와 모듈 구조

Niagara의 Emitter 스택 구조와 모듈 실행 순서를 깊이 있게 이해합니다.

01

Emitter 스택 구조

6개의 그룹으로 구성된 실행 스택

Niagara Emitter는 6개의 그룹(Group)으로 구성된 스택 구조를 가집니다. 각 그룹은 특정 시점에 실행되며, 그룹 내부의 모듈은 위에서 아래로 순차 실행됩니다.

Emitter Spawn (1회 실행)
Emitter Properties 필수
Emitter Update (매 프레임)
Emitter State
Spawn Rate / Spawn Burst Instantaneous
Particle Spawn (파티클 생성 시)
Initialize Particle
Add Velocity
Shape Location (Sphere, Box, Cylinder 등)
Particle Update (매 프레임, 파티클 당)
Particle State
Gravity Force / Point Force / Drag
Scale Color / Scale Sprite Size
Solve Forces and Velocity
Event Handler (이벤트 수신 시)
Receive Event → 이벤트 응답 모듈
Render (렌더 패스)
Sprite / Mesh / Ribbon / Light Renderer
System 레벨 그룹

System에도 System SpawnSystem Update 그룹이 있습니다. 이 그룹은 모든 Emitter보다 먼저 실행되어, Emitter 간 공유 데이터를 설정하거나 시스템 전체의 동작을 제어합니다.

02

모듈 실행 순서와 데이터 흐름

프레임당 실행 흐름 이해하기

매 프레임마다 Niagara는 다음 순서로 모듈을 실행합니다.

System
Spawn/Update
Emitter
Spawn/Update
Particle
Spawn
Particle
Update
Render

실행 컨텍스트별 특징

그룹 실행 시점 반복 대상 접근 가능 데이터
System Spawn System 생성 시 1회 없음 System 파라미터
System Update 매 프레임 없음 System 파라미터
Emitter Spawn Emitter 시작 시 1회 Emitter당 1회 System + Emitter 파라미터
Emitter Update 매 프레임 Emitter당 1회 System + Emitter 파라미터
Particle Spawn 파티클 생성 시 새 파티클마다 System + Emitter + Particle 파라미터
Particle Update 매 프레임 모든 활성 파티클 System + Emitter + Particle 파라미터
모듈 순서가 중요합니다

같은 그룹 내의 모듈은 위에서 아래로 순차 실행됩니다. 예를 들어, Add VelocityInitialize Particle 위에 배치하면, 속도가 초기화에 의해 덮어쓰여질 수 있습니다. 드래그 앤 드롭으로 모듈 순서를 변경할 수 있습니다.

03

주요 내장 모듈 레퍼런스

자주 사용하는 기본 모듈 파라미터 정리

Emitter Update 모듈

모듈명 주요 파라미터 설명
Emitter State Life Cycle Mode, Loop Behavior 이미터의 활성/비활성/루프 상태를 관리
Spawn Rate SpawnRate (float) 초당 파티클 생성 수. Dynamic Input으로 시간에 따라 변경 가능
Spawn Burst Instantaneous SpawnCount (int) 한 번에 지정된 수의 파티클을 즉시 생성
Spawn Per Frame SpawnCount (int) 매 프레임마다 고정된 수의 파티클 생성

Particle Spawn 모듈

모듈명 주요 파라미터 설명
Initialize Particle Lifetime, Color, Sprite Size, Mass 파티클의 초기 속성 일괄 설정
Add Velocity Velocity (Vector) 초기 속도 벡터 추가. 여러 개 중첩 가능
Shape Location Shape Primitive, Radius Sphere, Box, Cylinder, Torus 등 스폰 영역 지정
Set (Variable) 선택한 변수 특정 Particle Attribute를 직접 설정

Particle Update 모듈

모듈명 주요 파라미터 설명
Particle State Kill Particles When Lifetime Has Elapsed 수명이 다한 파티클 자동 제거
Gravity Force Gravity (Vector, 기본: 0,0,-981) 중력 가속도 적용
Drag Drag (float) 속도에 비례하는 저항력 적용
Scale Color Scale Color (Color Curve) Normalized Age에 따라 색상/알파 변화
Solve Forces and Velocity - 누적된 힘을 속도와 위치에 반영 (반드시 힘 모듈 뒤에 배치)
Solve Forces and Velocity

힘(Force) 관련 모듈을 사용할 때는 반드시 Solve Forces and Velocity 모듈을 Particle Update 스택의 마지막(렌더러 전)에 배치해야 합니다. 이 모듈이 누적된 힘을 실제 위치 변화로 변환합니다. 빠뜨리면 힘이 적용되지 않습니다.

04

Module과 Item의 차이

편집 가능한 모듈과 고정된 아이템

Niagara 스택에 배치되는 요소는 크게 ModuleItem으로 나뉩니다. 모든 Module은 Item이지만, 모든 Item이 Module인 것은 아닙니다.

구분 Module Item (Non-Module)
정의 사용자가 편집/생성 가능한 스크립트 시스템이 관리하는 고정 요소
편집 노드 그래프로 내부 로직 수정 가능 프로퍼티 값만 변경 가능
예시 Add Velocity, Gravity Force, Scale Color Emitter Properties, Sprite Renderer
재사용 콘텐츠 브라우저에 에셋으로 저장 가능 해당 Emitter에 종속
Emitter Properties (Item) 주요 설정
Emitter Properties { Sim Target: CPUSim | GPUComputeSim // CPU 시뮬레이션: 이벤트 지원, 적은 파티클에 적합 // GPU 시뮬레이션: 대규모 파티클, 이벤트 미지원 Calculate Bounds Mode: Dynamic | Fixed // Dynamic: 매 프레임 바운드 계산 (정확하지만 비용 증가) // Fixed: 고정 바운드 (성능 좋지만 잘릴 수 있음) Local Space: true | false // true: 이미터 위치 기준 로컬 좌표 // false: 월드 좌표 (기본값, 대부분의 경우 사용) Determinism: true | false // true: 동일한 시드에서 항상 같은 결과 보장 }
Sim Target 선택 가이드

CPUSim: 이벤트 핸들러가 필요하거나, 파티클 수가 적은 경우 (수백~수천 개). GPUComputeSim: 파티클 수가 많거나 (수만~수백만 개), Simulation Stage/Neighbor Grid가 필요한 경우. GPU Sim에서는 이벤트가 동작하지 않으므로 Data Channel을 사용해야 합니다.

05

Emitter 재사용과 상속

Parent Emitter, Versioning, 에셋 관리

Niagara Emitter는 독립 에셋으로 저장할 수 있어, 여러 System에서 재사용이 가능합니다.

Parent Emitter (상속)

Emitter는 Parent Emitter를 지정하여 상속 관계를 만들 수 있습니다. Parent의 모듈과 설정을 그대로 가져오면서, 필요한 부분만 오버라이드할 수 있습니다.

Emitter 상속 구조
BaseFireEmitter (Parent) └ Emitter Update: Spawn Rate = 50 └ Particle Spawn: Initialize, Add Velocity └ Particle Update: Gravity, Scale Color └ Render: Sprite Renderer SmallFireEmitter (Child - BaseFireEmitter 상속) └ Override: Spawn Rate = 20 // 오버라이드Override: Lifetime = 1.5 // 오버라이드// 나머지는 Parent에서 상속 LargeFireEmitter (Child - BaseFireEmitter 상속) └ Override: Spawn Rate = 200 // 오버라이드Added: Point Attractor // 모듈 추가// 나머지는 Parent에서 상속

Emitter Versioning

UE5.5+에서는 Emitter Versioning을 지원합니다. Emitter의 버전을 관리하여, 이미 배치된 System에 영향을 주지 않고 Emitter를 업데이트할 수 있습니다.

에셋 관리 모범 사례

1) 공통 동작은 Parent Emitter로 추출하여 재사용합니다. 2) System은 특정 상황(폭발, 비, 불꽃 등)에 맞게 Emitter를 조합합니다. 3) 에셋 이름에 접두사를 사용합니다: NS_(System), NE_(Emitter), NM_(Module).

SUMMARY

핵심 요약

  • Emitter 스택은 6개 그룹으로 구성: Emitter Spawn/Update, Particle Spawn/Update, Event Handler, Render
  • 모듈은 각 그룹 내에서 위에서 아래로 순차 실행되며, 순서가 결과에 영향을 줍니다.
  • 실행 순서: System Spawn/Update → Emitter Spawn/Update → Particle Spawn → Particle Update → Render
  • Module은 사용자가 편집/생성 가능한 스크립트이고, Item은 시스템이 관리하는 고정 요소입니다.
  • Sim Target에서 CPU와 GPU 시뮬레이션을 선택할 수 있으며, GPU Sim은 이벤트를 지원하지 않습니다.
  • Emitter는 Parent 상속Versioning으로 재사용과 관리가 용이합니다.
PRACTICE

도전 과제

배운 내용을 직접 실습해보세요

실습 1: 이미터 스택 단계 실험

빈 Emitter를 만들고 Emitter Spawn, Emitter Update, Particle Spawn, Particle Update 각 단계에 모듈을 하나씩 추가하며 실행 시점의 차이를 확인하세요. Spawn에서 색상 설정 vs Update에서 색상 변경의 차이를 관찰하세요.

실습 2: 모듈 순서 변경 실험

Particle Update 스택에서 Gravity Force와 Drag 모듈의 순서를 바꿔보세요. Add Velocity 후 Scale Velocity를 추가할 때와 순서를 반대로 할 때의 파티클 궤적 차이를 비교하세요.

심화 과제: 커스텀 이미터 템플릿 제작

프로젝트에서 자주 사용할 기본 이미터 구성(Spawn Rate + Initialize + Gravity + Color Fade + Sprite Renderer)을 만들고, 에셋으로 저장하여 재사용 가능한 템플릿으로 등록하세요.