파티클 속성 읽기 및 쓰기
Get·Set 노드로 위치·속도·색상·크기·수명 속성을 읽고 계산 결과를 Spawn 또는 Update 단계에 맞춰 기록합니다.
나이아가라 스크립팅의 핵심은 파티클의 다양한 속성(Attributes)을 읽고 쓰는 것입니다.
파티클의 위치, 속도, 색상, 크기, 수명 등 모든 정보는 속성으로 저장되며, 이 속성들을 조작함으로써 파티클의 동작을 완벽하게 제어할 수 있습니다.
마치 파티클이라는 객체가 가진 여러 변수들을 프로그래밍적으로 접근하고 변경하는 것과 같습니다.
이 절에서는 나이아가라 스크립트 에디터에서 파티클 속성을 어떻게 가져오고(Get), 어떻게 설정하거나 변경하는지(Set)에 대한 기본 개념과 활용법을 자세히 알아보겠습니다.
나이아가라 스크립팅은 파티클의 현재 속성을 읽고, 계산하고, 다시 쓰는 순환으로 동작한다. 어느 실행 시점에 어떤 속성을 바꾸는지 분리해야 다음 프레임 결과가 예측된다.
- Get
현재 Position, Velocity, Color 같은 값을 계산 입력으로 읽는다.
- Calculate
수학, 조건, 커브를 거쳐 새 값의 의미와 범위를 정한다.
- Set
새 값을 기존 속성이나 새 파라미터에 기록한다.
- Render
기록된 속성이 이동, 색, 크기, 수명 결과로 보인다.
| 시점 | 역할 | 잘못 쓰면 |
|---|---|---|
| Spawn | 생성 순간의 초기값 결정 | 처음부터 위치나 색이 어긋난다. |
| Update | 매 프레임 이동과 변화 계산 | 누적 변화가 과해지거나 흔들린다. |
| Render | 최종 표시용 색과 크기 반영 | 계산은 맞아도 화면 결과가 다르다. |
파티클 속성 읽기
파티클의 현재 상태를 파악하거나, 다른 계산의 입력 값으로 사용하기 위해서는 해당 속성의 값을 읽어와야 합니다.
나이아가라에서는 주로 Get 노드를 사용하여 파티클 속성을 읽습니다.
속성 읽기 기본 사용법
노드 추가: 스크립트 에디터의 빈 공간에 마우스 우클릭하고, 원하는 속성의 이름을 검색합니다. (예: Get Particles.Position, Get Particles.Velocity, Get Particles.Color, Get Particles.Lifetime, Get Particles.NormalizedAge 등)
출력 핀 연결: Get 노드는 해당 속성의 현재 값을 출력 핀으로 내보냅니다.
이 출력 핀을 다른 연산 노드(예: Add, Multiply)나 Set 노드의 입력 핀에 연결하여 값을 활용합니다.
주요 예시
Get Particles.Position: 파티클의 현재 3차원 위치(Vector3)를 가져옵니다.- 활용: 파티클의 위치를 기반으로 다른 파티클을 스폰하거나, 특정 영역에 들어왔는지 조건을 검사할 때.
Get Particles.Velocity: 파티클의 현재 3차원 속도(Vector3)를 가져옵니다.- 활용: 파티클의 속도에 따라 색상이나 크기를 변경하거나, 속도에 비례하는 힘을 적용할 때.
Get Particles.Color: 파티클의 현재 색상(Vector4 또는 Color)을 가져옵니다.- 활용: 파티클의 현재 색상에 다른 색상을 더하거나 곱하여 색상을 조절할 때.
Get Particles.Lifetime: 파티클의 총 수명(Float)을 가져옵니다.Get Particles.NormalizedAge: 파티클의 정규화된 수명(Float, 0.0 ~ 1.0)을 가져옵니다.- 활용: 파티클의 수명 진행률에 따라 크기, 색상, 투명도 등을 변화시키는 커브나 그래디언트의 입력으로 주로 사용됩니다.
Get Particles.SpriteSize: 파티클 스프라이트의 현재 크기(Vector2)를 가져옵니다.Get Particles.ID: 각 파티클의 고유 ID(Int)를 가져옵니다. 디버깅이나 특정 파티클을 식별할 때 유용합니다.
파티클 속성 쓰기
파티클의 속성 값을 변경하거나 새로 설정하기 위해서는 Set New or Existing Parameter 노드를 사용합니다.
이 노드는 나이아가라 스크립팅에서 가장 중요하고 자주 사용되는 노드 중 하나입니다.
속성 쓰기 기본 사용법
노드 추가: 스크립트 에디터의 빈 공간에 마우스 우클릭하고 Set New or Existing Parameter를 검색하여 추가합니다.
매개변수 지정: Set New or Existing Parameter 노드를 선택하면 디테일(Details) 패널에 Parameter 속성이 나타납니다.
여기서 변경하고자 하는 파티클 속성(예: Particles.Position, Particles.Color)을 선택합니다.
- 또는, 노드의 입력 핀을 드래그하여 원하는 파티클 속성(예:
Particles.Color)에 직접 연결하면 자동으로Set New or Existing Parameter노드가 생성됩니다.
값 연결: 노드의 입력 핀(예: Color 핀)에 변경하고자 하는 새로운 값을 계산한 다른 노드의 출력 핀을 연결합니다.
실행 흐름 연결: Set New or Existing Parameter 노드는 일반적으로 이전 노드의 Do (실행) 핀에서 연결을 받아 실행되고, 다음 노드의 Do 핀으로 실행을 넘깁니다.
이는 파티클 업데이트 모듈의 순차적인 실행 흐름을 나타냅니다.
활용 예시
Set Particles.Position: 파티클의 위치를 강제로 설정하거나 변경합니다.- 활용: 특정 지점으로 파티클을 순간 이동시키거나, 외부 데이터(예: 메시 표면)에서 계산된 위치로 파티클을 배치할 때.
Set Particles.Velocity: 파티클의 속도를 강제로 설정하거나 변경합니다.- 활용: 파티클에 새로운 방향과 크기의 속도를 즉시 부여할 때.
Set Particles.Color: 파티클의 색상을 변경합니다.- 활용: 조건에 따라 색상을 변경하거나, 외부 입력에 따라 색상을 조절할 때.
Set Particles.Lifetime: 파티클의 남은 수명을 변경합니다.- 활용: 파티클이 특정 이벤트(예: 충돌)를 겪었을 때 즉시 사라지게 하거나, 수명을 연장할 때.
속성을 다룰 때는 읽기 전용 값, 계산 중간값, 실제로 다시 써야 하는 값을 구분해 두면 실수를 줄일 수 있습니다.
모든 값을 다시 쓸 필요는 없습니다. 읽기 전용, 임시 계산, 저장 대상 속성을 나누면 그래프가 단순해집니다.
- 상태 확인
Read 현재 상태를 계산 입력으로만 씁니다. 예시 Position.Z 속성 읽기와 쓰기 한계 Set 금지
- 중간값
Compute 감속률, 보간값, 조건 결과를 만듭니다. 예시 Velocity * .98 위치 Local 변수
- 결과 반영
Write 화면과 시뮬레이션에 남길 값만 씁니다. 예시 Set Color 검사 Spawn/Update
- Spawn에서 쓰기
수명, 초기 색, 초기 크기처럼 탄생 시 한 번만 정해지는 값에 적합합니다.
- Update에서 쓰기
속도 감쇠, 위치 보정, 수명 기반 알파처럼 매 프레임 변해야 하는 값에 적합합니다.
파티클 속성은 읽는 시점과 쓰는 시점이 어긋나면 결과가 달라지므로, 초기화와 업데이트 경계를 함께 확인합니다.
Particles.Position 같은 속성은 읽는 스테이지와 쓰는 스테이지가 맞아야 의도한 움직임으로 이어집니다.
- 속성 읽기
Read Age, NormalizedAge, Velocity를 가져와 현재 상태를 계산의 입력으로 씁니다.
- 속성 쓰기
Write Color, SpriteSize, Position처럼 최종 화면 결과에 닿는 값을 명확히 갱신합니다.
- 파생값 만들기
Derive Velocity 길이로 발광 강도나 크기 보간값을 만들 수 있습니다.
- 스테이지 순서
Stage 같은 속성을 여러 모듈이 쓰면 마지막으로 실행된 모듈이 결과를 결정합니다.
- 이름
Particles와 User 네임스페이스를 섞지 않고 역할이 드러나게 둡니다.
- 시점
스폰 때 한 번 필요한 값과 매 프레임 필요한 값을 분리합니다.
- 덮어쓰기
뒤쪽 모듈이 앞쪽 계산을 지우지 않는지 Stack 순서를 확인합니다.
속성 읽기 및 쓰기 조합 예시
Niagara 속성 변경이 화면에 보이려면 읽는 이름, 계산 위치, 쓰는 속성, 렌더러 바인딩이 한 줄로 이어져야 한다.
| 단계 | 하는 일 | 확인 값 | 끊기면 보이는 증상 |
|---|---|---|---|
| Spawn Attr | 생성 시 초기 속성 설정 | Position, Color, Velocity | 처음부터 위치나 색이 어긋남 |
| Read | 현재 프레임 속성 읽기 | Particle.* 이름과 namespace | 기본값만 읽어 계산이 변하지 않음 |
| Compute | 시간, 거리, 속도로 새 값 계산 | DeltaTime, Age, Curve | 감속·색 변화가 과하거나 없음 |
| Write | 계산 결과를 속성에 저장 | Color, Size, Velocity 등 | 아래 모듈이 다시 덮어씀 |
| Renderer | 최종 속성을 화면 출력으로 전달 | Binding과 Material 입력 | 계산은 됐지만 화면이 안 바뀜 |
가장 일반적인 예시는 파티클의 현재 속도를 읽어와서 특정 계산을 수행한 후, 다시 그 속성을 쓰는 것입니다.
예시: 파티클의 속도에 감속을 적용하기 (저항)파티클이 움직이다가 점차 느려지도록 만들려면, 현재 속도를 읽어와서 일정한 비율로 줄인 다음 다시 속성에 써야 합니다.
Get Particles.Velocity: 파티클의 현재 속도를 가져옵니다.
Multiply (Vector * Float): Get Particles.Velocity의 출력에 0.98과 같은 Float 값을 곱합니다. (매 프레임마다 속도를 2%씩 줄임)
Set New or Existing Parameter: Parameter를 Particles.Velocity로 설정하고, Multiply 노드의 결과를 이 노드의 Velocity 입력에 연결합니다.
이러한 방식으로 파티클의 속도에 공기 저항과 같은 감속 효과를 구현할 수 있습니다.
아래 다이어그램은 속성을 읽고 계산한 뒤 다시 쓰는 루프에서 어떤 값은 초기화에 두고, 어떤 값은 업데이트에 두어야 하는지 구분합니다.
Get과 Set 노드는 어디에 놓느냐가 중요합니다. 생성 시점의 기본값은 Spawn에, 살아 있는 동안 계속 변하는 값은 Update에 배치합니다.
- Particle Spawn탄생 순간의 기준값
Particle Spawn Lifetime 파티클마다 처음 정해지는 총 수명입니다. SpriteSize 시작 크기를 정하고 이후 커브로 변형합니다. Initial Velocity 발사 방향과 속도 범위를 먼저 부여합니다.
- Particle Update현재값을 읽고 다시 쓰는 변화
Particle Update Velocity * 0.98 매 프레임 현재 속도를 읽어 감속을 누적합니다. Color from Age NormalizedAge를 읽어 색과 투명도를 갱신합니다. Position Offset 외부 데이터나 힘 계산 결과로 위치를 보정합니다.
속성 초기화 vs. 업데이트
나이아가라에서 속성을 다룰 때 중요한 개념은 초기화(Initialization) 와 업데이트(Update) 의 차이입니다.
Initialize Particle모듈: 파티클이 생성되는 순간, 즉 탄생 시점에 파티클의 초기 속성 값(위치, 속도, 색상, 수명 등)을 한 번만 설정합니다. 이 모듈은Particle Spawn섹션에 위치하며, 여기서 설정된 값들은 파티클의 기본값이 됩니다.Particle Update섹션의 모듈들: 파티클이 살아있는 동안 매 프레임마다 속성을 읽고 변경합니다. 이 섹션의 모든 모듈은Get노드로 현재 속성을 읽어와서,Set노드로 변경된 속성을 다시 쓰는 과정을 반복합니다.
따라서 Initialize Particle에서 설정된 초기 값은 Particle Update 섹션의 모듈들에 의해 계속해서 변경될 수 있습니다.
파티클 속성을 읽고 쓰는 능력은 나이아가라 스크립팅의 가장 기본적인 토대입니다.
이 개념을 완벽히 이해하고 능숙하게 다룰 수 있다면, 속성 흐름을 이해하면 위치, 속도, 색상, 크기 변화를 더 안정적으로 제어할 수 있습니다.
아래 다이어그램은 파티클 속성을 읽고, 계산하고, 다시 쓸 때 Spawn과 Update 중 어디에 배치해야 하는지 정리한 속성 변경 루프입니다.
Get, Calculate, Set 흐름은 같아도 Spawn에 놓으면 초기값, Update에 놓으면 매 프레임 변화가 된다. 실행 위치를 먼저 정해야 속성 덮어쓰기와 누적 오류를 줄일 수 있다.
- 1Get
현재 Position, Velocity, Color 값을 읽는다.
- 2Calculate
수학, 조건, 커브로 새 값을 만든다.
- 3Set
대상 속성에 결과를 다시 기록한다.
- 4Verify
렌더러가 바뀐 값을 읽는지 확인한다.
| 위치 | 맞는 속성 | 위험 신호 | 검증 기준 |
|---|---|---|---|
| Spawn | 초기 위치, 초기 속도, 시작 색 | 생성 순간부터 값이 어긋남 | 한 번만 적용되는지 확인 |
| Update | 감속, 색 변화, 수명 변화 | 누적되어 과하게 커짐 | 프레임마다 안정적인지 확인 |
| Renderer | Sprite Size, Color, Material 값 | 계산은 맞아도 화면이 다름 | 렌더러 바인딩 확인 |