파티클 업데이트 모듈 소개
매 프레임 속도·중력·색상·크기·노이즈 힘을 갱신하고 Solve Forces와 모듈 순서가 움직임에 주는 영향을 이해합니다.
스폰(Spawn) 모듈로 파티클을 생성했다면, 이제 생성된 파티클이 어떻게 변하는지 다뤄야 합니다.
이 역할을 담당하는 것이 파티클 업데이트(Particle Update) 모듈입니다.
이미터의 Particle Update 섹션에서 매 프레임 속성을 갱신해, 시간에 따라 변화하는 동적 효과를 만듭니다.
파티클 업데이트 모듈은 생성된 파티클의 색상, 크기, 위치, 속도 변화를 매 프레임 계산하는 구간입니다.
마치 그림을 그릴 때 스케치(스폰 모듈) 위에 색을 입히고 명암을 조절하며 생동감을 더하는 과정과 같다고 생각하시면 됩니다.
힘과 속도는 Solve Forces를 거쳐 위치로 합쳐지고, 색과 크기는 수명 비율을 따라 Renderer 입력으로 전달된다.
- Velocity
기존 속도에 방향과 속력을 더한다.
- Gravity / Drag
속과 감쇠를 힘으로 누적한다.
- Solve Forces
힘과 속도를 최종 Position으로 적분한다.
- Normalized Age
현재 나이를 0~1 수명 비율로 읽는다.
- Scale Color / Size
곡선으로 색·Alpha·크기를 바꾼다.
- Renderer
갱신된 속성을 같은 프레임의 화면에 그린다.
파티클 업데이트 모듈의 역할
스폰 모듈이 파티클의 탄생을 정의한다면, 파티클 업데이트 모듈은 파티클의 삶을 정의합니다.
파티클이 존재하는 매 순간, 이 모듈들은 파티클의 위치, 속도, 색상, 크기, 회전 등 다양한 속성들을 지속적으로 계산하고 변경합니다.
덕분에 파티클은 단순히 생성되었다 사라지는 것이 아니라, 역동적으로 움직이고 변화하는 모습을 보여줄 수 있습니다.
파티클 업데이트 섹션에 추가된 모듈들은 위에서 아래로 순서대로 실행됩니다.
이 순서는 매우 중요합니다.
예를 들어, Add Velocity 모듈로 파티클에 속도를 더한 후에 Solve Forces and Velocity 모듈로 최종 위치를 계산해야 합니다.
만약 순서가 뒤바뀌면 예상치 못한 결과가 나올 수 있습니다.
주요 파티클 업데이트 모듈의 종류
나이아가라에서 자주 사용되는 파티클 업데이트 모듈들을 살펴보겠습니다.
Add Velocity
파티클에 지속적으로 속도(Velocity)를 추가합니다.
이를 통해 파티클이 특정 방향으로 이동하게 만들 수 있습니다.
-
주요 속성
Velocity: 3차원 벡터(X, Y, Z) 값으로, 파티클이 추가될 속도의 방향과 크기를 정의합니다.
-
사용 예시
- 분수 효과: 위쪽(Z축 양의 방향)으로 속도를 주면 물줄기가 솟아오르는 효과.
- 빗방울: 아래쪽(Z축 음의 방향)으로 속도를 주면 빗방울이 떨어지는 효과.
Gravity Force
파티클에 중력과 같은 지속적인 힘을 적용합니다.
이는 파티클의 속도를 시간이 지남에 따라 변화시킵니다.
-
주요 속성
Gravity: 3차원 벡터(X, Y, Z) 값으로, 중력의 방향과 강도를 정의합니다. 일반적으로 지구의 중력을 모방하기 위해 Z축 음의 방향에 값을 부여합니다.
-
사용 예시
- 떨어지는 파편: 폭발 후 파편이 중력에 의해 땅으로 떨어지는 효과.
- 연기/증기: 뜨거운 공기에 의해 위로 올라갔다가 중력에 의해 다시 내려오는 연기 효과.
Scale Color
파티클의 수명에 비례하여 색상을 변화시킵니다.
이는 시간에 따른 파티클의 노화나 소멸을 시각적으로 표현하는 데 매우 효과적입니다.
-
주요 속성
Scale Factor: 일반적으로Color From Curve를 사용하여 파티클의 수명(0.0~1.0)에 따라 변화할 색상 커브를 정의합니다.
-
사용 예시
- 불꽃: 처음에는 노란색이었다가 점점 붉은색, 주황색으로 변하고 마지막에 검은색으로 사라지는 불꽃 효과.
- 소멸하는 마법 효과: 화려한 색상으로 시작했다가 점점 투명해지며 사라지는 효과.
Scale Sprite Size
파티클의 수명에 비례하여 스프라이트의 크기를 변화시킵니다.
-
주요 속성
Scale Factor:Vector2 From Curve를 사용하여 수명에 따른 크기 변화 커브를 정의합니다.
-
사용 예시
- 연기: 피어오르면서 점점 커지다가 사라질 때 작아지는 연기 덩어리.
- 물방울: 터지기 직전에 커졌다가 사라지는 물방울.
Curl Noise Force
파티클에 불규칙하고 유기적인 움직임을 부여하여 연기, 구름, 유체와 같은 자연스러운 흐름을 시뮬레이션합니다.
마치 예측할 수 없는 바람이 파티클을 흔드는 것과 같습니다.
-
주요 속성
Noise Scale: 노이즈 패턴의 크기를 조절합니다.Strength: 노이즈 힘의 강도를 조절합니다.
-
사용 예시
- 연기/안개: 자연스럽게 휘몰아치는 연기나 안개.
- 유체 효과: 물이나 용암의 흐름을 표현.
Solve Forces and Velocity
이 모듈은 반드시 파티클 업데이트 섹션의 마지막에 배치해야 합니다.
앞에서 적용된 Force, Add Velocity 결과를 모두 통합해 파티클의 최종 위치를 계산하기 때문입니다.
위치 적분 단계가 빠지면 속도/힘이 정상 반영되지 않아 파티클이 멈추거나 비정상 동작할 수 있습니다.
Particle Update는 매 프레임 같은 입자 값을 다시 쓴다. 색, 크기, 힘, 속도, 위치 작성자를 순서대로 추적한다.
| 순서 | 작성되는 값 | 아래 모듈이 읽는 것 | 문제 추적 |
|---|---|---|---|
| 01 시작값 생성 시점 값 | 초기 수명, 속도, 색상, 크기를 현재 프레임의 기준으로 가져온다. | 색상 곡선과 힘 계산의 입력값이 된다. | 프레임 시작 시점의 속성 표를 본다. |
| 02 시각값 색상과 크기 | 정규화된 나이로 탄생, 유지, 소멸 구간을 다시 쓴다. | 렌더러가 읽을 최종 색과 크기의 후보가 된다. | 색이 덮이면 아래쪽 마지막 작성자를 찾는다. |
| 03 운동값 속도와 힘 | 방향 속도, 중력, 소용돌이 힘을 누적한다. | 운동 통합이 이번 프레임 이동 원인으로 읽는다. | 속도는 변하는데 위치가 멈추면 통합 누락을 의심한다. |
| 04 위치 운동 통합 | 속도와 힘을 시간 간격으로 적분해 위치를 갱신한다. | 충돌과 렌더러가 이 위치를 기준으로 동작한다. | 통합 모듈이 힘 생산자보다 아래 있는지 본다. |
| 05 표시 충돌과 렌더 | 갱신된 위치, 색상, 크기를 화면 표시와 충돌 판정에 넘긴다. | 프레임의 최종 화면 결과가 된다. | 위치, 속도, 색상, 크기를 줄 단위로 비교한다. |
파티클 업데이트 모듈 추가 및 설정 팁
같은 속성을 여러 모듈이 바꾸면 아래쪽 모듈의 결과가 최종값이 되므로 실행 순서가 곧 데이터 흐름이다.
| 순서 | 주로 하는 일 | 읽는 값 | 확인 포인트 |
|---|---|---|---|
| 01 입력값 | Spawn에서 만든 초기 속성 수신 | Position, Velocity, Color, Age | 기준값이 정상인지 먼저 확인 |
| 02 힘·속도 | 이동 방향과 가속 계산 | DeltaTime, Force, Velocity | 과한 힘이 누적되는지 확인 |
| 03 색·크기 | 수명에 따른 시각 변화 | NormalizedAge, Curve | 나이가 0~1 범위를 벗어나지 않는지 확인 |
| 04 충돌·Kill | 조건에 맞는 파티클 제거 | Collision, Lifetime, Distance | 너무 빨리 사라지는 조건 확인 |
| 05 Renderer 입력 | 최종 속성을 화면 표현으로 전달 | 최종 Position, Color, Size | 렌더러가 읽는 이름이 맞는지 확인 |
- 순서의 중요성: 앞서 강조했듯이, 파티클 업데이트 섹션의 모듈 순서는 매우 중요합니다. 논리적인 흐름에 따라 모듈을 배치해야 합니다. (예:
Add Velocity다음에Gravity Force, 그리고 마지막에Solve Forces and Velocity). - 그래프 에디터 활용:
Scale Color나Scale Sprite Size와 같이 시간에 따라 속성이 변화하는 모듈들은 그래프 에디터(Curve Editor)를 활용하는 것이 일반적입니다. 속성 값 옆의 작은 화살표를 클릭하여Curve또는Float From Curve등을 선택하면 그래프 에디터가 활성화됩니다. - 오버라이드(Override) 기능: 일부 모듈의 속성은 기본적으로 상위 모듈이나 시스템 속성을 따르지만, 필요에 따라 개별 모듈에서 해당 속성을 재정의할 수 있습니다.
- 미리 보기와 디버깅: 파티클 업데이트 모듈을 조정할 때는 뷰포트에서 실시간으로 변화를 확인하는 것이 중요합니다. 나이아가라 디버거를 사용하여 파티클의 특정 속성 변화를 자세히 살펴보는 것도 도움이 됩니다.
업데이트 모듈을 추가할 때는 어떤 속성을 읽고 쓰는지, 그리고 그 값이 최종적으로 렌더러에 도달하는지 함께 점검해야 합니다.
모듈 이름보다 중요한 것은 어떤 파티클 속성을 변경하는지입니다. 값이 어디서 만들어지고, 어떤 모듈이 덮어쓰며, 렌더러가 무엇을 읽는지 순서대로 확인합니다.
- 1읽기
Motion 읽기 Velocity, Force, Delta Time 쓰기 Position과 Velocity 대표 모듈 Solve Forces and Velocity
- 2읽기
Visual 읽기 NormalizedAge, Curve 쓰기 Color, Sprite Size 대표 모듈 Scale Color, Scale Size
- 3읽기
Force 읽기 위치, 노이즈, 방향 벡터 쓰기 Force 또는 Velocity 대표 모듈 Gravity, Curl Noise
- 4움직이지 않음
Velocity가 변하는데 Position이 그대로라면 Solve 배치와 비활성 상태를 먼저 확인합니다.
- 5색이 안 바뀜
Scale Color 뒤에서 다른 모듈이 Color를 다시 쓰는지, 머티리얼이 Particle Color를 읽는지 봅니다.
- 6흔들림이 과함
Curl Noise의 Strength와 Scale을 낮추고, Lifetime 동안 변화가 너무 잦은지 비교합니다.
파티클 업데이트 모듈은 생성된 파티클의 위치, 속도, 색, 크기를 시간에 따라 바꾸는 단계입니다.
모듈 조합과 속성 조정 결과를 프리뷰에서 바로 확인하며 범위를 좁히는 것이 좋습니다.
업데이트 모듈은 실행 순서와 읽고 쓰는 속성을 함께 점검해야 의도한 움직임이 안정적으로 나옵니다.
위에서 아래로 실행되므로 힘을 누적한 뒤 Solve가 위치를 계산하고, 렌더러가 읽을 속성이 마지막에 남아야 한다.
- 1먼저 볼 것
모듈 순서 가 데이터 흐름과 맞는지 확인한다.
- 2디버깅 기준
움직임이 없으면 값이 없는지보다 Solve 위치와 속성 덮어쓰기를 먼저 본다.
- 3나쁜 신호
Solve 이후 에 Velocity를 다시 바꾸면 화면의 이동과 계산 의도가 어긋난다.
| 순서 | 모듈 | 읽는 값 | 쓰는 값 | 점검 포인트 |
|---|---|---|---|---|
| 01 | Add Velocity / Force | 현재 Position, Velocity | Velocity 누적 | 방향과 세기가 의도한 축으로 들어가는지 본다. |
| 02 | Gravity Force / Curl Noise | 힘, 시간, 노이즈 입력 | Force 누적 | 자연스러운 흔들림인지, 불필요한 가속인지 구분한다. |
| 03 | Scale Color / Size | NormalizedAge | Color, Sprite Size | 커브가 수명 구간 전체를 덮는지 확인한다. |
| 04 | Solve Forces and Velocity | 누적 Force, Velocity | 최종 Position | 힘/속도 계열 뒤에 있어야 실제 이동으로 반영된다. |
업데이트 모듈은 프레임마다 결과를 누적하므로, 변화 원인을 추적하는 기준을 따로 두면 디버깅이 쉬워집니다.
파티클이 살아 있는 동안 속도, 색, 크기, 힘이 계속 갱신된다. 같은 모듈도 순서가 바뀌면 읽는 값과 쓰는 값이 달라진다.
| 모듈 | 쓰는 값 | 순서 이유 | 검증 기준 |
|---|---|---|---|
| Add Velocity 속도 방향 추가 | 파티클에 일정 방향의 움직임을 더한다. | 초기 속도와 이후 힘 계산의 출발점이 된다. | Particles.Velocity가 어디서 덮이는지 확인한다. |
| Gravity Force 아래 방향 힘 | 낙하, 처짐, 무게감을 만드는 힘을 누적한다. | Drag나 초기 속도와 함께 Solve 전에 위치해야 한다. | 힘을 추가한 뒤 Solve가 실행되는지 본다. |
| Scale Color/Size 수명 변화 | NormalizedAge 기준으로 색과 크기를 바꾼다. | 소멸 표현은 렌더러가 읽기 전 마지막 작성자가 중요하다. | Color와 Size의 최종 작성자를 따로 본다. |
| Solve Forces 힘 반영 | 앞에서 쌓은 힘을 속도와 위치로 계산한다. | 누락되면 힘을 만들었어도 실제 이동이 적용되지 않는다. | 작은 수치도 프레임 누적으로 커지는지 확인한다. |