본문 바로가기

파티클 시스템의 기본 개념

파티클의 수명·위치·속도·색상·크기가 Spawn·Update·Render 단계를 거쳐 시각 효과와 성능 비용을 만드는 원리를 이해합니다.

나이아가라를 처음 배우면 멋진 이펙트를 빠르게 만들고 싶은 마음이 앞서기 쉽습니다.

그런데 기본 개념 없이 파라미터만 바꾸다 보면 왜 갑자기 파티클이 사라졌는지, 왜 성능이 급격히 떨어지는지를 설명하기 어려워집니다.

특히 입문 단계에서는 눈에 보이는 결과만 따라가다가, Spawn/Update/Render가 각각 어떤 역할을 하는지 놓치기 쉽습니다.

이 절은 화려한 연출보다 먼저 파티클 시스템의 동작 원리를 단단히 잡는 데 집중합니다.

기본 원리를 이해하면 이후 장에서 감에 의존하는 대신, 기대 결과를 예측하며 수치를 조절할 수 있습니다.

파티클 시스템은 말 그대로 아주 작은 파티클(Particle), 즉 입자들의 집합으로 이루어져 있습니다.

이 작은 입자들이 모여 움직이고 변화하면서 우리가 인지하는 복잡한 시각 효과를 만들어내는 것이죠.

각각의 파티클은 수명, 색상, 크기, 속도 등 다양한 속성(Attribute)을 가지며, 이러한 속성들이 시간에 따라 변화하면서 동적인 효과가 연출됩니다.

불꽃, 연기, 먼지처럼 작은 요소가 많이 모여 보이는 효과는 파티클로 표현하기 좋습니다.

정리하자면, 파티클 시스템은 다음과 같은 핵심 요소들로 구성됩니다.

  • 파티클 (Particle): 시각 효과를 구성하는 가장 작은 단위입니다. 각 파티클은 고유한 속성을 가집니다.
  • 생성 (Spawn): 파티클이 언제, 어디서, 어떻게 생성될지를 정의합니다. 불꽃놀이의 폭죽이 터지는 순간처럼, 파티클이 처음 나타나는 지점과 방식을 결정합니다.
  • 업데이트 (Update): 생성된 파티클들이 시간이 지남에 따라 어떻게 변화하고 움직일지를 정의합니다. 파티클의 속도, 색상, 크기, 회전 등 모든 속성 변화를 이곳에서 제어합니다. 중력의 영향을 받거나 바람에 날리는 등의 물리적인 움직임도 여기에 포함됩니다.
  • 렌더링 (Render): 파티클이 최종적으로 화면에 어떻게 그려질지를 결정합니다. 파티클이 점으로 보일지, 스프라이트(2D 이미지)로 보일지, 메시(3D 모델)로 보일지 등을 설정할 수 있습니다.

입자의 생애와 화면 출력은 다른 관계입니다

Spawn 초기화→살아 있는 Update 반복→수명/Kill 소멸이라는 실제 생애이다. Renderer는 각 생존 상태의 속성을 읽으며 소멸 다음 단계가 아니다.

NIAGARA · CH1-1

입자의 생애와 화면 출력은 다른 관계입니다

Spawn에서 초기화한 입자는 살아 있는 동안 Update를 반복합니다. Renderer는 그 속성을 읽어 화면에 표현하며, 소멸 다음에 실행되는 단계가 아닙니다.

입자의 생성·반복 갱신·소멸과 렌더러의 속성 읽기Spawn에서 Update로 진행하고 살아 있는 동안 Update를 반복합니다. 소멸 조건이 충족되면 소멸합니다. 별도의 점선은 살아 있는 입자의 속성을 읽는 Renderer로 이어지며 소멸에서 Renderer로 이어지는 선은 없습니다.Spawn · 초기화위치·속도·수명·색·크기살아 있는 입자 갱신Update · 시뮬레이션 틱반복소멸수명·Kill 조건 충족Renderer속성 → 화면
입자의 생애와 렌더러의 속성 읽기desktop과같은4노드4간선:Spawn초기화→살아있는입자Update;살아있는동안Update자기반복;수명/Kill조건충족시소멸. Update에서Renderer로향하는별도점선은살아있는속성읽기이며소멸뒤렌더실행이아니다.Spawn · 초기화위치·속도·수명색·크기Update · 갱신살아 있는 입자시뮬레이션 틱살아 있는 동안 반복소멸수명·Kill 조건 충족실선: 입자의 생애점선: 속성 읽기Renderer살아 있는 속성 → 화면소멸 → Renderer 연결 없음

실선은 생애 · 점선은 속성 읽기

실선은 새 입자의 초기화·갱신·소멸 관계입니다. 점선은 렌더러가 살아 있는 입자의 계산된 속성을 읽는 관계이며, 두 선을 하나의 직렬 실행 순서로 읽지 않습니다.

살아 있는 입자 수와 화면에서 구별되는 개수는 다릅니다. 입자가 살아 있어도 위치·크기·알파·머티리얼·Bounds 등에 따라 안 보일 수 있습니다. 이 그림은 기본 개념이며 모든 Niagara 실행 단계를 펼친 것은 아닙니다.

이 예의 조건

  • 본문과 원 도표에 제시된 사례의 입력·조건을 사용합니다. 설명용 수치나 독립 비교 경로는 각 단계에 표시합니다.
  • 현재 상태·값과 전환 근거의 위치는 모든 단계에서 같습니다. 조건이 맞지 않거나 실행되지 않은 경로를 성공한 동작으로 해석하지 않습니다.
관계도의 보충 설명
원 도표의 제목·노드·관계·조건·주석
범위원문
관계·조건 설명그림은 4개 노드·4개 간선으로 구성된다. Spawn 초기화→살아 있는 입자 Update, 살아 있는 동안 Update 반복, 수명/Kill 조건 충족 시 소멸을 나타낸다. Update에서 Renderer로 향하는 별도 점선은 살아 있는 입자의 속성 읽기이며 소멸 뒤 렌더 실행이 아니다.
예의 값과 변화
관찰·상황값·보충 정보변화·이유
Spawn 초기화

새 입자의 초기 속성과 수명을 준비한다.

  • 대상: 새 입자
  • 단계: Particle Spawn
  • 생성량을 정하는 Emitter Update와 새 입자 초기화는 다르다.
살아 있는 Update

생존 입자가 반복 갱신된다.

  • 상태: 살아 있음
  • Renderer: 현재 속성 읽기
  • Renderer를 입자 소멸 뒤의 단계로 놓지 않는다.
수명/Kill

종료 조건에서 입자 생애가 끝난다.

  • 조건: 수명 종료 또는 Kill
  • 상태: 소멸
  • 입자 수명과 컴포넌트 전체 수명을 구분한다.

입자의 생애와 화면 출력은 다른 관계입니다

Spawn 초기화→살아 있는 Update 반복→수명/Kill 소멸이라는 실제 생애이다. Renderer는 각 생존 상태의 속성을 읽으며 소멸 다음 단계가 아니다.

NIAGARA · CH1-1

입자의 생애와 화면 출력은 다른 관계입니다

Spawn에서 초기화한 입자는 살아 있는 동안 Update를 반복합니다. Renderer는 그 속성을 읽어 화면에 표현하며, 소멸 다음에 실행되는 단계가 아닙니다.

입자의 생성·반복 갱신·소멸과 렌더러의 속성 읽기Spawn에서 Update로 진행하고 살아 있는 동안 Update를 반복합니다. 소멸 조건이 충족되면 소멸합니다. 별도의 점선은 살아 있는 입자의 속성을 읽는 Renderer로 이어지며 소멸에서 Renderer로 이어지는 선은 없습니다.Spawn · 초기화위치·속도·수명·색·크기살아 있는 입자 갱신Update · 시뮬레이션 틱반복소멸수명·Kill 조건 충족Renderer속성 → 화면
입자의 생애와 렌더러의 속성 읽기desktop과같은4노드4간선:Spawn초기화→살아있는입자Update;살아있는동안Update자기반복;수명/Kill조건충족시소멸. Update에서Renderer로향하는별도점선은살아있는속성읽기이며소멸뒤렌더실행이아니다.Spawn · 초기화위치·속도·수명색·크기Update · 갱신살아 있는 입자시뮬레이션 틱살아 있는 동안 반복소멸수명·Kill 조건 충족실선: 입자의 생애점선: 속성 읽기Renderer살아 있는 속성 → 화면소멸 → Renderer 연결 없음

실선은 생애 · 점선은 속성 읽기

실선은 새 입자의 초기화·갱신·소멸 관계입니다. 점선은 렌더러가 살아 있는 입자의 계산된 속성을 읽는 관계이며, 두 선을 하나의 직렬 실행 순서로 읽지 않습니다.

살아 있는 입자 수와 화면에서 구별되는 개수는 다릅니다. 입자가 살아 있어도 위치·크기·알파·머티리얼·Bounds 등에 따라 안 보일 수 있습니다. 이 그림은 기본 개념이며 모든 Niagara 실행 단계를 펼친 것은 아닙니다.

이 예의 조건

  • 본문과 원 도표에 제시된 사례의 입력·조건을 사용합니다. 설명용 수치나 독립 비교 경로는 각 단계에 표시합니다.
  • 현재 상태·값과 전환 근거의 위치는 모든 단계에서 같습니다. 조건이 맞지 않거나 실행되지 않은 경로를 성공한 동작으로 해석하지 않습니다.

관계도의 보충 설명

원 도표의 제목·노드·관계·조건·주석
범위원문
관계·조건 설명그림은 4개 노드·4개 간선으로 구성된다. Spawn 초기화→살아 있는 입자 Update, 살아 있는 동안 Update 반복, 수명/Kill 조건 충족 시 소멸을 나타낸다. Update에서 Renderer로 향하는 별도 점선은 살아 있는 입자의 속성 읽기이며 소멸 뒤 렌더 실행이 아니다.
예의 값과 변화
관찰·상황값·보충 정보변화·이유
Spawn 초기화

새 입자의 초기 속성과 수명을 준비한다.

  • 대상: 새 입자
  • 단계: Particle Spawn
  • 생성량을 정하는 Emitter Update와 새 입자 초기화는 다르다.
살아 있는 Update

생존 입자가 반복 갱신된다.

  • 상태: 살아 있음
  • Renderer: 현재 속성 읽기
  • Renderer를 입자 소멸 뒤의 단계로 놓지 않는다.
수명/Kill

종료 조건에서 입자 생애가 끝난다.

  • 조건: 수명 종료 또는 Kill
  • 상태: 소멸
  • 입자 수명과 컴포넌트 전체 수명을 구분한다.

간단한 수치 예로 감각을 잡아보겠습니다.

생성률이 초당 20개, 수명이 1초로 일정하고 조기 소멸이나 생성 제한이 없다면, 충분히 시간이 지난 정상 상태의 살아 있는 파티클 수는 약 20 × 1 = 20개입니다. 카메라 밖이나 겹쳐 있는 파티클도 포함하므로 화면에서 구별되는 개수와는 다릅니다.

같은 조건에서 Spawn Rate를 200으로 올리면 시각 밀도는 좋아지지만 GPU/CPU 부담이 크게 증가해 프레임 저하가 나타날 수 있습니다.

즉 파티클 시스템을 만드는 일은 단순히 파티클을 더 많이 뿌리는 작업이 아니라, 목표 연출과 성능 예산 사이에서 균형점을 찾는 설계 작업입니다.


첫 효과의 기준 정하기

  • 목표 화면 점유율(예: 10~20%)과 테스트 장면의 프레임 시간 예산을 정합니다. 화면 점유율은 생성량뿐 아니라 크기·위치·카메라 거리에도 영향을 받습니다.
  • 생성량을 올리기 전에 수명·속도·크기를 하나씩 조정해 목표 모양을 만듭니다.
  • 안 보이면 먼저 실제 파티클 수를 확인합니다. 생성되지 않았다면 Spawn 조건을, 살아 있다면 위치·크기·알파·렌더러·머티리얼·Bounds를 확인합니다.
  • 비용이 크면 시뮬레이션과 렌더링을 나누어 측정합니다. 큰 반투명 면이 겹치는 오버드로우와 복잡한 머티리얼은 적은 파티클로도 비용을 키울 수 있습니다.

Spawn Rate를 10배로 늘려도 전체 프레임 비용이 반드시 10배가 되는 것은 아닙니다. 파티클 수와 각 입자의 계산, 화면 면적을 함께 비교해야 합니다.

예시

초당 30개를 계속 생성하고 각 입자가 정확히 2초 뒤 소멸한다고 가정해 봅시다. 빈 상태에서 시작한 첫 1초에는 아직 수명을 다한 입자가 없으므로 약 30개가 살아 있습니다. 2초 이상 충분히 지나면 새 입자가 들어오는 만큼 오래된 입자가 빠져나가 약 30 × 2 = 60개를 유지합니다. 이 계산은 한 번에 정해진 수를 만드는 Burst의 개수 계산과 다릅니다.

직접 확인할 조건을 바꿔 보세요. 초당 12개, 수명 3초이고 빈 상태에서 시작합니다. 조기 소멸·컬링·생성 제한은 없다고 할 때 1초 뒤와 정상 상태의 살아 있는 개수는 각각 얼마일까요? 카메라 밖의 입자도 살아 있다면 화면에 보이는 개수와 같다고 말할 수 있을까요?

계산과 판단 확인

첫 1초는 약 12개이고, 정상 상태는 12 × 3 = 36개입니다. 정상 상태 식을 시작 직후에 적용하면 아직 생성하지 않은 입자까지 센 셈이 됩니다. 카메라 밖의 입자나 겹친 입자는 구별해서 보이지 않을 수 있으므로 살아 있는 개수와 화면에서 세는 개수는 다릅니다. 이 값은 단순 생성·수명 조건의 계산이며 실제 프레임 시간 측정값은 아닙니다.

이 페이지 목차

이 페이지 목차