[UE5] 파티클 시스템 이해하기

칼든개구리·2025년 2월 7일
0
post-thumbnail

나이아가라의 주요 개념

나이아가라는 언리얼 엔진에서 제공하는 고급 VFX(비주얼 이펙트) 시스템으로, 파티클 시스템을 보다 정교하게 제어하고 확장할 수 있도록 설계되었다. 기존의 Cascade 시스템과 비교하여 더욱 강력한 기능과 모듈형 구조를 제공하여 복잡한 시뮬레이션과 동적 이펙트를 만들기에 적합하다.


  1. 나이아가라 주요 개념
    1) 이미터(Emitter)란?
    이미터는 파티클을 생성하고 관리하는 단위이다. 즉 나이아가라에서 파티클을 어디서, 어떻게 생성되며 어떤 방식으로 동작할지를 정의한다.

이미터의 주요 역할

  • 파티클이 어떤 속성(모양, 크기, 수명 등)으로 생성될지를 결정
  • 중력, 바람, 충돌 등의 물리적 효과를 적용
  • 특정한 조건에서 파티클을 소멸 또는 변경
  • 외부에서 데이터를 받아 동적으로 변화

2) 파티클(Particle)이란?
파티클은 이펙트를 구성하는 가장 작은 단위이다. 즉 이미터가 생성하는 개별적인 요소이다. 예를 들어 불꽃 이펙트를 만들면 각각의 불꽃 조각이 하나의 파티클이 된다.


  1. 나이아가라 구조
    나이아가라는 모듈 기반으로 동작한다. 이를 통해 기존에 제공되는 기능을 조합하거나 새로운 기능을 직접 만들 수도 있다.

나이아가라에서 사용되는 주요 요소

  1. Niagara System(나이아가라 시스템)
  • 여러 개의 이미터를 포함하는 최상위 개체
  • 게임 내 실제로 배치되는 오브젝트
  • (예: 불꽃 + 연기 + 불꽃 잔해 -> 하나의 시스템으로 묶임)
  1. Niagara Emitter(나이아가라 이미터)
  • 하나 이상의 파티클을 생성하고 관리
  • 특정한 동작(중력, 속도, 색상 변화 등) 설정
  1. Niagara Particle(나이아가라 파티클)
  • 실제 화면에 보이는 개별적인 요소
  • 물리 법칙에 의해 이동하고 소멸하거나 변형됨
  1. Niagara Module(나이아가라 모듈)
  • 이미터와 파티클의 동작을 설명하는 개별적인 기능 블룩
  • 예: 색상을 변경하는 모듈, 중력을 추가하는 모듈
  1. Niagara Script (나이아가라 스크립트)
  • 나이아가라의 동작을 커스텀으로 만들 수 있는 기능
  • C++이나 블루프린트 없이도 강력한 로직을 구성 가능


1. Emitter 관련 블록
🔸 Emitter Spawn (이미터 스폰)
Emitter Spawn 섹션은 이미터가 처음 생성될 때 실행됩니다.
여기서 설정된 값들은 이펙트가 생성될 때 단 한 번 실행됩니다.
주로 Spawn Rate(생성 속도)나 Burst Count(한 번에 생성할 개수) 등을 정의합니다.
🔸 Emitter Update (이미터 업데이트)
Emitter Update 섹션은 이펙트가 실행 중일 때 매 프레임마다 실행됩니다.
즉, Emitter Spawn이 최초 1회 실행되는 것과 달리, Emitter Update는 지속적으로 실행됩니다.
특정한 조건에서 새로운 파티클을 계속 생성하거나, 외부 변수(속도, 방향 등)를 업데이트하는 역할을 합니다.


2.Particle 관련 블록
🔹 Particle Spawn (파티클 스폰)
Particle Spawn 섹션은 각각의 개별 파티클이 생성될 때 한 번만 실행됩니다.
개별적인 파티클의 초기 속성(위치, 크기, 색상 등)을 설정하는 역할을 합니다.
보통 Initialize Particle, Sphere Location, Velocity 등의 모듈이 들어갑니다.
🔹 Particle Update (파티클 업데이트)
Particle Update 섹션은 각각의 파티클이 생성된 후, 매 프레임마다 업데이트됩니다.
여기에서 파티클의 크기, 속도, 방향, 색상 변화 등을 지속적으로 조정할 수 있습니다.
흔히 적용되는 모듈:
Particle State: 파티클의 활성화 여부
Scale Sprite Size: 시간이 지남에 따라 크기 변경
Color: 파티클 색상 변경
Solve Forces and Velocity: 물리 효과 적용(중력, 저항 등)


🟢 Add Event Handler (이벤트 핸들러 추가)
특정한 조건(예: 파티클이 충돌하거나 사라질 때)에 대한 이벤트를 처리하는 기능입니다.
예를 들어:
파티클이 바닥에 닿으면 사라지게 만들기
충돌할 때 스파크 효과를 추가하기
특정 시간 이후 파티클의 색상을 변경하기
🟢 Add Simulation Stage (시뮬레이션 스테이지 추가)
GPU 기반 시뮬레이션을 사용할 때, 별도의 계산 단계를 추가할 수 있습니다.
대량의 파티클을 관리할 때 유용합니다.
🔴 Render (렌더)
최종적으로 화면에 출력되는 파티클의 렌더링 방식을 결정하는 부분입니다.
이 예제에서는 Sprite Renderer(2D 이미지 형태로 출력)가 사용되고 있습니다.


벡터 수학과 행렬 및 나이아가라에 적용

벡터란 무엇인가

2차원 공간에서 벡터는 x와 y 값만 보유한다. 예를 들어 벡터 a= (3,4)에서 x는 3이고 y는 ㅑㅑ4이다.
이러한 표현은 오브젝트의 위치나 방향을 정의하는데 사용될 수 있다. 또한 벡터의 크기를 알아내 오브젝트의 속도를 구할 수 있다.

위치(좌표)로서의 벡터


벡터 a는 2D공간에서 X 방향으로 3단위, y방향으로 4단위 만큼 이동한 위치를 나타낸다. 3D공간에서는 다음과 같이 Vector3d를 사용해 점위 위치를 정의할 수 있다
Vector3da=(3,4,5)Vector3d a= (3,4,5)

이 축은 xy 평면에서 점의 높이를 결정해 3D공간 상의 점을 정의한다

방향으로서 벡터

벡터 a=(3,5)에서 벡터를 구성 요소로 분리하면 벡터의 방향과 크기를 알 수 있다. 다음과 같은 방법을 사용해보자
1. x방향으로 3단위 만큼 이동한다
2. 그 다음 점 B에서 y방향으로 5단위만큼 이동한다.
3. 이제 선분 AC를 그릴 수 있으며 이 선분의 방향이 벡터의 방향을 나타낸다

벡터를 사용해 방향을 결정하는 이 방법은 3D 벡터를 사용해 3차원 공간으로 확장할 수 있다.

나이아가라에서는 2D벡터를 vector2D라고 하고 3D벡터는 Vector라고 한다.

벡터 연산

파티클 시스템에서 파티클의 움직임은 여러 벡터의 힘이 모인 결과다. 파티클에 작용하는 합력의 계산은 모듈에서 이루어진다. 또한 다양한 벡터 연산을 통해 이러한 합력을 계산한다.

덧셈

두 벡터 a=(3,4)와 b=(5,2)를 더하는 것이 무엇을 의미하는지 알아보자

벡터 a와 b의 합이 새로운 벡터 c라고 하면 다음과 같이 풀이할 수 있다.
c=a+bc=a+b
c=(3,4)+(5,2)c=(3,4)+(5,2)
c=(3+5,4+2)c=(3+5,4+2)
c=(8,6)c=(8,6)
벡터 c가 a와 b의 두 벡터의 합성 벡터이다.

뺄셈


c=abc=a-b
c=a+bc=a+-b
c=(3,4)+(5,2)c=(3,4)+-(5,2)
c=(35,42)c=(3-5,4-2)
c=(2,2)c=(-2,2)
합성 벡터c가 그림과 같음을 알 수 있다.

크기와 단위 벡터

벡터의 길이가 벡터의 크기와 같다. 계산을 쉽게 할 수 있도록 특정 벡터의 크기를 1로 간주한다. 이것을 단위벡터라고 한다. 단위벡터는 방향을 전달하는데 도움을 주기 때문에 방향벡터라고도 한다. 단위벡터의 크기는 항상 1이므로 중요하지 않다.

단위벡터에 스칼라를 곱 하면 벡터의 원래 방향으로 벡터의 크기를 증가시킬 수 있다.


나이아가라 벡터 연산 표현

이러한 벡터 연산은 나이아가라에서 많이 사용된다. 이러한 연산은 노드를 사용해 처리되므로 실제로 직접 연산할 필요가 없다.

단위벡터를 곱하는 방법과 유사하게 정수에 크기값을 곱할 수 있다.


행렬 연산

나이아가라에서는 벡터 연산 외에 행렬도 많이 사용한다. 일부 중요한 행렬 연산은 다음과 같다. 기존 방향 벡터나 위치벡터의 방향 또는 위치를 변경하려면 행렬 변환 연산이 필요하다.

행렬 전치연산은 행렬을 대각선으로 뒤집는다. 이 연산은 파티클 프로퍼티를 수정하는데 필요하다

profile
메타쏭이

0개의 댓글