메시 데이터 세트의 기본 사용법
스태틱·스켈레탈 메시의 표면 위치·노멀·정점 데이터를 읽어 파티클을 스폰하고 메시를 따라 이동시킵니다.
지금까지 파티클 자체 속성 제어를 중심으로 작업했다면, 이번에는 외부 3D 데이터와 결합하는 단계로 넘어갑니다.
핵심은 메시 데이터 세트(Mesh Data Interface)입니다.
이 기능을 사용하면 스태틱 메시(Static Mesh)와 스켈레탈 메시(Skeletal Mesh)의 기하학 정보를 나이아가라 파티클 시스템에서 직접 활용할 수 있습니다.
이는 파티클이 단순히 정해진 공간에서만 생성되고 움직이는 것이 아니라, 게임 월드 내의 특정 3D 오브젝트의 형태를 따르거나, 그 표면에서 상호작용하는 등 훨씬 더 유기적이고 사실적인 효과를 구현할 수 있게 해줍니다.
마치 메시 오브젝트에 파티클을 심는 것과 같다고 이해하시면 됩니다.
메시 데이터 세트란 무엇인가요?
메시 데이터 세트는 메시의 정점(Vertex), 면(Triangle), UV, 노멀(Normal) 같은 기하학 정보를 나이아가라가 읽을 수 있게 변환하는 데이터 인터페이스입니다.
이 정보를 사용하면 파티클을 메시 표면에 스폰하거나 특정 지점을 따라 이동시키고, 정점 색상·UV 등을 파티클 표현에 반영할 수 있습니다. 재질의 최종 셰이딩 결과가 자동으로 전달되는 것은 아닙니다.
주로 사용되는 메시 데이터 인터페이스는 다음과 같습니다.
Niagara Data Interface Static Mesh: 변형되지 않는 고정된 형태의 3D 모델(스태틱 메시)의 데이터를 활용합니다. 건물, 바위, 무기 등 환경 오브젝트에 주로 사용됩니다.Niagara Data Interface Skeletal Mesh: 애니메이션되는 캐릭터나 움직이는 오브젝트(스켈레탈 메시)의 데이터를 활용합니다. 캐릭터의 피격 효과, 발자국 먼지, 또는 몬스터의 특정 부위에서 발생하는 효과 등에 사용됩니다.
메시 데이터 세트의 주요 활용 예시
메시 데이터 세트는 표면 샘플링, 위치 분포, 형태 기반 스폰처럼 여러 방식으로 활용할 수 있습니다.
메시 표면에 파티클 스폰하기
가장 흔하게 사용되는 방법 중 하나입니다.
메시의 표면(Surface)을 파티클의 스폰 위치로 활용하여, 마치 오브젝트에서 직접 파티클이 뿜어져 나오는 듯한 효과를 구현합니다.
-
사용 예시
- 뜨거운 바위에서 피어오르는 증기.
- 용암 표면에서 끓어오르는 거품.
- 건물이 파괴될 때 떨어지는 잔해 파티클.
- 수영하는 캐릭터의 몸에서 떨어지는 물방울.
메시의 속성 활용하기
메시의 정점 색상, UV 정보, 노멀 방향 등을 파티클에 전달하여 파티클의 초기 속성을 설정하거나, 동적인 변화를 부여할 수 있습니다.
-
사용 예시
- 메시의 텍스처 색상을 파티클의 초기 색상으로 사용하여, 오브젝트의 색상에 맞는 불꽃이나 스파크 효과를 낼 때.
- 메시의 노멀 방향을 파티클의 초기 속도 방향으로 사용하여, 표면에서 수직으로 튀어 오르는 효과를 낼 때.
메시를 따라 파티클 이동시키기
메시의 정점 위치나 본(Bone), 소켓(Socket)을 참조하여 파티클이 메시와 함께 움직이거나, 메시의 특정 부분을 따라 이동하게 할 수 있습니다.
-
사용 예시
- 캐릭터의 손에 불꽃이 따라다니는 마법 효과.
- 검의 날을 따라 흐르는 에너지 효과.
- 발자국이 찍히는 위치에만 발생하는 먼지 효과.
삼각형 표면과 정점 샘플은 분포가 다릅니다. 내부 부피나 모서리를 샘플링하는 것은 별도 데이터·알고리즘이 필요할 수 있으며, Static Mesh Location에 Surface·Volume·Vertex·Edge 네 옵션이 모두 제공된다고 가정하지 않습니다.
직접 해보기: 스태틱 메시에 파티클 스폰하기
간단한 예제를 통해 Niagara Data Interface Static Mesh를 사용하여 스태틱 메시 표면에 파티클을 스폰하는 방법을 알아보겠습니다.
새로운 나이아가라 시스템 생성: New system with empty system 템플릿을 사용하여 NS_MeshSurfaceSpawn이라는 이름의 빈 나이아가라 시스템을 만듭니다.
기본 이미터 구성: Empty Emitter를 추가합니다. Emitter Update에 Emitter State와 Spawn Rate(50), Particle Spawn에 Initialize Particle, Particle Update에 Particle State, Render에 Sprite Renderer를 확인합니다. 기존 모듈은 중복 추가하지 않고 수명과 크기를 0보다 크게 설정합니다.
위치 모듈 추가: Particle Spawn의 Initialize Particle 다음에 Static Mesh Location을 추가합니다. 이 모듈이 Static Mesh DI를 입력으로 사용하므로 DI 클래스를 Emitter Update에 독립 모듈처럼 추가하지 않습니다.
메시 소스 설정: 위치 모듈의 Static Mesh 입력을 펼쳐 사용할 소스 모드와 기본 메시를 지정합니다. 프로젝트에 있는 Cube·Sphere 등 단순한 메시로 시작합니다. 에셋 소스와 월드의 메시 컴포넌트 참조는 서로 다른 선택입니다.
표면 샘플링 설정: 모듈 버전에서 제공하는 삼각형/표면 샘플링 방식을 선택합니다. CPU 샘플링에서 데이터 접근 경고가 나면 메시의 Allow CPU Access 등 요구 조건을 확인합니다. 좌표 변환과 모듈 오류를 해결한 뒤 원점이 아닌 표면에 분포하는지 비교합니다.
출력 확인: 프리뷰에서 위치 분포를 관찰합니다. 데이터 소스로 쓴 메시 자체가 렌더링되는 것은 아니므로 필요하면 같은 메시를 레벨에 배치해 비교합니다. 노멀을 속도로 연결하지 않았다면 파티클이 자동으로 솟아오르지는 않습니다.
생성 시 한 번 위치를 샘플링하면 그 후 메시 변형을 자동 추적하지 않습니다. 계속 붙어 있는 효과는 샘플 식별 정보와 Update의 재샘플링을 설계하고, 자유롭게 날아가는 효과는 초기 노멀·속도와 위치 적분을 추가합니다.
메시 데이터 세트 활용 팁
- 최적화 고려: 복잡한 메시나 너무 많은 파티클을 메시 표면에 스폰하면 성능에 부담을 줄 수 있습니다. 필요한 경우 메시의 LOD(Level of Detail) 설정을 조정하거나 파티클 수를 제한하는 것이 좋습니다.
- 머티리얼과의 연동: 메시 데이터 인터페이스는 메시의 UV나 Vertex Color와 같은 데이터를 파티클에 전달할 수 있습니다. 이를 파티클의 초기 색상이나 텍스처 좌표로 활용하여 메시의 질감을 파티클에 반영할 수 있습니다.
- 블루프린트 연동: 게임 월드에 배치된 특정 메시 액터의 참조를
Niagara Data Interface Static Mesh에 전달하여, 런타임에 동적으로 메시를 변경하거나 메시의 움직임에 따라 파티클이 반응하도록 할 수 있습니다.
분포가 이상할 때
소스 누락, 좌표 공간·스케일, 샘플링 LOD, 삼각형 면적별 가중치, 아래쪽 Position 덮어쓰기를 확인합니다. 모든 삼각형이나 정점을 같은 확률로 고르면 면적이 다른 메시에서 균일한 표면 밀도가 나오지 않을 수 있습니다.
UV로 텍스처 색을 얻으려면 해당 텍스처를 별도로 샘플링해야 합니다. 스켈레탈 메시를 계속 추적할 때는 애니메이션 갱신과 샘플 수의 비용도 측정합니다. Static Mesh DI의 소스 설정을 참고할 수 있습니다.