Unreal Engine Technical Art/Niagara

Unreal Engine Niagara System 2 - CPU vs GPU, Portal

DB51 2025. 4. 23. 16:56

 

 

 

언리얼 엔진 나이아가라(Niagara) 시스템: CPU 시뮬레이션 vs GPU 시뮬레이션 차이

연산 주체 CPU(중앙처리장치) GPU(그래픽처리장치)
동작 방식 매 프레임마다 CPU가 각 파티클에 대해 개별적으로 계산 GPU에서 병렬 처리로 수천 개 이상의 파티클을 동시에 계산
장점 - 복잡한 논리 구현 가능 (예: 파티클 간 충돌, 이벤트 기반 상호작용)
- 게임 오브젝트와 긴밀한 통합 가능
- 대량의 파티클을 매우 빠르게 처리
- 화면에 많은 양의 이펙트를 무리 없이 표시 가능
단점 - 연산량이 많아질수록 CPU 부하 증가
- 수천 개 이상의 파티클에는 부적합
- 복잡한 논리 처리 제약 (IF문 등 복잡한 분기 사용 제한)
- 일부 연산(특히 상태 저장, 데이터 간 통신) 구현 어려움

 

 

 

GPU + Fixed의 이유

대량 파티클 처리 GPU는 수천~수십만 개 파티클을 병렬 처리할 수 있어 압도적으로 빠릅니다.
파티클 시스템 관리 효율 Fixed Bounds로 바운딩을 고정하면, GPU가 별도 연산 없이 효율적으로 Cull할 수 있습니다.
CPU 부하 감소 CPU는 다른 중요한 게임 로직(물리, AI 등)에 집중할 수 있어, 전체 프레임 유지에 유리합니다.
렌더링 최적화 필요 없는 이펙트는 GPU 단계에서 통째로 제거(Cull)하여 드로우콜(draw call)과 메모리 접근을 절감합니다.

 

 

 

  • GPU 시뮬레이션은 가능한 한 독립적으로 설계해야한다.
    • 복잡한 스폰 논리, 조건 분기는 GPU 시뮬레이션에서 어렵거나 비효율적.
    • GPU 시뮬레이션은 "한 번 생성 → 단순한 움직임과 렌더링" 위주로 설계하는 것이 좋다.
  • Fixed Bounds 설정은 넉넉하게 잡되, 너무 과도하게 크게 설정하면 Cull이 잘 안 돼서 오히려 성능이 떨어질 수 있다.
    • "파티클이 퍼질 수 있는 최대 범위" 정도로 현실적으로 설정하는 것이 이상적이다.

요약

  • CPU 시뮬레이션은 복잡한 상호작용용, GPU 시뮬레이션은 대량 파티클 처리용입니다.
  • GPU 시뮬레이션을 사용할 때는 반드시 Fixed Bounds를 설정해주어야 최적의 성능과 안정성을 확보할 수 있습니다.

 

 

 

 

 

Portal 

Niagara System 생성 (SimpleSpriteBurst)

 

Properties에서 GPU, Fixed로 설정

 

 

Emitter State에서 Infinite로 설정

 

 

Spawn Rate 변경 (한번에 스폰되는 파티클 양)

 

 

Initialize Particle에서 Lifetime, Color 변경

 

 

 

Shape Location에서 Torus와 Radius 변경

 

 

 

Initialize Particle에서 Sprite Size 변경

 

 

 

Curl Noise Force

 : 노이즈를 생성하여 불규칙적인 느낌을 만듦.

 

Noise Strength : 노이즈 강도

Noise Frequency : 노이즈 빈도

순서대로 Curl Noise Force 없음, Noise Frequency : 50.0, Noise Frequency : 10.0 (Noise Strength Random Min : 300.0, Max : 900.0)

 

 

 

Scale Sprite Size

 : 크기에 따른 스프라이트 사이즈 조절

-> 크기가 작아지며 점점 사라짐

 

 

Scale Color

 : 크기에 따른 색상 변화 조절

-> 크기가 작아지며 알파값이 0이 됨

 

 

Vortex Force & Scale Velocity

: 기존의 Vortex Velocity가 두 개로 나뉘게 된 기능. 

Vortex Force Amount 200.0, 500.0 Respectively

 

 

 

 

 

 

 

 

 

Point Attraction Force

: 중심으로 끌어당기거나 미는 작용

 

Attraction Strength : 힘의 강도

Attraction Radius : 끌어당기는 간격

 

 

 

Shape Location

Transform - Rotation Mode : Axis Angle로 각도 조절

 

 

 

 

Curl Noise Force 추가

-> 다양한 파티클 효과 추가

 

Pan Noise Field : 이동 (Material의 Panner과 같은 효과)

 

Curl Noise Force가 2개이기 때문에 효과가 모든 파티클에 적용되는 것이 아닌 나뉘어 적용된다.

 

기존의 Curl Noise Force에도 Pan Noise Field를 추가 적용하여 교차되는 이미지 형성

 

 

 

 

 

 

 

Material 생성

M_Smoke

 

 

 

 

 

NS_Portal

제작했던 SimpleSpriteBurst 이미터 복제

 

 

Sprite Renderer에서 M_Smoke 적용, Sub Image Size 조절

Sub UVAnimation 추가

Curl Noise Force 001 삭제

 

 

 

Initialize Particle

명도(4.0), 스프라이트 크기 조절

 

 

 

Point Attraction Force 삭제 -> 연기가 퍼지는 느낌을 제작

Scale Sprite Size 그래프 값이 올라가는 형식으로 변경 -> 연기가 위로 올라가는 느낌을 제작

 

Scale Color 값은 올라가는 그래프로 유지

 

색상 변경 (R -> B)

 

 

 

첫번째 파티클 이미터를 복제하여 밖으로 퍼지는 효과 만들기

 

 

 

Add Velocity

Velocity Mode : From Point

Velocity Speed : Random Range Float

 

 

 

 

 

Simple Sprite Burst 이미터 추가

 

 

Mesh Renderer

Meshes에 원하는 메시를 넣고, 변형할 수 있다. 

 

 

 

Enable Material Overrides를 True로 설정하면 메시의 머티리얼 변경이 가능하다.

 

 

 

 

M_Dot

해당 머티리얼을 적용한다

 

 

 

 

 

Emitter State  Self - Infinite

Spawn Burst Instantaneous 값 그대로 유지

 

Initialize Particle

Mesh Scale을 통해 Mesh의 크기를 조절

 

 

Mesh의 색상 변경

 

Scale Color 삭제 -> 계속 보이게 하기 위함

 

 

 

최소 이미터 추가

 

Properties에서 GPU - Fixed로 변경

Emitter State에서 Life Cycle Mode : Self, Loop Behavior : Infinite로 변경

 

Spawn Rate에서 Spawn Rate값 1500

Initialize Particle에서 Lifetime, Sprite Size 변경

 

 

Shape Location

 

 

Scale Sprite Size

 

*Initialize Particle과의 차이점

Initialize Particle은 Particle Spawn에서의 설정으로 스폰될 때의 값을 설정 -> 초기 값

Scale Sprite Size는 Particle Update에서의 설정으로 상태가 업데이트 되는 값을 설정 -> 변화 값

 

 

Solve Forces and Velocity -> 작동하도록 한다.

Curl Noise Force 

 

Scale Velocity -> 파티클 스케일이 전체적으로 작아진다

Vortex Force -> 파티클이 회전하도록 만든다.

 

 

Point Attraction Force

: 안쪽으로 들어오는 느낌(-)과 바깥쪽으로 퍼지는 느낌(+)을 통해 소용돌이치는 느낌을 만들 수 있다.

 

Initialize Particle에서 기존 파티클의 색상 복제하여 적용

 

 

파티클 양을 더 늘려주기 위해 최소 이미터 복제

Point Attraction Force

 

 

 

머티리얼 추가

M_Spin

 

 

 

Mesh Renderer 포함한 이미터 복제

Mesh Renderer에서 Material 변경 -> M_Spin

Initialize Particle에서 색상 기존 값으로 변경, 밝기, 알파값 낮추기

 

 

 

 

 

Update Mesh Orientation

: 메시를 회전시킨다.

 

Rotation Vector : 회전 방향

Rotation Rate : 회전 속도

 

 

 

이미터 복제

 

Initial Mesh Orientation

: 파티클 스폰 시 회전되어있는 값

 

 

 

 

 

Mateiral 추가

M_Noise

 

 

 

Mesh Renderer 포함한 후반 이미터 복제

Mesh Renderer - Material 변경

Orientation 삭제 -> 회전 없애기

Intialize Particle 색상 변경 (밝기값, 알파값)

 

 

 

 

빨려들어가는 큐브 만들기

최소 이미터 추가

Mesh Renderer 사용

 

Spawn Rate : 10

Shape Location : Sphere

 

Initialize Particle

Position Mode - Position Offset으로 위치 조절

Sprite Size

Mesh Scale

 

 

Shape Location에서 영역 값 랜덤으로 변경

 

 

 

Solve Forces and Velocity

Point Attraction Force

-> 포탈로 들어가는 느낌

Kill Radius : 이펙트가 사라지는 거리값

 

 

Update Mesh Orientation

: 회전

 

 

Inintial Mesh Orientation

-> 메시 생성 시 랜덤 각도 생성

Scale Mesh Size

-> 메시 사이즈 작아지게 만드는 효과

 

 

 

Drag

: 공기 저항, 지연시키는 효과

 

 

Curl Noise Force

-> 효과 극대화 하기 위함

 

 

 

Niagara Effect with Blueprint

Niagara Effect를 사용할 때, Niagara 자체를 사용하는 것보단 Actor Blueprint로 제작하여 사용하는 것이 상호작용에 있어서 용이하다.

 

 

Actor 기반 blueprint 제작

Niagara component 추가

 

 

 

모든 이미터 선택 후, Local Space를 활성화

-> 설정한 위치에 적용이 된다

 

 

 

ex) Blueprint에서 Collision을 바로 활용할 수 있다.