PART 6 · 강의 3/3

성능 최적화

GPU Processing, 프로파일링, 인스턴싱 전략, 메모리 관리 등 PCG 성능 최적화 기법을 마스터합니다.

01

PCG 성능 병목 분석

프로파일링 도구와 성능 병목 식별

성능 병목 유형

병목 유형 증상 원인 진단 도구
생성 시간 Generate 시 긴 대기 복잡한 그래프, 많은 포인트 stat PCG, 노드별 실행 시간
렌더링 낮은 FPS 과다 드로우콜, 높은 폴리곤 stat RHI, GPU Profiler
메모리 메모리 초과, 크래시 너무 많은 인스턴스, 미정리 stat Memory, Memreport
스트리밍 팝인, 지연 로드 파티션 크기 부적절 WP 디버그 뷰
프로파일링 명령어
// 콘솔 명령어로 PCG 성능 진단 stat PCG // PCG 프레임워크 통계 // → Generation Time, Point Count, Active Cells stat RHI // 렌더링 하드웨어 통계 // → Draw Calls, Triangles Rendered stat Memory // 메모리 사용량 stat SceneRendering // 씬 렌더링 통계 pcg.Debug.DrawCells 1 // 파티션 셀 시각화 pcg.Debug.DrawBounds 1 // 포인트 바운드 시각화 // Unreal Insights로 상세 프로파일링: // Run with -trace=cpu,frame,counters // → PCG 노드별 실행 시간 분석
02

GPU Processing

GPU 가속으로 대량 포인트 처리 성능 향상

PCG GPU Processing 플러그인은 포인트 처리 연산을 GPU에서 실행하여 수백만 개의 포인트를 빠르게 처리합니다. UE 5.5+에서 사용 가능합니다.

처리 방식 포인트 100만 개 적합한 상황
CPU (기본) ~2-5초 소규모 (10만 이하), 복잡한 로직
GPU Processing ~0.1-0.3초 대규모 (10만 이상), 수학 연산 중심
GPU Processing 제한사항

모든 노드가 GPU 처리를 지원하는 것은 아닙니다. 현재 수학 연산, 필터링, 노이즈 등 데이터 병렬 처리에 적합한 노드에서 GPU 가속이 가능합니다. Actor Spawning이나 복잡한 참조 처리는 여전히 CPU에서 수행됩니다.

03

인스턴싱과 드로우콜 최적화

HISMC, Nanite, ISM으로 렌더링 성능 극대화

인스턴싱 전략

인스턴싱 방식 드로우콜 적합한 상황
HISMC (기본) 메시당 1 드로우콜 일반적인 PCG 배치. LOD, 컬링 자동 지원
ISMC 메시당 1 드로우콜 계층적 컬링이 불필요한 경우
Nanite 메시 극도로 효율적 고폴리곤 메시, Nanite 지원 에셋
개별 Actor 인스턴스당 1+ 드로우콜 물리/AI 상호작용이 필요한 오브젝트
드로우콜 최적화 전략
// PCG 드로우콜 최적화 가이드 [전략 1: 메시 병합] → 같은 머티리얼의 메시를 Static Mesh Spawner 하나로 통합 → Weight로 변형 관리 → 결과: 1 드로우콜로 수천 인스턴스 렌더링 [전략 2: Nanite 활용] → Nanite 지원 메시 사용 → 자동 LOD + 극도로 효율적 렌더링 → 수백만 폴리곤도 실시간 렌더링 가능 [전략 3: LOD 관리] → 원거리 메시: 저폴리곤 LOD 또는 Impostor → HLOD 빌드로 원거리 자동 병합 → Hierarchical Generation으로 거리별 디테일 분리 [전략 4: Spawner 설정] Static Mesh Spawner: Instance Packing Mode: PackedISMC // 인스턴싱 최적화 Cull Distance: 20000 // 200m 이상 컬링
04

그래프 최적화 기법

PCG 그래프 자체의 실행 성능 개선

초기 필터링

그래프 초반에 강력한 필터를 배치하여 후속 노드가 처리할 포인트 수를 최소화합니다. Surface Sampler 직후에 Density Filter를 적용하세요.

불필요한 Attribute 제거

Delete Attributes로 더 이상 사용하지 않는 Attribute를 제거하여 포인트당 메모리를 절약합니다.

샘플러 밀도 최적화

필요 이상으로 높은 Points Per Sq Meter를 사용하지 마세요. 최종 배치 밀도의 2~3배 정도가 적정합니다.

캐싱 활용

자주 변경되지 않는 중간 결과를 PCG Data Asset으로 캐싱하면 반복 실행을 방지할 수 있습니다.

최적화 전/후 비교

최적화 전 vs 최적화 후
// ❌ 최적화 전: 비효율적 패턴 [Surface Sampler] (1.0 ppsm) // 100만 포인트 생성[Spatial Noise] // 100만 포인트 처리[Transform Points] // 100만 포인트 변환[Density Filter] (0.8~1.0) // 80만 포인트 제거[Self Pruning] // 15만 포인트 제거[Spawner] // 5만 인스턴스 생성 // 처리: 100만 → 20만 → 5만 (낭비 95%) // ✅ 최적화 후: 효율적 패턴 [Surface Sampler] (0.15 ppsm) // 15만 포인트 생성[Density Filter] (0.3~1.0) // 즉시 간추리기[Self Pruning] // 겹침 제거[Spatial Noise] // 5만 포인트만 처리[Transform Points] // 5만 포인트 변환[Spawner] // 5만 인스턴스 생성 // 처리: 15만 → 5만 (낭비 67% 감소)
UE 5.7 성능 향상

UE 5.7에서 PCG 프레임워크의 내부 최적화로 약 2배의 성능 향상이 달성되었습니다. 동일 그래프를 UE 5.5에서 5.7로 마이그레이션하면 별도 조정 없이도 성능이 개선됩니다.

SUMMARY

핵심 요약

  • PCG 성능 병목은 생성 시간, 렌더링, 메모리, 스트리밍 네 유형으로 분류되며 stat PCG로 진단한다
  • GPU Processing은 수학 연산 중심의 대규모 포인트 처리를 CPU 대비 10~20배 가속한다
  • HISMC/Nanite 인스턴싱으로 수천 인스턴스를 1 드로우콜로 렌더링한다
  • 그래프 초반에 강력한 필터를 배치하여 후속 처리 포인트 수를 최소화해야 한다
  • Surface Sampler의 밀도는 최종 배치 밀도의 2~3배 정도가 적정하다
  • UE 5.7에서 별도 최적화 없이도 약 2배 성능 향상이 달성되었다
PRACTICE

도전 과제

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

실습 1: PCG 생성 시간 프로파일링

PCG 디버그 도구를 사용하여 각 노드의 실행 시간을 측정하세요. 병목 노드를 식별하고, 밀도를 줄이거나 필터를 앞 단계로 이동하여 생성 시간을 50% 이상 개선하세요.

실습 2: HISM과 ISM 최적화

Static Mesh Spawner의 출력을 Hierarchical Instanced Static Mesh로 전환하고, 일반 Static Mesh Actor 대비 드로우 콜과 메모리 사용량 차이를 측정하세요.

심화 과제: 프로덕션 레벨 PCG 최적화 파이프라인

LOD별 PCG 전략(LOD0: 풀 디테일, LOD1: 주요 오브젝트만, LOD2: 빌보드)을 구현하세요. HLOD 통합, 오클루전 기반 생성 제어를 조합하여 60FPS를 유지하며 품질을 최대화하세요.