Data Interface
외부 데이터 소스에 접근하는 Data Interface의 종류와 활용법을 학습합니다.
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 | 텍스처에 파티클 데이터 쓰기 |
Skeletal Mesh Data Interface
캐릭터 표면에서 파티클 스폰
// 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 이름도 사용 가능합니다.
Particle Attribute Reader
다른 Emitter의 파티클 데이터 읽기
Particle Attribute Reader는 같은 System 내의 다른 Emitter의 파티클 Attribute를 읽을 수 있는 DI입니다. 이벤트 없이도 Emitter 간 데이터를 공유할 수 있습니다.
// 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
기타 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
핵심 요약
- Data Interface는 외부 데이터 소스(메시, 오디오, 지형 등)에 접근하는 추상화 계층입니다.
- Skeletal Mesh DI로 캐릭터 표면에서 파티클을 스폰하고, 특정 본/소켓 위치를 추적합니다.
- Particle Attribute Reader로 다른 Emitter의 파티클 데이터를 이벤트 없이 직접 읽습니다.
- Audio Spectrum, Landscape, Spline 등 다양한 DI로 환경/게임플레이 반응형 이펙트를 만듭니다.
- 각 DI의 CPU/GPU 호환성을 확인하고, GPU Sim에서 지원되지 않는 DI는 대안을 사용하세요.
- Blueprint에서
SetVariableObject로 DI의 소스 오브젝트를 런타임에 연결합니다.
도전 과제
배운 내용을 직접 실습해보세요
Skeletal Mesh Data Interface를 사용하여 캐릭터의 본(Bone) 위치에서 파티클을 스폰하세요. 특정 소켓(예: hand_r)에서 불꽃이 나오는 마법 이펙트를 만드세요.
Landscape Data Interface로 지형 높이를 읽어, 파티클이 항상 지형 표면 위에 위치하도록 하세요. 지형의 Normal 방향으로 파티클을 정렬하여 풀이나 눈 효과를 구현하세요.
Audio Spectrum Data Interface로 실시간 오디오 스펙트럼 데이터를 읽고, 주파수 대역별로 파티클의 크기나 색상을 변화시키는 뮤직 비주얼라이저를 만드세요.