본문 바로가기

파티클 속성 조정

파티클의 수명·색상·크기·속도를 직접 조정하고 각 값의 변화가 밀도·형태·이동 결과에 미치는 영향을 확인합니다.

파티클 생성 및 기본 속성 설정에서 만든 NS_BasicSpawn은 초당 50개의 입자를 같은 자리에 만들고 1초 뒤에 없앱니다. 입자가 생기기는 하지만 모두 같은 수명과 색, 크기로 한 점에 겹쳐 있어서 효과라고 부르기에는 밋밋합니다. 나이아가라를 다루는 재미는 이런 입자의 움직임과 모양을 원하는 방향으로 바꾸는 데 있습니다. 이 글에서는 수명과 색, 크기, 속도를 하나씩 바꿔 보며 각 값이 밀도와 모양, 이동에 어떤 영향을 주는지 확인합니다.


속성을 바꾸면 효과가 달라진다

파티클의 속성은 입자 하나하나가 가진 특징입니다. 수명(Lifetime), 색(Color), 크기(Size), 속도(Velocity)가 모두 속성이며, 이 값들을 조절해 효과의 생김새와 흐름을 정합니다. 요리사가 양념의 양을 조절해 맛을 내는 것과 비슷하지만, 요리와 달리 나이아가라에서는 값을 하나만 바꾸고 같은 조건에서 다시 재생해 결과를 정확히 비교할 수 있습니다.

속성은 주로 선택(Selection) 패널에서 바꿉니다. 시스템 개요(System Overview)에서 모듈을 선택하면 그 모듈이 다루는 입력이 선택 패널에 나타나고, 여기서 값을 바꿀 수 있습니다.


실습 준비

앞 글에서 만든 NS_BasicSpawn을 다시 엽니다. 아직 없다면 앞 글의 생성 실습을 먼저 따라 만듭니다. 시작하기 전에 Emitter Update에 Emitter State와 Spawn Rate가, Particle Spawn에 Initialize Particle이, Particle Update에 Particle State가, Render에 Sprite Renderer가 있는지 확인합니다. 기준값은 Spawn Rate 50과 고정 수명 1초입니다.


수명 바꾸기

수명은 파티클이 얼마나 오래 화면에 남는지를 정합니다. 시스템 개요에서 Initialize Particle을 선택하면 선택 패널에 Lifetime 입력이 보이는데, 먼저 앞 실습의 기준값 1.0(1초)인지 확인합니다. 이 값을 3.0으로 바꾸면 미리보기에서 입자들이 훨씬 오래 머물다 사라집니다. 생성률은 그대로이므로 정상 상태의 살아 있는 수도 약 50 × 3 = 150개로 늘어납니다.

이번에는 입자마다 수명을 다르게 줘 봅니다. Lifetime 입력 옆의 아래쪽 화살표를 눌러 동적 입력 목록을 열고 Random Range Float를 고르면 Minimum과 Maximum을 정할 수 있습니다. Minimum을 0.5, Maximum을 2.0으로 두면 입자들이 저마다 다른 수명으로 생겨 제각각 사라집니다. 모든 입자가 똑같은 순간에 사라지지 않으므로 효과가 더 자연스럽고 덜 반복적으로 보입니다.


색 바꾸기

색은 효과의 분위기를 정하는 요소입니다. Initialize Particle을 선택한 채 Color 입력을 찾아 옆의 색 상자를 누르면 색 선택기(Color Picker)가 열립니다. 붉은색이나 푸른색처럼 원래와 확실히 다른 색을 고르고 시뮬레이션을 다시 시작해 새로 생긴 입자의 색을 확인합니다. 이 색이 화면에 반영되려면 렌더러에 지정한 머티리얼이 Particle Color를 읽고 있어야 합니다.

Alpha 값을 바꾸면 입자의 불투명도도 바꿀 수 있습니다. 다만 반투명도가 실제로 달라지려면 머티리얼이 이 알파를 Opacity에 쓰고 있고, 반투명을 지원하는 블렌드 모드여야 합니다. Opaque 머티리얼에서는 알파를 낮춰도 같은 결과가 나오지 않습니다.


크기 바꾸기

크기는 효과의 규모감과 세밀함에 영향을 줍니다. Initialize Particle을 선택한 채 스프라이트 크기 입력을 찾아 값을 바꿔 봅니다. 10.0으로 줄이면 입자가 아주 작아지고, 100.0으로 늘리면 아주 커집니다. X와 Y를 따로 지정하는 모드라면 두 값을 다르게 주어 길쭉한 입자를 만들 수도 있습니다.

크기에도 무작위 범위를 줄 수 있습니다. 이때는 입력의 자료형에 맞는 무작위 동적 입력을 고릅니다. 하나의 값으로 크기를 정하는 균일 크기 모드라면 Float 범위를, X와 Y를 따로 정하는 모드라면 Vector2 범위를 쓰며, 예를 들어 Minimum을 20.0, Maximum을 80.0으로 둡니다.


속도 주기

지금까지의 입자는 모두 생긴 자리에 머물러 있었습니다. 속도를 주면 움직임이 생깁니다. 선택 패널에서 Particle Spawn 그룹의 + 버튼을 누르고 Add Velocity를 검색해 Initialize Particle 다음에 추가합니다. 속도가 실제 위치 변화로 이어지려면 Particle Update에 Solve Forces and Velocity가 있어야 하며, 이미 있다면 다시 더하지 않습니다.

Add Velocity를 선택하고 Velocity 입력의 X, Y, Z 값을 바꿔 봅니다. 예를 들어 Z를 100.0으로 두면, 선택한 속도 좌표 공간의 +Z 방향으로 초당 100cm를 움직이는 초기 속도가 생깁니다. 다른 힘이나 좌표 변환이 있으면 월드에서 보이는 궤적은 달라질 수 있습니다. X나 Y에 양수나 음수를 주면 다른 방향으로 움직이게 할 수도 있습니다.

속도에도 무작위성을 줄 수 있습니다. Velocity 입력에 Random Range Vector를 연결하고 Minimum을 X(-50), Y(-50), Z(50), Maximum을 X(50), Y(50), Z(150)으로 두면, 입자들이 위쪽을 중심으로 여러 방향과 속도로 흩어집니다.


속도와 시간으로 위치 예상하기

무작위 범위를 넣기 전에, 고정된 값으로 움직임을 한 번 계산해 보면 결과를 읽기 쉬워집니다. 비교용 입자 하나가 월드 Z=0cm에서 시작하고, 초기 속도는 월드 +Z 방향으로 100cm/s, 수명은 2초로 고정이라고 해 봅시다. 힘과 충돌, 감속, 좌표 변환, 위치 덮어쓰기는 없고 위치 계산이 정상적으로 동작한다고 가정합니다.

이 조건에서 이동 거리는 속도에 시간을 곱한 값입니다. 1초 뒤에는 100cm/s × 1s = 100cm, 1.5초 뒤에는 100 × 1.5 = 150cm만큼 올라가 있습니다. 2초가 되면 수명이 다해 입자가 사라집니다. 이때 Spawn Rate를 바꾸면 새로 생기는 입자의 수가 바뀔 뿐, 이미 태어난 이 입자의 이동 속도 100cm/s는 바뀌지 않습니다.

실습에서는 이렇게 먼저 고정된 속도와 수명으로 방향을 확인한 뒤, 앞에서 정한 무작위 입력으로 돌아갑니다. 고정값으로 방향을 확인하고 나서 무작위 범위를 더하면 어떤 입력이 결과를 바꿨는지 구분하기 쉽습니다.


바꾸기 전과 후 비교하기

Spawn Rate 50을 그대로 두고 수명을 0.5초에서 2초 사이의 무작위 값으로, 균일 크기를 20에서 80 사이로, 속도를 앞의 범위로 설정했다면 입자마다 수명과 크기, 움직이는 방향이 달라집니다. 색은 색 선택기에서 고른 하나의 값이므로, 이 실습에서는 무작위 색을 설정한 것이 아닙니다.

결과를 비교할 때는 값마다 함께 봐야 할 것이 있습니다. 수명을 늘렸다면 살아 있는 입자 수와 궤적의 길이가 함께 달라지는지 봅니다. 색과 알파를 바꿨다면 머티리얼의 연결을, 크기를 바꿨다면 입자가 화면에서 겹치는 정도와 오버드로우를 함께 확인합니다. 속도를 바꿨는데도 입자가 멈춰 있다면 Particle Update의 위치 계산과 그 뒤에서 위치를 덮어쓰는 모듈이 있는지 확인합니다.

비교하는 방법도 정해 두면 좋습니다. 기준 상태를 저장해 두고 값 하나만 바꾼 뒤 같은 시간 구간에서 비교합니다. 여러 값을 바꿔 어떤 변경이 원인인지 알 수 없게 되었다면 마지막으로 바꾼 것부터 하나씩 되돌립니다.


정리

  • 수명과 색, 크기, 속도는 입자마다 가진 속성이며, 선택 패널에서 모듈의 입력으로 바꿉니다.
  • 수명을 늘리면 입자가 오래 머물고 정상 상태의 살아 있는 수도 늘며, Random Range Float로 입자마다 다른 수명을 줄 수 있습니다.
  • 색과 알파는 머티리얼이 Particle Color를 읽고 알파를 Opacity에 쓸 때 반영되며, Opaque 머티리얼에서는 반투명이 되지 않습니다.
  • Add Velocity로 초기 속도를 주고, Particle Update의 Solve Forces and Velocity가 이를 위치 변화로 바꿉니다.
  • 고정값으로 방향과 거리를 먼저 확인한 뒤 무작위 범위를 더하고, 값은 하나씩 바꿔 같은 시간 구간에서 비교합니다.

연습 문제

1. 아래로 움직이는 입자

본문의 비교 조건에서 속도만 월드 -Z 방향으로 50cm/s, 고정 수명은 1초로 바꾸었습니다. 0.5초 뒤 입자의 월드 Z는 얼마일까요? 수명이 다하면 입자가 사라진다고 할 때, 2초 뒤에도 이 입자를 따라가며 Z를 읽을 수 있을까요?

해설 보기

0.5초 뒤에는 0 + (-50) × 0.5 = -25cm입니다.

2초 뒤의 Z는 읽을 수 없습니다. 수명 1초가 지나면 입자가 사라지므로, 운동식을 2초까지 늘려 -100cm라고 계산하더라도 그 위치에 살아 있는 입자는 없습니다. 식으로 계산한 시간과 입자가 실제로 살아 있는 시간은 다릅니다. 일찍 사라지게 하는 조건이나 컬링, 다른 힘을 더했다면 원래 조건부터 다시 확인합니다.

2. 수명 3초의 살아 있는 수

Spawn Rate 50을 그대로 두고 고정 수명을 1초에서 3초로 바꿨습니다. 정상 상태의 살아 있는 입자 수는 어떻게 달라질까요? 속도가 있다면 화면에서는 무엇이 함께 달라질까요?

해설 보기

정상 상태의 살아 있는 수는 약 50 × 1 = 50개에서 50 × 3 = 150개로 늘어납니다. 생성률은 같은데 각 입자가 세 배 오래 머물기 때문입니다.

속도가 있다면 입자가 사라지기 전까지 더 멀리 움직이므로 궤적도 길어집니다. 살아 있는 수가 늘어나는 만큼 화면에서 겹치는 면적과 비용도 함께 늘 수 있으므로, 수명을 바꾼 뒤에는 모양과 비용을 함께 확인합니다.

3. 색은 바꿨는데 그대로

Initialize Particle의 Color를 붉은색으로 바꾸고 시뮬레이션을 다시 시작했는데 입자의 색이 그대로입니다. 무엇을 확인해야 할까요?

해설 보기

먼저 Sprite Renderer에 지정한 머티리얼이 Particle Color를 읽고 있는지 확인합니다. 머티리얼이 입자 색을 쓰지 않으면 Initialize Particle에서 어떤 색을 주어도 화면은 바뀌지 않습니다.

머티리얼이 입자 색을 쓰고 있다면, 렌더러의 Color 바인딩이 어떤 속성을 읽는지와 Particle Update의 Color나 Scale Color 모듈이 초기 색을 덮어쓰고 있지 않은지를 확인합니다.

Random Range Float 같은 동적 입력을 모듈 입력에 연결하는 방법은 Epic의 나이아가라 에디터 UI 레퍼런스의 선택 패널 설명에서 확인할 수 있습니다.

이것으로 2장을 마칩니다. 2장에서는 이미터 안의 실행 그룹이 각각 무엇을 대상으로 언제 실행되는지에서 시작해, 생성량과 초기 속성의 설정, 렌더러의 종류, 시스템과 이미터 속성의 범위, 그리고 수명과 색, 크기, 속도의 조정까지 나이아가라를 이루는 기본 구성 요소를 살펴봤습니다. 다음 장의 스폰 모듈의 기본 사용법부터는 스폰과 업데이트 모듈, 이벤트 핸들러, 렌더링 설정, 직접 만드는 모듈까지 모듈을 다루는 방법을 더 깊이 익힙니다.