icon
7장 : 간단한 콜리전과 물리

기본 물리 기반 파티클 시뮬레이션


나이아가라 파티클에 단순히 미리 정해진 움직임을 부여하는 것을 넘어, 현실 세계의 물리 법칙을 따르도록 시뮬레이션할 수 있습니다. 물리 기반 파티클 시뮬레이션(Physics-Based Particle Simulation) 은 파티클에 질량(Mass), 공기 저항(Drag), 중력(Gravity), 힘(Force) 등을 적용하여 더욱 사실적이고 동적인 효과를 구현하는 데 필수적인 요소입니다. 이는 폭발의 잔해, 물방울의 낙하, 먼지 입자의 흐름 등 실제 물리적인 현상을 모방하는 데 특히 유용합니다.

이 절에서는 나이아가라에서 파티클에 물리적 속성을 부여하고, 다양한 힘을 적용하여 현실적인 시뮬레이션을 구현하는 기본적인 방법에 대해 알아보겠습니다.


물리 시뮬레이션의 핵심

나이아가라에서 파티클에 힘을 가하고, 그 힘에 따라 속도와 위치를 업데이트하는 모든 물리 시뮬레이션의 중심에는 Solve Forces and Velocity 모듈이 있습니다. 이 모듈은 Particle Update 섹션의 거의 모든 물리 관련 모듈들의 기반이 됩니다.

  • 역할: Solve Forces and Velocity는 이전 프레임의 파티클 속도에 현재 프레임에 적용되는 모든 힘(중력, 저항, 사용자 정의 힘 등)을 통합하고, Delta Time을 곱하여 파티클의 새로운 속도와 위치를 계산합니다.
  • 배치: 이 모듈은 모든 힘 관련 모듈(Add Force, Add Velocity, Drag 등) 이후, 그리고 파티클의 최종 위치를 결정하는 다른 위치 관련 모듈(Update Age, Location) 이전에 배치되어야 합니다. 대부분의 기본 템플릿에는 이미 이 모듈이 포함되어 있습니다.

파티클에 힘 적용하기: Add Force

가장 직접적으로 파티클에 물리적인 힘을 가하는 모듈은 Add Force 입니다. 이 모듈은 파티클의 질량과 시간에 비례하여 속도를 변화시킵니다.

  • 주요 속성
    • Force: 파티클에 가할 힘의 방향과 크기를 Vector3 값으로 정의합니다. (단위: cm/s^2)
    • Acceleration: Force를 질량으로 나눈 값에 해당합니다. 직접 가속도를 지정할 수도 있습니다.
  • 활용
    • 특정 방향으로 꾸준히 힘을 가하여 파티클을 밀어낼 때.
    • 자석처럼 특정 지점으로 파티클을 끌어당길 때 (음의 힘 적용).

기본적인 물리 효과 모듈

나이아가라는 자주 사용되는 물리 효과를 위한 전용 모듈을 제공하여 쉽게 적용할 수 있도록 합니다.

Add Gravity Force (중력)

파티클에 중력을 적용하여 자연스럽게 아래로 떨어지도록 만듭니다.

  • 주요 속성
    • Gravity: 중력의 방향과 크기를 Vector3 값으로 정의합니다. 기본적으로 -Z 방향으로 설정되어 있습니다. 언리얼 엔진의 기본 중력 가속도는 (0, 0, -980) cm/s^2 입니다.
  • 활용: 낙엽, 비, 연기, 파편 등 중력의 영향을 받는 모든 효과에 사용됩니다.

Drag (공기 저항)

파티클의 속도에 비례하여 반대 방향으로 힘을 가해 파티클의 속도를 점진적으로 감소시킵니다.

  • 주요 속성
    • Drag: 공기 저항의 강도를 Float 값으로 정의합니다. 값이 높을수록 빠르게 감속합니다.
  • 활용: 연기, 먼지, 가벼운 파편 등 공기 저항으로 인해 속도가 줄어들거나 멈추는 효과에 현실감을 더합니다.

Mass (질량)

파티클에 질량을 부여하여, 동일한 힘이 가해질 때 질량이 큰 파티클은 적게 움직이고 질량이 작은 파티클은 크게 움직이도록 합니다.

  • 모듈 추가: Particle Spawn 섹션의 Initialize Particle 모듈에서 Mass 속성을 설정하거나, Particle Update 섹션에 Set New or Existing Parameter 노드를 사용하여 Particles.Mass 속성을 설정합니다.
  • 활용: 다양한 크기와 무게를 가진 파편들이 다른 방식으로 떨어지거나 튕겨 나가도록 시뮬레이션할 때. (예: 작은 돌멩이는 빠르게 날아가고, 큰 파편은 묵직하게 떨어짐)
  • 주의: Add Force 모듈은 Particles.Mass 속성을 기반으로 가속도를 계산하므로, Mass 속성을 올바르게 설정하는 것이 중요합니다.

물리 기반 파티클 시뮬레이션 파이프라인

일반적인 물리 기반 파티클 시뮬레이션의 모듈 순서는 다음과 같습니다.

Initialize Particle (Spawn 섹션): Lifetime, Position, Velocity, Mass 등 파티클의 초기 물리 속성을 설정합니다.

Add Force, Add Gravity Force 등 힘 모듈들 (Update 섹션): 매 프레임마다 파티클에 적용될 모든 힘을 계산하고 파티클의 Force 속성에 더합니다.

Drag (Update 섹션): 공기 저항과 같은 속도에 비례하는 감속을 적용합니다.

Solve Forces and Velocity (Update 섹션): 이전에 계산된 모든 힘과 현재 속도를 통합하여 새로운 속도와 위치를 최종적으로 계산합니다. 이 모듈은 항상 모든 힘 모듈 뒤에 와야 합니다.

Collision (Update 섹션): 새로운 위치와 속도를 기반으로 월드와의 충돌을 감지하고 반응을 처리합니다. 이 모듈은 Solve Forces and Velocity 뒤에 오는 것이 일반적입니다.

Update Age (Update 섹션): 파티클의 수명을 업데이트합니다.


직접 해보기: 중력과 저항을 받는 폭발 파편

이전에 콜리션을 만들었던 NS_BouncingParticles 시스템을 수정하거나 새로운 시스템을 만들어, 폭발 시 중력과 공기 저항의 영향을 받아 흩어지는 파편을 구현해 보겠습니다.

새 나이아가라 시스템 생성: New system from selected emitters (기본 스폰, 중력 포함) 템플릿을 사용하여 NS_PhysicsBlast라는 이름의 시스템을 만듭니다.

Spawn Rate: 100.0 정도로 설정합니다.

Initialize Particle 설정

  • Lifetime: 2.0 ~ 3.0 (Random)
  • Sprite Size: 5.0 (혹은 Mesh Renderer를 사용할 경우 Mesh Scale(5,5,5) 정도로 작게 설정)
  • Color: 밝은 회색이나 갈색
  • Mass: 1.0 ~ 5.0 (Random Float) (파편마다 질량을 다르게 부여)

초기 속도 설정 (Add Velocity)

  • VelocitySphere 형태로 설정하고 Center: (0,0,0), Radius: 100.0 정도로 설정하여 사방으로 균일하게 퍼지도록 합니다. (폭발 효과)

Particle Update 섹션 확인

  • Add Gravity Force 모듈이 있는지 확인하고, 없다면 추가합니다.
  • Drag 모듈을 추가합니다.
  • Drag 모듈의 Drag 값을 0.5 ~ 2.0 (Random Float) 정도로 설정하여 파편마다 공기 저항이 다르게 적용되도록 합니다. (가벼운 파편은 빠르게 멈추고, 무거운 파편은 더 멀리 날아가도록)
  • Solve Forces and Velocity 모듈이 Add Gravity ForceDrag 모듈 뒤에, 그리고 Collision 모듈이 있다면 그 앞에 오도록 순서를 확인합니다.

Collision 모듈 추가 (선택 사항)

  • 만약 파편이 바닥에 닿았을 때 튕기거나 멈추게 하고 싶다면, 이전 절에서 배운 Collision 모듈을 추가합니다.
  • Restitution0.2 정도로 낮게 설정하고, Friction0.8 정도로 높게 설정하여 바닥에 닿으면 거의 멈추도록 합니다.

이제 나이아가라 시스템을 재생하면, 파티클들이 폭발처럼 사방으로 흩어졌다가 중력과 공기 저항의 영향을 받아 점차 속도를 잃고 바닥에 떨어져 멈추는 것을 확인할 수 있을 겁니다. 질량이 다른 파티클들이 각기 다른 궤적을 그리는 것을 관찰해 보세요.


고급 물리 시뮬레이션 개념

  • 필드(Fields): 나이아가라는 특정 공간 내에서 파티클에 영향을 미치는 Vector FieldNoise Field와 같은 개념을 지원합니다. 이를 통해 바람, 소용돌이, 자기장과 같은 복잡한 힘의 분포를 시뮬레이션할 수 있습니다. (예: Vector Field Force 모듈)
  • 커스텀 힘: Add Force 모듈의 Force 입력을 스크립트 에디터에서 직접 계산하여, 파티클의 속도나 위치에 따라 동적으로 변하는 힘을 적용할 수 있습니다.
  • 스켈레탈 메시 물리: 스켈레탈 메시의 Physics Asset과 연동하여 파티클이 캐릭터의 특정 부위와 물리적으로 상호작용하도록 할 수 있습니다.

물리 기반 파티클 시뮬레이션은 나이아가라 효과에 현실감과 깊이를 더하는 핵심적인 부분입니다. 질량, 중력, 저항과 같은 물리 속성을 부여하고 다양한 힘을 적용함으로써, 여러분은 정적인 움직임을 넘어선 살아있는 듯한 동적인 시각 효과를 창조할 수 있을 것입니다.