PART 4 · 강의 3/3

GPU Ray Traced Collision

하드웨어 레이 트레이싱과 Distance Field를 활용한 GPU 기반 파티클 충돌 처리를 학습합니다.

01

GPU 충돌 방식 비교

Scene Depth, Distance Field, Ray Tracing

충돌 방식 정밀도 비용 제약
Scene Depth Collision 낮음 낮음 카메라에 보이는 표면만. 뒷면 충돌 불가.
Distance Field Collision 중간 중간 Global Distance Field 필요. 근사적 충돌.
HW Ray Tracing 높음 높음 RTX 하드웨어 필요. 정확한 지오메트리 충돌.
Async GPU Trace

UE5의 Async Gpu Trace 시스템은 HW Ray Tracing을 우선 시도하고, 사용 불가능하면 자동으로 Global Signed Distance Fields(GSDF)로 폴백합니다. 프로젝트 설정의 Plugins > Niagara > Async Gpu Trace에서 우선순위를 설정할 수 있습니다.

02

GPU Ray Traced Collision 설정

Collision 모듈 구성

GPU Ray Traced Collision 설정
// 프로젝트 설정에서 Distance Field 활성화 Project SettingsEngine → Rendering Generate Mesh Distance Fields: true // (선택) Hardware Ray Tracing 활성화 Project SettingsEngine → Rendering Support Hardware Ray Tracing: true // Niagara Emitter 설정 Emitter Properties: Sim Target: GPUComputeSim Particle Update: Collision 모듈 추가 { GPU Collision Type: GPU Ray Trace // 또는 Async Ray Trace (비동기, 더 효율적) Collision Resilience: 0.5 // 0.0 = 완전 정지, 1.0 = 완전 반사 Collision Friction: 0.2 // 충돌 시 접선 방향 속도 감소 Collision Radius: 5.0 // 파티클의 충돌 반경 Max Trace Distance: 1000.0 // 최대 레이 트레이스 거리 }

충돌 응답 파라미터

파라미터 범위 설명
Resilience 0.0 ~ 1.0 반발 계수. 0=정지(연기), 0.5=반탄(물방울), 1.0=완전반사(공)
Friction 0.0 ~ 1.0 표면 마찰. 충돌 후 접선 방향 속도 감소 비율
Rest Velocity Threshold float 이 속도 이하면 파티클이 표면에 "정지" 상태
03

충돌 이벤트 처리

충돌 시점에 효과 발생시키기

GPU Sim에서는 전통적인 이벤트 핸들러를 사용할 수 없으므로, 충돌 감지 결과를 Particle Attribute로 저장하고 후속 로직에서 활용합니다.

충돌 데이터 활용
// Collision 모듈이 자동으로 설정하는 Attribute Particles.CollisionValid : bool // 충돌 발생 여부 Particles.CollisionNormal : Vector3 // 충돌 표면의 법선 Particles.CollisionVelocity : Vector3 // 충돌 전 속도 // 활용 예: 충돌 시 파티클 소멸 + 스파크 효과 Particle Update: // 충돌 횟수 카운트 Set (Particles.CollisionCount) = Particles.CollisionValid ? Particles.CollisionCount + 1 : Particles.CollisionCount // 3회 충돌 시 파티클 소멸 Kill Particle (조건: Particles.CollisionCount >= 3) // 충돌 위치에서 색상 변경 Set (Particles.Color) = Particles.CollisionValid ? (1.0, 0.8, 0.0, 1.0) : Particles.Color // 충돌 시 노란색
충돌 스파크 이펙트

충돌 위치에서 별도 스파크 파티클을 생성하려면 Data Channel을 사용하세요. 충돌한 파티클이 Data Channel에 충돌 위치/법선 정보를 쓰고, 별도의 Spark Emitter가 이 정보를 읽어 해당 위치에 스파크를 생성합니다.

04

Distance Field Fallback과 최적화

다양한 하드웨어 대응

Async Gpu Trace 우선순위 설정
// Project Settings → Plugins → Niagara Async Gpu Trace Provider Order: [0]: HW Ray Tracing // 1순위: RTX 레이 트레이싱 [1]: Global Distance Fields // 2순위: 거리 필드 폴백 // HW RT 사용 불가 시 자동으로 GSDF로 전환 // 두 방식 모두 사용 불가하면 충돌 비활성화

충돌 최적화 전략

최적화 방법 효과
Trace 빈도 감소 매 프레임이 아닌 N프레임마다 Trace GPU 비용 감소 (정밀도 약간 저하)
Max Trace Distance 최소 필요 거리로 제한 불필요한 장거리 Trace 제거
선택적 충돌 빠른 파티클에만 충돌 검사 느린 파티클의 Trace 비용 절약
LOD 기반 먼 거리에서는 충돌 비활성화 Scalability로 거리 기반 제어
Distance Field 품질

Global Distance Field의 해상도가 낮으면 충돌이 부정확해질 수 있습니다. r.AOGlobalDFResolution 콘솔 변수로 해상도를 조절할 수 있지만, 높은 해상도는 메모리를 크게 소모합니다. 중요한 충돌 지오메트리는 Mesh Distance Field의 해상도를 개별적으로 높이세요.

SUMMARY

핵심 요약

  • GPU 파티클 충돌은 Scene Depth, Distance Field, HW Ray Tracing 3가지 방식을 지원합니다.
  • Async GPU Trace는 HW RT를 우선 사용하고 불가능하면 Distance Field로 자동 폴백합니다.
  • Resilience(반발계수)와 Friction(마찰)으로 충돌 응답을 제어합니다.
  • GPU Sim에서는 이벤트 대신 CollisionValid 등 Attribute로 충돌 후 로직을 처리합니다.
  • 충돌 위치에서 새 이펙트를 생성하려면 Data Channel을 사용합니다.
  • Max Trace Distance와 LOD 기반 비활성화로 성능을 최적화하세요.
PRACTICE

도전 과제

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

실습 1: 기본 GPU 충돌 설정

Collision 모듈을 GPU Sim 이미터에 추가하고, Depth Buffer Collision 또는 Scene Depth Collision을 활성화하세요. 파티클이 지형과 바닥에 충돌하여 튕기는 기본 동작을 구현하세요.

실습 2: Ray Traced Collision 구현

GPU Ray Traced Collision 모듈을 사용하여 정밀한 충돌 감지를 구현하세요. Restitution(반발 계수)과 Friction을 조절하여 눈/모래 입자가 표면에 쌓이는 효과를 만드세요.

심화 과제: SDF Collision 시스템

Signed Distance Field(SDF)를 활용한 충돌 시스템을 구현하세요. Global Distance Field로 복잡한 지오메트리와의 충돌을 처리하고, Ray Traced 방식과의 성능 및 정밀도 차이를 비교하세요.