본문으로 건너뛰기

안동민 개발노트

본문 시작

동적 액터와의 기본 상호작용

Trace와 Skeletal Mesh 데이터를 사용해 움직이는 액터와 충돌하거나 소켓에 부착되는 캐릭터 먼지 효과를 구현합니다.

이전 절에서는 나이아가라 파티클이 정적인 환경 오브젝트(스태틱 메시)와 충돌하는 기본적인 방법을 배웠습니다.

이제는 파티클이 게임 월드 내에서 움직이는 오브젝트, 즉 동적 액터(Dynamic Actor)나 특히 스켈레탈 메시(Skeletal Mesh)와 어떻게 상호작용하고 충돌하는지에 대해 알아보겠습니다.

이는 캐릭터의 피격 효과, 움직이는 차량에서 뿜어져 나오는 연기, 몬스터의 특정 부위에서 발생하는 마법 효과 등 더욱 복잡하고 상호작용적인 비주얼을 구현하는 데 필수적인 기술입니다.

동적 액터와의 상호작용은 단순히 충돌을 감지하는 것을 넘어, 액터의 움직임에 파티클이 반응하거나, 액터의 특정 위치에 파티클을 부착하는 등의 다양한 형태를 포함합니다.

필요한 데이터 깊이만큼만 동적 대상에 연결한다

위치를 따라가는 일, 애니메이션 메시를 읽는 일, 충돌을 판단하는 일은 서로 다른 비용 경계다.

  1. 좌표계

    Attach 규칙과 local/world space를 함께 결정

  2. 소스 수명

    Actor 파괴·컴포넌트 비활성 뒤 종료 정책 확인

  3. 누락 입력

    socket 이름과 source가 없을 때 fallback 정의


동적 액터와의 콜리전

동적 액터 상호작용 흐름표

움직이는 액터와의 상호작용은 감지, 필터링, 부착, 데이터 전달, 반응, 정리 순서가 맞아야 한다. 특히 대상 액터가 사라질 때 참조 수명까지 같이 관리해야 한다.

  1. 1
    Detect

    Trace 또는 Collision으로 후보를 찾는다.

  2. 2
    Filter

    태그, 타입, 채널로 반응 대상을 좁힌다.

  3. 3
    Attach

    소켓이나 위치에 이펙트를 붙인다.

  4. 4
    Pass

    속도, 위치, 상태 값을 넘긴다.

  5. 5
    React

    색, 방향, 생성량을 바꾼다.

  6. 6
    Cleanup

    대상이 사라질 때 참조를 정리한다.

대상주요 방식좋은 사용처주의점
움직이는 메시Trace Collision투사체, 빗방울, 스파크 반응파티클 수가 많으면 비용 증가
캐릭터 본Skeletal Mesh Interface손, 발, 머리 소켓 이펙트애니메이션 변형과 소켓 갱신 확인
게임 상태User Parameter피격, 속도, 팀 색상 반영값 전달 타이밍과 대상 수명 관리

정적 메시와 달리, 동적 액터, 특히 애니메이션되는 스켈레탈 메시와의 콜리전은 Distance Field만으로는 충분히 정확하거나 효율적이지 않을 수 있습니다.

이때 주로 사용되는 방법은 다음과 같습니다.

Trace 콜리전 모드 활용

  • Collision 모듈의 Collision Mode: Trace로 설정합니다.
    • Trace 모드는 파티클의 움직임 경로를 따라 광선(Ray)을 발사하여 충돌을 감지합니다. 이는 움직이는 오브젝트에 대해 비교적 정확한 충돌 감지를 제공합니다.
  • 콜리전 채널 설정
    • Trace 모드를 사용할 때는 파티클이 어떤 콜리전 채널을 가진 액터와 충돌할지 설정해야 합니다. Collision 모듈의 Trace Channel 속성에서 적절한 채널(예: Visibility, WorldDynamic, PhysicsBody)을 선택합니다.
    • 충돌하고자 하는 동적 액터의 메시 컴포넌트(Static Mesh Component 또는 Skeletal Mesh Component)의 Collision Presets에서 해당 채널에 대한 Block 응답이 설정되어 있는지 확인해야 합니다.
  • 단점: 많은 수의 파티클이 동시에 트레이스 콜리전을 수행할 경우 성능 비용이 높아질 수 있습니다.

스켈레탈 메시 전용

스켈레탈 메시와의 상호작용에는 Niagara Data Interface Skeletal Mesh를 활용하는 것이 가장 강력하고 유연한 방법입니다.

이 데이터 인터페이스는 스켈레탈 메시의 본(Bone), 소켓(Socket), 메시 표면 등 애니메이션되는 기하학적 정보를 나이아가라 시스템에 직접 노출시킵니다.

  • 주요 활용
    • 스켈레탈 메시의 소켓에 파티클 부착: 캐릭터의 손, 발, 머리 등 특정 소켓에 파티클을 스폰하거나 부착하여 캐릭터와 함께 움직이게 합니다.
    • 스켈레탈 메시 표면에 파티클 스폰: 캐릭터의 몸에서 먼지, 물방울, 피격 이펙트 등이 뿜어져 나오게 합니다.
    • 스켈레탈 메시의 본을 따라 파티클 이동: 몬스터의 꼬리나 촉수 등 움직이는 본을 파티클이 따라가게 합니다.
    • 스켈레탈 메시의 콜리전 데이터 활용: 스켈레탈 메시의 물리 에셋(Physics Asset)이나 콜리전 바디를 참조하여 파티클 콜리전을 수행합니다.

동적 액터 효과는 파티클 계산만큼이나 참조 갱신 타이밍과 종료 처리가 중요하므로, 부착, 트레이스, 스켈레탈 메시 데이터 인터페이스, 사용자 파라미터 전달을 각각 어떤 프레임에서 갱신할지 나눠 설계해야 합니다.

동적 액터 참조 갱신 기준

움직이는 대상과 연결된 효과는 어느 프레임에서 위치를 따라가고, 어느 순간에 접촉과 파라미터를 보낼지 분리해야 흔들림과 누수를 줄일 수 있습니다.

  1. 상호작용 방식

    선택 총구, 엔진, 발 소켓처럼 위치를 따라가는 지속 효과에 적합합니다. 빠르게 움직이는 액터와 접촉할 때 채널, 프리셋, 파티클 수를 함께 제한합니다. 본, 소켓, 표면 샘플을 읽을 때 대상 본과 샘플 빈도를 좁힙니다. 속도, 피격 강도, 이동 여부는 값이 변한 순간에만 전달합니다.

  2. Attached Component

    총구, 엔진, 발 소켓처럼 위치를 따라가는 지속 효과에 적합합니다.

  3. Trace Collision

    빠르게 움직이는 액터와 접촉할 때 채널, 프리셋, 파티클 수를 함께 제한합니다.

  4. Skeletal Mesh DI

    본, 소켓, 표면 샘플을 읽을 때 대상 본과 샘플 빈도를 좁힙니다.

  5. User Parameter

    속도, 피격 강도, 이동 여부는 값이 변한 순간에만 전달합니다.

  6. 타이밍 기준표

    frame 타이밍 부착 트레이스 DI 샘플 액터 기준 BeginPlay 컴포넌트 생성 채널 확인 대상 메시 바인딩 Auto Activate 조절 Notify / Hit 소켓 위치 사용 접촉 지점 계산 본 위치 읽기 짧은 burst로 제한 EndPlay Detach 또는 deactivate Trace 중단 메시 참조 해제 풀 반환


동적 액터에 파티클 시스템 부착하기

가장 기본적인 동적 상호작용은 나이아가라 시스템 자체를 동적 액터에 부착(Attach)하는 것입니다.

  • 블루프린트에서 부착

    캐릭터나 차량과 같은 동적 액터의 블루프린트 클래스를 엽니다.

    Components 패널에서 Add 버튼을 클릭하고 Niagara Particle System 컴포넌트를 추가합니다.

    추가된 Niagara Particle System 컴포넌트를 선택하고, Details 패널에서 Niagara System 속성에 여러분의 나이아가라 시스템 에셋(예: NS_BasicSpawn)을 할당합니다.

    컴포넌트 트리의 부모를 드래그하여 특정 스켈레탈 메시의 소켓(Socket) 아래에 배치하면, 파티클 시스템이 해당 소켓에 부착되어 캐릭터와 함께 움직입니다.

  • 활용 예시
    • 캐릭터가 발걸음을 뗄 때 발밑에서 발생하는 먼지 효과.
    • 총구에서 발생하는 총구 화염 효과.
    • 엔진에서 뿜어져 나오는 차량 배기 가스.

사용자 정의 데이터 인터페이스를 전달

더욱 복잡한 상호작용을 위해서는 사용자 정의 데이터 인터페이스를 통해 액터의 특정 데이터를 나이아가라 시스템에 직접 전달할 수 있습니다.

  • Niagara Data Interface Actor: 특정 액터를 참조하여 그 액터의 위치, 회전, 스케일 등 기본 정보를 가져올 수 있습니다. 이를 파티클의 스폰 위치나 기타 속성 제어에 활용합니다.
  • Niagara Data Interface Skeletal Mesh (다시 강조): 이미 설명했듯이, 스켈레탈 메시의 본/소켓/표면 정보를 나이아가라에 전달하는 가장 강력한 방법입니다.

직접 해보기: 캐릭터 발 밑에 먼지 효과 부착

이 기능은 블루프린트 연동이 필수적이므로 실제 실습보다는 개념적인 설명을 통해 이해도를 높이겠습니다.

나이아가라 시스템 생성: 바닥에서 솟아오르는 먼지나 연기 같은 작은 효과 (NS_FootDust)를 만듭니다.

Spawn Rate는 낮게, Lifetime은 짧게, Sprite Size는 작게, Add Velocity는 Z축으로 살짝 위로 설정합니다.

캐릭터 블루프린트 열기: 언리얼 엔진의 기본 캐릭터 블루프린트 (BP_ThirdPersonCharacter 또는 유사한 것)를 엽니다.

Niagara Particle System 컴포넌트 추가
  • Components 탭에서 Add 버튼을 클릭하고 Niagara Particle System 컴포넌트를 추가합니다.
  • 새로 추가된 컴포넌트를 선택하고 Niagara System 속성에 NS_FootDust 시스템을 할당합니다.
컴포넌트 부착
  • Niagara Particle System 컴포넌트를 드래그하여 스켈레탈 메시 컴포넌트 (Mesh) 아래로 이동시킵니다.
  • Details 패널에서 Parent Socket 속성을 찾습니다. 이 속성을 클릭하고 캐릭터의 발에 해당하는 본(예: foot_l, foot_r)을 선택합니다.
  • Location, Rotation, Scale 오프셋을 조절하여 파티클 시스템이 발밑에 정확히 위치하도록 합니다.
컴포넌트 활성화/비활성화 제어 (선택 사항)
  • 캐릭터 블루프린트의 Event Graph에서 Event Tick이나 특정 Movement 이벤트에 따라 Niagara Particle System 컴포넌트의 Activate 또는 Deactivate 노드를 사용하여 파티클 효과를 켜고 끌 수 있습니다. (예: 캐릭터가 움직일 때만 먼지 효과 활성화)

시뮬레이션 성능 고려 사항

동적 액터와 연결할 때는 참조 방식과 갱신 비용을 먼저 분리해 판단합니다.

동적 액터 상호작용 선택 기준표

움직이는 액터와 연결할 때는 충돌을 감지할지, 위치를 따라갈지, 메시 표면 데이터를 읽을지를 먼저 분리해야 비용을 예측할 수 있습니다.

  1. 소켓에 붙는 지속 효과

    Attach 발 먼지, 총구 화염처럼 위치만 따라가면 Niagara 컴포넌트 부착으로 처리합니다.

  2. 움직이는 대상 접촉

    Trace WorldDynamic, PhysicsBody 같은 채널을 고르고 파티클 수와 Max Collisions를 제한합니다.

  3. 본과 표면 데이터

    Skeletal DI 스켈레탈 메시의 소켓, 본, 표면 샘플을 읽되 샘플 수와 대상 본을 좁힙니다.

  4. 상태 값 전달

    User Param 속도, 피격 상태, 이동 여부는 블루프린트 이벤트로 전달하고 Tick 반복을 피합니다.

  • Trace 콜리전: 복잡한 환경에서 많은 파티클이 Trace 콜리션을 수행하면 CPU 비용이 높아질 수 있습니다. Max Collisions를 제한하고, 필요한 경우에만 사용합니다.
  • 스켈레탈 메시 데이터 인터페이스: 스켈레탈 메시의 본이나 표면 데이터를 나이아가라로 스트리밍하는 데는 비용이 발생합니다. 특히 복잡한 스켈레탈 메시의 모든 본을 추적하거나, 많은 수의 파티클이 메시 표면을 참조할 경우 성능에 영향을 줄 수 있습니다.
  • 컴포넌트 부착: 파티클 시스템을 액터에 부착하는 것은 비교적 효율적이지만, 부착된 시스템의 파티클 수가 너무 많거나 복잡한 연산을 수행하면 액터 자체의 업데이트 비용을 증가시킬 수 있습니다.
  • LOD 및 최적화: 동적 액터와의 상호작용 효과도 LOD(Level of Detail) 및 스케일러빌리티 설정을 통해 최적화해야 합니다. 멀리 있는 액터의 파티클 효과는 단순화하거나 비활성화합니다.

동적 액터와의 상호작용은 나이아가라 파티클 시스템의 주요 기능 중 하나입니다.

동적 액터와의 상호작용은 움직이는 메시와 파티클 충돌/데이터 연동을 다루는 기능입니다.

스켈레탈 메시와의 콜리전 및 데이터 연동은 특히 캐릭터나 몬스터의 애니메이션과 밀접하게 연관된 효과를 만드는 데 필수적인 기술입니다.


다음 다이어그램은 동적 액터와 나이아가라 파티클 충돌을 맞출 때 채널, 위치 샘플, 이벤트 반응, 동기화 비용을 점검하는 표입니다.

동적 액터 충돌은 액터 참조가 Niagara 응답까지 매 프레임 이어진다

액터 설정, 전달 경로, 샘플 데이터, Niagara 반응, CPU·GPU 동기화 주기를 한 연결로 검증해야 빠른 이동에서 지연과 관통을 찾을 수 있다.

  1. Actor 설정

    Component Object Type·Response·충돌 채널을 고정한다.

  2. 참조 전달

    Blueprint·C++가 User Parameter로 Actor 또는 Component를 넘긴다.

  3. 데이터 샘플

    Position·Skeletal Mesh·Collision Query 중 필요한 값만 읽는다.

  4. Niagara 반응

    색 변화·속도 감쇠·소멸·이벤트 중 결과를 적용한다.

  5. 갱신 검증

    빠른 이동에서 지연·관통과 CPU↔GPU 전달 비용을 측정한다.

동적 액터와 상호작용할 때는 콜리전 Trace, 소켓 부착, 사용자 데이터 전달 중 어떤 연결이 필요한지 먼저 결정합니다.

동적 액터 상호작용 기준

움직이는 캐릭터와 액터에는 Trace, 부착 소켓, User Parameter 전달 중 어떤 연결이 필요한지 먼저 고릅니다.

  1. 동적 콜리전

    Trace 빠르게 움직이는 액터와 맞닿아야 하면 Trace 모드의 빈도와 채널을 제한합니다.

  2. 스켈레탈 메시

    Skel 발, 손, 무기 소켓처럼 뼈 위치가 중요한 효과는 소켓 기준으로 붙입니다.

  3. 컴포넌트 부착

    Attach Niagara Component를 액터에 붙이고 상대 위치와 회전을 초기화합니다.

  4. 사용자 데이터

    Data 속도, 표면 타입, 강도 같은 값은 User Parameter나 Data Interface로 보냅니다.

  5. 주기

    매 Tick 값 전달이 필요한지 이벤트 순간 전달이면 충분한지 나눕니다.

  6. 좌표계

    월드 좌표와 로컬 좌표가 섞여 이펙트가 밀리지 않는지 봅니다.

  7. 비용

    다수 액터에 붙은 시스템은 비활성 상태와 거리 기준을 반드시 둡니다.

동적 액터와의 기본 상호작용은 데이터 입력, 이미터 책임, 렌더 비용, 재현 기준으로 점검합니다.