天天看點

技術分享連載(十九)資源管理圖形渲染資源管理圖形渲染資源管理

Q1:我項目的UnityShaderCache目錄下有300個檔案(如下),且不是一次生成, 而是随着遊戲進行而産生的。

為了在遊戲第一次進行時把所有Shader都編譯來減少卡頓,我把用到的Shader加入到 Always Included Shaders中, 并在遊戲開始時調用了 Shader.WarmupAllShaders,也嘗試把Shader打個包一起加載出來 ,然後Shader.WarmupAllShaders,但是效果并不理想。有什麼好的解決方案嗎?

另一個困惑:已加到 Always Included Shaders 中的。 還需要再加載一次麼?

首先 Shader. WarmupAllShaders 并不影響 Shader 的加載,因為該函數的作用是将所有已加載的 Shader 都做一次快速渲染(渲染單個像素,GPU 在首次使用某一個 Shader 時會有額外開銷,Warm 相當于是将這部分開銷提前)。是以可以通過AssetBundle.LoadAll等接口預加載 AssetBundle 中的 Shader。而對于 Always Included Shaders 中的 Shader 則可以通過 Shader. Find 來預加載。

Q2:某個Shader裡設定了Culling Off,會影響到後面所有Shader的渲染狀态麼(假設後面不再設定Culling)?

技術分享連載(十九)資源管理圖形渲染資源管理圖形渲染資源管理
一次 Draw Call 送出所相關的 Render State 是不會影響到下一次的渲染狀态的。如果不在 Shader 中顯示指定 Cull 模式,則會使用預設的 Cull Back。

Q3:StreamingAssetPath 和 PersistantDataPath下可以不Load AssetBundle ,直接放資源Load嗎?

這是可以的,但非常有限。因為不通過 AssetBundle 加載,隻能通過 Unity 提供的有限的接口來直接加載外部資源,如通過 WWW.audioClip 直接加載 mp3檔案,通過 WWW.texture 直接加載 jpg 檔案等。由于不是内部資源格式,其加載效率通常較低,jpg 還涉及軟解操作非常耗時。是以一般情況下我們都不建議通過這種方式來加載資源。

Q4:項目在釋出時,Player Setting中勾選的這個選項,

技術分享連載(十九)資源管理圖形渲染資源管理圖形渲染資源管理

對于已經打包并且放到了Streaming Assets中的AssetBundle檔案有效果嗎?模型資源裡有個

技術分享連載(十九)資源管理圖形渲染資源管理圖形渲染資源管理

選項,是否能達到同樣的效果?

理論上 Optimize Mesh Data 是 Build Player 或者 Bundle 時才生效的,是以之前打好的 Bundle 就沒效果了。另外,兩個選項的效果是不同的,後者是調整面片排序的。

Q5:我們的動畫是放在FBX檔案裡的(如下圖)

技術分享連載(十九)資源管理圖形渲染資源管理圖形渲染資源管理

這樣做導緻打包的時候把一些無用的檔案也打進AssetBundle包裡了,實際上我們隻想使用最後這個動畫檔案。但在編輯器裡選中FBX檔案裡的動畫檔案時卻沒有AssetLabels這個視窗,設定不了AssetBundle Name。

技術分享連載(十九)資源管理圖形渲染資源管理圖形渲染資源管理

是不是隻能用代碼設定?還是意味着不能設定AssetBundle Name,隻能把動畫檔案提取出來,類似下圖這樣單獨的一個檔案?

技術分享連載(十九)資源管理圖形渲染資源管理圖形渲染資源管理
在Unity 5.x 的打包機制下确實無法手動為 FBX 下的 Mesh 或 AnimationClip 單獨資源設定 AssetBundle Name。是以,如果需要将這部分資源抽出來作為依賴包,目前确實就需要先通過腳本将這部分資源提取出來了。

原文出處:侑虎科技

轉載請與作者聯系,同時請務必标明文章原始出處和原文連結及本聲明。

繼續閱讀