PART 1 · 강의 3/3

파티클 라이프사이클

파티클의 생성부터 소멸까지의 전체 생명주기와 Attribute 데이터 흐름을 이해합니다.

01

파티클 생명주기 4단계

Birth > Active > Aging > Death

Niagara에서 각 파티클은 명확한 생명주기를 가집니다. 이 주기를 이해하는 것이 이펙트 제작의 기초입니다.

Birth (탄생)

Particle Spawn 그룹이 실행. 위치, 속도, 색상, 크기 등 초기 속성 설정.

Active (활성)

매 프레임 Particle Update 실행. 힘, 충돌, 색상 변화 등 동적 동작 수행.

Aging (노화)

NormalizedAge가 1.0에 가까워짐. 페이드아웃, 크기 감소 등 소멸 준비.

Death (소멸)

Lifetime 초과 시 Particle State가 파티클 제거. 메모리 반환.

핵심 시간 Attribute

Attribute 타입 범위 설명
Particles.Lifetime float 0 ~ inf 파티클의 총 수명 (초). Particle Spawn에서 설정.
Particles.Age float 0 ~ Lifetime 파티클이 생성된 후 경과 시간 (초). 자동 증가.
Particles.NormalizedAge float 0.0 ~ 1.0 Age / Lifetime. 커브 평가에 자주 사용.
NormalizedAge 활용

NormalizedAge는 0~1 범위로 정규화되어 있어, CurveGradient의 입력으로 사용하기에 이상적입니다. 예: Scale Color 모듈에서 NormalizedAge에 따라 알파값을 0→1→0으로 변화시켜 페이드인/아웃 효과를 만들 수 있습니다.

02

Particle Attributes (속성)

파티클이 가지는 데이터 필드

각 파티클은 여러 Attribute(속성)를 가집니다. 이 속성들은 모듈에 의해 읽히고 쓰여지며, 파티클의 동작과 외관을 결정합니다.

Particles.Position

Vector3

파티클의 월드 좌표 위치. Solve Forces에 의해 자동 갱신.

Particles.Velocity

Vector3

파티클의 이동 속도 (cm/s). 힘에 의해 변경됨.

Particles.Color

LinearColor (RGBA)

파티클의 색상. 렌더러에서 머티리얼에 전달.

Particles.SpriteSize

Vector2

스프라이트 렌더러의 가로/세로 크기.

Particles.Mass

float

파티클의 질량. 힘 계산에 사용 (F = ma).

Particles.SpriteRotation

float

스프라이트의 회전 각도 (도).

Particles.UniqueID

int

파티클의 고유 식별자. 랜덤 시드 등에 활용.

Particles.ID

NiagaraID

파티클의 인덱스와 Acquire Tag를 포함하는 ID.

커스텀 Attribute 추가
// Parameters 패널에서 새 파라미터 추가 + 버튼 클릭 → Make NewParticle 네임스페이스 선택 // 예: 커스텀 체력 파라미터 추가 Namespace: Particles Name: Health Type: float // 결과: Particles.Health // Particle Spawn에서 초기값 설정 Set (Particles.Health) = 100.0 // Particle Update에서 매 프레임 감소 Set (Particles.Health) = Particles.Health - DeltaTime * 10.0
03

Execution State (실행 상태)

System과 Emitter의 상태 머신

Niagara System과 Emitter는 Execution State를 통해 현재 상태를 관리합니다. 이 상태에 따라 파티클 생성 여부와 시스템 동작이 결정됩니다.

상태 파티클 생성 기존 파티클 업데이트 설명
Active O O 정상 동작 상태. 파티클 생성과 업데이트 모두 수행.
Inactive X O 새 파티클 생성 중단. 기존 파티클은 수명까지 유지.
InactiveClear X X 즉시 모든 파티클 제거. 이펙트 완전 정지.
Complete X X 이미터 완료. 재활성화 불가 (System에서 리셋 필요).
Emitter State 모듈 설정
Emitter State { Life Cycle Mode: Self // Self: 이미터가 자체적으로 수명 관리 // System: System의 수명을 따름 Inactive Response: Complete // Complete: 비활성 시 Complete 상태로 전환 // Kill: 즉시 모든 파티클 제거 Loop Behavior: Infinite // Once: 1회 실행 후 종료 // Infinite: 무한 루프 // Multiple: 지정 횟수만큼 루프 Loop Duration: 5.0 // 한 루프의 기간 (초) Recalculate Duration Each Loop: false // true: 매 루프마다 Duration 재계산 }
흔한 실수: 이펙트가 사라지지 않음

이펙트가 완료되지 않는 가장 흔한 원인은 Loop BehaviorInfinite로 설정된 경우입니다. 일회성 이펙트(폭발, 충격파 등)는 반드시 Once로 설정하세요. 또한 Particle State 모듈이 없으면 파티클이 영원히 살아있게 됩니다.

04

데이터 흐름과 Parameter Map

모듈 간 데이터가 어떻게 전달되는가

Niagara에서 모듈 간 데이터는 Parameter Map을 통해 전달됩니다. 각 모듈은 Parameter Map에서 데이터를 읽고(Read), 수정된 결과를 다시 씁니다(Write).

Parameter Map 데이터 흐름
// Particle Spawn 단계의 데이터 흐름 예시 [Parameter Map - 초기 상태] Particles.Position = (0, 0, 0) Particles.Velocity = (0, 0, 0) Particles.Color = (1, 1, 1, 1) Initialize Particle 실행 ↓ Write: Particles.Lifetime = 3.0 Write: Particles.Color = (1, 0.5, 0, 1) Write: Particles.SpriteSize = (10, 10) Add Velocity 실행 ↓ Read: Particles.Velocity (현재값: 0, 0, 0) Write: Particles.Velocity += (0, 0, 500) Sphere Location 실행 ↓ Write: Particles.Position = 랜덤 구체 위치 Write: Particles.Velocity += 구체 표면 법선 방향 속도 [Parameter Map - 최종 상태] Particles.Position = (12.3, -5.7, 8.1) // 랜덤 위치 Particles.Velocity = (24.6, -11.4, 516.2) // 위쪽 + 방사형 Particles.Color = (1, 0.5, 0, 1) // 주황색 Particles.Lifetime = 3.0 // 3초 수명

Namespace (네임스페이스)

파라미터는 Namespace로 스코프가 구분됩니다.

Namespace 스코프 읽기/쓰기 예시
System 전체 System System 그룹에서만 쓰기 System.Age
Emitter Emitter 내부 Emitter 그룹에서만 쓰기 Emitter.SpawnRate
Particles 개별 파티클 Particle 그룹에서 쓰기 Particles.Position
User 외부 노출 Blueprint/인스턴스에서 설정 User.Color
Engine 엔진 제공 읽기 전용 Engine.DeltaTime
링크 규칙

하위 스코프에서 상위 스코프의 파라미터를 읽을 수 있지만, 쓸 수는 없습니다. 예를 들어, Particle Update 모듈에서 Emitter.Age를 읽을 수 있지만, Emitter 네임스페이스에 값을 쓸 수는 없습니다. 이 규칙은 데이터 안전성을 보장합니다.

SUMMARY

핵심 요약

  • 파티클 생명주기는 Birth → Active → Aging → Death 4단계로 진행됩니다.
  • NormalizedAge (0~1)는 커브/그래디언트 평가의 핵심 입력값입니다.
  • 각 파티클은 Position, Velocity, Color, Lifetime 등 다양한 Attribute를 가집니다.
  • Execution State는 Active, Inactive, InactiveClear, Complete 4가지 상태를 가집니다.
  • 모듈 간 데이터는 Parameter Map을 통해 전달되며, 위에서 아래로 순차 갱신됩니다.
  • 파라미터는 Namespace(System, Emitter, Particles, User, Engine)로 스코프가 구분됩니다.
PRACTICE

도전 과제

배운 내용을 직접 실습해보세요

실습 1: Lifetime에 따른 속성 변화

NormalizedAge를 활용하여 파티클이 생성 시 작고 투명하다가 중간에 최대 크기가 되고, 소멸 전에 다시 작아지며 페이드아웃되는 생명주기를 Scale Sprite Size와 Scale Color 모듈로 구현하세요.

실습 2: Kill Particle 조건 설정

Particle Update에 Kill Particles in Volume 모듈을 추가하여 특정 영역 밖의 파티클을 즉시 제거하세요. 또한 Particles.Lifetime이 아닌 커스텀 조건(예: 속도가 0에 가까울 때)으로 파티클을 소멸시키세요.

심화 과제: 서브프레임 보간 분석

Spawn Rate를 매우 높게(10000+) 설정한 뒤 SubUV Animation과 함께 파티클 궤적을 관찰하세요. Sub-frame interpolation의 효과를 확인하고, 고속 이동 시 파티클이 끊기는 문제를 해결하세요.