파티클 속성 읽기 및 쓰기
Get·Set 노드로 위치·속도·색상·크기·수명 속성을 읽고 계산 결과를 Spawn 또는 Update 단계에 맞춰 기록합니다.
나이아가라 스크립팅의 핵심은 파티클의 다양한 속성(Attributes)을 읽고 쓰는 것입니다.
파티클의 위치, 속도, 색상, 크기, 수명 등 모든 정보는 속성으로 저장되며, 이 속성들을 조작함으로써 파티클의 동작을 완벽하게 제어할 수 있습니다.
마치 파티클이라는 객체가 가진 여러 변수들을 프로그래밍적으로 접근하고 변경하는 것과 같습니다.
이 절에서는 나이아가라 스크립트 에디터에서 파티클 속성을 어떻게 가져오고(Map Get), 어떻게 설정하거나 변경하는지(Map Set)에 대한 기본 개념과 활용법을 자세히 알아보겠습니다.
파티클 속성 읽기
파티클의 현재 상태를 파악하거나, 다른 계산의 입력 값으로 사용하기 위해서는 해당 속성의 값을 읽어와야 합니다.
나이아가라에서는 주로 Map Get 노드를 사용하여 파티클 속성을 읽습니다.
속성 읽기 기본 사용법
노드 추가: Map Get을 만들고 입력 Parameter Map을 연결합니다. 노드의 매개변수 추가 메뉴에서 Particles.Position, Particles.Velocity 등 읽을 속성을 선택합니다.
출력 핀 연결: Map Get 노드는 해당 속성의 현재 값을 출력 핀으로 내보냅니다.
이 출력 핀을 다른 연산 노드(예: Add, Multiply)나 Map Set 노드의 입력 핀에 연결하여 값을 활용합니다.
주요 예시
Get Particles.Position: 파티클의 현재 위치(Position 타입)를 가져옵니다.- 활용: 파티클의 위치를 기반으로 다른 파티클을 스폰하거나, 특정 영역에 들어왔는지 조건을 검사할 때.
Get Particles.Velocity: 파티클의 현재 3차원 속도(Vector3)를 가져옵니다.- 활용: 파티클의 속도에 따라 색상이나 크기를 변경하거나, 속도에 비례하는 힘을 적용할 때.
Get Particles.Color: 파티클의 현재 색상(Color)을 가져옵니다.- 활용: 파티클의 현재 색상에 다른 색상을 더하거나 곱하여 색상을 조절할 때.
Get Particles.Lifetime: 파티클의 총 수명(Float)을 가져옵니다.Get Particles.NormalizedAge: 파티클의 정규화된 나이(Float, Age/Lifetime; 수명 종료 시 제거되는 정상 구간은 보통 0~1)을 가져옵니다.- 활용: 파티클의 수명 진행률에 따라 크기, 색상, 투명도 등을 변화시키는 커브나 그래디언트의 입력으로 주로 사용됩니다.
Get Particles.SpriteSize: 파티클 스프라이트의 현재 크기(Vector2)를 가져옵니다.Get Particles.ID: Niagara ID 구조체(Index와 AcquireTag)를 가져옵니다. 지속 식별을 사용하려면 이미터의 Requires Persistent IDs 설정과 지원 경로를 확인합니다. 단순 정수나 현재 실행 인덱스로 취급하지 않습니다.
파티클 속성 쓰기
속성을 기록할 때는 Map Set을 사용합니다. 스택의 매개변수 직접 설정 항목과 모듈 내부의 Map Set 그래프를 구분합니다.
속성 쓰기 기본 사용법
Map Set에 입력 Parameter Map을 연결하고, 매개변수 추가 메뉴에서 기록할 Particles.Color 등의 속성을 추가합니다.
연산 노드가 계산한 값을 해당 속성의 입력 핀에 연결합니다. 핀의 데이터 타입과 값의 단위를 맞춥니다.
Map Set의 출력 맵을 다음 Map Set 또는 Output Module에 연결합니다. 이는 속성 집합을 전달하는 연결이며 Do 실행 핀이 아닙니다.
활용 예시
Set Particles.Position: 파티클의 위치를 강제로 설정하거나 변경합니다.- 활용: 특정 지점으로 파티클을 순간 이동시키거나, 외부 데이터(예: 메시 표면)에서 계산된 위치로 파티클을 배치할 때.
Set Particles.Velocity: 파티클의 속도를 강제로 설정하거나 변경합니다.- 활용: 파티클에 새로운 방향과 크기의 속도를 즉시 부여할 때.
Set Particles.Color: 파티클의 색상을 변경합니다.- 활용: 조건에 따라 색상을 변경하거나, 외부 입력에 따라 색상을 조절할 때.
Set Particles.Lifetime: 파티클의 총 수명을 변경합니다. 남은 시간과 혼동하지 않습니다.- 활용: 수명 판정 모듈이 참조할 총 시간을 바꿀 때. 즉시 제거하려면 해당 이벤트의 kill 처리 또는 Alive 속성과 실행 순서를 확인합니다.
속성 읽기 및 쓰기 조합 예시
가장 일반적인 예시는 파티클의 현재 속도를 읽어와서 특정 계산을 수행한 후, 다시 그 속성을 쓰는 것입니다.
예시: 파티클의 속도에 감속을 적용하기 (저항)파티클이 움직이다가 점차 느려지도록 만들려면, 현재 속도를 읽어와서 일정한 비율로 줄인 다음 다시 속성에 써야 합니다.
Get Particles.Velocity: 파티클의 현재 속도를 가져옵니다.
Multiply (Vector * Float): Get Particles.Velocity의 출력에 0.98과 같은 Float 값을 곱합니다. (매 프레임마다 속도를 2%씩 줄임)
Map Set: Particles.Velocity 입력에 Multiply 결과를 연결하고 변경된 맵을 Output Module로 전달합니다.
이 예제의 0.98은 틱마다 적용되므로 프레임률에 따라 감속량이 달라집니다. 60 Hz에서의 감속률을 기준으로 맞추려면 배율을 pow(0.98, 60 × Engine.DeltaTime)로 계산할 수 있습니다. 기본 Drag 모듈과 solver를 이용하는 방법도 있습니다. 이미 적용 중인 저항과 중복되지 않게 하고, 속도를 사용할 solver 앞에 둡니다.
속성 초기화 vs. 업데이트
나이아가라에서 속성을 다룰 때 중요한 개념은 초기화(Initialization) 와 업데이트(Update) 의 차이입니다.
Initialize Particle모듈: 파티클이 생성되는 순간, 즉 탄생 시점에 색상·수명·크기 등의 초기 속성을 설정합니다. 위치와 초기 속도는 Shape Location, Add Velocity 등 별도 Spawn 모듈이 기록할 수도 있습니다. 이 모듈은Particle Spawn섹션에 위치하며, 여기서 설정된 값들은 파티클의 기본값이 됩니다.Particle Update섹션의 모듈들: 파티클이 살아있는 동안 매 프레임마다 속성을 읽고 변경합니다. 모듈에 따라 현재 속성을 읽고 결과를 기록합니다. 모든 모듈이 모든 속성을 쓰는 것은 아닙니다.
따라서 Initialize Particle에서 설정된 초기 값은 Particle Update 섹션의 모듈들에 의해 계속해서 변경될 수 있습니다.
파티클 속성을 읽고 쓰는 능력은 나이아가라 스크립팅의 가장 기본적인 토대입니다.