[UE4] uasset 이외의 자산에 ChunkID 설정 (ue4.22 이상)

Chunk란?



ue4로 어플리케이션을 릴리스 할 때에는 게임을 구성하는 에셋을 일괄 정리한 팩 파일에 일괄 정리하는 경우가 많습니다만,
그것을 여러 개로 나누는 기능입니다.
우선은 이쪽의 슬라이드를 부디!

UE4의 모바일 개발에서 콘텐츠 업데이트 이야기 - Chunk ID와의 격투편 -

슬라이드에있는 것처럼 모바일에서 자산 분할 다운로드를 위해 만들어진 기능입니다.
모바일 이외의 플랫폼에서도 다운로드 콘텐츠나 게임을 시작할 때의 다운로드 대기 시간을 최소화하기 위해서도 사용됩니다.
최근에는 PrimaryAssetLabel 등을 활용하여 유연하게 ChunkId를 제어할 수 있게 되었습니다.

NonAsset 파일은?



UE4는 대부분의 자산을 엔진 내에서 uasset로 변환하여 사용합니다.
다만 미들웨어가 이용하는 일부의 에셋이나 동영상 파일등은 변환하지 않고 그대로 취급할 수 있습니다.
사용할 때는 특정 폴더 아래에 자산을 모아 Additional Non-asset Directory to Package에 경로를 설정합니다.



그리고는 PrimaryAssetLabel을 배치해 끝!
그리고 흥미롭고, 패키지 해 보면 모두 chunk0에 배치되는 결과가 되어 버립니다.

PrimaryAssetLabel이 Cook 처리의 마지막에 uasset의 배치를 관리하는 에셋 레지스트리와 제휴해 파일을 배분해, Non-asset 파일은 Cook가 끝난 후, 필요한 파일만을 추출하는 Staging 처리 중에서 ini 파일을 참조 하면서 배치되기 때문입니다.

다만 동영상 파일이나 미디어 파일은 크기 때문에 가능하면 Chunk 측으로 분할해 배분하고 싶은 곳이므로, 이것은 곤란합니다.

조치 (UE4.22 이상)



UE4.22부터 조용히 Non-Asset 파일을 포함한 모든 파일에 대해 ChunkId를 조작할 수 있는 PakFileRule.ini가 추가되었습니다.
이것을 작성하여 Chunk를 조작 할 수 있습니다.

사용법



프로젝트를 새로 만들 때 기본적으로 Config 폴더에
DefaultPakFileRule.ini는 자동으로 만들어지지 않습니다.
우선 이쪽을 신규 작성하는 곳부터 시작합시다. ini 파일은 일반 텍스트 파일입니다.



PakFileRule.ini 파일 형식



Engine/Config/BasePakFileRules.ini에 설명이 있습니다.

BasePakFileRules.ini
; These rules are applied in order, the first rule that applies per file is taken and no others are evaluated
; [SectionName]
; bOverrideChunkManifest=false      ; If true this allows overriding assignments from the cooker
; bExcludeFromPaks=false            ; If true this removes entirely, cannot coexist with overridepaks
; OverridePaks="pakchunk1"          ; If set this will override pak list, comma separated
; Platforms="iOS,Android"           ; If set this rule will only apply to these platforms
; Targets="Shipping,Test"           ; If set this rule will only apply to these configurations
; bOnlyChunkedBuilds=true           ; If set this rule will only apply to chunked builds
; bOnlyNonChunkedBuilds=true        ; If set this rule will only apply to non-chunked builds
; +Files=".../*FileMask*.*"         ; List of file masks to apply to, using the C# FileFilter class

필터에서 지정한 파일의 Chunk를 전환하거나 필터에서 지정한 파일을 Pak에서 제외할 수 있습니다.

설명 예



DefaultPakFileRule.ini
[Movies]
OverridePaks="pakchunk3"
bOverrideChunkManifest=true
+Files="*.mp4"

[NonAssetsInChunk1]
OverridePaks="pakchunk1"
bOverrideChunkManifest=true
+Files=".../NonAssets/Chunk1/..."

[OnlyMoviesInChunk2]
OverridePaks="pakchunk2"
bOverrideChunkManifest=true
+Files=".../NonAssets/Chunk2/.../*.mp4"


※2020/2/18 패스의 기술을 수정

pak 내용물 확인



pak을 확인하려면 UnrealPak이 편리합니다. 포함된 파일을 리스팅하려면 -List 옵션을 사용합니다.
다음은 작동 예입니다. Chunk1에 지정된 mp4 파일이 포함되어 있음을 알 수 있습니다.
> UE423\Engine\Binaries\Win64\UnrealPak.exe DestDir\WindowsNoEditor\ChunkPackage423\Content\Paks\pakchunk1-WindowsNoEditor.pak -List
LogPakFile: Display: Using command line for crypto configuration
LogPakFile: Display: Added 0 entries to add to pak file.
LogPakFile: Display: Mount point ../../../ChunkPackage423/Content/
LogPakFile: Display: "Maps/NewWorld.uexp" offset: 0, size: 250 bytes, sha1: 737C2BA2106A6D0A689280A4F0EAEFF31D42EFF4, compression: Zlib.
LogPakFile: Display: "Maps/NewWorld.umap" offset: 323, size: 1029 bytes, sha1: B43AE5295E60BAFE2B6B51C617B53275FA03BDF7, compression: Zlib.
LogPakFile: Display: "MyAsset/Chunk1/Chunk1.mp4" offset: 2048, size: 900034 bytes, sha1: CB8C9A02D7EA029BB08FE35898E0A60A28668F0D, compression: None.
LogPakFile: Display: 3 files (901313 bytes), (0 filtered bytes).
LogPakFile: Display: Unreal pak executed in 0.004506 seconds

관련 로그 등



AutomationTool이 Staging 처리를 수행하기 때문에 Engine\Programs\AutomationTool\Saved\Logs 폴더 등에 로그가 저장됩니다.

참고 소스 파일


  • CopyBuildToStagingDirectory.Automation.cs
  • GetPakFileRules 함수
  • ApplyPakFileRules 함수
  • GetPakFileRules 함수


  • 제대로 작동하지 않으면 위의 소스 파일을 들여다 봅니다.
    주석 처리된 LogInformation 행에서 주석을 제거하면 추가 정보를 얻을 수 있습니다!
    Cleaning Stage Directory: D:\dev\ue424Projects\Package424\Saved\StagedBuilds\WindowsNoEditor
    Creating pak using streaming install manifests.
    Adding to PakFileRules for Section NonAssetsInChunk1 : .../Chunk/Chunk1/.../*.mp4  <----DefaultPakFileRules.iniからセクションが追加された
    Adding to PakFileRules for Section NonAssetsInChunk2 : .../Chunk/Chunk2/.../*.mp4  <----DefaultPakFileRules.iniからセクションが追加された
    Setting pak assignment for file D:\dev\ue424Projects\Package424\Content\Chunk\Chunk1\Chunk1.mp4 to pakchunk1  <----ChunkIDが適用された
    Setting pak assignment for file D:\dev\ue424Projects\Package424\Content\Chunk\Chunk2\Chunk2.mp4 to pakchunk2  <----ChunkIDが適用された
    Creating Pak files utilizing 12 cores
    Executing 3 UnrealPak commands...
    Waiting for child processes to complete (3/3)
    

    좋은 웹페이지 즐겨찾기