나이아가라 시스템
나이아가라 시스템?
UE 4.2 이후부터 도입된 차세대 파티클, VFX 시스템
기존의 Cascade를 대체하며
시각 효과 뿐 아니라 데이터 기반 시뮬레이션 시스템으로 발전
- Niagara
- Cascade
나이아가라 시스템의 특징
카테고리 | 설명 |
---|---|
🔄 모듈 기반 + 스크립팅 구조 | 사용자가 직접 노드 기반 로직을 조합하거나 HLSL 기반 커스텀 Niagara 스크립트를 작성 가능 |
🧱 시뮬레이션 기반 구조 | 파티클, 에미터, 시스템이 각각의 생명 주기를 가지고, Spawn, Update, Event 등 단계별로 동작 |
⚡ GPU 시뮬레이션 지원 | 파티클 수가 수천~수만 개 이상일 경우, GPU에서 병렬 연산으로 처리 가능 (고성능) |
🧠 데이터 중심 설계 | 각 파티클은 개별 속성(Position, Color, Velocity 등)을 가진 데이터 집합으로 동작 |
📤 외부 시스템과 실시간 연동 | Blueprint, C++, 게임플레이 코드에서 Niagara 파라미터를 실시간 주입/제어 가능 |
📦 다양한 데이터 인터페이스(Data Interface) | 액터, 텍스처, 커브, 메시, 스켈레탈 메시, 월드 포지션 등의 외부 데이터를 참조 가능 |
🎮 이벤트 기반 처리 | 파티클 간 상호작용, 타 오브젝트와의 충돌, 스폰 조건 등 정교한 이벤트 제어 가능 |
🧪 시각적 디버깅 및 분석 툴 내장 | 시뮬레이션 결과, 벡터 흐름, 파티클 수 등을 에디터 내에서 실시간 디버깅 가능 |
구성 요소
구성 요소 | 설명 |
---|---|
System | 하나의 전체 이펙트 단위. 여러 Emitter로 구성됨 |
Emitter | 파티클 생성 단위. 독립적인 속성과 생명주기를 가짐 |
Module | Niagara 노드 로직의 최소 단위. 사용자가 직접 생성 가능 |
Script Stage | Spawn , Update , Event , Render 등의 시간 단계별로 파티클 로직 분리 |
Niagara Parameters | 외부에서 전달 가능한 값 (예: 위치, 방향, 캐릭터 속도 등) |
Data Interfaces | 메시, 텍스처, 커브, 액터 등 다양한 외부 데이터를 가져와서 사용 가능 |
주요 기능
기능 | 설명 |
---|---|
🔥 파티클 시뮬레이션 | 물리 기반, 속도/가속도/중력 적용, 커스텀 연산 가능 |
🎨 비주얼 컨트롤 | 컬러, 투명도, 회전, 크기 등을 시간에 따라 제어 |
🚀 GPU 연산 지원 | 수만 개 파티클을 고성능으로 처리 가능 |
💥 이벤트 스폰 및 제거 | 파티클 간 충돌, 타겟 히트 등에 반응하여 새로운 파티클 생성 |
🧠 복잡한 로직 구성 | 조건문, 수학 함수, 벡터 연산 등 내장 블록으로 비주얼 스크립트 작성 |
🎯 트리거 및 연동 | 게임 내 상황 (예: 피격, 이동, 스킬 사용)에 반응하여 이펙트 실행 |
🔄 리얼타임 파라미터 제어 | Blueprint / C++ / Anim Notify에서 Niagara 값 실시간 조절 |
🔁 LODs 및 최적화 설정 | 파티클 수 제한, LOD별 시뮬레이션 방식 조정 (CPU/GPU 전환 등) |
나이아가라 번개 이펙트
Dynamic Beam 기반의 번개 이펙트
언리얼 에픽 라이브
구현의 몇가지 핵심 요소들
나이아가라의 모듈 시스템은 위에서 아래로 적용된다
[Emitter Update]
└─ Spawn Burst
└─ Spawn Rate
↓
[Particle Spawn]
└─ Initialize Particle
└─ Set Velocity
└─ Set Color
↓
[Particle Update]
└─ Add Velocity
└─ Gravity Force
└─ Drag
└─ Scale Color
...
이런 식으로
모듈이 위->아래 순서로 적용
Dynamic Beam
모듈 | 이유 |
---|---|
Beam Setup |
Beam의 구조 자체를 정의 (점 개수, 연결 방식 등) |
Set Beam Tangents |
곡선 형태의 외형을 위한 탄젠트(기울기) 정보 설정 |
Set Beam Target |
종착점 위치 설정 (필수!) |
Solve Tangents |
Tangent 계산 자동화 |
Set Beam Width |
Beam의 시각적 두께 결정 |
Dynamic Beam을 응용하여 이펙트를 제작하였기에
다음과 같은 모듈들을 함부로 제거하는 것은 권장하지 않음
Curl Noise Force
Perlin noise의 일종으로, ‘회전성’ 있는 난류 패턴을 생성하는 모듈
‘연기’, ‘번개’ 처럼 ‘움직임’을 꼬는 느낌을 줄 수 있다
Noise 기반 Force 벡터를 계산하여 Acceleration에 누적시켜준다
이 Force가 위치에 따라 매번 다르게 변하는 Noise 효과를 줌
Apply Initial Forces
파티클 생성 시, 처음 한 번만 ‘속도/힘’을 적용하는 모듈
위의 Curl Noise Force와 함께 써야 정상적으로 작동
(일종의 트리거 역할)
-> Curl Noise Force는 Position이 변함에 따라서
그 값에 따라 다시 Acceleration에 적용시켜주어 Noise 효과를 점차 만들어줌
-> 그런데 Curl Noise만 사용하면 Acceleration에 변화가 없기에
Position도 안 변함
-> Apply Initial Force는 초기에 Acceleration에 값을 적용시켜
파티클의 움직임에 적용
-> 그 힘이 충분히 크지 않다면 ‘눈에 띄지 않음’
=> 따라서 Apply Initial Force를 통하여 시작 시에 Position 변화를 주고
이후엔 Curl Noise Force를 통해 지속적인 가속도를 주어
Noise 효과를 가진 파티클 움직임을 구현하는 것
Scale Color
파티클의 Color를 RGB/Alpha 별로 스케일링(곱연산)
-> 자체적으로 1을 넘긴 Color 값을 줌으로서 발광 효과 표현
(언리얼의 HDR 표현방식으로 Emissive Color의 출력을 높임으로서 나타남)
파티클 효과를 위한 추가 머티리얼 구현
머티리얼 블렌드 모드는
Additive : 빛을 더하는 방식으로 렌더링
(기존 픽셀 색상 위에 머티리얼의 Emissive를 더해버리는 방식)
셰이딩 모델은 Unlit
(자체적으로 빛나는 효과이기에
빛과 그림자 등의 계산을 무시하도록)
Power와 pos_x는 나이아가라의
파티클 업데이트 시스템의 Dynamic Material Parameters
모듈로 조정 가능
-
Append : 여러 개의 값(float,vector 등)을 하나의 Vector로 만든다
pos_x가 float 값이기에, 이를 하나의 Vector로 만들기 위해 0.0 을 append -
TexCoord : 텍스쳐 좌표(UV 좌표)를 가져오는 노드
모델의 메시 표면상에서 좌표 기반으로 텍스쳐를 매핑하는데 사용 -
Add : 위의 두 요소를 더함
마치 ‘흘러가는’ 연출에 사용 가능
(UV좌표에 적용하면 Pos_x에 영향을 받은 UV 좌표가 된다) -
Mask : 특정한 부분만 추출해서 사용한다는 뜻으로
R만 선택할 경우 나머지 요소는 사용하지 않음
따라서 pos_x에 영향을 받은 u 좌표를 표현 -
X * (1- X)? : Bell-shaped Gradient로
중앙 강조 곡선을 만들기 위한 일종의 트릭
0과 1에선 0, 중앙값에서 커지게 됨
=> U값이 중앙인 | 모양의 머테리얼이 생성 -
Power : 비선형적 강조
(부드러운 효과 or 날카로운 강조)
커브 형태의 왜곡에 주로 사용한다 -
Multiply : 값을 선형적으로 확대하거나 축소
(Emissive 등에서 더 밝거나 어둡게 등) -
Saturate : 값을 0~1로 clamp(제한) 한다
값이 지나치게 커지는 경우를 방지
=> Power 과 Multiply를 사용하여 ‘중심’ 부분에 대한 강조
이후 다시 Saturate로 보정
‘중앙’을 더 날카롭게 만든 뒤
Saturate 해준 값을 더해줌으로서
중심에 값을 추가적으로 보정하고, 주변도 나름 일정한 값을 유지
이후 색에 곱해주어 이미시브로 적용
구현 결과
나이아가라 시스템은 이펙터와 가까운 이미지였지만
실제 TA 분들도 잘 아는 시스템이며
그래픽스와 연관된 요소가 많이 존재하기에
앞으로도 차차 다른 효과들을 구현해가며
공부를 더 해볼 예정이다
댓글남기기