PART 7 - 강의 1/8

프로파일링 도구

Unreal Insights, Stat 명령어, GPU Profiler로 병목 지점을 정확히 파악하기

01

프로파일링이 중요한 이유

추측하지 말고 측정하라

핵심 원칙

"추측으로 최적화하지 마라." 프로파일링 없이 최적화하면 시간 낭비가 될 수 있습니다. 실제 병목 지점을 데이터로 확인한 후 최적화해야 효과적입니다.

최적화 프로세스

1
측정 (Measure)

프로파일링 도구로 현재 성능 상태를 측정합니다.

2
분석 (Analyze)

데이터를 분석하여 가장 큰 병목 지점을 찾습니다.

3
최적화 (Optimize)

병목 지점에 집중하여 최적화합니다.

4
검증 (Verify)

다시 측정하여 개선 효과를 확인합니다.

02

Unreal Insights

가장 강력한 프로파일링 도구

📊
Unreal Insights
CPU, GPU, 메모리, 로딩 시간 종합 분석

Unreal Insights는 UE5의 통합 프로파일링 도구로, 트레이스 기반의 상세한 성능 데이터를 제공합니다.

트레이싱 시작 방법

Console Command
// 에디터에서 트레이싱 시작 Window > Developer Tools > Session Frontend > Unreal Insights // 또는 콘솔 명령으로 시작/종료 trace.start trace.stop // 커맨드라인으로 상세 트레이싱 -trace=log,counters,cpu,frame,bookmark,file,loadtime,gpu,rhicommands,rendercommands,object -statnamedevents

주요 분석 채널

채널 분석 내용 사용 시나리오
cpu 게임 스레드, 틱 함수, 물리 프레임 드랍 원인 분석
gpu 렌더 패스, 셰이더 비용 GPU 바운드 상황 분석
memory 할당, 해제, 누수 메모리 최적화
loadtime 에셋 로딩 시간 로딩 최적화
frame 프레임 타이밍 프레임 히치 분석

C++에서 커스텀 이벤트 추가

C++
#include "ProfilingDebugging/CpuProfilerTrace.h" void AMyActor::ExpensiveFunction() { // Insights 타임라인에 이벤트로 표시됨 TRACE_CPUPROFILER_EVENT_SCOPE(MyActor_ExpensiveFunction); // 실제 작업 수행 PerformHeavyCalculation(); } // 북마크 추가 (특정 시점 표시) TRACE_BOOKMARK(TEXT("Level Loaded")); // 카운터 추적 TRACE_COUNTER_SET(TEXT("EnemyCount"), EnemyCount); TRACE_COUNTER_ADD(TEXT("TotalDamage"), DamageAmount);
03

Stat 명령어

실시간 성능 모니터링

📈
Stat Commands
즉각적인 실시간 통계 확인

기본 성능 확인

stat fps
stat unit
stat unitgraph
Console Commands
// 기본 성능 stat fps // FPS 표시 stat unit // CPU/GPU 프레임 시간 stat unitgraph // 프레임 시간 그래프 // 렌더링 stat scenerendering // 씬 렌더링 통계 (드로우 콜 포함) stat gpu // GPU 패스별 시간 stat rhi // RHI 통계 stat streaming // 텍스처 스트리밍 // 게임플레이 stat game // 게임 스레드 통계 stat physics // 물리 시뮬레이션 stat collision // 충돌 검사 stat ai // AI 시스템 // 메모리 stat memory // 전체 메모리 사용량 stat memoryplatform // 플랫폼별 메모리 stat levels // 레벨별 메모리 // 틱 분석 dumpticks // 틱킹 객체 목록 dumpticks grouped // 그룹별 정렬

C++ 커스텀 Stat 정의

C++
// Stat 그룹 정의 DECLARE_STATS_GROUP(TEXT("MyGame"), STATGROUP_MyGame, STATCAT_Advanced); // 개별 Stat 정의 DECLARE_CYCLE_STAT(TEXT("Expensive Function"), STAT_ExpensiveFunction, STATGROUP_MyGame); DECLARE_CYCLE_STAT(TEXT("AI Update"), STAT_AIUpdate, STATGROUP_MyGame); void AMyActor::ExpensiveFunction() { // RAII 스타일 - 스코프 종료 시 자동 측정 완료 SCOPE_CYCLE_COUNTER(STAT_ExpensiveFunction); // 측정할 코드 PerformHeavyCalculation(); } void AAIController::UpdateAI() { SCOPE_CYCLE_COUNTER(STAT_AIUpdate); // AI 로직 ProcessBehaviorTree(); }
사용 팁

stat MyGame 명령으로 커스텀 그룹의 통계를 확인할 수 있습니다. 병목 지점이 의심되는 함수에 SCOPE_CYCLE_COUNTER를 추가하여 정확한 비용을 측정하세요.

04

GPU Profiler

렌더링 병목 분석

🎨
GPU Profiler
렌더 패스별 GPU 시간 분석
Console Command
// GPU 프로파일러 실행 ProfileGPU // 콘솔 명령 Ctrl + , // 에디터 단축키

주요 렌더 패스

  • PrePass / DepthPass - 깊이 버퍼 렌더링
  • BasePass - 지오메트리 및 머티리얼 렌더링 (가장 비용이 큼)
  • ShadowDepths - 그림자 맵 렌더링 (VSM 포함)
  • Lighting - 조명 계산 (Lumen GI/반사 포함)
  • Translucency - 반투명 오브젝트 렌더링
  • PostProcessing - 후처리 효과 (TSR, DoF, Bloom 등)

시각화 모드

Console Commands
// 뷰모드 전환 viewmode wireframe // 와이어프레임 viewmode lit // 기본 lit viewmode unlit // 언릿 viewmode lightcomplexity // 라이트 복잡도 viewmode shadercomplexity // 셰이더 복잡도 (빨간색 = 비쌈) viewmode quadoverdraw // 쿼드 오버드로우 // LOD 시각화 viewmode levelcoloration // 레벨 컬러링 viewmode lodcoloration // LOD 컬러링 // Nanite 시각화 r.Nanite.Visualize.MaterialComplexity 1 r.Nanite.Visualize.RasterMode 1 // VSM 시각화 r.Shadow.Virtual.Visualize cache r.Shadow.Virtual.Visualize naniteoverdraw
05

Visual Logger

시각적 디버깅 도구

👁
Visual Logger
AI, 게임플레이 이벤트의 시각적 기록
C++
#include "VisualLogger/VisualLogger.h" void AMyAI::UpdateAI() { // 텍스트 로그 UE_VLOG(this, LogAI, Log, TEXT("AI State: %s"), *GetStateName()); // 위치 표시 (구체) UE_VLOG_LOCATION(this, LogAI, Log, GetActorLocation(), 50.f, FColor::Green, TEXT("AI Position")); // 선분 그리기 UE_VLOG_SEGMENT(this, LogAI, Log, StartPoint, EndPoint, FColor::Blue, TEXT("Path")); // 박스 그리기 UE_VLOG_BOX(this, LogAI, Log, BoundingBox, FColor::Yellow, TEXT("Detection Area")); } // 에디터에서: Window > Developer Tools > Visual Logger
활용 팁

Visual Logger는 AI 디버깅에 특히 유용합니다. 시간대별로 AI의 상태 변화, 이동 경로, 감지 영역 등을 시각적으로 확인할 수 있습니다.

SUMMARY

핵심 요약

핵심 포인트
  • Unreal Insights - 가장 강력한 종합 프로파일링 도구, 트레이스 기반 상세 분석
  • stat 명령어 - 실시간 성능 모니터링, 카테고리별 빠른 확인
  • GPU Profiler - 렌더 패스별 GPU 시간 분석, Ctrl+, 단축키
  • SCOPE_CYCLE_COUNTER - 커스텀 함수 비용 측정
  • Visual Logger - AI 및 게임플레이 이벤트 시각적 디버깅
  • 시각화 모드 - shadercomplexity, quadoverdraw로 렌더링 비용 확인
주의사항

프로파일링은 Test 또는 Development 빌드에서 수행해야 합니다. Debug 빌드는 최적화가 비활성화되어 실제 성능과 다를 수 있습니다.

PRACTICE

도전 과제

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

실습 1: stat 명령어 활용

RPG 오픈월드 씬에서 stat fps, stat unit, stat unitgraph를 실행하여 CPU/GPU/Game Thread/Render Thread 시간을 분석하세요. 병목 지점이 CPU인지 GPU인지 판별하세요.

실습 2: Unreal Insights 프로파일링

trace.start cpu,gpu,frame 명령으로 트레이스를 시작하고, Unreal Insights에서 프레임 타임라인을 분석하세요. 가장 비용이 높은 함수와 렌더링 패스를 식별하세요.

심화 과제: 체계적 프로파일링 워크플로우 수립

프로파일링 체크리스트를 만들고(stat GPU, stat SceneRendering, stat Nanite, stat Lumen, stat Memory), 빌드 전후 성능 비교 리포트를 자동 생성하는 워크플로우를 수립하세요.