UDN
Search public documentation:

ContentCookingKR
English Translation
日本語訳
中国翻译

Interested in the Unreal Engine?
Visit the Unreal Technology site.

Looking for jobs and company info?
Check out the Epic games site.

Questions about support via UDN?
Contact the UDN Staff

UE3 홈 > 언리얼 엔진 3 기본 > 콘텐츠 쿠킹

콘텐츠 쿠킹


문서 변경내역: Josh Adams 작성. 홍성진 번역.

개요


콘텐츠 쿠킹이란 콘텐츠를 지원되는 콘솔 포맷(현재 Xbox360 과 PS3)으로 주물러 변환해 넣는 것을 말합니다. PC 역시도 쿠킹된 데이터를 사용하면 로딩 속도가 훨씬 빨라집니다. 대부분 꽤나 단순한 내용이지만, 최소한 팀원 중 한 명은 알아둬야 합니다.

쿠커 자체는 언리얼 커맨드렛 일 뿐입니다. 일반적으로는 Unreal Frontend 툴을 사용하여 미리 환경설정해 둔 옵션으로 커맨드렛을 호출하는 툴입니다. 물론 커맨드렛을 직접 사용하여 콘텐츠를 쿠킹할 수도 있습니다.

그 전에 엔진 빌드가 셋업 되었는지 확인하십시오!

쿠킹


쿠커의 주요 역할은 콘솔(과 PC)에 로드하기 최적의 형태로 패키지를 저장하는 것입니다. 패키지에서 처리되는 작업은 다음과 같습니다:

  • 에디터-전용 데이터처럼 불필요한 데이터 벗겨내기 (파일 크기에 큰 영향을 끼칩니다.)
  • 바이트-스와핑하느라 CPU 부하가 걸리지 않는 big-endian 아키텍처로 로드할 수 있도록 모든 데이터를 바이트-스와핑
  • 리소스가 네이티브 포맷으로 저장될 수 있도록, 그래서 콘솔에서 별다른 가공 없이 직접 로드할 수 있도록 리소스 처리하기
  • 탐색(seek) 시간이 느린 (DVD/BD 등의) 미디어에서 최적의 로딩을 위한 시크프리(seek-free) 자체완결(self-contained) 패키지 만들기

콘솔 UE3 는 쿠킹된 패키지 로드만 지원합니다. PC UE3 는 쿠킹됐든 안됐든, 심지어 짬뽕도 로드 가능합니다.

쿠킹 대상 결정하기

커맨드렛의 작동 방식은 패키지를 로드하고, 처리한 다음, 다시 저장하는 식입니다. 로드할 패키지 목록은 명령줄과 .ini 세팅으로 결정합니다. 쿠킹된 패키지는 cooked 디렉토리에 저장되며, 포맷은 XXXGame/CookedYYY 식으로 XXX 는 게임 이름이고, YYY 는 플랫폼 이름입니다. 쿠킹된 패키지 파일은 콘솔에서 .xxx, PC 에서 원래 확장자를 갖습니다. 디폴트로 쿠킹된 패키지의 날짜 이후로 생성된 패키지만 다시 쿠킹되지만, 명령줄 옵션으로 다른 방식도 가능합니다.

특수 파일 Textures.tfc (.tfc는 Texture File Cache) 에는 모든 스트리밍 텍스처가 담겨 있습니다. 콘솔에는 기본 작동방식이나, 끌 수 있습니다. .tfc 파일이 없으면 콘솔은 참조된 콘텐츠 패키지의 사본을 텍스처만 남겨둔 채로 저장합니다. .tfc 파일이 있으면 콘텐츠 패키지가 필요치 않기에, Cooked 디렉토리에는 탐색시간 없는 패키지와 .tfc 파일만 포함됩니다.

세부적인 작업방식은 이렇습니다:

  • 논-시크프리 패키지 (.tfc 사용중이지 않을 때):
    • 쿠킹되고 있는 시크프리 패키지에 참조되고 있는 논-시크프리 패키지 중 out of date 쿠킹
  • 시크프리 패키지 (스크립트, 스타트업, 맵)
    • (참조된 콘텐츠 패키지 중 새로운 것이 있는지 검사해서) 소스 파일에 비해 out of date 인 시크프리 패키지 쿠킹
    • (.tfc 사용시) 시크프리 패키지 처리 도중 텍스처나 out of date 텍스처를 스트리밍용 .tfc 파일에 추가
  • 스탠드얼론 시크프리 패키지
    • 소스 파일에 비해 out of date 인 스탠드얼론 시크프리 패키지 복사

-full 옵션은 쿠킹된 패키지를 먼저 전부 삭제하므로, 모든 파일의 날짜 검사가 실패하여 전부 쿠킹됩니다. -recookseekfree 면 맵, 스타트업, 스탠드얼론 시크프리 패키지는 어찌됐든 쿠킹됩니다.

명령줄

일반적으로 쿠커는 Unreal Frontend 로 실행되나, 쿠킹 자동화같은 작업을 하려면 명령줄 인터페이스를 사용해야 합니다.

  gamename.exe CookPackages [map1] [map2] ... [mapn] -platform=<Platform> -[options]
  

옵션

  • platform= <PLATFORM>: 쿠킹 대상 플랫폼을 설정합니다. PLATFORM 은:
    • pc - 에디터가 지원되는 PC 쿠킹
    • pcserver - 전용 서버용 PC 쿠킹 (에디터 지원 없음, 대부분 데이터 벗겨냄)
    • pcconsole - 콘솔같은 PC 쿠킹 (에디터 지원 없음, 여분 데이터 벗겨냄)
    • ps3, xbox360, xenon - 콘솔 플랫폼
    • tegra, iphone - 모바일 플랫폼
  • full: 기존 패키지를 강제로 전부 다시 저장합니다. 이 옵션이 지정되면 CookedYYY 폴더의 내용물 전부가 먼저 지워집니다.
  • singlethread: 멀티스레드 쿠킹을 끕니다.
  • processes= <N>: 멀티스레드 쿠킹에 N 개의 프로세스를 사용합니다.
  • recookseekfree: 모든 시크프리 패키지를 강제로 다시 쿠킹합니다 (명령줄이나 .ini 에 있는 스타트업, 스탠드얼론 시크프리, 맵). 디폴트 의존성 검사가 작동하지 않을 때 좋습니다 (특히 스탠드얼론 시크프리 패키지가 그러한데, 맵과는 달리 논-시크프리 패키지가 변경되도 모든 스탠드얼론 시크프리 패키지를 다시 쿠킹하지 않기 때문입니다).
  • cookallmaps: 게임의 모든 맵을 쿠킹합니다.
  • mapsonly: 맵만 쿠킹하고, 다른 것은 시도하지 않습니다.
  • inisonly: .ini 와 현지화 파일만 (Coalesced.ini 와 Coalesced.int 등의 파일에) 쿠킹합니다.
  • sha: startup 과 coalesced(합체된) 파일에 대한 SHA 해시를 생성하여 Hashes.sha 파일로 출력합니다.
  • languageforcooking= <LANG>: 단일 언어 쿠킹용 언어를 LANG 으로 설정합니다. 디폴트는 int (영어) 입니다.
  • multilanguagecook= <LANG1<+LANG2<-LANG3...>>>: 동시에 여러 언어를 쿠킹합니다. 예: -multilanguagecook=int+ita-fra 는 영어, 이탈리아어, 프랑스어를 쿠킹합니다. 언어 앞에 (French 처럼) 빼기 부호가 붙은 경우는 스타트업 패키지와 ini 파일만 쿠킹되는 텍스트 현지화 용입니다.
  • saveshadersatend: 모든 패키지 이후가 아닌 쿠킹 종료시까지 쿠커가 셰이더 캐시 저장을 미루도록 합니다.
  • nopackagecompression: 쿠킹된 패키지의 패키지 압축을 허용하지 않습니다. 쿠킹 속도가 빨라지나, 패키지 크기는 늘어납니다.
  • noloccooking: 현재 언어에 대한 자막만 처리하여, 현재 언어용으로 합체된 현지화 파일만 생성합니다.
  • verifytfc: .tfc 파일에 에러가 있는지 검사합니다.
  • analyzereferecedcontent: 쿠킹된 패키지가 참조하는 콘텐츠 통계 덤프를 뿌립니다. FAnalyzeReferencedContentStat 참고.
  • usermode: DLC 나 mod 식(, 즉 명령줄에 지정된 것만 쿠킹하고, shipped 스크립트 패키지는 쿠킹하지 않는 식)으로 콘텐츠를 쿠킹합니다. DLC 관련 상세 정보는 Downloadable Content KR, DLC On PS3 KR 페이지를 참고하시기 바랍니다.
  • skipmaps: 맴이 아닌 시크프리 패키지만 쿠킹합니다.
  • skipsavingmaps: 쿠킹하지만 맵은 저장하지 않습니다. 맵에 사용되는 LOC 데이터 쿠킹에 좋습니다.
  • skipnotrequiredpackages: LOC 쿠킹 속도 향상을 위해 쿠킹 프로세스에 필요치 않은 패키지의 로드&저장을 생략합니다.
  • skipmaterialcleanup: 쿠킹 반복 속도 향상을 위해 머티리얼 정리 작업을 생략합니다.
  • skipstaticmeshclean: 레벨에 놓인 스태틱 메시 인스턴스에 머티리얼을 푸시하는 작업을 생략합니다. skipmaterialcleanup 에도 이 작업이 자동으로 수행됩니다.
  • skippmapobjs: P-maps 에 포함된 오브젝트를 식별해 내고, 그것이 포함된 서브레벨에서 제거하는 단계를 생략합니다. (주: 여러 개의 P-map 에 포함된 서브레벨은 자동으로 이 최적화 작업을 생략합니다.)
  • skippsysmodules: 파티클 시스템에 중복된 모듈 제거 작업을 생략합니다.
  • fastcook: NOLOCCOOKING, SKIPMATERIALCLEANUP, SKIPPSYSMODULES, SKIPPAMPOBJS & QUICK 옵션을 전부 붙인 것과 같습니다.

출력

쿠커 출력은 레벨, 네이티브 스크렙트 패키지, 결합된 스타트업 패키지, 텍스처 스트리밍 패키지, 스탠드얼론 시크프리 파일, 텍스처 파일 캐시, 메타데이터/헬퍼 파일 등, 총 6 가지 파일 타입 중 하나입니다.

레벨 은 필요한 콘텐츠가 전부 포함된 패키지로, 하이-레벨 텍스처 밉을 제외한 것인데, 근본적으로는 레벨을 로드하는 데 있어 (하이-디테일 텍스처가 없는) 시크-프리 형식이 됩니다.

네이티브 스크립트 패키지 는 UnrealScript 패키지로 네이티브 클래스가 포함되어 있어 게임 시동시 항상 로드되는 것입니다. 스크립트 코드로 참조된 콘텐츠도 같이 쿠킹되므로, 스크립트 코드로 직접 참조되는 콘텐츠가 얼마나 되는지 신경써야 합니다. Gears of War 의 경우, 네이티브 베이스 클래스가 있는 메인 네이티브 스크립트 패키지 WarfareGame.u 하나와, 네이티브 클래스는 없지만 항상 로드할 필요는 없는 (몬스터 등) 콘텐츠를 많이 참조하는 서브클래스는 많은 WarfareGameContent.u 가 있었습니다.

결합된 스타트업 패키지 는 게임을 띄우는 데는 필요하지만 메인 메뉴 레벨에는 쿠킹되어 있지 않은 데이터를 포함한 패키지를 모두 결합한 패키지입니다. 여기에는 DefaultMaterial 같은 오브젝트가 포함됩니다. 스타트업 패키지에 있는 오브젝트는 항상 로드됩니다.

텍스처 스트리밍 패키지 에는 실제 하이-레벨 (큰) 밉 데이터가 포함되는데, DVD 에 너무 많이 중복되지 않도록, 런타임에 쉽게 스트림 되도록 하기 위함입니다.

스탠드얼론 시크프리 패키지 는 맵이나 스크립트는 아니지만, 그 안의 참조를 하나의 패키지에 끌어모은 패키지입니다. Unreal Tournament 에서 커스텀 캐릭터 부속(piece) 패키지에 사용됩니다. 여러 부속으로 캐릭터를 만들 때, 메시와 그 의존 텍스처를 빠르게 로드하기 위해 스탠드얼론 시크프리 패키지를 (비동기식으로) 로드합니다. 콘솔에서는 DynamicLoadObject 가 지원되지 않으므로, 오브젝트를 로드하기 위해 풀 패키지 로딩을 사용합니다. 쿠킹했을 때 스탠드얼론 시크프리 패키지는 _SF 확장자가 있는 것과 없는 것 두 가지 패키지로 출력 가능합니다. _SF 파일은 오브젝트와 그 의존성이 모두 포함된 실제 시크프리 패키지이며, _SF 가 없는 파일은 스트리밍 텍스처를 포함합니다. (엔진은 압축 차이로 인해 시크프리 파일에서는 텍스처를 스트림 아웃하지 않습니다.)

텍스처 파일 캐시 는 스트리밍 텍스처 가치가 있는 다수의 패키지를 하나의 파일로 결합한 것입니다. 디스크의 파일 총 수를 줄이는 데는 물론, 한 번에 열린 파일 총 수(가 제한되어 있는 플랫폼의 경우, 그 수)를 줄이는데 사용할 수도 있습니다.

오디오 스트리밍 패키지 는 생성되지 않으나, 오디오가 포함된 패키지를 스트림할 수는 있습니다. 임의의 오디오에 대한 동시 스트리밍을 구현하는 것 보다 가급적이면 텍스처 스트리밍에 많은 대역폭을 할당하고자 했기에, 이러한 접근법이 채택되었습니다. 언리얼 토너먼트나 기어즈 오브 워 같이 빠른 액션 게임에 딜레이가 생기는 것은 있을 수 없는 일이기 때문이죠. 이쯤에서 FaceFX 애님에 동기화시키는 작업도 골칫거리가 되었습니다. 이에 대한 대안으로써 기어즈 용으로 특수한 다이얼로그 시스템 이 만들어 졌습니다.

PC 와 쿠킹

PC 는 데이터가 쿠킹되었어도 안되었어도 실행할 수 있습니다. 쿠킹된 데이터로 게임을 실행하려면 -seekfreeloading 명령줄 옵션을 사용하(거나 Unreal Frontend 에서 Run with Cooked Data 박스를 체크하)면 됩니다. 쿠킹된 데이터를 가지고 에디터를 실행하려면 -cookededitor 명령줄 옵션을 사용하면 됩니다.

PC 와 콘솔 용 쿠킹의 차이점이라면:

  • PC 패키지는 확장자가 유지되나, 콘솔은 .xxx 로 바뀝니다.
  • PC 논-시크프리 패키지에는 텍스처만 유지되는 콘솔과는 달리 모든 오브젝트가 유지됩니다.
  • 콘솔 쿠킹은 TextureFileCache 패키지를 지원합니다.
  • 콘솔 쿠킹은 PC 쿠킹보다 "raw 데이터"를 더 제거하는데, PC 에디터는 (UT3 등에서처럼) MOD 등을 지원하고자 쿠킹된 패키지를 사용하여 로드할 수도 있기 때문입니다.

UT3 PC 는 쿠킹된 데이터로 출하되며, mod 가 허용됩니다. 사용자에게 "Publishing" 라는 형태로 제공했는데, 쿠킹과 비슷하나 패키지를 모드 속에 쿠킹하기만 한 것입니다. 근본적으로 PC 에서 "-usermode" 로 쿠킹하는(, 즉 네이티브 스크립트 패키지를 쿠킹하진 않는) 것입니다.

쿠킹된 패키지


종류

쿠킹된 패키지에는 네 가지 종류가 있습니다. 다음은 그에 대한 설명과 로딩 방식입니다.

네이티브 스크립트 패키지

설명: 이 패키지에는 네이티브 스크립트 코드가 포함됩니다. "시크프리" 패키지로 쿠킹 및 제작합니다. (비록 Core 나 Engine 같은 스크립트 패키지는 오브젝트간의 엄청난 상호의존성 때문에 100% 시크프리가 될 수는 없습니다. bPreloadPackagesFromMemory 옵션의 주소는 메모리를 읽어 결정되니 탐색이 낄 여지가 없습니다.) 쿠킹을 통해 모든 직접-참조 (이름에 " 대신 ' 가 붙은) 컨텐츠(텍스처, 메시 등)를 패키지 속으로 끌어들입니다.

로딩: 영원히 계속해서 100% 풀 로딩입니다. ^_^ 시동시 가장 먼저 로드됩니다. (Core, Engine, GameFramework, UTGame 등)

스타트업 패키지

설명: 이 패키지는 게임을 초기에 부팅하는 데 필요한 추가 패키지로, 그 콘텐츠가 다른 패키지에 쿠킹되지 않은 것입니다. [Engine.StartupPackages] 에 나열되어 있습니다. 이 패키지 안의 오브젝트는 스크립트 코드나 맵에서 직접 참조되지 않아 수동으로 쿠킹이나 로드할 필요가 있을 때 사용합니다.

로딩: 이 패키지의 모든 오브젝트는 시동시 로드되며 절대 가비지 콜렉팅되지 않습니다. 즉 이 패키지에 불필요한 오브젝트가 있으면 제거해 줘야 런타임 메모리를 보존할 수 있다는 것입니다.

맵 패키지

설명: 맵과 그 맵이 참조하는 모든 콘텐츠( 중 네이티브 스크립트 패키지에 있는 클래스는 제외한 것)입니다. 네이티브 스크립트 패키지처럼 시크프리입니다. 다수의 쿠킹된 맵에는 (두 맵이 같은 텍스처를 사용하면 그 맵 둘 다에 텍스처가 쿠킹되므로) 같은 오브젝트가 포함되어 있을 수 있습니다. 그러면 DVD/BD 사용량이 늘어나지만, (레벨이 여럿 로드되는 스트리밍 레벨의 경우) 다른 맵에서 사용되어 이미 메모리에 있는 오브젝트는 생략되기에 런타임 메모리에는 영향을 끼치지 않습니다.

로딩: 게임이나 플레이어가 맵을 전환할 때 로드됩니다. (보통 스트리밍 등의 목적으로 비동기식) 풀 로드되며, LoadMap 를 호출하여 레벨이 언로드되거나 스트림 아웃 될 때까지 오브젝트가 유지됩니다.

텍스처 패키지

설명: 텍스처 스트리밍용 하이-레벨 밉 데이터를 포함하는 패키지입니다. 쿠킹 도중 하이-레벨 밉을 제외한 모든 것이 패키지에서 제거됩니다.

로딩: 전혀 패키지로써 로드되지 않으며, (그 로우-레벨 밉은 쿠킹된 패키지에 있는) 스트리밍 텍스처로만 사용됩니다.

사용법

애셋 쿠킹 방법은 그 사용법에 따라 다릅니다:

Directly referenced: 오브젝트가 그에 대한 직접 오브젝트 참조가 있는 경우, 그것을 필요로 하는 (네이티브 스크립트, 맵) 시크프리 패키지는 쿠킹된 시크프리 패키지 속으로 끌어옵니다. 그 오브젝트에 스트리밍 텍스처가 있고 텍스처 파일 캐시를 미사용하지 않는 이상, 애셋 패키지는 Cooked 디렉토리에 존재하지 않을 것입니다.

해결책: 없습니다. 의도된 대로입니다.

Loaded dynamically from any level: 시크프리 (네이티브 스크립트, 맵) 패키지가 오브젝트를 참조하지 않는다면, 오브젝트는 런타임에 로드되는 것입니다. 그렇다면 LoadPackage 로 오브젝트를 로드해야 하는데, 콘솔에서 DynamicLoadObjectLoadPackage 를 통해 이미 로드된 오브젝트가 아니면 NULL 을 반환하기 때문입니다.

해결책: 게임 DefaultEngine.ini 의 [Engine.PackagesToAlwaysCook] 스탠드얼론 시크프리 패키지라 마킹합니다.

  [Engine.PackagesToAlwaysCook]
  +SeekFreePackage=MyGamePackage
  

그러면 MyGamePackage_SF.xxx (, 텍스처가 있고 TextureFileCache 를 사용하지 않는다면 스트리밍 텍스처 용으로는 MyGamePackage.xxx) 가 생성됩니다. 이 패키지는 외부 참조와 스트리밍 텍스처와 제대로 작동하지 않던 기존 포맷보다 콘솔 로딩에 좀 더 적합해 집니다.

Loaded dynamically from one level: 한 두 (메뉴) 레벨만 오브젝트를 동적으로 로드한다면, 패키지를 강제로 맵 파일 안에 우겨넣은 다음 그 맵이 로드되었을 때만 항상 로드되게 할 수 있습니다.

해결책: 게임 DefaultEngine.ini 파일의 [Engine.PackagesToForceCookPerMap] 부분에서, 맵에 강제로 우겨넣을 패키지를 설정합니다:

  [Engine.PackagesToForceCookPerMap]
  .Map=MyFrontend
  .Package=MyGamePackage
  

이제 MyFrontend 가 로드될 때마다 MyGamePackage 의 모든 오브젝트가 로드되며, DynamicLoadObject=/=FindObject 를 사용해서 구해올 수 있습니다.

Used in EVERY level: 언제고 사용될 수 있는 오브젝트라면 한 번만 로드해도 항상 메모리에 상주할 수 있도록 Startup 패키지에 넣는 것이 맞습니다.

해결책: 게임 DefaultEngine.ini 의 [Engine.StartupPackages] 부분에 패키지를 추가하십시오:

  [Engine.StartupPackages]
  +Package=MyGamePackage
  

환경설정 (Configuration)


환경설정 파일

게임에 쿠킹 셋업을 할 때 변경해 줘야 하는 .ini 파일이 몇 있습니다. 콘솔의 Engine.ini 파일은 메인 Engine.ini 파일에서 생성되므로, 이 세팅을 게임 DefaultEngine.ini 파일에서 지정해 줄 수 있어야 하겠습니다. 그러나 쿠커는 그 세팅을 생성된 타겟 플랫폼의 Engine.ini 파일에서 찾아보기에, 게임 플랫폼-전용 Engine.ini 파일에 지정하면 됩니다.

[Engine.PackagesToAlwaysCook]

설명: 스탠드얼론 시크프리 패키지는 물론 모든 사용자가 쿠킹했는지 확인하고자 하는 맵을 넣기 위한 부분입니다. Dec QA 빌드 이후 모든 논-시크프리 패키지는 어찌됐든 쿠킹되므로, 더이상 쿠킹시킬 랜덤 패키지를 지정할 필요는 없습니다.

이 부분은 나중에 두 부분으로 나뉘어 이름이 바뀔 수도 있는데, 시간에 따라 용도가 바뀌어 왔기 떄문입니다. 또한 스탠드얼론 시크프리 패키지는 매번 다시 쿠킹되지 않습니다. 명령줄에 따로 지정해주지 않으면 말입니다.

사용 시기: 메인 메뉴 레벨처럼 가까이 둘 패키지를 넣어야 하겠습니다. 또 스탠드얼론 시크프리 패키지가 필요할 때입니다. 쿠킹 확인할 맵에는 "Package=" 를, 시크프리 패키지를 지정하는 데는 "SeekFreePackage=" 를 사용하십시오.

Format:

  [Engine.PackagesToAlwaysCook]
  +Package=entry
  +Package=UTFrontend
  +SeekFreePackage=CH_IronGuard_Male
  

[Engine.StartupPackages]

설명: 여기 나열된 패키지는 언어별로 하나의 시크프리 스타트업 패키지로 결합됩니다 (Startup_int.xxx, Startup_kor.xxx 등). 이 패키지의 오브젝트(와 그 의존성)는 게임 초기 부팅에 필요하며, 항상 메모리에 있게 됩니다. 항상 요. 또한 이 패키지의 오브젝트는 다른 패키지에 쿠킹되지 않습니다.

사용 시기: 초기 부팅시나 항상 메모리에 상주시킬 오브젝트가 필요할 때입니다. 아래 예제에서 UI_Fonts 대신 적합한 폰트 파일이 사용될 것입니다. 즉 Korean 용으로 쿠킹할 때 UI_Fonts_KOR.upk 가 있었다면, Startup_KOR.xxx 속에 UI_Fonts_KOR 오브젝트를 넣을 것입니다.

Format:

  [Engine.StartupPackages]
  +Package=FX_HitEffects
  +Package=UI_Fonts
  +Package=UI_Scenes_HUD
  +Package=UI_Skins
  +Package=UI_Skin_Derived
  +Package=SpeechRecognition
  

bSerializeStartupPackagesFromMemory

설명: 초기 부팅 도중 상당량의 임시 메모리를 대가로 스타트업 시간을 빠르게 합니다. 스타트업시 이것이 하는 작업은, 스타트업 패키지 목록에 있는 것을 백그라운드 비동기식으로 메모리에 읽어 들이기 시작하는 것입니다. 즉 패키지를 약간 (상대적으로 느린) DVD 에서 읽어들이는 도중 다른 패키지를 처리할 수도 있는 것입니다. 디폴트로 엔진은 네이티브 스크립트 패키지, 스타트업 맵, Startup_*.xxx 등을 미리 로드합니다.

작동 방식은 이렇습니다:

  • DVD 에서 Core.u 를 할당된 메모리 청크에 읽어 들이기 시작
  • 완료 대기
  • Engine.u 읽기 시작
  • 메모리 청크에서 엔진으로 Core.u 직렬화 (LoadPackage)
  • 이미 읽어들인 패키지를 직렬화하면서 패키지 계속 읽기

사용 시기: 커다란 추가 메모리 청크를 할당하기에 충분한 메모리가 있으면서 부팅 속도를 빠르게 하고 싶을 때

Format: [Engine.StartupPackages] bSerializeStartupPackagesFromMemory=True

bFullyCompressStartupPackages

설명: 스타트업 패키지의 풀-패키지 압축을 가능케 합니다. 로드 시간 도중 단일 작업 안에서 비동기 압축해제 가능합니다.

사용 시기: bSerializeStartupPackagesFromMemory 와 결합되어, 스타트업 패키지의 백그라운드 로딩을 더욱 빠르게 할 수 있습니다. 엔진이 이미 로딩된 패키지를 처리하는 시점에 이르러서는 이미 압축 해제되어 있을 것입니다.

Format: [Engine.StartupPackages] bFullyCompressStartupPackages=True

[Engine.PackagesToForceCookPerMap]

설명: 이 부분은 특정 패키지를 강제로 맵 패키지 속에 완전히 쿠킹되도록 합니다.

사용 시기: 오브젝트 참조 대신 스트링 이름으로 로드 오브젝트를 구하기 위해 DynamicLoadObject (DLO) 를 사용하고자 할 때입니다. 쿠커는 스트링 참조가 아닌 오브젝트 참조만을 따를 것이므로, 오브젝트를 맵 속에 쿠킹되도록 하지는 않습니다. 예를 들어 UI 시스템은 UIScene 과 텍스처를 여는 데 DLO 를 사용합니다. 그래서 언리얼 토너먼트에서, 씬과 텍스처를 포함한 패키지를 강제로 메인 메뉴에 포함시킵니다. 그러면 UTFrontEnd 맵을 로드하기만 해도 씬과 텍스처가 로드되도록 합니다. 레벨이 로드되는 한 오브젝트는 가비지 컬렉팅되지 않을 것입니다.

포맷:

포맷은 Map= 뒤에 맵 속으로 가게 될 패키지를 나열하는 Package= 줄을 붙입니다.

  [Engine.PackagesToForceCookPerMap]
  .Map=UTFrontEnd
  .Package=UI_Scenes_Mutators
  .Package=UI_FrontEnd_Art
  .Package=UI_Portrait
  .Package=UI_Scenes_ChrisBLayout
  .Package=UI_Scenes_FrontEnd
  .Package=UI_Scenes_Common
  .Package=UI_Skin_Derived
  .Package=UI_Skins
  .Package=UI_Scenes_Campaign
  .Package=UI_Weapons
  .Map=UTM-MissionSelection
  .Package=UI_Scenes_Campaign
  .Package=UI_Skin_Derived
  .Package=UI_Skins
  

[Core.System] SeekFreePCPaths

설명: CookedPC 디렉토리 안의 상대 디렉토리 구조와 확장자를 유지하는 부분입니다. (-cookereditor 옵션을 붙였을 때의 에디터 기능용)

사용 시기: PC 쿠킹된 빌드

Format:

  [Core.System]
  SeekFreePCPaths=<PATH>