본문으로 건너뛰기

안동민 개발노트

본문 시작

정적 메시와의 기본 콜리전

Collision 모듈과 Distance Field를 이용해 파티클이 정적 메시를 감지하고 바닥에서 반사·마찰·소멸하도록 설정합니다.

나이아가라 파티클 시스템에서 파티클이 단순히 공간을 유영하는 것을 넘어, 게임 월드 내의 환경 오브젝트와 상호작용하게 만들려면 콜리전(Collision) 기능을 활용해야 합니다.

콜리전은 파티클이 주변 지오메트리(예: 벽, 바닥, 기타 스태틱 메시)에 부딪혔을 때 물리적으로 반응하도록 하는 핵심적인 요소입니다.

이 절에서는 나이아가라 파티클이 정적 메시(Static Mesh), 즉 움직이지 않는 고정된 오브젝트와 어떻게 충돌하고 반응하는지 기본적인 개념과 설정 방법에 대해 알아보겠습니다.

정적 메시와의 기본 콜리전

나이아가라 파티클 시스템에서 파티클이 단순히 공간을 유영하는 것을 넘어, 게임 월드 내의 환경 오브젝트와 상호작용하게 만들려면 콜리전(Collision) 기능을 활용해야 합니다. 콜리전은 파티클이 주변 지오메트리(예: 벽, 바닥, 기타 스태틱 메시)에 닿았을 때 bounce, slide, kill 같은 반응을 계산하는 모듈 설정입니다.

  1. Distance Field 콜리전 설정 순서

    콜리전은 접촉을 감지하고 튕김, 정지, 감속 같은 반응을 계산합니다. 2 나이아가라에서 파티클 콜리전을 활성화하는 대표 방법은 Collision 모듈을 사용하는 것입니다. 3 Distance Field 콜리전 모드는 대부분의 상황에서 성능과 정확도의 균형을 냅니다. 4 충돌 시 사운드나 스파크를 내보내려면 Collision Event를 사용합니다.

  2. 충돌 대상과 응답 방식 구분

    콜리전은 접촉을 감지하고 튕김, 정지, 감속 같은 반응을 계산합니다.

  3. 콜리전 모듈 프로젝트 반입 및 기본 설정

    나이아가라에서 파티클 콜리전을 활성화하는 대표 방법은 Collision 모듈을 사용하는 것입니다.

  4. Distance Field 기반 콜리전 (권장)

    Distance Field 콜리전 모드는 대부분의 상황에서 성능과 정확도의 균형을 냅니다.

  5. 충돌 이벤트와 콜리전 응답

    충돌 시 사운드나 스파크를 내보내려면 Collision Event를 사용합니다.

  6. 파티클 콜리전 검수 지점

    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.01.0 사이의 값은 부분적으로 튕겨 나갑니다.
  • Friction (마찰 계수): 충돌 후 파티클이 표면을 따라 미끄러질 때 속도가 얼마나 감소할지를 결정합니다.
    • 0.0은 마찰이 없어 계속 미끄러집니다.
    • 1.0은 즉시 멈춥니다.
  • Max Collisions: 한 파티클이 수명 동안 최대로 충돌할 수 있는 횟수를 제한합니다. (성능 최적화에 도움)
  • Radius: 파티클의 충돌 반경을 조절합니다. 스프라이트 파티클의 경우 Sprite Size와 연동될 수 있습니다. 3D 메시 파티클의 경우 메시의 바운딩 박스에 비례합니다.
  • Kill On Collision: 충돌 시 파티클을 즉시 소멸시킬지 여부를 결정합니다. (예: 물방울이 바닥에 닿으면 사라짐)

콜리전 값을 조정할 때는 감지 방식과 반응 값을 한 번에 바꾸기보다, 표면 데이터 확인, 충돌 반경 보정, 반발/마찰 튜닝, 종료 조건 설정 순서로 좁혀가면 원인을 빠르게 분리할 수 있습니다.

정적 메시 콜리전은 모드, 반경, 반응, 종료 조건 순서로 좁힌다

충돌이 안 보이거나 과하게 튈 때 모든 값을 바꾸지 말고 감지 방식부터 종료 조건까지 한 단계씩 확인한다.

순서볼 값문제 신호수정 방향
01 ModeDistance Field 또는 Trace표면을 통과하거나 전혀 감지 안 됨DF 준비 여부 확인, Trace로 재현 비교
02 RadiusTrace Radius와 Sprite Size작은 입자가 표면을 뚫음시각 크기와 충돌 반경 맞춤
03 ResponseRestitution, Friction, Drag과하게 튀거나 오래 미끄러짐반발·마찰·감속을 따로 조정
04 StopMax Collisions, Kill On Collision계속 계산되어 비용 증가반복 횟수와 종료 조건 제한

Distance Field 기반 콜리전 (권장)

Distance Field 콜리전은 표면 데이터가 있을 때 먼저 검토한다

정적 메시 표면 근처에서 빠르게 충돌을 처리할 수 있지만, 프로젝트 설정과 메시 DF 품질이 맞아야 한다.

판정확인할 것통과 기준대안
ProjectGenerate 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 ModeDistance Field로 설정하고 사용합니다.

직접 해보기: 바닥에 튕기는 파티클 만들기

간단한 파티클이 바닥에 떨어져 튕기는 효과를 구현해 보겠습니다.

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

Initialize Particle 설정
  • Lifetime2.0 정도로 설정합니다.
  • Sprite Size10.0 정도로 작게 설정합니다.
  • Color는 밝은 색으로 설정합니다.
Add Velocity 설정
  • Velocity Z 값을 300.0 정도로 설정하여 위로 솟아오르게 합니다.
  • XYRandom 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 렌더 성능 고려 사항

충돌 표현을 고를 때는 정확도, 비용, 이벤트 필요 여부를 함께 보며 결정합니다.

정적 메시 콜리전 선택 기준

충돌 모드는 표면 종류, 정확도, 이벤트 필요 여부, 파티클 수를 함께 보고 고릅니다. 반응 값은 표현 의도와 성능 제한을 같이 결정합니다.

  1. 대부분의 정적 메시

    Distance Field 메시 거리 필드가 준비된 환경에서 정확도와 비용의 균형을 맞춥니다.

  2. 정확한 경로 감지

    Trace Trace Channel이 Block인지 확인하고, 대량 파티클에는 사용 범위를 제한합니다.

  3. 첫 충돌 후 제거

    Kill 물방울, 불꽃, 먼지처럼 닿으면 끝나는 효과는 이후 계산을 절약할 수 있습니다.

  4. 스파크와 사운드

    Event 충돌 이벤트는 생성 이미터나 블루프린트 반응과 분리해 비용을 추적합니다.

  • 파티클 수: 콜리전은 파티클 수에 비례하여 성능 비용이 증가합니다. 많은 파티클이 동시에 콜리전을 수행해야 한다면 주의해야 합니다.
  • Collision Mode 선택: Distance Field가 대부분 효율적이지만, 특정 시나리오에서는 Trace가 더 적합할 수도 있습니다. 항상 테스트를 통해 최적의 모드를 찾아야 합니다.
  • Max Collisions 제한: 파티클이 무한정 튕기면서 계산을 유발하는 것을 방지하기 위해 Max Collisions 값을 제한하는 것이 좋습니다.
  • Kill On Collision 활용: 충돌 후 바로 사라지는 파티클은 불필요한 추가 계산을 줄여 성능에 도움이 됩니다.

정적 메시와의 콜리전은 나이아가라 파티클 효과에 물리적인 상호작용을 부여하여 현실감을 높이는 중요한 기능입니다.

이를 통해 여러분은 단순히 공중에 떠다니는 효과가 아닌, 게임 월드와 능동적으로 반응하는 동적인 시각 효과를 만들 수 있을 것입니다.


다음 다이어그램은 나이아가라 콜리전을 설정할 때 충돌 대상, 처리 방식, 반응, 성능 검수를 함께 보는 기준입니다.

콜리전 설정 기준

나이아가라 콜리전은 부딪히는 모양만 보는 설정이 아니라 어떤 표면을 얼마나 자주 검사할지 정하는 작업입니다.

  1. scene
    Scene Depth

    scene 화면에 보이는 표면과 빠르게 충돌시키지만 화면 밖 표면은 놓칠 수 있습니다.

  2. distance
    Distance Field

    distance 월드의 거리장 정보를 사용해 더 넓은 충돌을 처리하지만 설정과 메모리 조건을 확인해야 합니다.

  3. gpu
    GPU 경로

    gpu 대량 파티클에는 GPU 시뮬레이션이 유리하지만 읽을 수 있는 데이터가 제한됩니다.

  4. event
    반응 설계

    event Bounce, Kill, Stick처럼 충돌 후 행동을 먼저 정해야 모듈 조합이 단순해집니다.

정적 메시 콜리전은 충돌 모드와 응답값이 함께 맞아야 하므로, Distance Field와 바운스 설정을 순서대로 점검합니다.

정적 메시 콜리전은 단순 장면에서 모드와 반응을 순서대로 잠근다

충돌 모듈만 추가해서 끝내지 말고 테스트 평면, Scene Depth·Distance Field 모드, Field 품질, 반응값, 이벤트를 차례로 검증한다.

  1. 1
    단순 평면 재현

    바닥 한 장에서 파티클이 통과하는지 먼저 확인한다.

  2. 2
    Collision 모드

    화면 기반은 Scene Depth, 정적 월드 대량은 Distance Field를 고른다.

  3. 3
    Field·Bounds

    메시의 Distance Field 생성과 파티클 Bounds를 확인한다.

  4. 4
    반응 튜닝

    Radius·Restitution·Friction으로 튕김과 미끄러짐을 맞춘다.

  5. 5
    Event·실제 맵

    필요할 때만 충돌 이벤트를 켜고 실제 지오메트리로 옮긴다.

  6. 6
    얇은 메시

    Field 해상도와 Collision Radius가 표면 두께에 맞는지 본다.

  7. 7
    화면 밖 누락

    Bounds와 Scene Depth의 화면 의존성을 확인한다.

  8. 8
    성능

    충돌 파티클 수와 긴 Lifetime부터 제한한다.

정적 메시와의 기본 콜리전은 데이터 입력, 이미터 책임, 렌더 비용, 재현 기준으로 점검합니다.