UE4 Gitdependencies CDN Package 製做

一、前言

使用虛幻引擎源碼版本的人都知道,安裝好一個源碼版的引擎,除了大部分時間在編譯引擎上時,比較耗時的就是Setup.bat從虛幻獲取dependencies資源的部分。git

這些文件包括*.dll ,*.exe,美術資源等比較佔用資源等內容,不適合放在Github上,因此官方本身作了一個叫"GitDependencies"的工具,雖然使用"--threads=100"參數能夠提升下載的線程數,但若是網速限制,或者是在一些研發內網的狀況,以及須要大量裝機的時候,就不太方便.緩存

添加多線程下載能夠提高下載速度至滿帶寬安全

二、Setup中GitDependencies過程

先分析GitDependencies執行過程,核心代碼在 UnrealEngine\Engine\Source\Programs\GitDependencies\Program.cs 服務器

  • 初始化環境,解析參數

        GitDependencies.exe --prompt後面能追加的參數如圖網絡

其中幾個可能會用到有多線程

--threads=N:開啓N個線程下載,提高速度。函數

--dry-run:僅僅顯示須要下載、更新等內容後直接退出,不進行實際的下載,局域網環境下,Git更新的時候也會運行GitDependencies,若是沒法鏈接外網就會形成長時間等待超時,能夠嘗試使用這個參數跳過下載。工具

--cache=<PATH>:自定義下載時緩存包的位置測試

 

  • UpdateWorkingTree

        UpdateWorkingTree函數爲主要執行邏輯部分,將前面的參數傳入後,主要通過如下步驟               ui

  1. 檢查已經剔除掃描的文件或文件夾
  2. 定義.ue4dependencies的位置,最後掃描更新完成後會生成一個.ue4dependencies文件
  3. 讀取或建立一個manifest
  4. 移除以前的下載任務
  5. 讀取xml文件中因此Files\Blobs\Packs的內容,雖然讀取時會查找全部模塊或是插件中的.gitdeps.xml爲後綴的文件,但默認狀況下只有一個D:\UnrealEngine\Engine\Build\Commit.gitdeps.xml 文件,這個文件也是後面工具主要使用的原始數據來源
  6. 遍歷完所需的文件後,再剔除掉忽略的文件,以及臨時文件是否須要替換。生成所需下載文件的列表
  7. 下載所需的文件包(文件包非最終的文件,一個是Packs,以Hash名爲文件名,一個是Files,爲最終的文件)
  8. 下載解壓完成後,會生成一個.ue4dependencies,若是以及存在,則會更新文件列表和時間戳
  9. 最後對可執行的exe文件進行權限設定

主要步驟能夠分爲三部:一、收集下載內容  二、下載解壓內容  三、記錄內容關閉

DownloadDependencies是實際下載pack包的地方,也是用到網絡的地方,有時候須要更新下載多個文件只須要下載一個包,有時下載一個文件也可能須要下載多個包,經過:

// Find all the required packs
			DependencyPackInfo[] RequiredPacks = Packs.Where(x => PackToBlobs.ContainsKey(x.Pack.Hash)).ToArray();

來判斷找出當前須要下載的N個文件,須要下載哪些包資源。資源分爲Incoming和Working兩種狀態,一個是下載過程當中,一個已經解壓存放完成的,例如WorkingFile就有Timestamp記錄文件下載的時間戳。

Files記錄了文件名的信息,Blobs記錄了文件所屬的Pack和字節偏移數和字節大小,Pack爲原始資源的二進制包,Files經過GetIncomingFilesForPack函數,傳入Blobs參數,從Pack中解壓出文件。

使用pack能夠有幾個好處,將大文件切分,保持源文件不可讀/使用,規避下載exe或是dll後綴文件的安全問題。

3.Pack鏡像資源

即便不使用cache參數,Pack下載的資源也已經存在本地,目錄爲:D:\UnrealEngine\.git\ue4-gitdeps\ 中,因此創建本身的Pack資源鏡像時,不用徹底從http://cdn.unrealengine.com/dependencies 再次拉取(給它省點帶寬),而是先從本地緩存的位置搜索Pack包,若是沒有再從網上拉取,來創建資源鏡像。

BaseUrl爲下載連接的基礎URL,順便測試一下國內各個地方對虛幻這個CDN地址的訪問速度

測試數據來源由上海雲測網絡科技提供:https://www.17ce.com/

資源pack的實際下載地址=BaseUrl+」/「+RemotePath+"/"+Hash

例如:下載Engine/Binaries/DotNET/AgentInterface.dll 須要下載10565092db8aab55124eac964964afe461a33072包,是除去包頭的12288個字節大小的文件,10565092db8aab55124eac964964afe461a33072包總大小有2006146,壓縮後是664170,

下載地址是:http://cdn.unrealengine.com/dependencies/UnrealEngine-4694924-e79d3fab97494aa18fa58bb07dc860e7/10565092db8aab55124eac964964afe461a33072

假設咱們先建一個鏡像的根目錄 UE4GitDPack/

那麼我須要把【UnrealEngine\.git\ue4-gitdeps\10\10565092db8aab55124eac964964afe461a33072】文件複製到 UE4GitDPack/UnrealEngine-4694924-e79d3fab97494aa18fa58bb07dc860e7/中,若本地緩存未找到,則從網上下載。

最後咱們就會獲得這樣一個鏡像目錄:

隨後將整個UE4GitDPack文件夾的內容,部署到本身的http服務或是文件服務上,再替換Commit.gitdeps.xml文件裏的BaseUrl地址爲本身服務器的地址,就能夠構建本身的依賴鏡像,Commit.gitdeps.xml文件有更新,就從新運行一次工具就能夠了,甚至能夠直接擴充GitDependencies的功能,加入一個自動創建本地鏡像的功能,畢竟下載、拷貝、解壓、查找包文件的功能,GitDependencies裏面都包含了。

整個鏡像大小約爲:

實際是3101個files,出現3105是由於有Incoming文件

 

四、其餘

其實在setup後的兩步流程,安裝UE4PrereqSetup_x64和引擎註冊都很重要,新裝環境

文中如有解釋不對的地方,歡迎指正。

鏡像製做工具下載:

連接: https://pan.baidu.com/s/1IUQQ36A6-O_MfJ8xgXT1gw 提取碼: 2m8n

相關文章
相關標籤/搜索