GPU Ray Traced Collision
하드웨어 레이 트레이싱과 Distance Field를 활용한 GPU 기반 파티클 충돌 처리를 학습합니다.
GPU 충돌 방식 비교
Scene Depth, Distance Field, Ray Tracing
| 충돌 방식 | 정밀도 | 비용 | 제약 |
|---|---|---|---|
| Scene Depth Collision | 낮음 | 낮음 | 카메라에 보이는 표면만. 뒷면 충돌 불가. |
| Distance Field Collision | 중간 | 중간 | Global Distance Field 필요. 근사적 충돌. |
| HW Ray Tracing | 높음 | 높음 | RTX 하드웨어 필요. 정확한 지오메트리 충돌. |
UE5의 Async Gpu Trace 시스템은 HW Ray Tracing을 우선 시도하고, 사용 불가능하면 자동으로 Global Signed Distance Fields(GSDF)로 폴백합니다. 프로젝트 설정의 Plugins > Niagara > Async Gpu Trace에서 우선순위를 설정할 수 있습니다.
GPU Ray Traced Collision 설정
Collision 모듈 구성
// 프로젝트 설정에서 Distance Field 활성화
Project Settings → Engine → Rendering
Generate Mesh Distance Fields: true
// (선택) Hardware Ray Tracing 활성화
Project Settings → Engine → 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 | 이 속도 이하면 파티클이 표면에 "정지" 상태 |
충돌 이벤트 처리
충돌 시점에 효과 발생시키기
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가 이 정보를 읽어 해당 위치에 스파크를 생성합니다.
Distance Field Fallback과 최적화
다양한 하드웨어 대응
// 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로 거리 기반 제어 |
Global Distance Field의 해상도가 낮으면 충돌이 부정확해질 수 있습니다. r.AOGlobalDFResolution 콘솔 변수로 해상도를 조절할 수 있지만, 높은 해상도는 메모리를 크게 소모합니다. 중요한 충돌 지오메트리는 Mesh Distance Field의 해상도를 개별적으로 높이세요.
핵심 요약
- 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 기반 비활성화로 성능을 최적화하세요.
도전 과제
배운 내용을 직접 실습해보세요
Collision 모듈을 GPU Sim 이미터에 추가하고, Depth Buffer Collision 또는 Scene Depth Collision을 활성화하세요. 파티클이 지형과 바닥에 충돌하여 튕기는 기본 동작을 구현하세요.
GPU Ray Traced Collision 모듈을 사용하여 정밀한 충돌 감지를 구현하세요. Restitution(반발 계수)과 Friction을 조절하여 눈/모래 입자가 표면에 쌓이는 효과를 만드세요.
Signed Distance Field(SDF)를 활용한 충돌 시스템을 구현하세요. Global Distance Field로 복잡한 지오메트리와의 충돌을 처리하고, Ray Traced 방식과의 성능 및 정밀도 차이를 비교하세요.