동적 매개변수 시스템의 기초
시스템·이미터·모듈·블루프린트 사이에 사용자 매개변수를 전달해 실행 중 파티클 속성을 외부 값으로 제어합니다.
이번 절은 User Parameter와 모듈 입력 연결로 게임 중 효과를 제어하는 방법을 다룹니다. 머티리얼의 Dynamic Parameter 채널이나 Niagara의 Dynamic Input과 이름을 구분해야 합니다.
동적 매개변수란 무엇인가요?
일반적으로 나이아가라 모듈의 속성(예: Spawn Rate의 스폰 개수, Add Velocity의 속도 값)은 에디터에서 직접 숫자를 입력하여 고정합니다.
하지만 동적 매개변수를 사용하면, 이러한 속성 값들을 게임 내의 다른 변수(예: 플레이어의 현재 체력, 환경의 온도, 시간의 흐름)에 연결하여 실시간으로 변화시킬 수 있습니다.
동적 매개변수를 이해하는 가장 좋은 방법은 입력(Input)과 출력(Output)의 개념으로 접근하는 것입니다.
- 모듈의 출력: 각 모듈은 파티클의 속성(위치, 속도, 색상 등)을 계산하고, 그 결과를 다른 모듈이나 렌더러가 사용할 수 있도록 출력합니다. 예를 들어,
Initialize Particle모듈은 파티클의 초기 색상을 출력하고,Scale Color모듈은 파티클의 수명에 따라 변화된 색상을 출력합니다. - 모듈의 입력: 각 모듈은 자신의 기능을 수행하기 위해 입력 값을 필요로 합니다. 이 입력 값은 내부적인 계산 결과일 수도 있고, 다른 모듈의 출력일 수도 있으며, 바로 이 동적 매개변수를 통해 외부에서 받아오는 값일 수도 있습니다.
동적 매개변수 시스템은 이러한 입출력 흐름을 더욱 유연하게 만들어, 특정 파티클 속성을 계산하는 데 필요한 정보가 어디에서 오든 간에 쉽게 연결하고 사용할 수 있도록 합니다.
동적 매개변수의 작동 방식
나이아가라 시스템 내에서 동적 매개변수는 크게 세 가지 레벨에서 정보를 주고받을 수 있습니다.
값의 저장 범위와 계산 방법을 나눠 읽습니다. User는 외부 입력, System·Emitter·Particles는 각 실행 범위의 값이며, Dynamic Input은 입력값을 계산하는 스크립트입니다.
이미터와 시스템 간의 매개변수 공유
하나의 나이아가라 시스템은 여러 이미터를 포함할 수 있습니다.
시스템 범위 값을 여러 이미터의 입력에서 읽을 수 있습니다. 파티클별 값이나 이미터별 결과를 시스템 값으로 올리는 집계는 별도 구현이 필요하며, 네임스페이스를 바꾸는 것만으로 이루어지지 않습니다.
-
사용 예시
- 공통 스케일: 시스템 레벨에서
GlobalScale이라는 매개변수를 정의하고, 각 이미터의 파티클 크기나 속도에 이 값을 곱해주면, 시스템 전체의 크기를 한 번에 조절할 수 있습니다. - 관측 수량: 전체 살아 있는 입자 수는 디버거 등에서 관측합니다. 시뮬레이션 입력으로 다시 사용할 집계가 필요하면 지원되는 데이터 전달·실행 순서를 별도로 설계합니다.
- 공통 스케일: 시스템 레벨에서
모듈 간의 매개변수 흐름
이것이 나이아가라 동적 매개변수의 가장 기본적인 활용입니다.
스택에서는 앞 모듈이 Parameter Map에 쓴 속성을 뒤 모듈이 읽습니다. 모듈 내부 그래프의 핀 연결과 스택 사이의 속성 전달을 구분합니다.
-
사용 예시
Initialize Particle모듈에서 설정한 파티클의 초기Color값을Scale Color모듈의 입력으로 가져와 수명에 따른 색상 변화의 기본 색상으로 활용할 수 있습니다.- CPU 충돌 이벤트를 다른 이미터의 Event Handler로 보내 새 입자를 충돌 위치에 생성할 수 있습니다. Particle Update의 위치를 Emitter Update의 Burst에 바로 연결하는 것과는 다릅니다.
외부 데이터 (블루프린트, C++ 등)와의 연동
나이아가라 동적 매개변수의 가장 강력한 활용처 중 하나는 게임의 블루프린트(Blueprint)나 C++ 코드에서 직접 파티클 시스템의 매개변수를 제어하는 것입니다.
-
사용 예시
- 캐릭터 속도에 따른 연기 밀도: 캐릭터의 현재 이동 속도를 블루프린트에서 나이아가라 시스템의
Spawn Rate모듈로 전달하여, 빠르게 달릴수록 더 많은 먼지나 연기가 나도록 만듭니다. - 환경 온도에 따른 불꽃 색상: 게임 월드의 특정 지점 온도를 감지하여 나이아가라 시스템의
Color매개변수로 전달, 온도가 높을수록 불꽃이 더 밝고 붉게 보이도록 합니다. - 체력 기반 효과: 플레이어의 체력이 낮아질수록 캐릭터 주변에 나타나는 파티클의 색상이나 강도를 변화시킵니다.
- 캐릭터 속도에 따른 연기 밀도: 캐릭터의 현재 이동 속도를 블루프린트에서 나이아가라 시스템의
동적 매개변수 생성 및 활용
입력 드롭다운에서는 상수, 다른 파라미터 연결, Random Range·Curve 같은 Dynamic Input 계산을 선택할 수 있습니다. 메뉴 항목과 지원 입력은 자료형·모듈 버전에 따라 달라집니다. Dynamic Input을 선택하는 것만으로 외부 User Parameter가 생기지는 않습니다.
예시: 외부에서 초기 속도 전달하기
시스템의 User Parameters에 Vector 타입 User.CustomVelocity를 만들고 기준값을 설정합니다. 속도 벡터이므로 월드 위치를 나타내는 Position 타입과 구분합니다.
Particle Spawn의 Add Velocity를 선택하고 Velocity 입력을 User.CustomVelocity에 연결합니다. 모듈의 좌표 공간도 정합니다.
레벨의 해당 Niagara Component에서 User Parameter 값을 바꾸거나, Blueprint에서 그 컴포넌트의 Set Niagara Variable (Vector3) 계열 노드로 같은 이름·타입의 값을 설정합니다. 다른 인스턴스를 대상으로 삼지 않도록 참조를 확인합니다.
값을 바꾼 뒤 새로 생성되는 입자를 비교합니다. Particle Spawn에서만 읽으므로 이미 살아 있는 입자의 속도가 자동으로 다시 초기화되지는 않습니다. 기존 입자에도 영향을 주려면 Update에서 어떤 힘·속성으로 읽을지 별도로 설계합니다.
Particle Update의 위치 적분과 이후 Velocity 작성자를 확인합니다. 값이 전달되었어도 Solve가 없거나 다른 모듈이 덮어쓰면 기대한 움직임이 나오지 않을 수 있습니다.
비슷한 이름 구분하기
| 이름 | 역할 |
|---|---|
| User Parameter | Blueprint·C++·컴포넌트에서 설정하는 시스템 인스턴스 입력 |
| Dynamic Input | 커브·무작위·수식 등으로 모듈 입력값을 계산 |
| Dynamic Material Parameter | Niagara 속성을 렌더러 바인딩과 채널로 머티리얼에 전달 |
머티리얼 채널을 쓰는 경우에는 모듈의 Dynamic Material Parameter 값, 렌더러의 해당 바인딩, 머티리얼 노드의 인덱스·채널을 맞춥니다. 모든 속도나 생성률 제어가 이 머티리얼 경로를 통과하는 것은 아닙니다.
User Parameter의 외부 설정 범위를 기준으로 값의 작성자와 소비 시점을 확인합니다.