一、頂點性能
通常來講,若是您想在iPhone 3GS或更新的設備上每幀渲染不超過40,000可見點,那麼對於一些配備 MBX GPU的舊設備(好比,原始的 iPhone,如 iPhone 3g和 iPod Touch第1和第2代)來講,你應該保證每幀的渲染頂點在10000如下。
二、光照性能
像素的動態光照將對每一個受影響的像素增長顯著的計算開銷,並可能致使物體會被渲染屢次。爲了不這種狀況的發生,您應該避免對於任何單個物體都使用多個像素光照,並儘量地使用方向光。須要注意的是像素光源是一個渲染模式(Render Mode)設置爲重要(Important)的光源。像素的動態光照將對頂點變換增長顯著的開銷。因此,應該儘可能避免任何給定的物體被多個光源同時照亮的狀況。對於靜態物體,採用烘焙光照方法則是更爲有效的方法。
三、角色
每一個角色儘可能使用一個Skinned Mesh Renderer,這是由於當角色僅有一個 Skinned Mesh Renderer 時, Unity 會 使用可見性裁剪和包圍體更新的方法來優化角色的運動,而這種優化只有在角色僅含有一個 Skinned Mesh Renderer 時纔會啓動。角色的面數通常不要超過1500,骨骼數量少於30就好,角色Material數量通常1~2個爲最佳。
四、靜態物體
對於靜態物體定點數要求少於500,UV的取值範圍不要超過(0,1)區間,這對於紋理的拼合優化頗有幫助。不要在靜態物體上附加Animation組件,雖然加了對結果沒什麼影響,可是會增長CPU開銷。
五、攝像機
將遠平面設置成合適的距離,遠平面過大會將一些沒必要要的物體加入渲染,下降效率。另外咱們能夠根據不一樣的物體來設置攝像機的遠裁剪平面。Unity 提供了能夠根據不一樣的layer 來設置不一樣的 view distance ,因此咱們能夠實現將物體進行分層,大物體層設置的可視距離大些,而小物體層能夠設置地小些,另外,一些開銷比較大的實體(如粒子系統)能夠設置得更小些等等。
六、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 降了,渲染速度也變慢了」的緣由。性能
上面是摘錄內容,其中每一個角色的同骨骼數量限制爲何要小於30呢?優化
根源來自於GLSL中頂點蒙皮時寄存器數量的限制,GLES寄存器數量爲256,每一個寄存器能夠存儲一個VEC4向量,如今大多數GLSL做頂點蒙皮時是用32個矩陣來存儲蒙皮矩陣的,也就是說骷髏數量不能超過32spa