分享一下之前專案遇到的一個打包速度優化手段。
之前專案在打包的時候,最後一定出現Waiting for child processes to complete(0/1)這個訊息,當專案越變越大之後,很明顯的卡在這一步的時間變長了。追了一下code,發現他是在做把東西打包進pak的動作,每一個pak只會開一條thread處理,而訊息中的(0/1),則表示了我們把所有的內容塞進了同一個pak中(completed/numPak);也就是說若我們沒有啟用Chunk機制的話 (見:https://docs.unrealengine.com/4.27/en-US/SharingAndReleasing/Patching/GeneralPatching/CookingAndChunking/ ),這邊會浪費不少時間在做單核cpu的等待,之前試過,隨便分個8個chunk,就讓整體打包時間加快大約20分鐘左右。
通常會關注到chunk議題,很多時候是因為在做手遊時需要去分第一包跟做patch;但其實分chunk之後帶來的好處還蠻多的,除了打包速度加快之外,我們還可以利用UAssetManager來做Preload相關的機制。
關於打包的細節有興趣可以去看
UnrealEngine\Engine\Source\Programs\AutomationTool\Scripts\CopyBuildToStagingDirectory.Automation.cs中的RunUnrealPakInParallel這個function。
Leave a Reply