unity資源優化外掛
轉載 來自:http://blog.uwa4d.com/archives/Resource_Plugin.html
工欲善其事必先利其器。在Unity官網的Asset Store上有不少給力的資源外掛,能幫助我們減少人力資源消耗的同時,更快更好地駕馭引擎。今天我們就從善用資源的角度,推薦兩款Unity熱門外掛,並介紹其使用技巧。
Mesh Baker
我們在專案開發的時候經常會大量使用大規模的Mesh,導致Draw Call過高。而Mesh Baker扮演了網格烘焙器的角色,其工作原理是將網格和材質合併,從而降低渲染的Draw Call。
下面,我們就來談談使用方法:
Texture Packing
我們常常會遇到角色網格相似,但是紋理繁雜細碎的情況。這時我們需要把紋理合並在同一張圖上。紋理拼合的操作面板如下圖所示:選擇不同的網格來拼合,Texture Baker自動分析其Shader,Size等屬性,最後點選Bake Material Into Combined Material,即可完成拼合。
Mesh Batching
在紋理拼合後已經形成為一張圖片了,這時候我們需要進行Mesh拼合,即使用Mesh Baker來烘焙網格。在此,我們新建一個新的GameObject,點選Bake就把3個Mesh烘焙在一個Object上了。
同時,在進行了這兩步之後,我們會發現Draw Call上的變化。
合併前
合併後
不難發現,合併前12個Draw Call,合併後只有2個,從而在一定程度上降低渲染壓力。
對Skinned Mesh進行拼合
Unity引擎無法原生支援蒙皮網格的Draw Call Batching,而Mesh Baker能將多個Skinned mesh合併。
經過合併後,人物的材質已經相同,所以我們能在上圖中看到這些角色只產生了一個Draw Call。同理,即使再加入更多的角色也能合併成非常少的Draw Call,從而減少渲染耗時。
除此之外, Mesh Baker還支援將Mesh Renderer與Skinned Mesh Renderer一起合併。比如開發中常用到的道具如帽子、劍等,使得角色在換裝時也只產生一個Draw Call,非常實用。
在使用skinnedmesh時有幾個注意點:
合併後將原始模型的Bone保持Active;
Disable原始模型的Skinned Mesh Renderer;
確保原始的Animation始終在執行;
如果需要Mesh Rendering與Skinned Mesh 一起合併,則需要保證在其在同一張Texture Atlas和Mesh容器中。
SimpleLOD
除了Mesh Baker,另一個外掛SimpleLOD也比較適合大規模場景的製作開發。在處理多人線上的專案(如MMO遊戲)時,按照我們以往的優化方法是儘可能降低Draw Call和減少渲染消耗,在遠處使用低階LOD,在Run-time時根據相機距離切換合適的LOD,使得在手機效能有限的情況下儘量渲染更多的角色,達到更好的效果。
而SimpleLOD恰好可以滿足這一點,除了同樣擁有Mesh Baker所具有的Mesh合併、Atlas烘焙等功能,它還能提供Mesh的簡化(Mesh Baker無法提供),並對動態蒙皮網格進行了很好的支援。該外掛可在Run-time和Editor中都可以使用,同時開放了原始碼,大家可以根據專案的實際情況而作修改。
我們拿以下原始模型來舉例:
合併模型
開啟外掛後有如下一些選項:點選Merge child meshes
我們知道Unity支援的網格頂點數不能超過65536,但是當我們把很多物體合成一個Mesh時很可能會超過這個限制。而這個外掛會針對這種情況進行自動處理,可以看到下圖中的兩輛車Merge後成Merged part1和Merged part2 。
烘焙Atlas
下圖是Texture packing,根據模型的Material自動把不同型別的Texture分類顯示出來,在合併的時候,會自動把同類型的Texture合併。
合併之後的效果對比:Draw Call數量由原來的136降至24個。
模型簡化
選擇了模型之後,點選Simplify mesh,它會盡可能在保持原樣的基礎上簡化網格。如下圖,汽車模型的網格面片數從六萬多頂點數減少到了兩萬七。
同時,它也能自動生成不同級別的LOD。這裡有6層LOD(從大到小),點選Bake LOD後它會自動計算,不需要大家手動操作。我們可以通過更改指令碼達到希望的效果。
如下就是使用了SimpleLOD後的效果。該外掛最大的特色即是對Skinned mesh動畫角色網格提供了很好的支援。
以上是我們今天推薦的外掛,但願能在資源優化中祝你一臂之力。今後我們將會結合以往的行業服務經驗,為您推薦更多高效的開發利器,盡情關注!