정적 메시와의 기본 콜리전
나이아가라 파티클 시스템에서 파티클이 단순히 공간을 유영하는 것을 넘어, 게임 월드 내의 환경 오브젝트와 상호작용하게 만들려면 콜리전(Collision) 기능을 활용해야 합니다. 콜리전은 파티클이 주변 지오메트리(예: 벽, 바닥, 기타 스태틱 메시)에 부딪혔을 때 물리적으로 반응하도록 하는 핵심적인 요소입니다.
이 절에서는 나이아가라 파티클이 정적 메시(Static Mesh), 즉 움직이지 않는 고정된 오브젝트와 어떻게 충돌하고 반응하는지 기본적인 개념과 설정 방법에 대해 알아보겠습니다.
콜리전이란 무엇인가요?
콜리전은 물리 시뮬레이션의 한 부분으로, 두 오브젝트가 서로 접촉했을 때 이를 감지하고 그에 따른 물리적 반응(예: 튕겨나가기, 멈추기, 속도 감소)을 처리하는 과정을 의미합니다. 나이아가라에서 파티클 콜리전은 파티클이 월드 내의 다른 오브젝트와 사실적으로 상호작용하게 하여, 시각 효과의 현실감을 크게 높여줍니다.
예를 들어, 총알이 벽에 부딪혀 튕겨나가거나, 물방울이 바닥에 떨어져 사라지거나, 파편이 지면에 닿아 멈추는 등의 효과는 모두 콜리전 기능을 통해 구현됩니다.
콜리전 모듈 추가 및 기본 설정
나이아가라에서 파티클 콜리전을 활성화하는 가장 기본적인 방법은 Collision
모듈을 사용하는 것입니다.
Collision
모듈 추가
- 나이아가라 에디터에서 이미터의
Particle Update
섹션으로 이동합니다. +
버튼을 클릭하고Collision
모듈을 검색하여 추가합니다.
주요 속성 설정: Collision
모듈을 선택하면 디테일(Details) 패널에 다음과 같은 주요 속성들이 나타납니다.
Collision Mode
: 충돌 감지 방식을 결정합니다.Distance Field
(거리 필드): 복잡한 메시의 형태를 근사하여 효율적으로 충돌을 감지합니다. 디테일이 높고 정확하지만, 메시가 커지면 계산 비용이 증가할 수 있습니다. 대부분의 경우 좋은 선택입니다.Trace
(트레이스): 파티클의 움직임 경로를 따라 광선(Ray)을 발사하여 충돌을 감지합니다. 정확하지만 많은 파티클이 동시에 충돌할 때 비용이 높아질 수 있습니다.Static Mesh
: 특정 스태틱 메시와의 충돌만 감지합니다. 특정 오브젝트에만 충돌이 필요할 때 사용합니다. (매우 특수한 경우)Landscape
: 랜드스케이프 지형과의 충돌을 최적화합니다.
Restitution
(반발 계수): 충돌 시 파티클이 얼마나 튕겨 나갈지를 결정합니다.0.0
은 전혀 튕기지 않고 멈춥니다. (예: 진흙에 박히는 총알)1.0
은 충돌 전 속도로 완벽하게 튕겨 나갑니다. (예: 완벽한 탄성 충돌)0.0
과1.0
사이의 값은 부분적으로 튕겨 나갑니다.
Friction
(마찰 계수): 충돌 후 파티클이 표면을 따라 미끄러질 때 속도가 얼마나 감소할지를 결정합니다.0.0
은 마찰이 없어 계속 미끄러집니다.1.0
은 즉시 멈춥니다.
Max Collisions
: 한 파티클이 수명 동안 최대로 충돌할 수 있는 횟수를 제한합니다. (성능 최적화에 도움)Radius
: 파티클의 충돌 반경을 조절합니다. 스프라이트 파티클의 경우Sprite Size
와 연동될 수 있습니다. 3D 메시 파티클의 경우 메시의 바운딩 박스에 비례합니다.Kill On Collision
: 충돌 시 파티클을 즉시 소멸시킬지 여부를 결정합니다. (예: 물방울이 바닥에 닿으면 사라짐)
Distance Field
기반 콜리전 (권장)
Distance Field
콜리전 모드는 대부분의 상황에서 가장 좋은 성능과 정확도를 제공합니다. 이 모드를 사용하기 위해서는 프로젝트의 특정 설정이 활성화되어 있어야 합니다.
- 프로젝트 설정 확인
Edit
>Project Settings
를 엽니다.Engine
섹션 아래의Rendering
>Lighting
카테고리로 이동합니다.Generate Mesh Distance Fields
옵션이 활성화되어 있는지 확인합니다. 이 옵션은 스태틱 메시의 거리 필드 데이터를 미리 생성하여 콜리전 및 GI 계산에 사용될 수 있도록 합니다. (활성화 후 엔진 재시작 필요) - 활용:
Collision
모듈의Collision Mode
를Distance Field
로 설정하고 사용합니다.
직접 해보기: 바닥에 튕기는 파티클 만들기
간단한 파티클이 바닥에 떨어져 튕기는 효과를 구현해 보겠습니다.
새 나이아가라 시스템 생성: New system from selected emitters
(기본 스폰, 중력 포함) 템플릿을 사용하여 NS_BouncingParticles
라는 이름의 시스템을 만듭니다.
Initialize Particle
설정
Lifetime
을2.0
정도로 설정합니다.Sprite Size
를10.0
정도로 작게 설정합니다.Color
는 밝은 색으로 설정합니다.
Add Velocity
설정
Velocity
Z 값을300.0
정도로 설정하여 위로 솟아오르게 합니다.X
와Y
에Random Range Float
를 사용하여-50.0
~50.0
정도로 무작위 수평 속도를 추가하여 파티클이 사방으로 퍼지도록 합니다.
Add Gravity Force
확인: Particle Update
섹션에 Add Gravity Force
모듈이 있는지 확인합니다. 없다면 추가합니다.
Collision
모듈 추가
Particle Update
섹션에서+
버튼을 클릭하고Collision
모듈을 추가합니다.Collision
모듈을 선택합니다.
Collision
속성 설정
Collision Mode
:Distance Field
(만약Generate Mesh Distance Fields
가 비활성화되어 있다면Trace
로 테스트해도 됩니다.)Restitution
:0.7
정도로 설정하여 적당히 튕기도록 합니다.Friction
:0.5
정도로 설정하여 바닥에서 약간 미끄러지다 멈추도록 합니다.Radius
:10.0
정도로 설정하여 스프라이트 크기와 유사하게 만듭니다.Kill On Collision
: 비활성화합니다. (튕기는 효과를 봐야 하므로)
레벨에 배치: 나이아가라 시스템을 게임 레벨의 바닥 위 적당한 높이에 배치하고, 시뮬레이션을 재생합니다.
이제 파티클이 위로 솟아올랐다가 중력에 의해 떨어져 바닥에 닿으면 튕겨나오고, 점차 속도를 잃고 멈추는 것을 확인할 수 있을 겁니다.
충돌 이벤트와 콜리전 응답
파티클이 충돌했을 때 단순히 튕겨 나가는 것 외에, 특정 이벤트(예: 사운드 재생, 스파크 생성)를 발생시키고 싶다면 Collision
모듈의 Collision Event
기능을 활용할 수 있습니다.
Generate Collision Event
:Collision
모듈의Collision Event
섹션에서Generate Collision Event
를 활성화하면, 파티클이 충돌할 때마다 이벤트를 발생시킵니다.Event Handler
: 이벤트를 받아서 처리하는Event Handler
모듈을 이미터에 추가하여, 충돌 이벤트가 발생했을 때 다른 파티클을 스폰하거나, 사운드를 재생하거나, 블루프린트 로직을 트리거할 수 있습니다.- 예시: 충돌 지점에서 작은 스파크 파티클을 스폰하거나, 충돌 사운드를 재생하는
Event Handler
를 만들 수 있습니다.
- 예시: 충돌 지점에서 작은 스파크 파티클을 스폰하거나, 충돌 사운드를 재생하는
성능 고려 사항
- 파티클 수: 콜리전은 파티클 수에 비례하여 성능 비용이 증가합니다. 많은 파티클이 동시에 콜리전을 수행해야 한다면 주의해야 합니다.
Collision Mode
선택:Distance Field
가 대부분 효율적이지만, 특정 시나리오에서는Trace
가 더 적합할 수도 있습니다. 항상 테스트를 통해 최적의 모드를 찾아야 합니다.Max Collisions
제한: 파티클이 무한정 튕기면서 계산을 유발하는 것을 방지하기 위해Max Collisions
값을 제한하는 것이 좋습니다.Kill On Collision
활용: 충돌 후 바로 사라지는 파티클은 불필요한 추가 계산을 줄여 성능에 도움이 됩니다.
정적 메시와의 콜리전은 나이아가라 파티클 효과에 물리적인 상호작용을 부여하여 현실감을 높이는 중요한 기능입니다. 이를 통해 여러분은 단순히 공중에 떠다니는 효과가 아닌, 게임 월드와 능동적으로 반응하는 동적인 시각 효과를 만들 수 있을 것입니다.