본문 바로가기

파티클 생성 및 기본 속성 설정

Spawn Rate와 Burst로 생성 시점과 수량을 정하고 초기 위치·속도·수명·색상·크기를 설정해 기본 효과를 만듭니다.

이미터의 개념과 설정에서 이미터가 생성량을 정하는 일과 새 입자를 초기화하는 일을 서로 다른 그룹에서 한다는 것을 보았습니다. 이번에는 그 두 가지를 실제로 설정해 봅니다. 파티클이 언제 몇 개씩 생성되는지를 정하는 두 가지 스폰 방식을 비교하고, 생성 직후의 입자가 어떤 수명과 색, 크기를 갖는지 정한 뒤, 빈 이미터에서 시작해 간단한 생성 효과를 만듭니다.


언제, 몇 개를 만들까

입자를 만드는 시점과 개수는 Emitter Update 그룹의 Spawn Rate나 Spawn Burst Instantaneous가 정합니다. Particle Spawn 그룹은 그렇게 만들어진 입자 하나하나의 초기 속성을 채우는 곳이므로, 생성량을 바꾸려고 Particle Spawn을 뒤질 필요는 없습니다. 자주 쓰는 스폰 방식은 다음 두 가지입니다.

Spawn Rate

Spawn Rate 모듈은 1초에 정해진 개수만큼 파티클을 계속 만들 때 씁니다. 수도꼭지를 틀어 두면 물이 계속 흘러나오는 것과 비슷해서, 연기나 불꽃, 비, 눈처럼 끊임없이 이어지는 효과에 알맞습니다. 모듈을 추가한 뒤 Spawn Rate 입력의 값을 바꿔 초당 생성 수를 조절하며, 값이 클수록 같은 시간에 더 많은 파티클이 만들어집니다.

Spawn Burst Instantaneous

Spawn Burst Instantaneous 모듈은 정해진 시점에 정해진 개수의 파티클을 한꺼번에 만들 때 씁니다. 폭죽이 터지며 불꽃이 한 번에 퍼져 나오는 것과 같아서, 폭발이나 충격파, 짧은 섬광처럼 순간적으로 많은 파티클이 필요한 효과에 알맞습니다. 모듈을 추가한 뒤 Spawn Count 입력으로 한 번에 만들 개수를, Spawn Time 입력으로 그 시점을 정합니다.

대부분의 효과는 두 방식 가운데 하나를 쓰거나 둘을 함께 씁니다. 예를 들어 계속 타오르는 불꽃은 Spawn Rate로 만들고, 가끔 크게 튀어 오르는 불씨는 버스트로 더할 수 있습니다.


생성 누계와 살아 있는 수

초당 생성량과 한 번의 생성량을 구분합니다

Rate 50/초와 t=1 Burst 50의 독립 비교를 구간마다 새로 생성되는 입자 수로 보여 주거나 본문 Rate 20/Burst 5/Lifetime 2 사례의 1.5초 35와 3.5초 생존/누계 차이를 추적할 수 있다. 실제 틱 캡처와 구분한다.

NIAGARA · CH2-2

초당 생성량과 한 번의 생성량을 구분합니다

설명용으로 Rate 50개/초와 t=1초에 Burst 50개를 비교합니다. 표시한 값은 새로 생성되는 개수이며, 살아 있는 개수나 화면에서 보이는 개수가 아닙니다.

Rate · 1초 구간마다 50개

지속적인 Rate의 1초 구간별 생성 개수0~1초,1~2초,2~3초 구간에 각각50개가 생성되는 설명용 비교입니다.구간별 새 생성 개수5050500초1초2초3초
Rate 생성 구간원desktop과같은0·1·2·3초시간축. Rate는각1초구간50개총150개,Burst는1초에한번50개. 살아있는수의그래프가아니다.구간별 새 생성 개수5050500초1초2초3초

3초 동안 정상적으로 계속 실행한다는 가정에서 총 생성량은 50 × 3 = 150개입니다.

Burst · t=1초에 50개

1초에 한 번50개를 생성하는 Burst선택한 한 번의 Burst가1초에 발생합니다. 다른 시각의 추가 생성은 가정하지 않습니다.지정 시점에 한 번 생성500초1초2초3초
Burst 단일 생성 시점원desktop과같은0·1·2·3초시간축. Rate는각1초구간50개총150개,Burst는1초에한번50개. 살아있는수의그래프가아니다.지정 시점 한 번 생성500초1초2초3초

이 비교에서는 Burst가 한 번 발생해 총 50개입니다. 루프 반복이나 추가 Burst는 별도 조건입니다.

생성과 생존은 다른 계산입니다

두 생성량 모듈은 Emitter Update에 둡니다. Particle Spawn은 새 입자를 초기화하고 Particle State 등은 나이와 소멸을 관리합니다.

이산 시뮬레이션 틱·보간·실행/컬링 조건에 따라 구체적인 생성 시각은 달라집니다. 이 그림은 정상적인 지속 실행/단일 Burst의 수량 비교이며 실제 엔진 캡처나 순간 살아 있는 수의 그래프가 아닙니다.

이 예의 조건

  • 본문과 원 도표에 제시된 사례의 입력·조건을 사용합니다. 설명용 수치나 독립 비교 경로는 각 단계에 표시합니다.
  • 현재 상태·값과 전환 근거의 위치는 모든 단계에서 같습니다. 조건이 맞지 않거나 실행되지 않은 경로를 성공한 동작으로 해석하지 않습니다.
관계도의 보충 설명
원 도표의 제목·노드·관계·조건·주석
범위원문
관계·조건 설명0~1초, 1~2초, 2~3초 구간에 각각 50개가 생성되는 설명용 비교입니다.
관계·조건 설명원 도표와 같은 0·1·2·3초 시간축이다. Rate는 각 1초 구간에 50개, 총 150개를 생성하고, Burst는 1초에 한 번 50개를 생성한다. 살아 있는 수의 그래프가 아니다.
도표 제목1초에 한 번 50개를 생성하는 Burst
관계·조건 설명선택한 한 번의 Burst가 1초에 발생합니다. 다른 시각의 추가 생성은 가정하지 않습니다.
예의 값과 변화
관찰·상황값·보충 정보변화·이유
설명 설정

연속 근사로 Rate 20, 1초의 Burst 5, Lifetime 2를 둔다.

  • Rate: 20개/s
  • Burst: 1 s에 5개
  • 실제 tick 캡처와 다른 계산 연습이며, 컬링·조기 소멸은 없다.
1.5초

Rate의 30개와 아직 살아 있는 Burst 5개를 합친다.

  • 생성 누계: 35개
  • 생존: 약 35개
  • 모두 수명 2초 이내이므로 아직 소멸하지 않았다.
3.5초

최근 2초의 Rate 40개만 살아 있고 Burst는 끝났다.

  • 생존: Rate 약 40 / Burst 0
  • 생성 누계: 75개
  • 누계 20*3.5+5와 생존 수는 같은 지표가 아니다.

초당 생성량과 한 번의 생성량을 구분합니다

Rate 50/초와 t=1 Burst 50의 독립 비교를 구간마다 새로 생성되는 입자 수로 보여 주거나 본문 Rate 20/Burst 5/Lifetime 2 사례의 1.5초 35와 3.5초 생존/누계 차이를 추적할 수 있다. 실제 틱 캡처와 구분한다.

NIAGARA · CH2-2

초당 생성량과 한 번의 생성량을 구분합니다

설명용으로 Rate 50개/초와 t=1초에 Burst 50개를 비교합니다. 표시한 값은 새로 생성되는 개수이며, 살아 있는 개수나 화면에서 보이는 개수가 아닙니다.

Rate · 1초 구간마다 50개

지속적인 Rate의 1초 구간별 생성 개수0~1초,1~2초,2~3초 구간에 각각50개가 생성되는 설명용 비교입니다.구간별 새 생성 개수5050500초1초2초3초
Rate 생성 구간원desktop과같은0·1·2·3초시간축. Rate는각1초구간50개총150개,Burst는1초에한번50개. 살아있는수의그래프가아니다.구간별 새 생성 개수5050500초1초2초3초

3초 동안 정상적으로 계속 실행한다는 가정에서 총 생성량은 50 × 3 = 150개입니다.

Burst · t=1초에 50개

1초에 한 번50개를 생성하는 Burst선택한 한 번의 Burst가1초에 발생합니다. 다른 시각의 추가 생성은 가정하지 않습니다.지정 시점에 한 번 생성500초1초2초3초
Burst 단일 생성 시점원desktop과같은0·1·2·3초시간축. Rate는각1초구간50개총150개,Burst는1초에한번50개. 살아있는수의그래프가아니다.지정 시점 한 번 생성500초1초2초3초

이 비교에서는 Burst가 한 번 발생해 총 50개입니다. 루프 반복이나 추가 Burst는 별도 조건입니다.

생성과 생존은 다른 계산입니다

두 생성량 모듈은 Emitter Update에 둡니다. Particle Spawn은 새 입자를 초기화하고 Particle State 등은 나이와 소멸을 관리합니다.

이산 시뮬레이션 틱·보간·실행/컬링 조건에 따라 구체적인 생성 시각은 달라집니다. 이 그림은 정상적인 지속 실행/단일 Burst의 수량 비교이며 실제 엔진 캡처나 순간 살아 있는 수의 그래프가 아닙니다.

이 예의 조건

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

관계도의 보충 설명

원 도표의 제목·노드·관계·조건·주석
범위원문
관계·조건 설명0~1초, 1~2초, 2~3초 구간에 각각 50개가 생성되는 설명용 비교입니다.
관계·조건 설명원 도표와 같은 0·1·2·3초 시간축이다. Rate는 각 1초 구간에 50개, 총 150개를 생성하고, Burst는 1초에 한 번 50개를 생성한다. 살아 있는 수의 그래프가 아니다.
도표 제목1초에 한 번 50개를 생성하는 Burst
관계·조건 설명선택한 한 번의 Burst가 1초에 발생합니다. 다른 시각의 추가 생성은 가정하지 않습니다.
예의 값과 변화
관찰·상황값·보충 정보변화·이유
설명 설정

연속 근사로 Rate 20, 1초의 Burst 5, Lifetime 2를 둔다.

  • Rate: 20개/s
  • Burst: 1 s에 5개
  • 실제 tick 캡처와 다른 계산 연습이며, 컬링·조기 소멸은 없다.
1.5초

Rate의 30개와 아직 살아 있는 Burst 5개를 합친다.

  • 생성 누계: 35개
  • 생존: 약 35개
  • 모두 수명 2초 이내이므로 아직 소멸하지 않았다.
3.5초

최근 2초의 Rate 40개만 살아 있고 Burst는 끝났다.

  • 생존: Rate 약 40 / Burst 0
  • 생성 누계: 75개
  • 누계 20*3.5+5와 생존 수는 같은 지표가 아니다.

위 그림은 초당 생성량과 한 번의 생성량을 구분해 보여 줍니다. 위쪽의 Rate 그래프는 50개/초를 계속 유지할 때 0초에서 1초, 1초에서 2초, 2초에서 3초까지의 구간마다 새로 생기는 50개를 막대로 나타내며, 3초 동안 정상적으로 계속 실행하면 모두 50 × 3 = 150개가 만들어집니다. 아래쪽의 Burst 그래프는 1초에 한 번 50개를 만드는 경우로, 루프 반복이나 다른 버스트가 없다면 전체 생성 수는 50개입니다. 그림에 표시한 값은 모두 새로 생성되는 개수이며, 살아 있는 개수나 화면에 보이는 개수의 그래프가 아니라는 점에 주의해야 합니다.

그림 아래의 설명처럼 생성과 생존은 다른 계산입니다. 두 생성량 모듈은 Emitter Update에 두고, Particle Spawn은 새 입자를 초기화하며, Particle State 같은 모듈이 나이와 소멸을 관리합니다. 실제 생성 시각은 이산적인 시뮬레이션 틱과 보간, 실행이나 컬링 조건에 따라 조금씩 달라지므로, 그림은 수량을 비교하기 위한 설명이지 엔진 화면을 캡처한 것이 아닙니다.

단계 그림은 그림과 다른 수치를 씁니다. 그림이 Rate 50개/초와 Burst 50개로 생성량을 비교하는 반면, 단계 그림은 Rate 20개/초와 1초의 Burst 5개, 그리고 모든 입자의 수명 2초를 두고 생성 누계에서 살아 있는 수를 구하는 과정을 1.5초와 3.5초 두 시점으로 따라갑니다. 이 글의 계산도 단계 그림의 수치를 따릅니다.

0초에 시작해 Rate 20개/초를 계속 유지하고, 1초에 Burst 5개를 한 번 더한다고 해 봅시다. 모든 입자의 수명은 2초로 고정이고 수명이 다하면 사라지며, 미리 시뮬레이션을 돌려 두는 Warmup이나 반복 버스트, 일찍 사라지는 입자, 컬링은 없습니다. 생성을 연속으로 일어난다고 근사하면 1.5초까지 Rate가 만든 수는 20 × 1.5 = 30개입니다. 이때 가장 오래된 입자도 아직 2초를 넘지 않았고, 1초에 생긴 버스트 입자의 나이도 0.5초이므로 살아 있는 수는 약 30 + 5 = 35개입니다. 실제 틱과 보간 설정에 따라 순간의 수량은 조금 다를 수 있으므로, 정확한 값이 필요하면 따로 확인합니다.


처음 상태를 정하는 Initialize Particle

Initialize Particle은 Particle Spawn 그룹에서 새 입자의 수명과 색, 크기 같은 초기값을 정하는 모듈입니다. 같은 그룹 안의 모듈은 스택의 위에서 아래로 실행되므로, 이 모듈이 정한 초기값을 읽는 모듈이 있다면 그보다 위에 둡니다. Initialize Particle에서 정하는 주요 속성은 다음과 같습니다.

  • Lifetime(수명): 입자가 생긴 뒤 몇 초 동안 존재할지를 정합니다. Lifetime Mode를 Direct Set으로 두면 하나의 값을, Random으로 두면 최솟값과 최댓값 사이의 무작위 값을 씁니다. 수명이 길수록 효과가 오래 남고, 짧을수록 빨리 사라집니다.
  • Color(색): 입자가 생길 때 가질 초기 색을 RGBA(Red, Green, Blue, Alpha)로 정합니다. Alpha는 불투명도를 나타냅니다. 색은 보통 이후에 Color나 Scale Color 모듈로 수명에 따라 바꿉니다.
  • Sprite Size(스프라이트 크기): 입자를 2D 스프라이트로 그릴 때의 초기 크기입니다. Sprite Size Mode에 따라 X와 Y를 같은 값으로 주거나 따로 주어 길쭉한 입자를 만들 수 있으며, 수명에 따른 크기 변화는 보통 Scale Sprite Size 모듈로 줍니다.
  • Sprite Rotation(스프라이트 회전): 스프라이트의 초기 회전 각도입니다.
  • Mesh Scale(메시 크기): 입자를 3D 메시로 그릴 때의 초기 크기입니다.

Initialize Particle에 보이는 입력은 모듈의 버전과 선택한 모드에 따라 달라집니다. 초기 위치는 Shape Location 같은 위치 모듈로, 초기 속도는 Add Velocity 같은 모듈로 따로 정할 수 있습니다. 충돌에 쓰는 반경은 충돌 모듈의 설정과 입력에서 확인해야 하며, 렌더링 크기나 Initialize Particle의 공통 입력과 늘 같은 값은 아닙니다.

이 모듈의 목적은 어디까지나 처음 상태를 정하는 것입니다. 생성된 뒤의 움직임과 변화는 Particle Update 그룹의 모듈이 맡습니다.


빈 이미터에서 생성 효과 만들기

이제 빈 이미터에서 시작해 생성과 기본 속성을 직접 설정해 봅니다. 먼저 새 나이아가라 시스템을 만드는 창에서 빈 시스템을 골라 NS_BasicSpawn을 만듭니다. 예전 버전의 창이라면 Create empty system을 골라 만들 수 있습니다. 다음으로 시스템 개요를 오른쪽 클릭해 Add Emitter에서 Empty Emitter를 고릅니다. 템플릿에 이미 들어 있는 모듈은 다시 더하지 않으며, Emitter Update의 Emitter State와 시스템의 수명 설정이 계속 생성하는 것을 허용하는지 확인합니다.

이어서 새로 생긴 이미터를 선택하고 Particle Spawn 그룹의 + 버튼에서 Initialize Particle을 검색해 더합니다. 이 모듈이 없으면 파티클이 제대로 그려지지 않거나 오류가 날 수 있습니다. 그다음 Emitter Update 그룹의 + 버튼에서 Spawn Rate를 더합니다.

모듈을 다 더했으면 값을 정합니다. Spawn Rate의 Spawn Rate 값은 50 정도로 두어 초당 50개를 만들게 하고, Initialize Particle의 Lifetime은 1.0, 스프라이트 크기는 50.0으로 둡니다. Color는 처음에는 밝은 색을 고르고 Alpha를 1로 두었다가, 입자가 보이는 것을 확인한 뒤에 색과 Alpha를 바꿔 비교합니다.

마지막으로 수명이 다한 입자가 사라지는지와 화면 출력을 확인합니다. Particle Update에 Particle State가 있는지 보고, 수명이 지나면 입자를 없애는 설정이 켜져 있는지 확인합니다. Render 그룹에는 Sprite Renderer를 더하는데, 이미 있는 모듈과 렌더러라면 설정만 확인합니다. Sprite Renderer의 Material에는 Particle Color의 RGB와 Alpha를 읽는 머티리얼을 지정합니다. 템플릿의 머티리얼로 색과 Alpha가 조절된다면 그것을 쓰고, 1장에서 M_SimpleFire를 만들었다면 그 머티리얼을 다시 써도 됩니다. 알맞은 머티리얼이 없다면 기본 머티리얼 설정과 적용에서 머티리얼을 만들고 Particle Color를 연결해 저장하는 단계까지만 먼저 진행하고, 선택 사항인 텍스처는 건너뜁니다. 돌아와서 NS_BasicSpawn의 Sprite Renderer > Material에 지정합니다. M_SimpleFire는 색을 더하는 Additive 방식이므로, 검은색이나 Alpha 0에서는 입자가 보이지 않을 수 있습니다.

이 설정으로 정상 재생된다면 초당 50개가 만들어지고 각 입자는 1초 뒤에 사라지므로, 정상 상태의 살아 있는 수는 약 50개입니다. 아직 위치 분포나 움직임을 주지 않았으므로 입자들이 같은 자리에 겹쳐 보일 수 있습니다. 화면의 모양은 머티리얼에 따라 달라지므로 반드시 흰 사각형으로 보여야 하는 것은 아닙니다.

결과가 예상과 다르면 증상에 따라 살펴볼 곳이 다릅니다. 입자가 사라지지 않고 늘기만 한다면 Particle State의 나이와 소멸 설정을 확인합니다. 색이 반영되지 않으면 머티리얼에서 Particle Color가 연결되어 있는지, 렌더러의 Color 바인딩이 어떤 속성을 읽는지 확인하고, Particle Update의 Color나 Scale Color가 초기 색을 덮어쓰고 있지 않은지도 봅니다. 입자가 살아 있는데 보이지 않으면 크기와 알파, 위치, 바운드, 렌더러를 확인합니다. 같은 머티리얼이라도 배경과 노출에 따라 밝기가 달라 보일 수 있으며, 생성 수는 디버거로도 확인할 수 있습니다. 다음 실습에서 속도를 더하면 겹쳐 있던 입자들을 하나씩 구별할 수 있습니다.

수명 값을 정하는 것과 실제로 입자를 없애는 것은 다른 일이라는 점도 기억해 둡니다. Initialize Particle은 수명 값을 줄 뿐이고, 나이를 세어 수명이 다한 입자를 없애는 일은 Particle Update의 Particle State가 합니다.


정리

  • 생성 시점과 개수는 Emitter Update의 Spawn Rate나 Spawn Burst Instantaneous가 정하고, Particle Spawn은 새 입자의 초기 속성을 채웁니다.
  • Spawn Rate는 초당 개수를 계속 만들고, Spawn Burst Instantaneous는 정해진 시점에 Spawn Count만큼 한꺼번에 만듭니다.
  • 생성 누계와 살아 있는 수는 다르며, 살아 있는 수를 구할 때는 수명이 다해 사라진 입자를 빼야 합니다.
  • Initialize Particle은 수명, 색, 스프라이트 크기, 회전, 메시 크기의 초기값을 정하고, 초기 위치와 속도는 Shape Location이나 Add Velocity 같은 모듈로 정합니다.
  • 수명이 다한 입자를 실제로 없애는 일은 Particle Update의 Particle State가 합니다.

연습 문제

1. 3.5초의 살아 있는 수

본문의 설정(Rate 20개/초, 1초에 Burst 5개, 수명 2초)을 3.5초까지 계속 실행했습니다. 지금 살아 있는 Rate 입자와 Burst 입자는 각각 몇 개일까요? 3.5초까지의 전체 생성 누계와도 비교해 보세요.

해설 보기

Rate 입자는 최근 2초 동안, 즉 1.5초에서 3.5초 사이에 태어난 것만 살아 있으므로 약 20 × 2 = 40개입니다. 1초에 태어난 버스트 입자는 지금 나이가 2.5초여서 수명 2초를 넘었으므로 5개 모두 이미 사라졌습니다. 그래서 살아 있는 수는 약 40개입니다.

생성 누계는 20 × 3.5 + 5 = 75개입니다. 누계 75를 지금 살아 있는 수로 읽으면 이미 사라진 입자까지 다시 세게 됩니다.

2. 사라지지 않는 입자

빈 이미터에 Spawn Rate 50과 Initialize Particle의 Lifetime 1.0을 설정했는데, 살아 있는 입자 수가 50 근처에서 멈추지 않고 계속 늘어납니다. 무엇을 확인해야 할까요?

해설 보기

Initialize Particle의 Lifetime은 수명 값을 정할 뿐이고, 그 값을 보고 입자를 없애는 일은 Particle Update의 Particle State가 합니다. 그래서 먼저 Particle Update에 Particle State가 있는지, 수명이 지나면 입자를 없애는 설정이 켜져 있는지 확인합니다.

이 모듈이 제대로 동작하면 1초가 지난 입자부터 사라지기 시작해, 살아 있는 수가 약 50 × 1 = 50개에서 유지됩니다.

3. 버스트로 바꾸면

같은 이미터에서 Spawn Rate를 지우고 Spawn Burst Instantaneous를 넣어 Spawn Count 50, Spawn Time 0초로 두었습니다. 반복 없이 한 번만 재생할 때, 0.5초와 1.5초의 살아 있는 수는 얼마일까요?

해설 보기

0초에 50개가 한꺼번에 만들어지고 각 입자의 수명은 1초이므로, 0.5초에는 50개가 살아 있고 1.5초에는 모두 사라져 0개입니다.

버스트는 한 번에 정해진 수를 만드는 방식이라 생성률 × 수명의 정상 상태 식을 적용하지 않습니다. 살아 있는 수는 버스트의 개수와 그 입자들의 나이로 따집니다.

수명이 다한 입자를 없애는 Particle State를 비롯한 Particle Update 그룹의 모듈은 Epic의 Particle Update 그룹 레퍼런스에서 확인할 수 있습니다.

다음 글 렌더러 모듈의 역할과 기본 사용법에서는 계산된 입자를 스프라이트와 메시, 리본, 빛으로 그리는 렌더러를 하나씩 살펴봅니다.