나이아가라 개요

이 페이지에서는 언리얼 엔진 5 나이아가라 VFX 시스템의 개요를 설명합니다.

Choose your operating system:

Windows

macOS

Linux

나이아가라는 언리얼 엔진의 차세대 VFX 시스템입니다. 테크니컬 아티스트는 나이아가라를 사용하여 프로그래머의 도움을 받지 않고도 추가 기능을 직접 생성할 수 있습니다. 시스템은 유연하며 조정 가능합니다. 초보자는 템플릿이나 행동 예제를 수정하면서 시작하고, 고급 사용자는 자신만의 커스텀 모듈을 생성할 수 있습니다.

나이아가라 핵심 컴포넌트

나이아가라 VFX 시스템에는 네 개의 핵심 컴포넌트가 있습니다.

  • 시스템

  • 이미터

  • 모듈

  • 파라미터

시스템

나이아가라 시스템은 이펙트 빌드에 필요한 모든 요소가 담긴 컨테이너입니다. 시스템에서 다양한 빌딩 블록을 쌓아 전체적인 이펙트를 만들 수 있습니다.

시스템 단계의 행동을 수정한 뒤, 이펙트에 속하는 모든 요소에 적용할 수 있습니다.

나이아가라 시스템 세팅

시스템 에디터의 타임라인(Timeline) 패널에서 시스템에 어떤 이미터가 포함되어 있는지 확인하고, 이미터를 관리할 수 있습니다.

이미터

이미터는 나이아가라 시스템에서 파티클이 생성되는 곳입니다. 이미터는 파티클의 생성 방식, 시간 경과에 따라 파티클에서 발생하는 현상, 파티클의 외관 및 행동을 제어합니다.

이미터는 스택으로 구성됩니다. 이 스택 내에는 여러 그룹이 있으며, 그룹 내에 개별 동작을 수행하는 모듈을 추가할 수 있습니다. 그룹은 다음과 같습니다.

이미터 그룹

  1. 이미터 스폰(Emitter Spawn)

    이 그룹은 이미터가 GPU에서 처음 생성될 때 일어나는 일을 정의합니다. 이 그룹을 사용하여 초기 구성 및 기본값을 정의합니다.

  2. 이미터 업데이트(Emitter Update)

    이 그룹은 GPU의 모든 프레임에서 발생하는 이미터 단계의 모듈을 정의합니다. 이 그룹을 사용하여 모든 프레임에서 계속 스폰할 파티클의 스폰을 정의합니다.

  3. 파티클 스폰(Particle Spawn)

    이 그룹은 파티클이 처음 생성될 때 파티클당 한 번씩 호출됩니다. 이 그룹에서 파티클의 생성 위치, 색, 크기와 같은 파티클의 초기화 디테일을 정의합니다.

  4. 파티클 업데이트(Particle Update)

    이 그룹은 각 프레임에서 파티클마다 호출됩니다. 이 그룹에서 파티클의 수명에 따라 프레임별로 변경해야 하는 사항을 정의합니다. 시간에 따른 파티클의 색 변화와 중력, 컬 노이즈, 포인트 어트랙션 등의 힘이 파티클에 미치는 영향을 예로 들 수 있습니다. 시간에 따라 파티클의 크기가 변하게 할 수도 있습니다.

  5. 이벤트 핸들러(Event Handler)

    이벤트 핸들러 그룹에서는 특정 데이터를 정의하는 하나 이상의 이미터에 생성 이벤트를 만들 수 있습니다. 그 뒤 생성된 이벤트에 반응하여 동작을 트리거하는 다른 이미터에 수신 이벤트를 만들 수 있습니다.

  6. 렌더(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) 으로 이동합니다.

이미지를 클릭하면 최대 크기로 볼 수 있습니다.

시스템 마법사에는 새 시스템 생성을 위한 옵션이 있습니다.

  • 선택한 이미터에서 새 시스템(New system from selected emitters) : 이 옵션을 선택하고 다음(Next) 을 클릭하면 사용 가능한 이미터 목록이 표시됩니다. 이 목록에는 프로젝트의 기존 이미터와 템플릿 이미터가 모두 포함됩니다. 새 시스템에 포함할 이미터를 선택하고 녹색 더하기 표시 아이콘( + )을 클릭하여 추가합니다. 그 뒤에 완료(Finish) 를 클릭하여 시스템을 생성합니다. 기존 이미터를 선택했다면 시스템에서 이 이미터를 상속합니다. 템플릿 이미터를 선택했다면 시스템에서 어떤 것도 상속하지 않습니다. 또한 템플릿 이미터는 해당 시스템에 대해 반드시 로컬에서만 사용해야 하거나 별도의 이미터 에셋으로 저장할 수 있는 인스턴스입니다.

    이미지를 클릭하면 최대 크기로 볼 수 있습니다.

  • 템플릿 또는 행동 예제에서 새 시스템 생성(New system from a template or behavior example): 이 옵션을 선택하고 다음(Next) 을 클릭하면 템플릿 또는 행동 예제 목록에서 일반적으로 사용하는 이펙트 시스템을 선택할 수 있습니다. 이미터 템플릿을 사용하면 아트 리드 또는 크리에이티브 디렉터가 이 목록을 큐레이팅할 수 있습니다. UE가 처음이라면, 이 옵션으로 나이아가라에서 FX 시스템을 빌드하는 방식의 예제를 살펴볼 수 있습니다. 행동 예제(Behavior Examples)는 행동을 이해하는 데 도움이 되도록 나이아가라 시스템의 단일 기능에 맞춰 설계된 간단한 예제입니다.

    이미지를 클릭하면 최대 크기로 볼 수 있습니다.

  • 기존 시스템 복사(Copy existing system): 이 옵션을 선택하고 다음(Next) 을 클릭하면 기존 시스템 목록이 표시됩니다. 하나를 선택하여 복사한 다음, 완료(Finish) 를 클릭합니다.

    이미지를 클릭하면 최대 크기로 볼 수 있습니다.

  • 빈 시스템 생성(Create empty system): 이 옵션을 선택하면 이미터 또는 이미터 템플릿이 포함되지 않은 시스템이 생성됩니다. 다른 시스템과 완전히 다른 시스템을 생성하고자 할 때 유용한 옵션입니다.

    이미지를 클릭하면 최대 크기로 볼 수 있습니다.

이미터 마법사

새 이미터를 생성하려면 콘텐츠 브라우저 를 우클릭한 뒤 FX > 나이아가라 이미터(Niagara Emitter) 를 선택합니다.

이미지를 클릭하면 최대 크기로 볼 수 있습니다.

이미터 마법사에는 새 이미터 생성을 위한 옵션이 있습니다.

  • 템플릿에서 나온 새 이미터(New emitter from a template) : 이 옵션을 선택하면 공통으로 사용되는 여러 이펙트의 유형을 나타내는 템플릿 목록에서 선택할 수 있습니다. 대규모 개발 스튜디오에서는 회사의 모범 사례가 템플릿에 구워지도록 아트 리드 또는 크리에이티브 디렉터가 템플릿 목록을 큐레이팅할 수 있습니다. 이러한 템플릿은 UE를 처음 시작할 때 좋은 출발점이 되기도 합니다.

    이미지를 클릭하면 최대 크기로 볼 수 있습니다.

  • 기존 이미터에서 상속(Inherit from an existing emitter): 이 옵션을 선택하면 기존 이미터에서 프로퍼티를 상속하는 새 이미터를 생성할 수 있습니다. 이 옵션을 사용하면 새 이미터를 선택한 기존 이미터의 자손으로 만듭니다. 동일한 프로퍼티가 포함된 여러 이미터가 필요할 때 이 옵션을 선택하는 것이 좋습니다. 부모 이미터를 변경하여 모든 자손 이미터에 변경 사항을 반영할 수 있습니다. 이 옵션을 사용하려면 부모 이미터를 선택합니다.

    이미지를 클릭하면 최대 크기로 볼 수 있습니다.

  • 기존 이미터 복사(Copy existing emitter): 이 옵션을 선택하면 이미 생성한 이미터의 복사본인 새 이미터를 만들 수 있습니다. 비슷한 이미터를 여러 개 만들 때 유용합니다. 이 옵션을 선택하고 다음을 클릭하면 사용 가능한 이미터 목록이 표시됩니다. 목록에서 복사할 이미터를 선택하면 됩니다.

    이미지를 클릭하면 최대 크기로 볼 수 있습니다.

나이아가라 VFX 워크플로

시스템 생성

우선 하나 이상의 이미터를 추가할 수 있는 나이아가라 시스템을 만듭니다. 그러면 이미터마다 프로퍼티를 구성할 수 있습니다.

이미터 생성 또는 추가

나이아가라 에디터에서 이미 모듈에 있는 프로퍼티를 변경하여 이미터를 조정하거나 원하는 이펙트에 대해 새 모듈을 추가할 수 있습니다. 이미터를 복사하고 단일 나이아가라 시스템에 여러 이미터를 추가할 수도 있습니다. 이에 대한 예시는 스파크 튜토리얼을 참조하세요.

모듈 생성 또는 추가

이미터에서 모듈을 추가할 그룹의 더하기(+) 표시를 클릭하여 나이아가라에서 기존 모듈을 추가할 수 있습니다. 나이아가라에는 많은 모듈이 있으며, 대부분 환경에서 커스텀 모듈을 디자인할 필요 없이 이펙트를 생성할 수 있습니다.

하지만 모듈을 직접 만들려면 데이터가 모듈을 따라 흐르는 방식을 이해해두는 것이 도움이 됩니다.

데이터는 모듈을 따라 흐릅니다. 이미지를 클릭하면 최대 크기로 볼 수 있습니다.

  • 모듈은 임시 네임스페이스에 누적되며, 이후 모듈을 더 중첩할 수 있습니다. 동일한 어트리뷰트에 영향을 미치면 모듈은 중첩되고 적절히 누적됩니다.

  • 모듈을 작성할 때 여러 함수를 사용할 수 있습니다.

    • 부울 연산자

    • 수학 표현식

    • 삼각법 표현식

    • 커스텀 함수

    • 보일러플레이트 함수를 쉽게 만드는 노드

  • 모듈을 생성하고 나면 누구나 사용할 수 있습니다.

  • 모든 모듈은 HLSL을 사용합니다. 로직 흐름은 다음과 같습니다.

    HLSL 로직 흐름. 이미지를 클릭하면 최대 크기로 볼 수 있습니다.

생성한 모듈, 이미터 및 시스템은 리소스를 사용합니다. 리소스를 보존하고 퍼포먼스를 개선하기 위해 나이아가라에 이미 포함된 모듈을 살펴보고, 새 모듈을 생성하지 않고 목표를 달성할 수 있는지 확인합니다. 이때 동적 입력이 큰 효과를 발휘합니다.

나이아가라 패러다임

상속

  • 평형 계층구조 사용 시, 라이브러리에 있는 에셋을 효과적으로 찾아 사용할 수 없으므로 에셋을 다시 생성하게 됩니다. 같은 수고를 반복하면 효율성이 떨어지고 비용이 늘어납니다.

  • 계층형 상속은 발견 가능성을 높이고 기존 에셋을 효과적으로 재사용할 수 있게 합니다.

  • 시스템의 자손 이미터에 대해 상속된 것은 전부 오버라이드할 수 있습니다.

  • 모듈을 추가하거나 부모 값으로 되돌릴 수 있습니다.

  • 스폰, 수명, 루프, 버스트 등 이미터 단계의 행동에 대해서도 마찬가지입니다.

동적 입력

  • 동적 입력은 모듈과 같은 방식으로 빌드됩니다.

  • 사용자는 동적 입력을 통해 상속을 무한히 확장할 수 있습니다.

  • 동적 입력은 파라미터 맵이 아닌 값 유형 역할을 합니다.

  • 그래프 로직과 사용자에게 표시되는 값으로 모든 값을 유도할 수 있습니다.

  • 동적 입력은 모듈 생성과 거의 비슷한 효과가 있지만, 실제로 새 모듈을 생성하지 않고 선택하여 스택에 배치할 수 있습니다.

  • 동적 입력을 사용하고 체이닝하여 여러 방법으로 기존 모듈을 수정 및 커스터마이징할 수 있습니다. 이를 통해 모듈이 과하기 팽창하는 것을 줄이고 퍼포먼스를 향상시킬 수 있습니다.

마이크로 표현식

  • 인라인 값을 HLSL 표현식 스니펫으로 변환할 수 있습니다.

  • 사용자는 파티클, 이미터, 시스템은 물론 HLSL이나 VM 함수에 있는 변수에 액세스할 수 있습니다.

  • 새 모듈이 필요하지 않은 사소한 일회용 기능에 효과적입니다.

이벤트

  • 이벤트는 엘리먼트(파티클, 이미터, 시스템 등) 간의 소통 방식입니다.

  • 이벤트는 페이로드(구조체 등)에 압축된 채로 전송되는 일종의 데이터가 될 수 있습니다. 이후에는 무엇이든 이 이벤트를 수신하고 조치를 취할 수 있습니다.

  • 다음과 같은 옵션을 사용할 수 있습니다.

    • Particle.ID를 사용하여 파티클에서 직접 이벤트를 실행합니다.

    • 시스템의 모든 파티클에서 이벤트를 실행합니다.

    • 이벤트에 반응하여 파티클 스폰을 설정하고, 해당 파티클에서 조치를 취합니다.

  • 이벤트는 그래프(구조체)의 특수 노드입니다. 이벤트 노드를 사용하는 방법은 다음과 같습니다.

    • 이벤트 이름을 지정합니다.

    • 원하는 데이터를 추가합니다.

    • 이벤트 핸들러를 이미터 스택에 추가합니다.

    • 이벤트 핸들러에 대한 옵션을 설정합니다.

  • 이벤트에 대한 별도의 실행 스택이 있습니다.

    • 구체적인 그래프 로직을 이벤트 핸들러에 추가할 수 있습니다.

    • 복잡한 로직을 포함하여 전체 파티클 시스템을 설정한 다음, 이벤트가 트리거되면 완전한 별도의 행동 세트가 발생하도록 할 수 있습니다.

데이터 인터페이스

  • 임의 데이터에 대한 액세스를 허용하는 확장 시스템이 있습니다.

  • 임의 데이터로는 메시 데이터, 오디오, 외부 DDC 정보, 코드 오브젝트, 텍스트 컨테이너가 있습니다.

  • 이후 확장성 향상을 위해 데이터 인터페이스를 플러그인으로 작성할 수 있습니다.

  • 사용자는 스켈레탈 메시 데이터 인터페이스를 사용하여 임의의 데이터를 스켈레탈 메시에 연결할 수 있습니다.

Houdini

  • 후디니(Houdini)를 사용하면 스플릿 포인트, 스폰 위치, 임팩트 위치, 임팩트 속도, 노멀 등을 계산할 수 있습니다.

  • 이후 후디니에서 일반 컨테이너 형식(CSV)으로 이 데이터를 익스포트할 있습니다.

  • UE4 프로젝트에서 CSV를 나이아가라로 임포트할 수 있습니다.