사용자 정의 모듈
Module Script에 입출력 매개변수와 파티클 속성 계산을 정의해 여러 시스템에서 재사용할 수 있는 사용자 모듈을 만듭니다.
지금까지 나이아가라의 스폰, 업데이트, 렌더링 모듈의 기본 사용법을 익히셨습니다.
이 모듈들만으로도 다양한 효과를 만들 수 있지만, 때로는 언리얼 엔진에서 기본으로 제공하는 모듈만으로는 원하는 복잡하거나 독특한 효과를 구현하기 어려울 때가 있습니다.
이럴 때 필요한 것이 바로 사용자 정의 모듈(Custom Module)입니다.
사용자 정의 모듈은 나이아가라의 확장성을 보여주는 핵심 기능 중 하나입니다.
여러분이 직접 파티클의 속성을 제어하는 로직을 만들고, 이를 재사용 가능한 모듈 형태로 저장하여 다른 나이아가라 시스템에서도 활용할 수 있게 해줍니다.
마치 레고 블록을 직접 디자인하고 생산하여, 나만의 특별한 작품을 만드는 것과 비슷하다고 할 수 있습니다.
사용자 정의 모듈이란?
사용자 정의 모듈은 특정 기능을 수행하도록 비주얼 스크립트(Visual Script) 형태로 직접 제작하는 나이아가라 모듈입니다.
이는 블루프린트와 유사하게 노드 기반의 시각적인 프로그래밍 방식으로 이루어져 있어, C++ 코딩 지식 없이도 복잡한 파티클 로직을 구현할 수 있습니다.
사용자 정의 모듈을 활용하면 다음과 같은 장점을 얻을 수 있습니다.
- 높은 유연성: 기본 모듈로는 불가능했던 독특한 파티클 동작이나 수학적 계산을 직접 구현할 수 있습니다.
- 재사용성: 한 번 만든 사용자 정의 모듈은 여러 이미터나 나이아가라 시스템에서 재사용할 수 있어 작업 효율을 높입니다.
- 깔끔한 워크플로우: 복잡한 파티클 로직을 하나의 모듈로 캡슐화하여 이미터의
Particle Update섹션을 더 깔끔하게 유지할 수 있습니다.
사용자 정의 모듈 생성 및 편집 과정
간단한 예시를 통해 사용자 정의 모듈을 만들고 사용하는 과정을 살펴보겠습니다.
여기서는 파티클의 수명에 따라 특정 방향으로 지그재그 움직임을 추가하는 간단한 사용자 정의 모듈을 만들어볼 것입니다.
- 콘텐츠 브라우저(Content Browser)에서 원하는 폴더를 선택하고 우클릭합니다.
FX>Niagara Module을 선택합니다.- 새 모듈의 이름을
NCM_ZigzagMovement(Niagara Custom Module의 약자)와 같이 지정합니다. NCM_ZigzagMovement에셋을 더블 클릭하여 나이아가라 모듈 에디터(Niagara Module Editor)를 엽니다. 이 에디터는 일반 나이아가라 에디터와 유사하지만, 모듈 로직을 만드는 데 집중되어 있습니다.
모듈 그래프는 Input Map에서 Output Module로 이어지는 Parameter Map을 사용합니다. Map Get에서 현재 입자의 NormalizedAge·Velocity와 모듈 입력을 읽고, Map Set에서 Particles.Velocity를 씁니다.
- Float 입력
ZigzagStrength: X축 속도 진폭(cm/s), 기본값0. - Float 입력
ZigzagFrequency: 한 수명 동안 진행할 위상(라디안), 기본값6.283185. 이 값은 초당 진동수(Hz)가 아닙니다. - 입력은 해당 버전의 모듈 입력 네임스페이스(Input/Module)에 만들며 User Parameter로 자동 노출되는 것은 아닙니다.
- Map Get에서
Particles.NormalizedAge와Particles.Velocity를 읽습니다. - NormalizedAge에 ZigzagFrequency를 곱하고 라디안 기준 Sine을 계산합니다.
- Sine 결과에 ZigzagStrength를 곱해 X축 속도를 만듭니다.
- 현재 Velocity의 Y·Z는 유지하고 X만 계산값으로 교체한 Vector를 Map Set의
Particles.Velocity에 연결합니다. Parameter Map은 Input Map → Map Set → Output Module로 이어집니다.
phase = Particles.NormalizedAge * ZigzagFrequency
newX = sin(phase) * ZigzagStrength
Particles.Velocity = (newX, previousVelocity.y, previousVelocity.z)위 식은 노드 연결을 설명하는 의사 코드입니다. 이전 X에 매 틱 값을 더하면 누적 가속이 되므로 이 예제에서는 X를 덮어씁니다. Strength가 0이면 기존 X를 보존하는 것이 아니라 X를 0으로 만듭니다. Particle State로 나이를 갱신한 뒤, Solve Forces and Velocity 전에 배치해 위치로 적분합니다. 초기 X 속도를 유지해야 하는 다른 효과에서는 기준 속도 저장과 합성 규칙을 별도로 설계해야 합니다.
모듈 저장: NCM_ZigzagMovement 에셋을 저장합니다. (Ctrl + S)
사용자 정의 모듈 사용하기
이제 만든 사용자 정의 모듈을 기존 나이아가라 시스템에 적용해 보겠습니다.
이전에 만들었던 NS_BasicSpawn (또는 다른 나이아가라 시스템)을 엽니다.
개요(Overview) 패널에서 파티클 업데이트 효과를 추가하고 싶은 이미터를 선택합니다.
Particle Update 섹션 아래의 + 버튼을 클릭합니다.
검색창에 여러분이 만든 모듈 이름 NCM_ZigzagMovement를 검색하여 추가합니다.
모듈이 추가되면, 디테일(Details) 패널에서 여러분이 정의했던 ZigzagStrength와 ZigzagFrequency 속성을 볼 수 있습니다.
이 값들을 조절하면서 뷰포트에서 파티클의 움직임이 어떻게 변하는지 확인해 보세요.
ZigzagStrength는 좌우 속도 진폭이며, 실제 이동 폭은 위상 진행 속도와 Lifetime에도 좌우됩니다.ZigzagFrequency = 2π는 한 수명에 사인 한 주기입니다. 다른 힘·Drag·속도 작성자는 끄고 먼저 기준 거동을 비교합니다.
사용자 정의 모듈 활용 팁
- 주석 달기: 복잡한 스크립트를 만들 때는
C키를 눌러 주석 상자를 추가하여 각 부분의 역할을 설명하는 것이 좋습니다. - 입력 매개변수 사용: 실제 사용자가 바꿔야 하는 값만 입력으로 노출하고 이름·단위·기본값을 설명합니다.
- 계산 순서: 스크립트 에디터에서 노드 간의 데이터 흐름과 계산 순서를 명확히 이해하는 것이 중요합니다.
- 디버깅: 문제가 발생하면 디버거를 사용하여 파티클의 속성 변화를 추적하고, 어떤 노드에서 문제가 발생했는지 파악하세요.
모듈의 사용 범위를 Particle Update로 설정하고 라이브러리 노출·카테고리·설명을 확인합니다. 다른 이미터에 넣을 때는 X 속도를 덮어쓰는 책임과 선행 Particle State, 후행 위치 적분 조건을 함께 전달합니다.
Scratch Pad로 먼저 만든 경우에는 다른 에셋에서 재사용할 모듈 에셋으로 내보낼 수 있습니다. 공식 Scratch Pad 예제는 Map Get과 Map Set으로 읽기와 쓰기를 구분합니다.