- 언리얼에선 Pak을 통해 패키징한다는 옵션을 활성화하면, Primary, Secondary Label Asset을 통해 Chuck를 그룹화하고 이를 패키징 단계에서 Cooking 할 수 있다.
- Chunk를 Cooking 할 때 Pak Rule이 적용되는데, 이 규칙은 아래와 같은 우선순위를 갖는다.
1. AssetLabel을 통해 지정된 PakRule 가장 낮은 우선순위를 가지며, PrimaryAsset과 같은 AssetLable 에셋에서 지정할 수 있다.
2. PakBlacklist '프로젝트/Build/TargetPlatform/PakBlacklist-BuildTarget.txt' 에 쿠킹시 제외할 에셋 경로를 지정할 수 있으며, 'CopyBuildToStagingDirectory.AutomationTool.cs' 스크립트 (빌드 체인에 사용되는 스크립트)을 확인해보면 블랙리스트 경로를 탐색하고 해당 경로 내 에셋을 스테이징 단계에서 빼버리기 때문에, 에셋라벨에서 지정한 Rule 보다 높은 우선순위로 적용된다.
3. PakFileRules.ini (BasePakFileRules, DefaultPakFileRules) 'CopyBuildToStagingDirectory.AutomationTool.cs'의 'CreatePakUsingStagingManifest' 함수 내부를 들여다보면 아래와 같은 내용을 확인할 수 있다.
LogInformation("Creating pak using staging manifest.");
DumpManifest(SC, CombinePaths(CmdEnv.LogFolder, "PrePak" + (SC.DedicatedServer ? "_Server" : "") + "_" + SC.CookPlatform));
var UnrealPakResponseFile = CreatePakResponseFileFromStagingManifest(SC, SC.FilesToStage.UFSFiles);
List<PakFileRules> PakRulesList = GetPakFileRules(Params, SC);
List<string> FilesToRemove = new List<string>();
// Apply the pak file rules, this can remove things but will not override the pak file name
foreach (var StagingFile in UnrealPakResponseFile)
{
bool bExcludeFromPaks = false;
ApplyPakFileRules(PakRulesList, StagingFile, null, null, out bExcludeFromPaks);
if (bExcludeFromPaks)
{
FilesToRemove.Add(StagingFile.Key);
}
}
'CreatePakResponseFileFromStagingManifest' 함수를 통해 Blacklist에 명시되어있는 경로 내 에셋을 제외한 PakResponseFile을 받고, 해당 파일들에 'GetPakFileRules' 함수를 통해 'BasePakFileRules.ini' 부터 계층적으로 정의되어 있는 FileRules을 적용한다.
4. CookerSettings 엔진에서 쿠킹 세팅 정보를 참조하는데 사용하는 CookerSettings 객체는 'PostInitProperties' 단계에서 'UpdateClassesExcludedFromDedicatedServer' 'UpdateClassesExcludedFromDedicatedClient' 함수를 호출한다. 위 두 함수는 UObject에 선언되어 있으며 'GDedicatedServerExclusionList'와 'GDedicatedClientExclusionList'을 갱신하는데 이 변수들은 Asset화 되어있는 UObject들이 Chunking 되기 위해 직렬화 될 때 참조돼 쿠킹에 사용될 데이터화될지 말지를 결정 짓는데 결정적 요소가 된다. (해당 내용은 ObjectResource과 ArchiveStackTrace의 동작과정을 살펴보면 이해하기 쉽다.)
스테이징에 사용될 에셋을 직렬화하는 과정에서 사용되기에 스테이징 되어있는 에셋을 거르는 PakFileRules 보다 우선순위가 높다.