1. 程式人生 > >unity中shader的打包

unity中shader的打包

沒有 加載 setting ges 安裝包 文檔 dem tin 跪了

一、我們項目聽說不支持shader熱更,所以我就想知道為什麽。

  打包的程序員說,shader加入在graphics setting的always included shader裏可以大大減少AB,而graphics setting而這個文件是在構建安裝包時出現在安裝包裏的,所有shader有點像生成了“內部依賴ab",這個內部ab我們是得不到的,即更新不出去,即如果加了新shader則這個ab發生了改變,依賴它的舊資源的依賴也發生了改變,但是因為此ab在“殼"裏,即不能熱更出去,所以所有依賴此內部ab的資源,可能都跪了。簡單舉個例子:

  此內部ab為A,有個資源B依賴一個shader,所以打包時B裏有個引用指向A,現在A發生了改變,但不能熱更出去,只熱更了B,所以B的依賴就木有了。當然,如果是安裝的是整包,A就在裏面,B的顯示就木有問題。

技術分享

    註:上面的“內部依賴ab""A"等用ab來描述,其實是胡謅的,只是想借助ab依賴包的思想,便於理解。

二、我要做一下測試驗證一下

  因為資料較少,加上官方文檔說的也不詳細,參考這博文:unity5.x shader打包AssetBundle總結,自己進行了各種測試,得到如下結論:

  1.內置shader(比如Mobile/Diffuse,Standard等),如果在Graphics Setting設置了,則不打入各個資源的ab中,而打入構建包中(構建包會稍大),如果不設置就打入各個資源的ab中,不打入構建包(構建包較小);

  2.自定義shader,不管在不在Graphics Setting裏設置,都打入各個資源的ab中(除非給shader進行setassetbundlename,即打shader ab),在Graphics Setting裏則構建包大一些。

  3.Graphics Setting的Always included Shaders只是在打ab時影響內置shader打不打入資源ab,在構建時影響打不打入構建包中。

三、總結

  所以有2種方式處理shader打包:

  1.不打shader ab。把大量使用的內置shader設置到Graphics setting裏,其余的比如其他內置shader和自定義shader可以直接打入各個資源ab裏;能熱更不在graphics setting裏的shader,如果只有內置的在graphics setting裏面,則所有自定義的shader都能熱更,但是,如果熱更大量使用的shader,會使得增量包較大;

  2.打shader ab,能熱更所有shader,並且增量包不大。把shader都打入一個ab裏,那設不設置Graphics Setting呢?按我的理解,不需要,但unity5.x shader打包AssetBundle總結說:“需要將shader添加到GraphicsSetting-> always included shader設置中,否則shader也會顯示粉紅”,但文:此文說:“項目把shader單獨打包,引用shader的資源會依賴shader資源包,shader並不需要加入Graphics Settings和Resources文件夾,只要保證shader文件命名沒有空格,加載時保證被依賴的shader有優先加載,那結果就會是正常的。”,所以我個人覺得後者才是正確的,為什麽我不去測試驗證?因為我懶啊,因為我在內網寫demo,無法真機測試,自然就不靠譜了,況且已經到了這一步了,以後碰到就簡單了。

unity中shader的打包