정적 메시와의 기본 콜리전
Collision 모듈과 Distance Field를 이용해 파티클이 정적 메시를 감지하고 바닥에서 반사·마찰·소멸하도록 설정합니다.
나이아가라 파티클 시스템에서 파티클이 단순히 공간을 유영하는 것을 넘어, 게임 월드 내의 환경 오브젝트와 상호작용하게 만들려면 콜리전(Collision) 기능을 활용해야 합니다.
콜리전은 파티클이 주변 지오메트리(예: 벽, 바닥, 기타 스태틱 메시)에 부딪혔을 때 물리적으로 반응하도록 하는 핵심적인 요소입니다.
이 절에서는 나이아가라 파티클이 정적 메시(Static Mesh), 즉 움직이지 않는 고정된 오브젝트와 어떻게 충돌하고 반응하는지 기본적인 개념과 설정 방법에 대해 알아보겠습니다.
나이아가라 파티클 시스템에서 파티클이 단순히 공간을 유영하는 것을 넘어, 게임 월드 내의 환경 오브젝트와 상호작용하게 만들려면 콜리전(Collision) 기능을 활용해야 합니다. 콜리전은 파티클이 주변 지오메트리(예: 벽, 바닥, 기타 스태틱 메시)에 닿았을 때 bounce, slide, kill 같은 반응을 계산하는 모듈 설정입니다.
- Distance Field 콜리전 설정 순서
콜리전은 접촉을 감지하고 튕김, 정지, 감속 같은 반응을 계산합니다. 2 나이아가라에서 파티클 콜리전을 활성화하는 대표 방법은 Collision 모듈을 사용하는 것입니다. 3 Distance Field 콜리전 모드는 대부분의 상황에서 성능과 정확도의 균형을 냅니다. 4 충돌 시 사운드나 스파크를 내보내려면 Collision Event를 사용합니다.
- 충돌 대상과 응답 방식 구분
콜리전은 접촉을 감지하고 튕김, 정지, 감속 같은 반응을 계산합니다.
- 콜리전 모듈 프로젝트 반입 및 기본 설정
나이아가라에서 파티클 콜리전을 활성화하는 대표 방법은 Collision 모듈을 사용하는 것입니다.
- Distance Field 기반 콜리전 (권장)
Distance Field 콜리전 모드는 대부분의 상황에서 성능과 정확도의 균형을 냅니다.
- 충돌 이벤트와 콜리전 응답
충돌 시 사운드나 스파크를 내보내려면 Collision Event를 사용합니다.
- 파티클 콜리전 검수 지점
Collision 모듈, 정적 메시 프리셋, Collision Query 방식을 함께 맞춥니다. 메시 콜리전, Collision 모듈, Bounce와 Friction 값을 차례로 맞춥니다. Collision 모듈 프로젝트 반입 나이아가라 에디터에서 이미터의 Particle Update 섹션으로 이동합니다.
콜리전이란 무엇인가요?
콜리전은 물리 시뮬레이션의 한 부분으로, 두 오브젝트가 서로 접촉했을 때 이를 감지하고 그에 따른 물리적 반응(예: 튕겨나가기, 멈추기, 속도 감소)을 처리하는 과정을 의미합니다.
나이아가라에서 파티클 콜리전은 파티클이 월드 내의 다른 오브젝트와 사실적으로 상호작용하게 하여, 시각 효과의 현실감을 크게 높여줍니다.
예를 들어, 총알이 벽에 부딪혀 튕겨나가거나, 물방울이 바닥에 떨어져 사라지거나, 파편이 지면에 닿아 멈추는 등의 효과는 모두 콜리전 기능을 통해 구현됩니다.
콜리전 모듈 추가 및 기본 설정
나이아가라에서 파티클 콜리전을 활성화하는 가장 기본적인 방법은 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: 충돌 시 파티클을 즉시 소멸시킬지 여부를 결정합니다. (예: 물방울이 바닥에 닿으면 사라짐)
콜리전 값을 조정할 때는 감지 방식과 반응 값을 한 번에 바꾸기보다, 표면 데이터 확인, 충돌 반경 보정, 반발/마찰 튜닝, 종료 조건 설정 순서로 좁혀가면 원인을 빠르게 분리할 수 있습니다.
충돌이 안 보이거나 과하게 튈 때 모든 값을 바꾸지 말고 감지 방식부터 종료 조건까지 한 단계씩 확인한다.
| 순서 | 볼 값 | 문제 신호 | 수정 방향 |
|---|---|---|---|
| 01 Mode | Distance Field 또는 Trace | 표면을 통과하거나 전혀 감지 안 됨 | DF 준비 여부 확인, Trace로 재현 비교 |
| 02 Radius | Trace Radius와 Sprite Size | 작은 입자가 표면을 뚫음 | 시각 크기와 충돌 반경 맞춤 |
| 03 Response | Restitution, Friction, Drag | 과하게 튀거나 오래 미끄러짐 | 반발·마찰·감속을 따로 조정 |
| 04 Stop | Max Collisions, Kill On Collision | 계속 계산되어 비용 증가 | 반복 횟수와 종료 조건 제한 |
Distance Field 기반 콜리전 (권장)
정적 메시 표면 근처에서 빠르게 충돌을 처리할 수 있지만, 프로젝트 설정과 메시 DF 품질이 맞아야 한다.
| 판정 | 확인할 것 | 통과 기준 | 대안 |
|---|---|---|---|
| Project | Generate Mesh Distance Fields | 프로젝트에서 DF가 생성됨 | Trace collision으로 비교 |
| Mesh | 대상 Static Mesh의 DF 품질 | 표면이 충분히 촘촘함 | Complex collision 또는 proxy 사용 |
| Scale | 월드 스케일과 반경 | 입자 크기와 충돌 반경이 맞음 | Radius와 bounds 조정 |
| Response | 튕김, 마찰, Kill 조건 | 표면에서 의도대로 멈추거나 반사 | 반응 값을 낮추고 종료 제한 |
| Cost | 거리와 파티클 수 | 필요 구간에서만 충돌 | LOD나 Cull로 멀리 있는 충돌 끔 |
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 설정VelocityZ 값을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를 만들 수 있습니다.
- 예시: 충돌 지점에서 작은 스파크 파티클을 스폰하거나, 충돌 사운드를 재생하는
Niagara 렌더 성능 고려 사항
충돌 표현을 고를 때는 정확도, 비용, 이벤트 필요 여부를 함께 보며 결정합니다.
충돌 모드는 표면 종류, 정확도, 이벤트 필요 여부, 파티클 수를 함께 보고 고릅니다. 반응 값은 표현 의도와 성능 제한을 같이 결정합니다.
- 대부분의 정적 메시
Distance Field 메시 거리 필드가 준비된 환경에서 정확도와 비용의 균형을 맞춥니다.
- 정확한 경로 감지
Trace Trace Channel이 Block인지 확인하고, 대량 파티클에는 사용 범위를 제한합니다.
- 첫 충돌 후 제거
Kill 물방울, 불꽃, 먼지처럼 닿으면 끝나는 효과는 이후 계산을 절약할 수 있습니다.
- 스파크와 사운드
Event 충돌 이벤트는 생성 이미터나 블루프린트 반응과 분리해 비용을 추적합니다.
- 파티클 수: 콜리전은 파티클 수에 비례하여 성능 비용이 증가합니다. 많은 파티클이 동시에 콜리전을 수행해야 한다면 주의해야 합니다.
Collision Mode선택:Distance Field가 대부분 효율적이지만, 특정 시나리오에서는Trace가 더 적합할 수도 있습니다. 항상 테스트를 통해 최적의 모드를 찾아야 합니다.Max Collisions제한: 파티클이 무한정 튕기면서 계산을 유발하는 것을 방지하기 위해Max Collisions값을 제한하는 것이 좋습니다.Kill On Collision활용: 충돌 후 바로 사라지는 파티클은 불필요한 추가 계산을 줄여 성능에 도움이 됩니다.
정적 메시와의 콜리전은 나이아가라 파티클 효과에 물리적인 상호작용을 부여하여 현실감을 높이는 중요한 기능입니다.
이를 통해 여러분은 단순히 공중에 떠다니는 효과가 아닌, 게임 월드와 능동적으로 반응하는 동적인 시각 효과를 만들 수 있을 것입니다.
다음 다이어그램은 나이아가라 콜리전을 설정할 때 충돌 대상, 처리 방식, 반응, 성능 검수를 함께 보는 기준입니다.
나이아가라 콜리전은 부딪히는 모양만 보는 설정이 아니라 어떤 표면을 얼마나 자주 검사할지 정하는 작업입니다.
- sceneScene Depth
scene 화면에 보이는 표면과 빠르게 충돌시키지만 화면 밖 표면은 놓칠 수 있습니다.
- distanceDistance Field
distance 월드의 거리장 정보를 사용해 더 넓은 충돌을 처리하지만 설정과 메모리 조건을 확인해야 합니다.
- gpuGPU 경로
gpu 대량 파티클에는 GPU 시뮬레이션이 유리하지만 읽을 수 있는 데이터가 제한됩니다.
- event반응 설계
event Bounce, Kill, Stick처럼 충돌 후 행동을 먼저 정해야 모듈 조합이 단순해집니다.
정적 메시 콜리전은 충돌 모드와 응답값이 함께 맞아야 하므로, Distance Field와 바운스 설정을 순서대로 점검합니다.
충돌 모듈만 추가해서 끝내지 말고 테스트 평면, Scene Depth·Distance Field 모드, Field 품질, 반응값, 이벤트를 차례로 검증한다.
- 1단순 평면 재현
바닥 한 장에서 파티클이 통과하는지 먼저 확인한다.
- 2Collision 모드
화면 기반은 Scene Depth, 정적 월드 대량은 Distance Field를 고른다.
- 3Field·Bounds
메시의 Distance Field 생성과 파티클 Bounds를 확인한다.
- 4반응 튜닝
Radius·Restitution·Friction으로 튕김과 미끄러짐을 맞춘다.
- 5Event·실제 맵
필요할 때만 충돌 이벤트를 켜고 실제 지오메트리로 옮긴다.
- 6얇은 메시
Field 해상도와 Collision Radius가 표면 두께에 맞는지 본다.
- 7화면 밖 누락
Bounds와 Scene Depth의 화면 의존성을 확인한다.
- 8성능
충돌 파티클 수와 긴 Lifetime부터 제한한다.
정적 메시와의 기본 콜리전은 데이터 입력, 이미터 책임, 렌더 비용, 재현 기준으로 점검합니다.