Niagara는 언리얼 엔진의 실시간 VFX / 파티클 이펙트 시스템이다.
System은 여러 Emitter를 묶는다.
Emitter는 파티클을 생성하고 제어한다.
Module은 파티클의 개별 동작을 만든다.
Parameter는 값 전달과 커스터마이징을 담당한다.
Renderer는 계산된 파티클을 화면에 어떻게 그릴지 결정한다.
Niagara는 데이터와 파라미터를 받아 동적으로 동작하는 시뮬레이션 시스템이다. Blueprint나 C++에서 위치, 방향, 색상, 스케일, 데미지 강도 같은 값을 넘겨주면, 하나의 Niagara System을 다양한 게임 상황에 맞춰 재사용할 수 있다.
Niagara의 핵심 구성요소
Niagara System
└─ Emitter
└─ Module
└─ Parameter
System
Effect Build에 필요한 모든 요소가 담긴 컨테이너

Emitter
파티클을 생성하고, 파티클이 시간에 따라 어떻게 움직이고 변하고 렌더링될지를 제어하는 단위이다.

Emitter Spawn
Emitter가 CPU에서 처음 생성될 때 일어나는 일을 정의한다. 이 그룹을 사용하여 초기 구성 및 디폴트 값을 정의한다.Emitter Update
CPU의 모든 프레임에서 발생하는 Emitter 단계의 Module을 정의한다. 이 그룹을 사용하여 모든 프레임에서 계속 스폰할 파티클의 스폰을 정의.Particle Spawn
파티클이 처음 생성될 때 파티클당 한 번씩 호출. 이 그룹에서 파티클의 생성 위치, 색, 크기와 같은 파티클의 초기화 디테일을 정의.Particle Update
각 프레임에서 Particle마다 호출. 이 그룹에서 Particle의 수명에 따라 프레임별로 변경해야 하는 사항을 정의.Event Handler
특정 데이터를 정의하는 하나 이상의 Emitter에 생성 이벤트를 만들 수 있습니다. 그 뒤 생성된 Event에 반응하여 동작을 트리거하는 다른 Emitter에 수신 Event를 만들 수 있다.Render
Particle의 디스플레이를 정의하고, 파티클에 하나 이상의 렌더러를 설정할 수 있다.
Module
계산을 수행하는 컨테이너.
파티클 생성 개수 설정, 초기 위치 설정, 초기 속도 설정, 중력 적용, 색상 변화, 크기 변화, 수명 설정, 회전 적용, 충돌을 설정한다.

Module은 그래프 기반으로 동작하고, Script Editor에서 비주얼 노드 그래프나 HLSL을 통해 만들 수 있다.
Module은 공통 데이터를 다루고, 동작을 캡슐화하며, Stack에 쌓여서 실행된다.
Module은 파티클에 적용되는 함수 / 컴포넌트 / 처리 단계다.
Parameter
Parameter는 System, Emitter, Module, Particle 사이에서 공유되거나 전달되는 값.
Primitive, Enum, Struct가 올 수 있다.
Data Interfaces : 외부 데이터 소스로부터 데이터를 제공하는 함수를 정의.

C++이나 Blueprint에서 Niagara System에 값을 넘길 때 User Parameter를 사용한다.

Niagara 동작구조
System Group
→ Emitter Group
→ Particle Group
→ Render Group
System 그룹은 모든 Emitter에 공유되는 동작을 먼저 처리하고, 그 다음 각 Emitter의 동작, 각 Particle의 동작, 마지막으로 렌더링 방식이 처리된다.
Particle Spawn : 파티클이 처음 생성될 때 한 번 실행
Particle Update : 파티클이 살아있는 동안 매 프레임 실행
Render : 시뮬레이션된 파티클 데이터를 화면에 어떻게 그릴지 결정한다.
Renderer의 역할
Simulation: 파티클 위치, 속도, 수명, 색상 계산
Renderer: 그 데이터를 화면에 어떤 형태로 그릴지 결정
| Renderer | 용도 |
|---|---|
| Sprite Renderer | 2D 이미지 파티클. 불꽃, 먼지, 연기 등에 자주 사용 |
| Mesh Renderer | Static Mesh를 파티클처럼 사용 |
| Ribbon Renderer | 궤적, 빔, 꼬리, 검기, 번개 등에 사용 |
| Light Renderer | 파티클이 빛을 내는 것처럼 표현 |
하나의 Emitter 안에서도 같은 시뮬레이션 데이터를 여러 방식으로 렌더링할 수 있다. 예를 들어 스파크 파티클은 Sprite로 보이게 하고, 동시에 Ribbon으로 꼬리를 만들 수 있다.
Niagara Data Channel
게임 코드와 Niagara System 사이, 또는 Niagara System끼리 데이터를 주고받기 위한 구조. 정의된 payload를 가진 데이터 스트림으로, 게임 코드나 Niagara System이 읽고 쓸 수 있다.
예를 들어 충돌 이펙트를 생각해보면:
총알이 100번 충돌
→ 충돌마다 Niagara System을 100개 Spawn
→ 비용 증가
대신 Data Channel을 쓰면:
하나의 Listener Niagara System
→ 충돌 위치 / 방향 / 색상 / 세기 데이터를 Data Channel로 전달
→ 하나의 공유 시뮬레이션에서 여러 충돌 이펙트 처리
Data Channel은 많은 burst Niagara System을 각각 Spawn하는 대신, 하나의 큰 공유 시뮬레이션으로 처리해 성능 이점을 얻을 수 있다.
Cascade와 비교했을 때 Niagara의 특징
Niagara는 단순 파티클 에디터라기보다 프로그래머블 VFX 시스템이다.
Niagara 특징
| 항목 | 설명 |
|---|---|
| System 기반 | 여러 Emitter를 하나의 효과로 구성 |
| Emitter 재사용 | 목적별 Emitter를 만들어 여러 System에서 재활용 |
| Module Stack | 기능을 모듈 단위로 쌓아서 동작 구성 |
| Parameter 기반 | 외부 값, 내부 값, 사용자 값을 연결 가능 |
| Script / HLSL 확장 | 직접 Module을 만들거나 HLSL 기반 처리가 가능 |
| 다양한 Renderer | Sprite, Mesh, Ribbon 등으로 같은 데이터를 다르게 렌더링 |
| Data Channel | 게임 코드와 VFX 사이의 데이터 전달 및 최적화 가능 |
| 비교 항목 | Cascade | Niagara |
|---|---|---|
| 기본 성격 | 기존 Unreal Engine 파티클 시스템 | 현재 Unreal Engine의 주력 VFX 시스템 |
| 구조 | Emitter 중심의 비교적 고정된 구조 | System → Emitter → Module → Parameter 구조 |
| 데이터 제어 | 외부 데이터 연동이 제한적 | User Parameter, Data Interface, Data Channel 등을 통해 외부 데이터 연동 가능 |
| 프로그래머블 여부 | 비교적 제한적 | Niagara Script, 노드 그래프, HLSL 등을 통해 직접 로직 작성 가능 |
| 디버깅 | 제한적 | Niagara Debugger, Attribute Spreadsheet 등 디버깅 도구가 강력함 |
| GPU 시뮬레이션 | 지원하지만 제한적 | GPU 시뮬레이션 활용성이 더 높음 |
| 렌더러 | Sprite, Mesh, Beam, Ribbon 등 | Sprite, Mesh, Ribbon, Light 등 다양한 Renderer 구성 가능 |
Niagara 요약, 핵심 사용
Niagara System = 실행 가능한 VFX Asset
Emitter = 파티클 생성/시뮬레이션 단위
Module = 실제 동작 로직
Parameter = 외부/내부 데이터 연결 지점
Renderer = 최종 표시 방식
Niagara Component = Actor에 붙어서 실행되는 런타임 컴포넌트
C++, Blueprint에서 자주 건드리는 부분
UNiagaraComponent
UNiagaraSystem
UNiagaraFunctionLibrary::SpawnSystemAtLocation
UNiagaraFunctionLibrary::SpawnSystemAttached
SetVariableFloat
SetVariableVec3
SetVariableLinearColor
SetVariableBool'Unreal Engine' 카테고리의 다른 글
| GameplayMessageRouter Plugin 2 (0) | 2026.06.11 |
|---|---|
| GameplayMessageRouter Plugin 1 (0) | 2026.06.10 |
| Delegate (0) | 2026.05.18 |
| State Tree, Behavior Tree (0) | 2026.05.07 |
| Unreal Engine MCP (0) | 2026.04.21 |