시스템과 이미터 속성
시스템과 이미터의 실행 상태·루프·수명 주기 설정이 적용되는 범위를 구분하고 여러 이미터의 동작을 함께 조율합니다.
효과가 예상보다 빨리 끝나거나, 이미터 하나만 다르게 반복하거나, 캐릭터가 움직일 때 불꽃이 따라오지 않는 문제는 대개 입자를 만드는 모듈이 아니라 시스템과 이미터의 속성에서 생깁니다. 지금까지 나이아가라의 기본 구조와 파티클의 생성, 렌더링을 살펴봤다면, 이번에는 효과 전체의 동작과 수명 주기를 정하는 이 속성들을 알아볼 차례입니다. 같은 이름의 설정이라도 시스템에 있는지 이미터에 있는지에 따라 영향을 주는 범위가 다르므로, 이 글에서는 두 범위를 나누어 살펴본 뒤 둘이 어떻게 함께 동작하는지 정리합니다.
시스템 개요(System Overview)에서는 시스템을 선택할 수도 있고 이미터 하나 이상을 선택할 수도 있습니다. 화면에서 어디를 클릭했는지보다, 선택(Selection) 패널의 스택이 지금 어떤 범위를 보여 주는지를 확인하는 것이 중요합니다. 각 범위에는 그 범위에만 영향을 주는 고유한 속성이 있기 때문입니다.
효과 전체를 다루는 시스템 속성
시스템 속성은 나이아가라 시스템 전체에 영향을 주는 설정입니다. 시스템이 어떻게 시작하고 끝나는지와 게임 월드에서 어떻게 다루어지는지를 정합니다. 시스템 노드를 선택하면 선택 패널에서 이 속성들을 볼 수 있습니다.
시스템 전체의 수명 주기는 System Update 그룹의 System State 모듈이 정합니다. Loop Behavior는 시스템을 한 번만 재생할지(Once), 정해진 횟수만큼 반복할지(Multiple), 끝없이 반복할지(Infinite)를 정하며, 짧은 폭발은 Once, 계속 타오르는 불은 Infinite로 두는 식입니다. Loop Duration은 한 번의 루프가 몇 초 동안 이어질지 정합니다. Inactive Response는 비활성화 요청을 받은 뒤 남은 입자가 수명을 다할 때까지 기다릴지, 바로 끝낼지를 정합니다. 이 설정은 레벨에 놓은 나이아가라 컴포넌트의 자동 활성화(Auto Activate)나 자동 삭제 설정과는 다른 것입니다.
상태 모듈 밖에 있는 시스템 설정도 있습니다. 시스템 속성(System Properties)의 Warmup Time은 시스템이 켜질 때 미리 시뮬레이션해 둘 시간을 정합니다. 연기가 이미 피어오른 상태로 시작하고 싶을 때 쓸모가 있지만, 시작하는 순간 여러 틱을 한꺼번에 계산하므로 잠깐 멈칫하는 지연이 생길 수 있습니다. Fixed Bounds는 시스템의 렌더링 바운드를 손으로 정하는 설정입니다. 아주 넓게 퍼지는 효과에서 엔진이 바운드를 잘못 어림해 입자가 잘려 보이는 문제를 막을 수 있습니다. 스케일러빌리티(Scalability) 설정에서는 거리나 가시성, 예산에 따라 효과를 걸러 내는 조건과 그때의 반응을 정합니다. 여기의 Cull Proxy는 컬링된 효과를 대신할 표현을 쓰는, 지원되는 경우에만 고르는 선택 기능이며, 잘림 문제를 모두 해결하는 일반적인 바운드 설정이 아닙니다.
시스템 파라미터나 사용자 파라미터(User Parameters)로 값을 노출하면, 이미터와 파티클의 모듈이 그 값을 읽어 쓸 수 있습니다. 다만 값을 선언하는 것과 그 값이 모든 파티클에 적용되는 것은 다른 일입니다. 노출한 값은 어떤 모듈의 입력에 연결되어야 비로소 결과에 반영됩니다.
정리하면 시스템 속성에서는 여러 이미터를 담는 효과 단위의 수명과 바운드, 스케일러빌리티, 그리고 바깥에서 받을 파라미터를 정합니다.
이미터 하나를 다루는 이미터 속성
이미터 속성은 이미터 하나하나의 동작에 영향을 줍니다. 이미터마다 따로 생성과 갱신 로직을 가지므로, 이미터 속성으로 특정 파티클 무리의 세부 동작을 조절할 수 있습니다. 이미터 노드를 선택하면 선택 패널에서 이 속성들을 볼 수 있습니다.
이미터의 수명 주기는 Emitter Update 그룹의 Emitter State 모듈이 정합니다. Life Cycle Mode는 이미터의 수명 주기를 시스템이 관리할지(System), 이미터가 스스로 관리할지(Self)를 정합니다. Self일 때는 이미터에도 Loop Behavior와 Loop Duration이 있어, 시스템과 따로 한 번만 재생하거나 정해진 횟수만큼 반복하거나 끝없이 반복하게 할 수 있습니다. Loop Delay는 반복 사이에 쉬는 시간을, Inactive Response는 이미터가 비활성 상태가 될 때의 처리를 정합니다.
좌표를 어느 기준으로 해석할지는 이미터 속성(Emitter Properties)의 Local Space가 정합니다. Local Space를 켜면 입자의 위치를 나이아가라 컴포넌트를 기준으로 해석하고, 끄면 월드를 기준으로 해석합니다. 효과가 컴포넌트에 붙어 함께 움직여야 하는지, 월드에 남아야 하는지를 기준으로 고르며, Emitter State의 루프 설정과는 다른 항목입니다.
이 밖에 이미터의 결과에 영향을 주는 설정은 각자 다른 곳에 있습니다. 입자를 어떻게 그릴지는 Render 그룹의 렌더러에서 정하는데, 반투명 입자를 올바른 순서로 그리기 위한 Sort Mode도 렌더러 설정에 있습니다. 충돌은 보통 Particle Update 그룹의 Collision 모듈에서 월드 충돌과 채널, 반응을 설정하며, 이미터 속성만 바꾼다고 충돌이 저절로 생기지는 않습니다. 성능의 상한은 이펙트 타입(Effect Type)과 Scalability Mode, 시스템과 이미터의 스케일러빌리티 덮어쓰기, 거리와 가시성 컬링이 함께 정합니다. 결국 입자의 수는 Spawn Rate와 버스트, 수명, Kill 조건, 스케일러빌리티의 제한이 함께 결정합니다.
정리하면 이미터 속성에서는 이미터 하나의 수명 관리와 좌표 기준, 비활성 처리, 스케일러빌리티에 참여하는 방식을 정합니다. 생성률과 충돌, 렌더러, 머티리얼의 비용은 각각 그 모듈과 Render 그룹에서 따로 확인해야 합니다.
더 깊이: 같은 무작위 결과를 다시 얻는 Determinism
이미터 속성의 Determinism은 그 이미터의 난수 생성기(random number generator, RNG)를 결정적(deterministic)으로 쓸지 정합니다. 이미터 기본값을 따르도록 둔 무작위 계산은 모두 이 설정을 이어받고, 개별 무작위 값마다 결정적인지 아닌지를 따로 정할 수도 있습니다. 이 설정을 켜면 Random Seed가 이미터 단위의 결정적 RNG에 쓰이는 씨앗(seed)이 되어, 같은 이미터 구성이라면 같은 결과를 돌려줍니다.
다만 Emitter Properties 문서는 이 '같은 결과'에 조건을 붙입니다. 델타 타임이 프레임마다 달라지지 않아야 하고, 이미터의 스크립트를 하나라도 고치면 결과도 달라집니다. 그래서 프레임 길이가 들쭉날쭉한 게임 플레이에서 매번 똑같은 모양을 기대하기보다는, 고정된 시간 간격으로 재생하는 경우나 모듈 하나를 바꾸기 전과 후를 같은 씨앗으로 비교할 때 쓸모가 있습니다.
컴포넌트가 움직일 때 입자는 어디에 있을까
Local Space와 월드 공간(World Space)의 차이는 컴포넌트가 움직일 때 가장 분명하게 드러납니다.
컴포넌트가 움직일 때 같은 입자 위치를 다르게 해석합니다
같은 시작 컴포넌트 0/입자 10에서 컴포넌트만 100으로 이동하면 Local 110/World 10이 되는 두 독립 상태 비교이다. 회전/스케일/입자 힘 없음 조건을 유지한다.
NIAGARA · CH2-4
컴포넌트가 움직일 때 같은 입자 위치를 다르게 해석합니다
설명용 1차원 예시입니다. 시작 시 컴포넌트 X=0cm, 입자 X=10cm이며 이후 컴포넌트만 +100cm 이동합니다. 회전·스케일 변화와 입자 자체의 속도·힘·위치 갱신은 없다고 가정합니다.
Local Space · 컴포넌트 기준
입자의 로컬 X=10cm를 유지합니다. 이동 후 월드 X는 100 + 10 = 110cm입니다.
World Space · 월드 기준
입자의 월드 X=10cm를 유지합니다. 컴포넌트가 이동해도 이 입자는 월드 10cm에 남습니다.
범례와 적용 조건
작은 사각형은 Niagara Component, 점은 입자입니다. 가로 위치는 이 예시의 월드 X를 나타냅니다.
실제 모듈은 선택한 좌표 공간과 입력 변환을 따릅니다. 속도·힘·Position 덮어쓰기, 회전·스케일·소켓 움직임이 있으면 결과가 달라집니다. Emitter Properties의 Local Space는 Emitter State의 루프/수명 설정과 다른 항목입니다.
이 예의 조건
- 본문과 원 도표에 제시된 사례의 입력·조건을 사용합니다. 설명용 수치나 독립 비교 경로는 각 단계에 표시합니다.
- 현재 상태·값과 전환 근거의 위치는 모든 단계에서 같습니다. 조건이 맞지 않거나 실행되지 않은 경로를 성공한 동작으로 해석하지 않습니다.
관계도의 보충 설명
| 범위 | 원문 |
|---|---|
| 본문·주석 | 설명용 1차원 예시입니다. 시작 시 컴포넌트 X=0 cm, 입자 X=10 cm이며 이후 컴포넌트만 +100 cm 이동합니다. 회전·스케일 변화와 입자 자체의 속도·힘·위치 갱신은 없다고 가정합니다. |
| 도표 제목 | 컴포넌트 100 cm, 입자 월드 110 cm |
| 관계·조건 설명 | 이동 후 컴포넌트는 두 경우 100 cm입니다. Local Space 입자는 상대 10 cm를 유지해 월드 110 cm, World Space 입자는 월드 10 cm에 남습니다. |
| 노드·연결선 라벨 | 컴포넌트 100 cm |
| 노드·연결선 라벨 | 입자 110 cm |
| 도표 제목 | Local 110 cm |
| 관계·조건 설명 | 컴포넌트 0→100 cm 이동, 원래 입자 10 cm이며 자체 갱신/회전/스케일은 없다. 작은 사각형은 컴포넌트, 원은 입자를 나타낸다. Local에서는 110 cm, World에서는 10 cm다. |
| 본문·주석 | 입자의 로컬 X=10 cm를 유지합니다. 이동 후 월드 X는 |
| 본문·주석 | 100 + 10 = 110 cm |
| 도표 제목 | 컴포넌트 100 cm, 입자 월드 10 cm |
| 노드·연결선 라벨 | 입자 10 cm |
| 도표 제목 | World 10 cm |
| 본문·주석 | 입자의 월드 X=10 cm를 유지합니다. 컴포넌트가 이동해도 이 입자는 |
| 본문·주석 | 월드 10 cm |
| 관찰·상황 | 값·보충 정보 | 변화·이유 |
|---|---|---|
| 같은 시작 컴포넌트 0과 입자 10의 두 독립 사례다. |
|
|
| 컴포넌트 이동 컴포넌트만 100으로 옮긴다. |
|
|
| 결과 대조 Local은 부모를 따라 110, World는 10이다. |
|
|
컴포넌트가 움직일 때 같은 입자 위치를 다르게 해석합니다
같은 시작 컴포넌트 0/입자 10에서 컴포넌트만 100으로 이동하면 Local 110/World 10이 되는 두 독립 상태 비교이다. 회전/스케일/입자 힘 없음 조건을 유지한다.
NIAGARA · CH2-4
컴포넌트가 움직일 때 같은 입자 위치를 다르게 해석합니다
설명용 1차원 예시입니다. 시작 시 컴포넌트 X=0cm, 입자 X=10cm이며 이후 컴포넌트만 +100cm 이동합니다. 회전·스케일 변화와 입자 자체의 속도·힘·위치 갱신은 없다고 가정합니다.
Local Space · 컴포넌트 기준
입자의 로컬 X=10cm를 유지합니다. 이동 후 월드 X는 100 + 10 = 110cm입니다.
World Space · 월드 기준
입자의 월드 X=10cm를 유지합니다. 컴포넌트가 이동해도 이 입자는 월드 10cm에 남습니다.
범례와 적용 조건
작은 사각형은 Niagara Component, 점은 입자입니다. 가로 위치는 이 예시의 월드 X를 나타냅니다.
실제 모듈은 선택한 좌표 공간과 입력 변환을 따릅니다. 속도·힘·Position 덮어쓰기, 회전·스케일·소켓 움직임이 있으면 결과가 달라집니다. Emitter Properties의 Local Space는 Emitter State의 루프/수명 설정과 다른 항목입니다.
이 예의 조건
- 본문과 원 도표에 제시된 사례의 입력·조건을 사용합니다. 설명용 수치나 독립 비교 경로는 각 단계에 표시합니다.
- 현재 상태·값과 전환 근거의 위치는 모든 단계에서 같습니다. 조건이 맞지 않거나 실행되지 않은 경로를 성공한 동작으로 해석하지 않습니다.
관계도의 보충 설명
| 범위 | 원문 |
|---|---|
| 본문·주석 | 설명용 1차원 예시입니다. 시작 시 컴포넌트 X=0 cm, 입자 X=10 cm이며 이후 컴포넌트만 +100 cm 이동합니다. 회전·스케일 변화와 입자 자체의 속도·힘·위치 갱신은 없다고 가정합니다. |
| 도표 제목 | 컴포넌트 100 cm, 입자 월드 110 cm |
| 관계·조건 설명 | 이동 후 컴포넌트는 두 경우 100 cm입니다. Local Space 입자는 상대 10 cm를 유지해 월드 110 cm, World Space 입자는 월드 10 cm에 남습니다. |
| 노드·연결선 라벨 | 컴포넌트 100 cm |
| 노드·연결선 라벨 | 입자 110 cm |
| 도표 제목 | Local 110 cm |
| 관계·조건 설명 | 컴포넌트 0→100 cm 이동, 원래 입자 10 cm이며 자체 갱신/회전/스케일은 없다. 작은 사각형은 컴포넌트, 원은 입자를 나타낸다. Local에서는 110 cm, World에서는 10 cm다. |
| 본문·주석 | 입자의 로컬 X=10 cm를 유지합니다. 이동 후 월드 X는 |
| 본문·주석 | 100 + 10 = 110 cm |
| 도표 제목 | 컴포넌트 100 cm, 입자 월드 10 cm |
| 노드·연결선 라벨 | 입자 10 cm |
| 도표 제목 | World 10 cm |
| 본문·주석 | 입자의 월드 X=10 cm를 유지합니다. 컴포넌트가 이동해도 이 입자는 |
| 본문·주석 | 월드 10 cm |
| 관찰·상황 | 값·보충 정보 | 변화·이유 |
|---|---|---|
| 같은 시작 컴포넌트 0과 입자 10의 두 독립 사례다. |
|
|
| 컴포넌트 이동 컴포넌트만 100으로 옮긴다. |
|
|
| 결과 대조 Local은 부모를 따라 110, World는 10이다. |
|
|
위 그림은 설명용 1차원 예시입니다. 처음에 나이아가라 컴포넌트는 월드 X=0cm에 있고 입자는 X=10cm에 있으며, 그 뒤 컴포넌트만 +100cm 옮깁니다. 회전과 스케일은 바뀌지 않고, 입자 자체의 속도나 힘, 위치 갱신도 없다고 가정합니다. 위쪽의 Local Space에서는 입자가 컴포넌트를 기준으로 한 로컬 X=10cm를 유지하므로, 컴포넌트가 100cm로 옮겨 간 뒤 입자의 월드 X는 100 + 10 = 110cm가 됩니다. 아래쪽의 월드 공간에서는 이미 생성된 입자가 월드 X=10cm를 유지하므로, 컴포넌트가 움직여도 그 자리에 남습니다.
그림의 범례에서 작은 사각형은 나이아가라 컴포넌트이고 점은 입자이며, 가로 위치는 이 예시의 월드 X를 나타냅니다. 그림 아래의 설명처럼 실제 모듈은 선택한 좌표 공간과 입력의 변환을 따르므로, 속도나 힘이 있거나 Position을 덮어쓰거나 회전, 스케일, 소켓의 움직임이 있으면 결과가 달라집니다. 단계 그림은 같은 이동을 장면으로 나누어, 이동 전의 위치와 컴포넌트만 옮긴 뒤 두 좌표 공간에서 입자가 어디에 있는지를 차례로 보여 줍니다.
이 차이가 효과를 고르는 기준이 됩니다. 캐릭터의 손에 붙어 함께 움직여야 하는 불꽃은 Local Space로 두고, 캐릭터가 지나간 길에 남아야 하는 연기는 월드 공간으로 둡니다.
두 범위가 함께 동작하는 방식
시스템 속성과 이미터 속성은 서로 영향을 주고받으며 최종 효과를 만듭니다. 관리 범위로 보면, 시스템은 여러 이미터를 담는 효과의 단위이고 각 이미터는 자신의 실행 상태(Execution State)와 Life Cycle Mode를 따로 가질 수 있습니다. 그래서 시스템이 반복 중이더라도 Life Cycle Mode가 Self인 이미터는 자신의 루프 설정대로 다르게 반복할 수 있습니다.
값을 전달하는 쪽으로 보면, 시스템 파라미터나 사용자 파라미터로 값을 노출해도 이미터나 파티클 모듈이 그 값을 읽어야 실제 시뮬레이션에 반영됩니다. 성능 제한도 두 범위가 나누어 맡습니다. 효과 전체의 품질 제한은 이펙트 타입과 스케일러빌리티 설정에서 정하고, 이미터 하나의 밀도와 수명은 그 이미터의 생성과 갱신, Kill 조건에서 정합니다.
이렇게 나누어 이해하면 효과 전체의 설정과 이미터의 수명, 파티클 업데이트 모듈, 렌더러와 머티리얼, 스케일러빌리티 제한을 서로 섞지 않고 하나씩 조절할 수 있습니다.
증상으로 설정 위치 찾기
문제가 생겼을 때는 증상에 따라 확인할 범위가 다릅니다.
| 확인한 문제 | 확인할 범위 |
|---|---|
| 효과 전체가 예상보다 빨리 끝남 | System State의 반복과 비활성화 처리, 컴포넌트의 활성 상태 |
| 이미터 하나만 다르게 반복함 | 그 이미터 Emitter State의 Life Cycle Mode와 Self 설정 |
| 컴포넌트를 옮기면 입자도 따라 움직임 | Emitter Properties의 Local Space |
| 화면 가장자리에서 효과가 사라짐 | 바운드와 실제로 적용 중인 컬링 조건 |
| 플랫폼마다 밀도나 표시가 다름 | 이펙트 타입과 시스템, 이미터의 스케일러빌리티 덮어쓰기 |
작업을 시작하기 전에는 효과 전체의 지속 시간과 각 이미터가 화면에서 맡을 역할을 정해 둡니다. 사용자 파라미터는 이름만 선언하지 말고 그 값을 쓸 모듈의 입력에 연결합니다. 같은 카메라와 같은 시간 구간에서 값을 하나씩 바꾸면, 범위가 겹치는 설정도 어느 쪽이 결과를 바꿨는지 따라가기 쉽습니다.
정리
- 시스템 속성은 효과 전체의 수명과 바운드, 스케일러빌리티, 노출할 파라미터를 정하며, 수명 주기는
System State모듈이 맡습니다. - 이미터의 수명 주기는
Emitter State가 정하며, Life Cycle Mode가Self이면 이미터가 자기 루프 설정을 따로 가집니다. - Warmup Time은 미리 시뮬레이션해 시작 모습을 바꾸지만 시작할 때 계산이 몰리고, Fixed Bounds는 넓은 효과가 잘리는 문제를 막습니다.
- Local Space를 켜면 입자가 컴포넌트를 따라 움직이고, 월드 공간에서는 이미 생성된 입자가 월드 위치에 남습니다.
- 노출한 파라미터는 모듈의 입력에 연결되어야 결과에 반영되며, 생성률과 충돌, 렌더러, 머티리얼은 각자의 모듈에서 따로 확인합니다.
연습 문제
1. 컴포넌트를 X=200cm로 옮기면
처음에 컴포넌트는 월드 X=50cm에 있고, 입자는 그보다 20cm 왼쪽에 있습니다. 이제 컴포넌트만 월드 X=200cm로 옮깁니다. 회전과 스케일은 바뀌지 않고 입자 자체의 속도나 힘, 위치 갱신도 없습니다. 같은 시작 위치를 Local Space와 월드 공간으로 각각 해석했을 때, 입자의 최종 월드 X는 얼마일까요?
해설 보기
처음 입자의 월드 X는 50 - 20 = 30cm입니다. Local Space에서는 컴포넌트를 기준으로 한 상대 위치 X=-20cm를 유지하므로, 이동 뒤의 월드 X는 200 - 20 = 180cm입니다.
월드 공간에서는 입자가 월드 X=30cm를 그대로 유지합니다. 컴포넌트가 150cm 움직였다고 해서 월드 공간에 이미 있던 입자에 그 값을 저절로 더하지는 않습니다.
2. 혼자 다르게 반복하는 이미터
시스템의 System State는 3초 루프를 끝없이 반복하도록 했는데, 이미터 하나만 5초마다 반복합니다. 어디를 확인해야 할까요?
해설 보기
그 이미터의 Emitter State에서 Life Cycle Mode를 확인합니다. Self로 되어 있다면 이미터가 시스템과 따로 자신의 Loop Behavior와 Loop Duration을 따르므로, Loop Duration이 5초라면 5초마다 반복합니다.
시스템의 루프에 맞추고 싶다면 Life Cycle Mode를 System으로 바꾸거나, Self를 유지하면서 이미터의 Loop Duration을 시스템과 맞춥니다.
3. 연결하지 않은 사용자 파라미터
사용자 파라미터 User.Intensity를 만들고 블루프린트에서 값을 2배로 넣었는데 효과가 전혀 달라지지 않습니다. 무엇이 빠졌을까요?
해설 보기
사용자 파라미터를 선언하고 값을 넣는 것만으로는 효과가 바뀌지 않습니다. 그 값을 읽는 모듈이 있어야 하므로, Spawn Rate나 색의 배율처럼 바꾸려는 모듈의 입력에 User.Intensity가 연결되어 있는지 확인합니다.
연결되어 있는데도 그대로라면, 블루프린트에서 넣는 파라미터의 이름과 타입이 시스템의 것과 같은지, 그리고 값을 넣는 대상이 지금 화면에 보이는 그 나이아가라 컴포넌트인지 확인합니다.
Warmup과 사용자 파라미터가 있는 위치는 Epic의 시스템 설정 레퍼런스에서 확인할 수 있습니다.
다음 글 파티클 속성 조정에서는 입자의 수명과 색, 크기, 속도를 하나씩 바꿔 보며 각 값이 밀도와 모양, 이동에 어떤 영향을 주는지 살펴봅니다.