I would like to just package the project from the command line without cooking and use the cooked files. I did find how the Editor packages the project:
cmd.exe /c ""UE521Path/Engine/Build/BatchFiles/RunUAT.bat" -ScriptsForProject="ProjectPath/MyProject.uproject" Turnkey -command=VerifySdk -platform=Win64 -UpdateIfNeeded -EditorIO -EditorIOPort=55408 -project="ProjectPath/MyProject.uproject" BuildCookRun -nop4 -utf8output -nocompileeditor -skipbuildeditor -cook -project="ProjectPath/MyProject.uproject" -target=MyProject -unrealexe="UE521Path\Engine\Binaries\Win64\UnrealEditor-Cmd.exe" -platform=Win64 -installed -stage -archive -package -build -pak -iostore -compressed -prereqs -archivedirectory="C:\ShippingPath" -manifests -clientconfig=Shipping" -nocompile -nocompileuat
I then looked at RunUAT help and changed the -cook
argument to -skipcook
. This skips the cooking process, but then instead of using all the files inside the cooked folder, at one point I get this in the log:
LogIoStore: Display: pakchunk0-Windows: Found perfect hashmap for 1998 items.
LogIoStore: Display: pakchunk1001-Windows: Found perfect hashmap for 5 items.
And it doesn’t use the files from the cooked folder(if I edit the cooked files before running the command), it uses them from some cache. I looked at Unreal’s code where this entry is logged. It’s part of the UE’s project code: IoStore.cpp file, function bool GeneratePerfectHashes(FIoStoreTocResource& TocResource, const TCHAR* ContainerDebugName)
but it’s big, complex and generalized, so I don’t understand where it gets those hashmaps from to check against.
I also tried to disable derived data cache by running the RunUAT with -ddc=noshared
argument.
Then I also looked more through the logs to see how it actually packages all the content and found how it runs UnrealPak:
EnginePath\Engine\Binaries\Win64\UnrealPak.exe -CreateGlobalContainer=ProjectPath\Saved\StagedBuilds\Windows\MyProject\Content\Paks\global.utoc -CookedDirectory=ProjectPath\Saved\Cooked\Windows -PackageStoreManifest=ProjectPath\Saved\Cooked\Windows\MyProject\Metadata\packagestore.manifest -Commands="UserFolder\AppData\Roaming\Unreal Engine\AutomationTool\Logs\UnrealEngine+UE_5.2\IoStoreCommands.txt" -ScriptObjects=ProjectPath\Saved\Cooked\Windows\MyProject\Metadata\scriptobjects.bin -patchpaddingalign=2048 -compressionformats=Oodle -compressmethod=Kraken -compresslevel=5 -cryptokeys=ProjectPath\Saved\Cooked\Windows\MyProject\Metadata\Crypto.json -compressionMinBytesSaved=1024 -compressionMinPercentSaved=5 -WriteBackMetadataToAssetRegistry=Disabled
I tried to run it with -ddc=noshared
and also -NoAssetRegistryCache
arguments in hopes to disable the caches, but no luck: It still uses these hashmaps and doesn’t actually package the cooked files, it uses the cache.
I even tried to delete the assets from the cooked folder and it still packaged them into the pakchunks, which doesn’t make any sense, considering I’m only asking to package the cooked files and not cook them.
How to disable this cache and actually package the files from the cooked folder?