PART 4 · 강의 1/3

GPU Sim 기초

GPU Compute Shader 기반 시뮬레이션으로 수백만 파티클을 실시간 처리하는 방법을 학습합니다.

01

CPU vs GPU 시뮬레이션

각 모드의 특성과 제약 사항

특성 CPU Sim GPU Compute Sim
최대 파티클 수 수천 개 수백만 개
이벤트 핸들러 지원 미지원
Simulation Stage 미지원 지원
Data Interface 호환성 전체 지원 일부 제한
Component Renderer 지원 미지원
CPU 부하 높음 매우 낮음
GPU 부하 렌더링만 시뮬레이션 + 렌더링
Data Channel 지원 지원
GPU Sim 전환 방법
// Emitter Properties에서 Sim Target 변경 Emitter Properties { Sim Target: GPUComputeSim // CPU Sim에서 변경 // GPU Sim 전환 시 자동 경고: // - Event Handler 모듈은 비활성화됨 // - 일부 Data Interface가 호환되지 않을 수 있음 // - Component Renderer 사용 불가 Fixed Bounds: (Min: -500, Max: 500) // GPU Sim에서는 Fixed Bounds 사용 권장 (Dynamic Bounds 비용 높음) }
GPU Sim 선택 기준

파티클 수가 수만 개 이상이거나, Simulation Stage(Neighbor Grid, 유체 시뮬레이션 등)가 필요하면 GPU Sim을 선택하세요. 이벤트나 Component Renderer가 필요하면 CPU Sim을 유지하되, Data Channel로 대체를 고려하세요.

02

Simulation Stage

GPU Sim 전용 다단계 시뮬레이션

Simulation Stage는 GPU Sim에서만 사용 가능한 기능으로, 매 프레임 파티클 시뮬레이션을 여러 단계(Stage)로 나누어 실행할 수 있습니다. 이를 통해 파티클 간 상호작용, 그리드 기반 시뮬레이션 등 고급 동작을 구현합니다.

Simulation Stage 추가
// Emitter의 스택에 Simulation Stage 그룹 추가 + 버튼 → Simulation Stage Simulation Stage { Iteration Source: Particles // Particles: 각 파티클에 대해 1회 실행 // Data Interface: Grid 등의 DI 셀에 대해 실행 Num Iterations: 1 // 이 스테이지를 몇 번 반복할 것인가 Execute Behavior: Always // Always: 매 프레임 // On Simulation Reset: 리셋 시에만 // Not on Simulation Reset: 리셋 제외 }

Iteration Source 종류

Iteration Source 반복 대상 사용 사례
Particles 각 파티클 파티클 간 인터랙션, 후처리
Data Interface Grid 셀, 버퍼 요소 Neighbor Grid, Render Target에 쓰기
Simulation Stage 실행 순서

Simulation Stage는 Particle Spawn과 Particle Update 사이에 실행됩니다. 여러 Stage를 추가하면 위에서 아래로 순차 실행됩니다. 전형적인 패턴: 1단계 - 파티클을 Grid에 등록, 2단계 - Grid에서 이웃 검색하여 힘 계산, 3단계 - 결과 반영.

03

GPU Sim 최적화

Fixed Bounds, 메모리, Dispatch 최적화

Fixed Bounds 설정

GPU Sim에서 Dynamic Bounds 계산은 GPU에서 CPU로 데이터를 읽어오는(Readback) 비용이 발생합니다. Fixed Bounds를 설정하면 이 비용을 제거할 수 있습니다.

Fixed Bounds 설정
Emitter Properties { Calculate Bounds Mode: Fixed Fixed Bounds: Min: (-1000, -1000, -1000) Max: (1000, 1000, 1000) } // 또는 System 레벨에서 전체 Emitter에 적용 System Properties { Fixed Bounds: (Min: -2000, Max: 2000) } // 주의: 바운드 밖의 파티클은 컬링되어 보이지 않음 // 파티클이 이동할 수 있는 최대 범위보다 크게 설정

GPU 메모리 관리

설정 영향 권장
Max Allocation Count GPU 파티클 버퍼의 최대 크기 필요한 최대 파티클 수의 1.2~1.5배
Attribute 최소화 각 파티클의 메모리 사용량 불필요한 커스텀 Attribute 제거
Precision float 정밀도 (32 vs 16) 정밀도가 불필요한 값은 half precision 고려
GPU Readback 비용

GPU에서 CPU로 데이터를 읽어오는 작업(Readback)은 성능 병목의 주요 원인입니다. Dynamic Bounds, Execution State 변경, 파티클 수 쿼리 등이 Readback을 유발합니다. 가능하면 Fixed Bounds를 사용하고, 파티클 수에 의존하는 로직을 피하세요.

04

GPU Sim 실전 예제

대규모 파티클 이펙트 구현

100만 파티클 별 필드 (Star Field)
NS_StarField Emitter Properties: Sim Target: GPUComputeSim Calculate Bounds Mode: Fixed Fixed Bounds: (-5000, -5000, -5000) ~ (5000, 5000, 5000) Local Space: true Emitter Update: Spawn Burst Instantaneous SpawnCount = 1000000 Particle Spawn: Initialize Particle Lifetime: Float Max // 영원히 살아있음 SpriteSize: Uniform Ranged Float (0.5, 3.0) Color: Uniform Ranged Color Min: (0.7, 0.7, 1.0, 0.5) Max: (1.0, 1.0, 1.0, 1.0) Sphere Location Radius: 5000.0 Surface Only: false Particle Update: Particle State Kill When Lifetime Elapsed: false // 별이 반짝이는 효과 - HLSL Expression Scale Color Alpha: Expression 0.5 + 0.5 * sin(Particles.UniqueID * 0.01 + Engine.Time * 2.0) Render: Sprite Renderer Material: M_StarParticle // Additive 블렌딩 Sort Mode: None // 정렬 불필요 (성능 절약)
SUMMARY

핵심 요약

  • GPU Sim은 Compute Shader 기반으로 수백만 파티클을 처리하지만, 이벤트와 Component Renderer를 지원하지 않습니다.
  • Simulation Stage는 GPU Sim 전용 기능으로, 다단계 시뮬레이션(Grid 연산, 파티클 간 인터랙션)을 가능하게 합니다.
  • Fixed Bounds를 설정하여 GPU Readback 비용을 제거하는 것이 GPU Sim 최적화의 핵심입니다.
  • 파티클 수가 수만 개 이상이거나 Simulation Stage가 필요하면 GPU Sim을, 이벤트가 필요하면 CPU Sim을 선택하세요.
  • GPU 메모리는 Max Allocation Count와 Attribute 수를 최소화하여 관리합니다.
  • Data Channel은 GPU Sim에서도 사용 가능하여, 이벤트의 대안이 됩니다.
PRACTICE

도전 과제

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

실습 1: CPU에서 GPU Sim으로 전환

기존 CPU 이미터의 Sim Target을 GPUCompute Sim으로 변경하세요. Spawn Count를 100,000+로 높이고, CPU 모드와 GPU 모드의 프레임 레이트 차이를 stat unit 명령으로 비교하세요.

실습 2: GPU 전용 기능 활용

GPU Sim에서만 사용 가능한 Simulation Stage를 추가하세요. 각 Stage에서 Iteration Source를 DataInterface 또는 Particles로 설정하고, 멀티 스테이지 시뮬레이션의 기본 구조를 파악하세요.

심화 과제: GPU Sim 제약 사항 테스트

GPU Sim에서 지원되지 않는 기능(예: 특정 Data Interface, CPU 전용 모듈)을 파악하고, 동일한 이펙트를 CPU/GPU 각각으로 구현하여 기능 차이와 성능 트레이드오프를 문서화하세요.