六要點實現Unity3D開發性能優化
1、頂點性能
一般來說,如果您想在iPhone 3GS或更新的設備上每幀渲染不超過40,000可見點,那么對于一些配備 MBX GPU的舊設備(比如,原始的 iPhone,如 iPhone 3g和 iPod Touch第1和第2代)來說,你應該保證每幀的渲染頂點在10000以下。
2、光照性能
像素的動態光照將對每個受影響的像素增加顯著的計算開銷,并可能導致物體會被渲染多次。為了避免這種情況的發生,您應該避免對于任何單個物體都使用多個像素光照,并盡可能地使用方向光。需要注意的是像素光源是一個渲染模式(Render Mode)設置為重要(Important)的光源。像素的動態光照將對頂點變換增加顯著的開銷。所以,應該盡量避免任何給定的物體被多個光源同時照亮的情況。對于靜態物體,采用烘焙光照方法則是更為有效的方法。
3、角色
每個角色盡量使用一個Skinned Mesh Renderer,這是因為當角色僅有一個 Skinned Mesh Renderer 時, Unity 會 使用可見性裁剪和包圍體更新的方法來優化角色的運動,而這種優化只有在角色僅含有一個 Skinned Mesh Renderer 時才會啟動。角色的面數一般不要超過1500,骨骼數量少于30就好,角色Material數量一般1~2個為最佳。
4、靜態物體
對于靜態物體定點數要求少于500,UV的取值范圍不要超過(0,1)區間,這對于紋理的拼合優化很有幫助。不要在靜態物體上附加Animation組件,雖然加了對結果沒什么影響,但是會增加CPU開銷。
5、攝像機
將遠平面設置成合適的距離,遠平面過大會將一些不必要的物體加入渲染,降低效率。另外我們可以根據不同的物體來設置攝像機的遠裁剪平面。Unity 提供了可以根據不同的 layer 來設置不同的 view distance ,所以我們可以實現將物體進行分層,大物體層設置的可視距離大些,而小物體層可以設置地小些,另外,一些開銷比較大的實體(如粒子系統)可以設置得更小些等等。
6、DrawCall
盡可能地減少 Drawcall 的數量。 IOS 設備上建議不超過 100 。減少的方法主要有如下幾種: Frustum Culling , Occlusion Culling , Texture Packing 。 Frustum Culling 是 Unity 內建的,我們需要做的就是尋求一個合適的遠裁剪平面; Occlusion Culling ,遮擋剔除, Unity 內嵌了 Umbra ,一個非常好 OC 庫。但 Occlusion Culling 也并不是放之四海而皆準的,有時候進行 OC 反而比不進行還要慢,建議在 OC 之前先確定自己的場景是否適合利用 OC 來優化; Texture Packing ,或者叫 Texture Atlasing ,是將同種 shader 的紋理進行拼合,根據 Unity 的 static batching 的特性來減少 draw call 。建議使用,但也有弊端,那就是一定要將場景中距離相近的實體紋理進行拼合,否則,拼合后很可能會增加每幀渲染所需的紋理大小,加大內存帶寬的負擔。這也就是為什么會出現“ DrawCall 降了,渲染速度也變慢了”的原因。
原文鏈接:http://www.unitymanual.com/6572.html
【編輯推薦】