PART 6 · 강의 2/3

Data Interface

외부 데이터 소스에 접근하는 Data Interface의 종류와 활용법을 학습합니다.

01

Data Interface 개념

외부 데이터를 Niagara로 가져오기

Data Interface(DI)는 Niagara 시뮬레이션에서 외부 데이터 소스에 접근할 수 있게 하는 추상화 계층입니다. 스켈레탈 메시의 본 위치, 오디오 스펙트럼, 랜드스케이프 높이 등 UE5의 다양한 데이터를 파티클 시뮬레이션에 활용할 수 있습니다.

주요 Data Interface 목록

Data Interface 데이터 소스 CPU/GPU 주요 활용
Skeletal Mesh DI 스켈레탈 메시의 본/소켓 Both 캐릭터 표면에서 파티클 스폰
Static Mesh DI 스태틱 메시 표면 Both 메시 표면을 따라 파티클 생성
Particle Attribute Reader 다른 Emitter의 파티클 데이터 Both Emitter 간 데이터 공유
Audio Spectrum DI 오디오 FFT 스펙트럼 CPU 음악 반응형 이펙트
Landscape DI 랜드스케이프 높이/법선 Both 지형을 따라가는 파티클
Spline DI 스플라인 컴포넌트 Both 경로를 따라 이동하는 파티클
Neighbor Grid 3D 공간 해싱 그리드 GPU 파티클 간 이웃 검색
Render Target DI 렌더 타겟 텍스처 GPU 텍스처에 파티클 데이터 쓰기
02

Skeletal Mesh Data Interface

캐릭터 표면에서 파티클 스폰

Skeletal Mesh DI 설정
// 1. User Parameter로 Skeletal Mesh Component 연결 Parameters: User.SkeletalMeshComponent : Skeletal Mesh Component // 2. Particle Spawn에서 메시 표면 위치 가져오기 Particle Spawn: Sample Skeletal Mesh Surface { Source: User.SkeletalMeshComponent Sampling Mode: Random Triangle // Random Triangle: 표면에서 균일 랜덤 // Random Bone Weighted: 본 가중치 기반 // Specific Bone: 특정 본/소켓Particles.Position // 메시 표면 위치Particles.Normal // 표면 법선Particles.Velocity // 표면 법선 방향 속도 } // 3. Blueprint에서 Skeletal Mesh 연결 NiagaraComp->SetVariableObject( "User.SkeletalMeshComponent", CharacterMesh );
특정 본에서만 스폰

Sampling Mode를 Specific Bone으로 설정하고, Filtered Bones에 본 이름을 추가하면 특정 위치(손, 발, 무기 등)에서만 파티클을 생성할 수 있습니다. Socket 이름도 사용 가능합니다.

03

Particle Attribute Reader

다른 Emitter의 파티클 데이터 읽기

Particle Attribute Reader는 같은 System 내의 다른 Emitter의 파티클 Attribute를 읽을 수 있는 DI입니다. 이벤트 없이도 Emitter 간 데이터를 공유할 수 있습니다.

Particle Attribute Reader 사용
// Emitter A: Leader (리더 파티클) Particle Spawn: Spawn Burst Instantaneous: 1 // 리더 1개 Add Velocity: (100, 0, 50) // Emitter B: Followers (따라가는 파티클들) Parameters: Particle Attribute Reader { Emitter Name: "Leader" } Particle Update: Get Particle Attribute (Reader) { Reader: ParticleAttributeReader Particle Index: 0 // 리더의 첫 번째 파티클 Attribute: Position → LeaderPosition } // 리더 방향으로 이동 Set (Particles.Velocity) = normalize(LeaderPosition - Particles.Position) * 300.0
04

기타 Data Interface 활용

Audio, Landscape, Spline DI

Audio Spectrum DI

음악 반응형 이펙트
// Audio Spectrum DI로 주파수별 음량 읽기 Get Spectrum Value { Frequency: Particles.NormalizedAge * 20000.0 // 0~20kHz 범위를 파티클 수명에 매핑 → SpectrumValue } // 스펙트럼 값으로 파티클 크기 조절 Set (Particles.SpriteSize) = SpectrumValue * 100.0

Landscape DI

지형 높이 따라가기
// Landscape DI로 파티클 위치의 지형 높이 가져오기 Get Landscape Height { Position: Particles.Position → TerrainHeight, TerrainNormal } // 파티클이 지형 위를 따라가도록 Set (Particles.Position.Z) = TerrainHeight + 10.0
SUMMARY

핵심 요약

  • Data Interface는 외부 데이터 소스(메시, 오디오, 지형 등)에 접근하는 추상화 계층입니다.
  • Skeletal Mesh DI로 캐릭터 표면에서 파티클을 스폰하고, 특정 본/소켓 위치를 추적합니다.
  • Particle Attribute Reader로 다른 Emitter의 파티클 데이터를 이벤트 없이 직접 읽습니다.
  • Audio Spectrum, Landscape, Spline 등 다양한 DI로 환경/게임플레이 반응형 이펙트를 만듭니다.
  • 각 DI의 CPU/GPU 호환성을 확인하고, GPU Sim에서 지원되지 않는 DI는 대안을 사용하세요.
  • Blueprint에서 SetVariableObject로 DI의 소스 오브젝트를 런타임에 연결합니다.
PRACTICE

도전 과제

배운 내용을 직접 실습해보세요

실습 1: Skeletal Mesh DI 활용

Skeletal Mesh Data Interface를 사용하여 캐릭터의 본(Bone) 위치에서 파티클을 스폰하세요. 특정 소켓(예: hand_r)에서 불꽃이 나오는 마법 이펙트를 만드세요.

실습 2: Landscape DI로 지형 반응

Landscape Data Interface로 지형 높이를 읽어, 파티클이 항상 지형 표면 위에 위치하도록 하세요. 지형의 Normal 방향으로 파티클을 정렬하여 풀이나 눈 효과를 구현하세요.

심화 과제: Audio Spectrum DI 시각화

Audio Spectrum Data Interface로 실시간 오디오 스펙트럼 데이터를 읽고, 주파수 대역별로 파티클의 크기나 색상을 변화시키는 뮤직 비주얼라이저를 만드세요.