진행 방식: 실시간 (디스코드)
메인 멘토: 문준형
분야: 아트
차시: 3주차
나이아가라 VFX 시스템(Niagara VFX System) 은 언리얼 엔진의 차세대 VFX 시스템입니다. 언리얼엔진 내에서 프로그래머의 도움을 받지 않고도 추가 기능을 직접 생성할 수 있습니다.
언리얼엔진은 디자인을 공부하는 학생부터 소규모 인디 개발자, 대규모 전문 스튜디오 팀, 게임 외 업계의 개인 및 회사까지, 그 어느 때보다 사용자가 다양해졌습니다. 에픽게임즈는 모든 산업의 사용자들이 사용할 수 있는 효과적인 비주얼 이펙트(VFX) 시스템을 만들었습니다.
에픽게임즈에서 이야기하는 나이아가라 VFX 시스템의 목표는 다음과 같습니다.
콘텐츠 드로워(Content Drawer) 를 열어 새로운 폴더를 생성합니다. 폴더의 이름은 FX 입니다.
그 후 새로운 나이아가라 시스템을 만듭니다. 시스템의 이름은 NS_이름 의 형태로 제작합니다.
나이아가라는 생성하면서 다양한 템플릿을 적용할 수 있습니다.
다만 우리는 기본적인 나이아가라 구성을 먼저 배울 것이기에, 일단 템플릿 없이 기본 시스템 (Empty) 으로 생성합니다.
이름 | 기능 |
---|---|
Preview (프리뷰) | 현재 편집 중인 나이아가라 시스템이 표시됩니다. |
**Parameters | |
(파라미터)** | 활성화 이미터나 시스템에서 사용되고 있는 |
시스템, 이미터, 파티클, 엔진 제공 파라미터를 모두 나열합니다. | |
**System Overview | |
(시스템 개요)** | 줌 및 팬 그래프 뷰와 이미터 스택 또는 시스템의 간소화된 버전을 결합하여 |
현재 편집 중인 이미터나 시스템의 대략적인 개요를 보여줍니다. | |
Details (디테일) | 현재 선택된 모듈의 모든 프로퍼티 값을 확인할 수 있습니다. |
조작 | 동작 |
---|---|
우클릭 + 드래그 | 그래프를 움직입니다. |
빈 공간 좌클릭 + 드래그 | 범위를 선택합니다. |
노드 좌클릭 + 드래그 | 선택한 노드를 움직입니다. |
마우스 휠 | 줌 인 / 아웃 |
나이아가라 시스템은 이펙트 빌드에 필요한 모든 요소가 담긴 컨테이너입니다.
시스템에서 다양한 빌딩 블록을 쌓아 전체적인 이펙트를 만들 수 있습니다.
이미터는 나이아가라 시스템에서 파티클이 생성되는 곳입니다.
이미터는 파티클의 생성 방식, 시간 경과에 따라 파티클에서 발생하는 현상, 파티클의 외관 및 행동을 제어합니다.
이미터는 스택으로 구성됩니다.
이 스택 내에는 여러 그룹이 있으며, 그룹 내에 개별 작업을 수행하는 모듈을 추가할 수 있습니다.
그룹은 다음과 같습니다.
그룹 이름 | 설명 |
---|---|
**이미터 스폰 | |
(Emitter Spawn)** | 이미터가 CPU에서 처음 생성될 때 일어나는 일을 정의합니다. |
이 그룹을 사용하여 초기 구성 및 디폴트 값을 정의합니다. | |
**이미터 업데이트 | |
(Emitter Update)** | CPU의 모든 프레임에서 발생하는 이미터 단계의 모듈을 정의합니다. |
이 그룹을 사용하여 모든 프레임에서 계속 스폰할 파티클의 스폰을 정의합니다. | |
**파티클 스폰 | |
(Particle Spawn)** | 파티클이 처음 생성될 때 파티클당 한 번씩 호출됩니다. |
이 그룹에서 파티클의 생성 위치, 색, 크기와 같은 파티클의 초기화 디테일을 정의합니다. | |
**파티클 업데이트 | |
(Particle Update)** | 각 프레임에서 파티클마다 호출됩니다. |
이 그룹에서 파티클의 수명에 따라 프레임별로 변경해야 하는 사항을 정의합니다. | |
**이벤트 핸들러 | |
(Event Handler)** | 특정 데이터를 정의하는 하나 이상의 이미터에 생성 이벤트를 만들 수 있습니다. |
생성된 이벤트에 반응해 동작을 트리거하는 다른 이미터에 수신 이벤트를 만들 수 있습니다. | |
**렌더 | |
(Render)** | 파티클의 디스플레이를 정의하고, 파티클에 하나 이상의 렌더러를 설정할 수 있습니다. |
메쉬 (3D 모델), 스프라이트 (2D) 등 다양한 형태로 렌더할 수 있습니다. |
모듈은 나이아가라에서 이펙트의 기본 빌딩 블록입니다.
모듈은 계산을 수행하는 함수, 컨테이너라고 할 수 있습니다.
모듈에 데이터를 전달한 뒤 모듈 내부에서 해당 데이터에 관한 계산을 실시하고 이 데이터를 모듈의 끝에 작성합니다.
(나이아가라의 이미터에서 임의의 모듈을 더블클릭하여 내부에서 수행 중인 계산을 살펴볼 수 있습니다. )
모듈은 위에서 아래로 순차적으로 처리됩니다.
파라미터는 나이아가라 시뮬레이션 데이터의 추상 표현입니다.
파라미터 타입 은 파라미터에 할당되어 파라미터가 표현하는 데이터를 정의합니다.
파라미터 타입은 네 가지입니다.
더하기 표시 아이콘( + )을 클릭하고 파라미터 추가(Add Parameter) 를 선택하여 기존 파라미터를 설정하거나 새 파라미터 생성(Create New Parameter) 을 선택하여 새 파라미터를 설정할 수 있습니다.
타입 | 설명 |
---|---|
프리미티브 (Primitive) | 각기 다른 정밀도와 채널 폭의 숫자 데이터를 정의합니다. |
열거형 (Enum) | 명명된 값의 고정된 조합을 정의하고, 명명된 값 중 하나를 가정합니다. |
구조체 (Struct) | 프리미티브와 열거형 타입의 결합된 조합을 정의합니다. |
**데이터 인터페이스 | |
(Data Interfaces)** | 이 파라미터 타입은 외부 데이터 소스로부터 데이터를 제공하는 함수를 정의합니다. |
다른 요소에 있는 데이터 또는 외부 애플리케이션의 데이터일 수 있습니다. |
기존에 생성되어있던 Empty 이미터의 이름을 변경해주겠습니다.
F2를 누르거나, 우클릭해서 변경해주세요.
이미터의 Properties를 눌러 기본 설정을 해주겠습니다.
Properties의 Sim Target을 GPU Compute Sim 으로 변경하겠습니다.
Emitter Update 그룹 오른쪽에 있는 + 버튼을 누릅니다.
그 후 Spawn Rate 모듈을 검색해 적용해줍니다.
Spawn Rate의 디테일 창에서 SpawnRate 수치를 조절해줍니다.
그러면 프리뷰 창에 흰 파티클이 보입니다.
현재는 한 점에 뭉쳐서 스폰되고 있는 상황입니다.
파티클들이 다 일정한 크기로 생성되고 있습니다.
랜덤한 값으로 변경해보겠습니다.
Particle Spawn 그룹에서 Initialize Particle 모듈을 선택합니다.

크기는 변화하는 것이 잘 보이도록 크게 설정하겠습니다.
Min 값과 Max 값을 50 / 80 으로 설정해줍니다.


Particle Spawn 그룹에서 Shape Location 모듈을 추가합니다.
그러면 파티클들이 조금 퍼져서 생성되는 것을 보실 수 있습니다.



Shape Location 모듈의 디테일 패널에서, Shape Primitive 설정을 Box/Plane 으로 바꿔줍니다.
그 후 Box Size를 여유롭게 조절해줍니다.
프리뷰 창을 보면, 먼지처럼 파티클들이 넓게 퍼져있는 것이 보입니다.
이제 먼지처럼 가볍게 날아다니는 움직임을 줘보겠습니다.
Particle Update 그룹에 Wind Force 모듈을 추가합니다. 오류가 발생한 부분을 확인해, Fix issue를 눌러줍니다.
(Aerodynamic Drag 모듈에 생긴 오류는 Dismiss issue를 눌러 꺼줍니다.)
그렇게 되면 프리뷰창에 파티클들이 한 방향으로 떠가는 모습을 보실 수 있습니다.
Particle Udate 그룹에서 Scale Sprite Size 모듈을 추가합니다.
그 후 위치를 Aerodynamic Drag와 Solve Forces and Velocity 모듈 사이로 옮깁니다.
그렇게 되면, 파티클들이 태어날 때는 페이드인이 되지만,
사라질 때는 페이드 없이 사라집니다.


<aside>
💡 모듈의 위치를 옮기는 이유는, 앞서 설명해드렸듯
모듈은 **위에서 아래로 순차적으로 적용**되기 때문입니다.
Force 계산 → 스케일/컬러 등 파티클 디테일 조절 순으로 정리하는 것이 보통 정리하는 순서입니다.
</aside>
중간쯤을 우클릭하고 Add key를 눌러 키를 생성합니다.

그래프를 수정해서 아래와 같은 그래프를 만들어봅니다.
그래프 값 :
모든 키를 선택합니다.
그후 키를 우클릭해 그래프 타입을 Auto 로 변경합니다.
그렇게 되면 파티클이 자연스럽게 Fade in / out 됩니다.
Wind Force 모듈로 돌아와 Wind Speed 값을 모두 1.0으로 변경해주겠습니다.

그 후 Turbulence Scale 값을 약 30 정도로 조절해봅니다.
그러면 자연스럽게 떠다니는 파티클들을 확인하실 수 있습니다.
Initialize Particle 모듈로 넘어와 Lifetime을 조절해보겠습니다.
Lifetime Mode 를 Random으로 설정합니다.
수치는 3 ~ 7 로 설정하겠습니다.


Particle Update 그룹에 Color 모듈을 추가해줍니다.

디테일 창 우측 화살표를 내려 Color from Curve 옵션을 적용합니다.
이제 그라데이션 값을 조절합니다.
좌측에서 우측 방향으로 수명이 지나는 것을 나타냅니다.
좌측은 푸른색, 우측은 주황색으로 변경하겠습니다.
하단 Opacity 값도 1.0으로 고정해주겠습니다.

<aside>
💡 프리뷰 패널에서 색이 잘 보이지 않을 수 있습니다.
기본 스프라이트 파티클 머티리얼은 밝기 값 조절이 불가능합니다.
눈에 잘 띄게 변경하고 싶으시다면 다음 과정을 따라와주세요.
※ 본 내용은 머티리얼 수정을 다루고 있습니다.
※ 밝기를 조절하는 것은 다양한 방법이 있습니다. 아래 내용은 가장 기본적인 방법 중 하나입니다.
<aside>
✅ **✦ 밝기 변경 가능하게 수정해보기**
- Sprite Renderer 를 선택해 머티리얼을 더블클릭해줍니다.


- 아래 노드를 다음과 같이 수정하고 Apply를 눌러줍니다.


- 다시 나이아가라로 돌아와 Color 모듈의 opacity 값을 높게 수정합니다.

- 기존보다 더 밝게 빛나는 파티클들을 보실 수 있습니다.

</aside>
</aside>
실제 레벨에 나이아가라 파티클을 배치해보겠습니다.
Plane과 포인트 라이트 하나 있는 레벨을 하나 만들겠습니다.
만들었던 나이아가라 파티클을 콘텐츠 드로워에서 드래그 & 드롭 해 레벨에 배치합니다.