빌드 최적화
Shipping 빌드, PSO 캐싱, Pak 파일 최적화로 최종 배포 준비
빌드 구성 이해
Development, Test, Shipping의 차이
디버깅 기능 포함
- 콘솔 명령 활성화
- 로깅 활성화
- 에디터 연결 가능
- 최적화 일부 적용
프로파일링용
- 디버깅 일부 포함
- 콘솔 명령 제한
- 프로파일링 활성화
- Shipping에 가까운 성능
최종 릴리스
- 모든 디버깅 제거
- 콘솔 명령 비활성화
- 최대 최적화 적용
- 치트 방지
실제 성능 측정은 Test 또는 Shipping 빌드에서 해야 합니다. Development 빌드는 디버깅 코드로 인해 성능이 10-30% 느릴 수 있습니다.
PSO 캐싱
셰이더 컴파일 히치 방지
PSO(Pipeline State Object)는 셰이더와 렌더 스테이트 조합입니다. 처음 만나는 PSO는 런타임 컴파일이 필요하여 히치(hitch)가 발생합니다. PSO 캐싱으로 이를 방지합니다.
개발 빌드로
모든 영역 플레이
.upipelinecache
파일 생성
Shipping 빌드에
포함
로딩 시
미리 컴파일
// DefaultEngine.ini
[/Script/Engine.RendererSettings]
r.ShaderPipelineCache.Enabled=True
r.ShaderPipelineCache.SaveBoundPSOLog=True
// PSO 수집 실행
// 1. Development 빌드로 게임 실행
// 2. 모든 맵, 모든 머티리얼, 모든 상황 테스트
// 3. 종료 시 .upipelinecache 파일 생성됨
// 커맨드라인 옵션
-logPSO // PSO 로깅 활성화
-clearPSODriverCache // 드라이버 캐시 초기화
PSO 캐시는 테스트한 상황만 포함합니다. 새로운 머티리얼 조합, 새로운 그래픽 설정, 새로운 플랫폼에서는 히치가 발생할 수 있습니다. 가능한 모든 경우를 테스트하세요.
Pak 파일 최적화
에셋 패키징 및 로딩 최적화
파일 순서 최적화
Pak 파일 내 에셋 순서를 로딩 순서에 맞게 정렬하면 디스크 시크가 줄어들어 로딩이 빨라집니다.
// 1. -fileopenlog 옵션으로 게임 실행
MyGame.exe -fileopenlog
// 2. 모든 영역 플레이 (로딩 순서 기록)
// 3. GameOpenOrder.log 파일 생성됨
// 위치: Saved/Logs/GameOpenOrder.log
// 4. 이 로그를 사용하여 Pak 재빌드
// 쿠킹 시 -FileOpenOrder 옵션 사용
Pak 청킹 (Chunking)
// Project Settings > Packaging > Asset Chunks
// 청크 분리 예시:
// Chunk 0: 기본 콘텐츠 (항상 로드)
// Chunk 1: 스토리 모드 콘텐츠
// Chunk 2: 멀티플레이어 콘텐츠
// Chunk 3: DLC 콘텐츠
// Primary Asset Labels로 청크 할당
// Asset Manager에서 관리
쿠킹 설정
불필요한 콘텐츠 제외
[/Script/UnrealEd.ProjectPackagingSettings]
; 쿠킹에서 제외할 디렉토리
+DirectoriesToNeverCook=/Game/Developers
+DirectoriesToNeverCook=/Game/Test
+DirectoriesToNeverCook=/Game/Debug
; 제외할 에셋
+DirectoriesToNeverCook=/Game/Maps/TestMaps
; 압축 설정
bCompressed=True
CompressionFormat=Oodle
[/Script/Engine.RendererSettings]
; 오클루전 쿼리 활성화
r.AllowOcclusionQueries=True
; 작은 오브젝트 컬링
r.MinScreenRadiusForLights=0.03
r.MinScreenRadiusForDepthPrepass=0.03
r.MinScreenRadiusForCSMDepth=0.01
; Early Z Pass 활성화
r.EarlyZPass=2
; 셰이더 최적화
r.Shaders.Optimize=1
빌드 자동화
CI/CD 파이프라인 구축
// Windows Shipping 빌드
RunUAT BuildCookRun ^
-project=C:/Projects/MyGame/MyGame.uproject ^
-platform=Win64 ^
-clientconfig=Shipping ^
-cook -stage -pak -archive ^
-archivedirectory=C:/Builds/MyGame ^
-compressed
// 멀티 플랫폼 빌드
RunUAT BuildCookRun ^
-project=MyGame.uproject ^
-platform=Win64+PS5+XSX ^
-clientconfig=Shipping ^
-cook -stage -pak -archive
// HLOD 빌드 포함
RunUAT BuildCookRun ^
-project=MyGame.uproject ^
-platform=Win64 ^
-clientconfig=Shipping ^
-cook -stage -pak ^
-buildworldpartitionhlods
- PSO 캐시 - 모든 상황 테스트 후 수집
- 불필요한 콘텐츠 제외 - 테스트 맵, 개발 에셋
- 압축 - Oodle 압축 활성화
- HLOD 빌드 - World Partition 사용 시 필수
- Pak 청킹 - DLC, 패치 대비 분리
핵심 요약
- Shipping 빌드 - 최종 릴리스용, 모든 최적화 적용
- Test 빌드 - 프로파일링용, Shipping에 가까운 성능
- PSO 캐싱 - 셰이더 컴파일 히치 방지
- 파일 순서 최적화 - -fileopenlog로 로딩 순서 최적화
- Pak 청킹 - DLC/패치용 콘텐츠 분리
- Oodle 압축 - 파일 크기 감소, 로딩 속도 향상
Shipping 빌드 전에 Reference Viewer로 의존성 체크, Size Map으로 에셋 크기 확인, memreport로 메모리 사용량을 반드시 점검하세요.
도전 과제
배운 내용을 직접 실습해보세요
Development 빌드와 Shipping 빌드의 성능 차이를 비교하세요. Shipping 빌드에서 로깅, 콘솔 명령, 통계 수집이 제거되는 것을 확인하고, RPG 프로젝트의 최종 빌드 설정을 구성하세요.
프로젝트의 Cook 시간을 단축하세요. Maps to Include, Asset Registry 최적화, 미사용 에셋 제거(Asset Audit)를 수행하고, Iterative Cooking 설정을 활성화하세요.
BuildCookRun 자동화를 구성하고, 패키지 크기 최적화(Pak 파일 압축, Chunk 분할), 패치 전략(Binary Patch Size 최소화)을 수립하세요. 타겟 플랫폼별 최적 설정을 문서화하세요.