PART 3 · 강의 4/4

PSO 캐싱 전략

셰이더 컴파일 스터터링을 방지합니다

01

PSO란?

Pipeline State Object

PSO (Pipeline State Object)는 렌더링 객체에 필요한 셰이더들과 GPU 설정(컬링 모드, 블렌드 모드, 깊이/스텐실 비교 모드 등)을 패키징한 것입니다.

왜 중요한가?

새 PSO를 온디맨드로 생성하면 100ms 이상 걸릴 수 있어 스터터링(끊김)의 주요 원인이 됩니다. 게임 중 갑자기 끊기는 현상의 상당수가 PSO 컴파일 때문입니다.

⚡ PSO 컴파일이 발생하는 상황

🎨 새 머티리얼 조합

처음 렌더링되는 머티리얼

🔄 새 셰이더 순열

새로운 셰이더 조합 필요

📺 렌더 타겟 변경

렌더 타겟 포맷 변경 시

02

PSO Precaching (UE 5.2+)

자동 PSO 수집 및 컴파일

PSO Precaching은 UE 5.2에서 도입되어 5.3 이상에서 프로덕션 레디 상태입니다. 자동으로 PSO를 수집하고 비동기 컴파일합니다.

🔄 PSO Precaching 작동 순서
1
PostLoad
컴포넌트 로드 시
2
수집
PSO 파라미터
3
이니셜라이즈
메시 패스 반복
4
비동기 컴파일
백그라운드 처리
전역 셰이더 PSO 프리캐시 설정
코드 보기
# 기본 활성화 (DefaultEngine.ini) r.PSOPrecache.GlobalShaders=1
자동 활성화

UE 5.3 이상에서는 PSO Precaching이 기본적으로 활성화됩니다. 별도 설정 없이 스터터링이 감소합니다.

03

Bundled PSO Cache (레거시)

수동 PSO 캐시 생성

레거시 방식이지만 여전히 유효합니다. 게임 플레이 중 PSO를 기록하고 패키지에 포함합니다.

활성화 설정 (DefaultEngine.ini)
코드 보기
[DevOptions.Shaders] ShaderPipelineCache.Enabled=True ShaderPipelineCache.LogPSO=True # PSO 기록 파일 위치 # Saved/CollectedPSOs/*.rec.upipelinecache

수동 PSO 수집 워크플로우

  • 1단계: PSO 로깅 활성화하고 게임 전체 플레이
  • 2단계: 수집된 .rec.upipelinecache 파일 확인
  • 3단계: Build 폴더에 포함하여 패키징
  • 4단계: 게임 시작/레벨 로드 시 PSO 프리컴파일
04

히치 감지 및 메모리 관리

PSO 관련 설정

히치 감지 임계값 설정
코드 보기
# PSO 컴파일 히치 임계값 (기본 20ms) r.PSO.RuntimeCreationHitchThreshold=20 # 이 값 이상 걸리면 로그에 경고 출력

메모리 vs 성능 트레이드오프

프리캐시 후 PSO 삭제

메모리 절약. 단점: 첫 렌더링 시 마이크로 스터터 가능

프리캐시된 PSO 유지

스터터링 최소화. 단점: 1GB+ 메모리 증가 가능. RAM 충분한 환경에서만

권장 설정

콘솔 및 고정 사양 환경에서는 PSO 유지, PC 환경에서는 메모리 상황에 따라 선택하세요.

SUMMARY

핵심 요약

  • PSO: 셰이더 + GPU 상태 패키지, 온디맨드 생성 시 스터터링 원인
  • PSO Precaching: UE 5.2+ 자동 수집/컴파일, 5.3+ 프로덕션 레디
  • Bundled PSO Cache: 레거시 수동 방식, 전체 플레이로 수집
  • 히치 임계값: r.PSO.RuntimeCreationHitchThreshold=20ms
  • 메모리 트레이드오프: PSO 유지 vs 삭제 선택
Part 3 완료!

GPU 최적화를 마스터했습니다! 다음 Part에서는 메모리 최적화의 핵심인 Asset 참조, Streaming, 텍스처 관리를 다룹니다.

PRACTICE

도전 과제

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

실습 1: PSO 캐시 수집

r.ShaderPipelineCache.Enabled=1로 PSO 캐시를 활성화하고 게임의 모든 레벨을 순회하세요. 수집된 PSO 캐시 파일 크기와 엔트리 수를 확인하고, 첫 실행 시 히칭 감소를 측정합니다.

실습 2: PSO 프리컴파일 검증

빌드 파이프라인에서 수집된 PSO 캐시를 포함하여 패키징하세요. 새로 설치한 환경에서 게임 시작 시 셰이더 컴파일 히칭이 발생하지 않는지 확인합니다.

심화 과제

자동화된 테스트가 모든 레벨/머티리얼 조합을 순회하여 PSO를 수집하는 커맨드렛을 구현하세요. CI/CD에서 매 빌드마다 PSO 캐시를 갱신하고, 누락된 PSO로 인한 런타임 컴파일을 0건으로 달성합니다.