나이아가라는 언리얼 엔진의 차세대 VFX 시스템입니다. 테크니컬 아티스트는 나이아가라를 사용하여 프로그래머의 도움을 받지 않고도 추가 기능을 직접 생성할 수 있습니다. 시스템은 유연하며 조정 가능합니다. 초보자는 템플릿이나 행동 예제를 수정하면서 시작하고, 고급 사용자는 자신만의 커스텀 모듈을 생성할 수 있습니다.
나이아가라 핵심 컴포넌트
나이아가라 VFX 시스템에는 네 개의 핵심 컴포넌트가 있습니다.
- 시스템
- 이미터
- 모듈
- 파라미터
시스템
나이아가라 시스템은 이펙트 빌드에 필요한 모든 요소가 담긴 컨테이너입니다. 시스템에서 다양한 빌딩 블록을 쌓아 전체적인 이펙트를 만들 수 있습니다.
시스템 단계의 행동을 수정한 뒤, 이펙트에 속하는 모든 요소에 적용할 수 있습니다.

시스템 에디터의 타임라인(Timeline) 패널에서 시스템에 어떤 이미터가 포함되어 있는지 확인하고, 이미터를 관리할 수 있습니다.
이미터
이미터는 나이아가라 시스템에서 파티클이 생성되는 곳입니다. 이미터는 파티클의 생성 방식, 시간 경과에 따라 파티클에서 발생하는 현상, 파티클의 외관 및 행동을 제어합니다.
이미터는 스택으로 구성됩니다. 이 스택 내에는 여러 그룹이 있으며, 그룹 내에 개별 작업을 수행하는 모듈을 추가할 수 있습니다. 그룹은 다음과 같습니다.

-
이미터 스폰(Emitter Spawn)
이 그룹은 이미터가 CPU에서 처음 생성될 때 일어나는 일을 정의합니다. 이 그룹을 사용하여 초기 구성 및 디폴트 값을 정의합니다.
-
이미터 업데이트(Emitter Update)
이 그룹은 CPU의 모든 프레임에서 발생하는 이미터 단계의 모듈을 정의합니다. 이 그룹을 사용하여 모든 프레임에서 계속 스폰할 파티클의 스폰을 정의합니다.
-
파티클 스폰(Particle Spawn)
이 그룹은 파티클이 처음 생성될 때 파티클당 한 번씩 호출됩니다. 이 그룹에서 파티클의 생성 위치, 색, 크기와 같은 파티클의 초기화 디테일을 정의합니다.
-
파티클 업데이트(Particle Update)
이 그룹은 각 프레임에서 파티클마다 호출됩니다. 이 그룹에서 파티클의 수명에 따라 프레임별로 변경해야 하는 사항을 정의합니다. 시간에 따른 파티클의 색 변화와 중력, 컬 노이즈, 포인트 어트랙션 등의 힘이 파티클에 미치는 영향을 예로 들 수 있습니다. 시간에 따라 파티클의 크기가 변하게 할 수도 있습니다.
-
이벤트 핸들러(Event Handler)
이벤트 핸들러 그룹에서는 특정 데이터를 정의하는 하나 이상의 이미터에 생성 이벤트를 만들 수 있습니다. 그 뒤 생성된 이벤트에 반응하여 동작을 트리거하는 다른 이미터에 수신 이벤트를 만들 수 있습니다.
-
렌더(Render)
마지막 그룹은 렌더 그룹입니다. 렌더 그룹에서는 파티클의 디스플레이를 정의하고, 파티클에 하나 이상의 렌더러를 설정할 수 있습니다. 머티리얼을 적용할 수 있는 파티클의 기반으로서 3D 모델을 정의할 경우, 메시 렌더러를 사용하는 것이 좋습니다. 스프라이트 렌더러를 사용하고 파티클을 2D 스프라이트로 정의할 수도 있습니다. 여러 렌더러 중에 골라서 실험해 볼 수 있습니다.
모듈
모듈은 나이아가라에서 이펙트의 기본 빌딩 블록입니다. 그룹에 모듈을 추가하여 스택을 만듭니다. 모듈은 위에서 아래로 순차적으로 처리됩니다.

모듈은 계산을 수행하는 컨테이너라고 할 수 있습니다. 모듈에 데이터를 전달한 뒤 모듈 내부에서 해당 데이터에 관한 계산을 실시하고 이 데이터를 모듈의 끝에 작성합니다.
모듈은 고급 셰이딩 언어(High-Level Shading Language, HLSL)를 사용하여 빌드하지만, 노드를 사용하여 그래프에서 시각적으로 빌드할 수도 있습니다. 함수를 만들거나, 입력을 포함시키거나, 값 또는 파라미터 맵에 작성할 수 있습니다. 그래프의 CustomHLSL 노드를 사용하여 HLSL 코드 인라인을 작성할 수도 있습니다.
나이아가라의 이미터에서 임의의 모듈을 더블클릭하여 내부에서 수행 중인 계산을 살펴볼 수 있습니다. 모듈을 복사하거나 직접 만들 수도 있습니다. 예를 들어 속도 추가(Add Velocity) 모듈을 더블클릭하여 내부를 살펴보고, 데이터 흐름을 검사할 수도 있습니다.
이미지를 클릭하면 최대 크기로 볼 수 있습니다.
스크립트는 입력(속도 입력 및 좌표 공간)을 가져오는 것부터 시작합니다. 그 후 파티클의 현재 속도와 입력된 스케일 인수를 가져옵니다. 그러면 입력 속도가 스케일 조절되고 올바른 좌표 공간에서 변환되며, 파티클의 현재 속도에 추가됩니다. 작업이 완료되면 새 파티클 속도가 다시 작성되어 추후에 스택에서 속도 정보를 필요로 하는 모듈이 이를 얻을 수 있습니다.
모든 모듈은 기본 방식으로 빌드되지만 일부 모듈은 내부 계산이 조금 더 복잡할 수 있습니다.
파라미터 및 파라미터 타입
파라미터 는 나이아가라 시뮬레이션 데이터의 추상 표현입니다. 파라미터 타입 은 파라미터에 할당되어 파라미터가 표현하는 데이터를 정의합니다. 파라미터 타입은 네 가지입니다.
- 프리미티브(Primitive) : 이 파라미터 타입은 각기 다른 정밀도와 채널 폭의 숫자 데이터를 정의합니다.
- 열거형(Enum) : 이 파라미터 타입은 명명된 값의 고정된 조합을 정의하고, 명명된 값 중 하나를 가정합니다.
- 구조체(Struct) : 이 파라미터 타입은 프리미티브와 열거형 타입의 결합된 조합을 정의합니다.
- 데이터 인터페이스(Data Interfaces) : 이 파라미터 타입은 외부 데이터 소스로부터 데이터를 제공하는 함수를 정의합니다. UE4의 다른 요소에 있는 데이터 또는 외부 애플리케이션의 데이터일 수 있습니다.

더하기 표시 아이콘( + )을 클릭하고 직접 신규 또는 기존 파라미터 설정(Set new or existing parameter directly) 을 선택하여 이미터에 커스텀 파라미터 모듈을 추가할 수 있습니다. 그러면 파라미터 설정(Set Parameter) 모듈이 스택에 추가됩니다. 파라미터 설정 모듈의 더하기 표시 아이콘( + )을 클릭하고 파라미터 추가(Add Parameter) 를 선택하여 기존 파라미터를 설정하거나 새 파라미터 생성(Create New Parameter) 을 선택하여 새 파라미터를 설정합니다.
템플릿 및 행동 예제
나이아가라 에셋 브라우저 창
나이아가라 이미터 또는 나이아가라 시스템을 처음 생성할 때 에셋 브라우저 창에 프로젝트에서 사용 가능한 나이아가라 시스템과 이미터가 표시됩니다. 타입 또는 카테고리별로 사용 가능한 에셋으로 필터를 적용할 수 있습니다. 필터 적용을 위해 커스텀 카테고리를 생성할 수도 있습니다.
새 나이아가라 시스템을 생성하려면 콘텐츠 브라우저(Content Browser) 를 우클릭한 뒤 FX > 나이아가라 시스템(Niagara System)** 을 클릭합니다.

나이아가라 에셋 브라우저(Niagara Asset Browser) 창이 열리고 프로젝트에서 사용 가능한 모든 시스템이 표시됩니다. 창은 다음 섹션으로 구성됩니다.

1. 콘텐츠 영역
콘텐츠 영역 에는 선택한 카테고리와 필터를 기반으로 사용 가능한 시스템과 이미터가 표시됩니다.
2. 카테고리
카테고리 섹션에는 프로젝트에서 사용 가능한 모든 카테고리가 표시됩니다. 카테고리를 선택하면 사용 가능한 시스템과 이미터를 볼 수 있습니다.

3. 툴바
툴바에서는 다음 옵션을 사용할 수 있습니다.
필터

필터 버튼에는 사용 가능한 FX 및 나이아가라 필터가 포함된 드롭다운이 표시됩니다. 나이아가라 이미터 필터를 선택하면 콘텐츠 영역에 사용 가능한 이미터가 표시됩니다.

필터 버튼을 클릭하여 필터를 활성화하고 비활성화할 수 있습니다.


검색

검색 바 는 이름으로 시스템과 이미터를 검색하는 데 사용됩니다. 아래 예시에서는 fire 를 검색하여 이름에 이 단어가 포함된 모든 시스템을 확인합니다.

위에 있는 시스템을 프로젝트에서 사용할 수 없는 경우 플러그인(Plugins) 창으로 이동하고 Niagara Fluids 플러그인을 활성화합니다.
4. 디테일
디테일 섹션에는 선택한 시스템 또는 이미터에 관한 정보가 표시됩니다.

위의 예시에서 이미터 가 선택되어 있으며 에셋의 설명, 주 태그 (카테고리), 다른 에셋에서 이미터가 상속 되는지 여부, 그리고 CPU 또는 GPU에서 실행 되는지 여부를 알 수 있습니다.
카테고리 직접 추가
나이아가라 에셋 브라우저는 태그를 사용하여 창 안에 있는 나이아가라 시스템과 이미터를 정리합니다. 태그는 아래와 같이 창의 왼쪽에서 폴더 계층구조로 시각화됩니다.

각 에셋에는 주 태그 가 있어 에셋을 올바른 카테고리에 배치하는 데 사용됩니다. 아래 예시에서 Grid2D_Gas_Color 시스템의 주 태그는 2D Gas 이며, 이는 왼쪽에서 2D Gas 카테고리 에 해당합니다.

직접 태그를 생성하고 이를 콘텐츠 브라우저 내에 있는 에셋에 할당할 수 있습니다. 이를 통해 에셋 브라우저에 커스텀 카테고리가 생성됩니다.
이 예시에서는 각기 다른 히트 이펙트를 나타내는 3개의 나이아가라 이미터 NE_Hit_Concrete, NE_Hit_Glass, NE_Hit_Wood 를 생성했습니다.

커스텀 태그를 생성하려면 다음 단계를 따릅니다.
-
콘텐츠 브라우저 를 우클릭하고 FX > 고급(Advanced) > 나이아가라 에셋 태그 정의(Niagara Asset Tag Definitions) 를 클릭합니다. 에셋 이름을 NAD_HitEffects 로 명명합니다.
-
NAD_HitEffects 를 더블클릭하여 엽니다. 표시명 과 설명 을 입력합니다. 이는 에셋 브라우저 내 카테고리 뷰에 사용됩니다.
-
태그 정의(Tag Definitions) 옆에 있는 + 기호 를 클릭하여 새 태그를 추가합니다. Index [0]을 펼치고 에셋 태그(Asset Tag) 에 Hit_Glass 를 입력한 다음, 에셋 플래그(Asset Flags) 에 Emitters 를 입력합니다.
-
이전 단계를 따라 tags: Hit_Concrete 및 Hit_Wood 를 추가합니다.
-
NE_Hit_Concrete 를 우클릭하고 태그 관리(Manage Tags) > Hit_Concrete 를 클릭합니다. 이렇게 하면 Hit_Concrete 태그가 에셋에 추가됩니다.
-
Hit_Glass 및 Hit_Wood 태그를 NE_Hit_Glass 및 NE_Hit_Wood 이미터에 각각 추가합니다.
-
콘텐츠 브라우저 를 우클릭하고 FX > 나이아가라 시스템 을 클릭하여 에셋 브라우저 를 엽니다. Hit Effects 카테고리를 클릭하여 에셋 태그 정의에 속한 태그가 포함된 이미터를 확인합니다.
-
이제 Hit_Glass 카테고리를 클릭하여 Hit Glass 태그가 포함된 이미터를 확인합니다.
-
프로젝트에 원하는 만큼 에셋 태그 정의를 생성할 수 있습니다. 아래 예시에서는 이름이 Splash Effects 이고 tags: Splash_Clear 및 Splash_Mud 태그가 포함된 다른 정의를 생성했습니다.
나이아가라 VFX 워크플로
시스템 생성
우선 하나 이상의 이미터를 추가할 수 있는 나이아가라 시스템을 만듭니다. 그러면 이미터마다 프로퍼티를 구성할 수 있습니다.
이미터 생성 또는 추가
나이아가라 에디터에서 이미 모듈에 있는 프로퍼티를 변경하여 이미터를 조정하거나 원하는 이펙트에 대해 새 모듈을 추가할 수 있습니다. 이미터를 복사하고 단일 나이아가라 시스템에 여러 이미터를 추가할 수도 있습니다. 이에 대한 예시는 스파크 튜토리얼을 참조하세요.
모듈 생성 또는 추가
이미터에서 모듈을 추가할 그룹의 더하기(+) 표시를 클릭하여 나이아가라에서 기존 모듈을 추가할 수 있습니다. 나이아가라에는 많은 모듈이 있으며, 대부분 환경에서 커스텀 모듈을 디자인할 필요 없이 이펙트를 생성할 수 있습니다.
하지만 모듈을 직접 만들려면 데이터가 모듈을 따라 흐르는 방식을 이해해두는 것이 도움이 됩니다.
데이터는 모듈을 따라 흐릅니다. 이미지를 클릭하면 최대 크기로 볼 수 있습니다.
- 모듈은 임시 네임스페이스에 누적되며, 이후 모듈을 더 중첩할 수 있습니다. 동일한 어트리뷰트에 영향을 미치면 모듈은 중첩되고 적절히 누적됩니다.
- 모듈을 작성할 때 여러 함수를 사용할 수 있습니다.
- 부울 연산자
- 수학 표현식
- 삼각법 표현식
- 커스텀 함수
- 보일러플레이트 함수를 쉽게 만드는 노드
- 모듈을 생성하고 나면 누구나 사용할 수 있습니다.
-
모든 모듈은 HLSL을 사용합니다. 로직 흐름은 다음과 같습니다.
HLSL 로직 흐름. 이미지를 클릭하면 최대 크기로 볼 수 있습니다.
생성한 모듈, 이미터 및 시스템은 리소스를 사용합니다. 리소스를 보존하고 퍼포먼스를 개선하기 위해 나이아가라에 이미 포함된 모듈을 살펴보고, 새 모듈을 생성하지 않고 목표를 달성할 수 있는지 확인합니다. 이때 동적 입력이 큰 효과를 발휘합니다.
나이아가라 패러다임
상속
- 평형 계층구조 사용 시, 라이브러리에 있는 에셋을 효과적으로 찾아 사용할 수 없으므로 에셋을 다시 생성하게 됩니다. 같은 수고를 반복하면 효율성이 떨어지고 비용이 늘어납니다.
- 계층형 상속은 발견 가능성을 높이고 기존 에셋을 효과적으로 재사용할 수 있게 합니다.
- 시스템의 자손 이미터에 대해 상속된 것은 전부 오버라이드할 수 있습니다.
- 모듈을 추가하거나 부모 값으로 되돌릴 수 있습니다.
- 스폰, 수명, 루프, 버스트 등 이미터 단계의 행동에 대해서도 마찬가지입니다.
동적 입력
- 동적 입력은 모듈과 같은 방식으로 빌드됩니다.
- 사용자는 동적 입력을 통해 상속을 무한히 확장할 수 있습니다.
- 동적 입력은 파라미터 맵이 아닌 값 타입 역할을 합니다.
- 그래프 로직과 사용자에게 표시되는 값으로 모든 값을 유도할 수 있습니다.
- 동적 입력은 모듈 생성과 거의 비슷한 효과가 있지만, 실제로 새 모듈을 생성하지 않고 선택하여 스택에 배치할 수 있습니다.
- 동적 입력을 사용하고 체이닝하여 여러 방법으로 기존 모듈을 수정 및 커스터마이징할 수 있습니다. 이를 통해 모듈이 팽창하는 것을 줄이고 퍼포먼스를 향상시킬 수 있습니다.
마이크로 표현식
- 인라인 값을 HLSL 표현식 스니펫으로 변환할 수 있습니다.
- 사용자는 파티클, 이미터, 시스템은 물론 HLSL이나 VM 함수에 있는 변수에 액세스할 수 있습니다.
- 새 모듈이 필요하지 않은 사소한 일회용 기능에 효과적입니다.
이벤트
- 이벤트는 엘리먼트(파티클, 이미터, 시스템 등) 간의 소통 방식입니다.
- 이벤트는 페이로드(구조체 등)에 압축된 채로 전송되는 일종의 데이터가 될 수 있습니다. 이후에는 무엇이든 이 이벤트를 수신하고 조치를 취할 수 있습니다.
- 다음과 같은 옵션을 사용할 수 있습니다.
- Particle.ID를 사용하여 파티클에서 직접 이벤트를 실행합니다.
- 시스템의 모든 파티클에서 이벤트를 실행합니다.
- 이벤트에 반응하여 파티클 스폰을 설정하고, 해당 파티클에서 조치를 취합니다.
- 이벤트는 그래프(구조체)의 특수 노드입니다. 이벤트 노드를 사용하는 방법은 다음과 같습니다.
- 이벤트 이름을 지정합니다.
- 원하는 데이터를 추가합니다.
- 이벤트 핸들러를 이미터 스택에 추가합니다.
- 이벤트 핸들러에 대한 옵션을 설정합니다.
- 이벤트에 대한 별도의 실행 스택이 있습니다.
- 구체적인 그래프 로직을 이벤트 핸들러에 추가할 수 있습니다.
- 복잡한 로직을 포함하여 전체 파티클 시스템을 설정한 다음, 이벤트가 트리거되면 완전한 별도의 행동 세트가 발생하도록 할 수 있습니다.
데이터 인터페이스
- 임의 데이터에 대한 액세스를 허용하는 확장 시스템이 있습니다.
- 임의 데이터로는 메시 데이터, 오디오, 외부 DDC 정보, 코드 오브젝트, 텍스트 컨테이너가 있습니다.
- 이후 확장성 향상을 위해 데이터 인터페이스를 플러그인으로 작성할 수 있습니다.
- 사용자는 스켈레탈 메시 데이터 인터페이스를 사용하여 임의의 데이터를 스켈레탈 메시에 연결할 수 있습니다.
Houdini
- Houdini를 사용하면 스플릿 포인트, 스폰 위치, 임팩트 위치, 임팩트 속도, 노멀 등을 계산할 수 있습니다.
- 이후 Houdini에서 일반 컨테이너 형식(CSV)으로 이 데이터를 익스포트할 있습니다.
- UE4 프로젝트에서 CSV를 나이아가라로 임포트할 수 있습니다.