첫 번째 나이아가라 이펙트
템플릿으로 나이아가라 시스템을 만들고 이미터의 생성·업데이트·렌더 단계를 확인한 뒤 저장해 레벨에 배치합니다.
나이아가라 에디터 인터페이스 소개에서 패널의 이름과 역할을 둘러봤으니, 이제 이론을 잠시 접어 두고 첫 효과를 직접 만들어 봅니다. 템플릿으로 나이아가라 시스템을 하나 만들고, 이미터 안의 실행 그룹이 각각 무슨 일을 하는지 확인한 뒤, 버스트의 생성 수와 수명을 바꿔 살아 있는 입자 수를 예상하고 비교합니다. 마지막으로 완성한 효과를 저장해 레벨에 배치합니다. 이 과정을 거치면 시스템이 어떤 구조로 이루어지고 어떤 순서로 동작하는지 손으로 익힐 수 있습니다.
템플릿으로 시스템 만들기
먼저 효과 에셋을 둘 폴더를 콘텐츠 브라우저(Content Browser)에서 고릅니다. 보통 Effects나 Niagara처럼 효과 에셋만 모아 두는 폴더를 따로 만들어 쓰면 나중에 찾기 쉽습니다. 폴더를 열었다면 콘텐츠 브라우저의 빈 곳을 오른쪽 클릭하고 FX > Niagara System을 고릅니다. UE 5.8에서는 오른쪽 클릭 메뉴의 분류가 정리되었으므로, 메뉴에서 바로 보이지 않으면 메뉴 위쪽의 검색창에 Niagara를 입력해 찾습니다. 나이아가라 플러그인은 기본으로 켜져 있지만, 그래도 항목이 없다면 Edit > Plugins에서 Niagara를 검색해 켜져 있는지 확인하고, 켰다면 에디터를 다시 시작합니다.
Niagara System을 고르면 새 나이아가라 시스템을 만드는 창이 열립니다. 왼쪽의 Template 범주를 고르면 시스템 템플릿 목록이 나오는데, 여기서 Simple Sprite Burst를 고르고 Create를 누릅니다. 이 템플릿은 스프라이트를 한 번에 터뜨리는 간단한 효과라서 첫 실습의 출발점으로 알맞습니다. 같은 창에서 빈 시스템으로 시작하거나 기존 이미터를 조합하는 방법도 고를 수 있습니다. 예전 버전의 단계별 창에서는 New system from selected emitters를 고르고 Next를 누른 뒤 Simple Sprite Burst 이미터를 목록에 더하고 Finish를 누르는 식이었으므로, 쓰는 버전에 따라 화면이 다를 수 있습니다.
에셋이 만들어지면 이름을 정하라는 표시가 나타납니다. NS_MyFirstEffect처럼 알아보기 쉬운 이름을 입력하고 Enter를 누릅니다. 앞의 NS는 Niagara System의 약자로, 이 에셋이 나이아가라 시스템이라는 것을 알리는 접두사로 많이 씁니다.
이미터 안의 실행 그룹 살펴보기
NS_MyFirstEffect를 더블 클릭해 나이아가라 에디터를 엽니다. 에디터가 열리면 미리보기(Preview) 패널에서 간단한 파티클 폭발 효과가 이미 재생되고 있을 것입니다. 시스템 개요(System Overview) 패널을 보면 시스템 노드 NS_MyFirstEffect 옆에 SimpleSpriteBurst라는 이미터 노드가 하나 있습니다. 이미터가 하나뿐이라면 이름을 그대로 두어도 되고, 바꾸고 싶다면 이미터 이름을 더블 클릭해 고칩니다.
이미터 노드 안에는 다음 그룹들이 실행 순서대로 놓여 있습니다.
- Emitter Spawn: 이미터가 처음 시작될 때 한 번 실행하는 설정입니다.
- Emitter Update: 시뮬레이션의 틱마다 이미터의 상태와 생성량을 계산합니다. 여기서
Emitter State와Spawn Burst Instantaneous를 찾아 반복 방식과 한 번에 만드는 입자 수를 확인합니다. - Particle Spawn: 새로 생긴 입자의 초기값을 정합니다.
Initialize Particle의 수명, 색, 크기와 초기 속도를 주는 모듈을 확인합니다. - Particle Update: 살아 있는 입자의 나이와 움직임, 색을 갱신합니다. 입자의 나이를 세고 수명이 다하면 없애는
Particle State와, 힘과 속도로 위치를 계산하는Solve Forces and Velocity의 역할을 구분해 둡니다. - Render: 계산된 속성을 읽어 화면에 그립니다. 여기 있는
Sprite Renderer는 시뮬레이션 모듈이 아니라 입자를 어떤 모양으로 그릴지 정하는 출력 설정입니다.
템플릿에 들어 있는 모듈과 그 이름은 엔진 버전에 따라 조금씩 다를 수 있습니다. 위 목록의 모듈을 새로 더하기 전에 지금 스택에 무엇이 있는지 먼저 확인합니다.
다음으로 Render 그룹의 Sprite Renderer를 선택하고 Material에 머티리얼이 지정되어 있는지 봅니다. 템플릿의 머티리얼로 입자가 잘 보이면 그대로 써도 됩니다. 머티리얼이 비어 있다면 기본 머티리얼 설정과 적용에서 M_SimpleFire를 만들고 저장하는 단계까지만 먼저 진행하고, 선택 사항인 텍스처는 건너뜁니다. 저장한 머티리얼을 NS_MyFirstEffect의 Sprite Renderer > Material에 지정한 뒤 이 글로 돌아옵니다. 텍스처가 없는 스프라이트는 사각형으로 보일 수 있는데, 지금은 입자가 보이는지만 확인하면 됩니다.
미리보기 패널에서 재생되는 효과를 자세히 보면, 입자들이 한꺼번에 생겨 퍼져 나갔다가 사라집니다. 시스템 개요에서 SimpleSpriteBurst 안의 모듈을 하나 골라 보세요. 예를 들어 Add Velocity 모듈을 선택하면 선택(Selection) 패널에서 Velocity 값을 바꿀 수 있습니다. 값을 바꾼 뒤에는 컴파일과 재시작이 끝났는지 확인하고 미리보기에서 움직임을 비교합니다.
버스트 한 번을 예상하고 비교하기
여러 값을 한꺼번에 바꾸면 무엇이 결과를 바꿨는지 알 수 없습니다. 그래서 먼저 버스트 한 번의 조건을 고정하고 예상과 결과를 비교해 봅니다. 템플릿에 같은 모듈이 이미 있다면 그 모듈의 입력을 고치고, 같은 모듈을 하나 더 넣지 않습니다.
먼저 Emitter Update의 Emitter State에서 Life Cycle Mode를 Self, Loop Behavior를 Once, Loop Duration Mode를 Fixed, Loop Duration을 5초로 둡니다. Inactive Response는 Complete로 두어, 이미터가 끝나도 이미 살아 있는 입자는 수명을 다할 때까지 기다리게 합니다. 다음으로 Spawn Burst Instantaneous의 Spawn Count를 10, 생성 시점(Spawn Time)을 0초로 둡니다. 이 비교에서는 Spawn Rate나 다른 버스트, 미리 시뮬레이션을 돌려 두는 Warmup을 쓰지 않습니다. 그다음 Particle Spawn의 Initialize Particle에서 Lifetime Mode를 Direct Set, Lifetime을 2초로 둡니다. 따로 입자를 없애는 Kill이나 충돌 소멸, 생성 제한 없이 수명만으로 사라지는 조건입니다.
조건을 다 정했다면 컴파일 상태를 확인하고 시뮬레이션을 0초부터 다시 시작합니다. 같은 카메라에서 0.5초 무렵과 3초 무렵을 비교하는데, 화면에 보이는 점만 세지 말고 지금 살아 있는 입자 수를 함께 봅니다. 미리보기 패널의 Show 메뉴에서 Particle Counts를 켜면 이 수가 뷰포트에 표시됩니다.
이 조건에서는 0초의 버스트로 10개가 만들어지고, 각 입자는 약 2초 동안 살아 있습니다. 그래서 0.5초 무렵에는 10개가 살아 있고, 3초 무렵에는 모두 수명을 다해 0개가 될 것으로 예상합니다. 생성 수는 한 번에 만드는 입자의 밀도를, Lifetime은 그 입자가 남아 있는 시간을 바꿉니다. 버스트는 한 번에 정해진 수를 만드는 방식이므로, 파티클 시스템의 기본 개념에서 본 Spawn Rate × Lifetime 정상 상태 식을 여기에 적용하지 않습니다. 이 값은 실습 조건에서 세운 예상이므로, 실제 결과가 다르면 컴파일과 재시작, 컬링 같은 상태부터 확인합니다.
효과를 저장하고 레벨에 놓기
이제 첫 효과를 레벨에 배치해 게임 안에서 확인해 봅니다. 먼저 나이아가라 에디터에서 NS_MyFirstEffect를 저장(Ctrl+S)하고 레벨 에디터(Level Editor)로 돌아갑니다. 그리고 콘텐츠 브라우저의 NS_MyFirstEffect를 레벨 뷰포트로 끌어다 놓으면, 놓은 자리에 파티클 효과가 나타납니다. 플레이(Play)를 눌러 게임을 시작하면 이 효과가 게임 월드에서도 재생되는지 확인할 수 있습니다.
같은 에셋이라도 레벨에서는 실제 카메라 거리와 조명에서 보게 됩니다. 미리보기와 레벨은 환경과 효과가 켜지는 시점이 다를 수 있으므로, 두 화면이 픽셀까지 똑같은지를 성공 기준으로 삼지는 않습니다.
레벨에서 효과가 보이지 않으면 레벨에 놓인 인스턴스가 켜져 있는지와 위치, 바운드(Bounds), 컬링을 확인합니다. 그다음 살아 있는 입자 수로 문제를 나눕니다. 입자 수가 0이면 이미터의 상태와 버스트의 개수를 보고, 입자가 살아 있다면 Sprite Renderer와 머티리얼, 크기, 알파를 봅니다.
정리
- 나이아가라 시스템은 콘텐츠 브라우저의 오른쪽 클릭 메뉴에서
FX > Niagara System을 고르고,Template범주의Simple Sprite Burst로 만들 수 있습니다. - 이미터 안에는 Emitter Spawn, Emitter Update, Particle Spawn, Particle Update, Render 그룹이 실행 순서대로 놓이며,
Sprite Renderer는 시뮬레이션이 아니라 출력 설정입니다. - 비교할 때는
Emitter State,Spawn Burst Instantaneous,Initialize Particle의 조건을 고정하고 0초부터 다시 시작해, 화면의 점이 아니라 살아 있는 입자 수를 봅니다. - 버스트 한 번의 살아 있는 입자 수는 생성 수와 수명으로 따지며,
Spawn Rate × Lifetime정상 상태 식을 쓰지 않습니다. - 레벨에서 보이지 않으면 인스턴스의 상태와 위치, 바운드부터 보고, 살아 있는 입자 수로 생성 문제와 표시 문제를 나눕니다.
연습 문제
1. 생성 수 6개, 수명 4초
본문의 비교 조건에서 생성 수를 6개, Lifetime을 4초로 바꾸고 나머지는 그대로 둔 채 다시 시작합니다. 1초 무렵, 3초 무렵, 5.5초 무렵의 살아 있는 입자 수를 먼저 예상해 보세요. 원래의 10개, 2초 조건과 비교해 어느 설정이 개수를 바꾸고 어느 설정이 지속 시간을 바꿨는지도 설명해 봅니다.
해설 보기
1초와 3초 무렵에는 각각 6개, 5.5초 무렵에는 0개를 예상합니다. 0초에 만든 6개는 4초가 지나야 수명을 다하므로 3초에도 살아 있고, 5.5초에는 모두 사라졌습니다.
생성 수를 10에서 6으로 바꾼 것은 한 번에 만드는 입자 수를 줄였고, 수명을 2초에서 4초로 바꾼 것은 그 입자가 남아 있는 시간을 늘렸습니다. 렌더러가 그리지 못해 화면에서 보이지 않는 경우는 이 수명 계산과 따로 진단합니다. 값을 바꾼 뒤에는 이미 있던 입자를 계속 보지 말고 같은 시작점에서 다시 시작합니다.
2. 재시작하지 않고 본 결과
Lifetime을 2초에서 4초로 바꾼 직후, 다시 시작하지 않고 미리보기를 계속 보았더니 입자가 금방 사라졌습니다. 수명 변경이 반영되지 않았다고 판단해도 될까요?
해설 보기
그렇게 판단하기는 이릅니다. 화면에 남아 있던 입자는 값을 바꾸기 전에 2초 수명으로 만들어진 입자일 수 있으므로, 이들이 2초 뒤에 사라지는 것은 예전 설정대로 동작한 결과입니다.
컴파일이 끝났는지 확인하고 시뮬레이션을 0초부터 다시 시작한 뒤, 같은 시점에서 살아 있는 입자 수를 비교해야 바뀐 수명이 반영되었는지 알 수 있습니다.
3. 레벨에서만 보이지 않는 효과
미리보기에서는 잘 보이던 NS_MyFirstEffect가 레벨에 놓은 뒤 보이지 않습니다. 어떤 순서로 확인할까요?
해설 보기
먼저 레벨에 놓인 인스턴스가 켜져 있는지와 위치, 바운드, 컬링을 확인합니다. 루프가 Once라면 이미 한 번 재생을 마쳤을 수도 있으므로 효과가 켜지는 시점도 봅니다.
그다음 살아 있는 입자 수로 문제를 나눕니다. 0개라면 이미터의 상태와 버스트의 개수를, 살아 있는데 보이지 않는다면 Sprite Renderer와 머티리얼, 크기, 알파를 확인합니다. 미리보기와 레벨은 환경이 다르므로 두 화면이 똑같아야 한다고 기대하지는 않습니다.
새 시스템을 만드는 창과 템플릿은 Epic의 나이아가라 퀵스타트에서 쓰는 버전의 화면과 비교해 볼 수 있습니다.
이것으로 1장을 마칩니다. 1장에서는 파티클이 생성되고 갱신되고 소멸하는 원리에서 시작해, 캐스케이드와 나이아가라의 차이, 나이아가라의 주요 기능, 에디터의 패널을 살펴보고, 템플릿으로 첫 효과를 만들어 레벨에 배치했습니다. 다음 장의 이미터의 개념과 설정부터는 이미터와 렌더러, 시스템과 이미터의 속성처럼 나이아가라를 이루는 기본 구성 요소를 하나씩 자세히 다룹니다.