===============================================================================性能
美術規格:優化
一、單個蒙皮網格渲染器
二、一個模型儘量對應一個材質
三、移動平臺:小於30個的骨骼 ;PC平臺:大概15~60個骨骼
四、移動平臺不要使用unity地形
五、模型三角面片數 :300 ~ 1500
六、靜態模型:網格頂點數少於500
七、貼圖大小使用256 ,使用壓縮紋理模式
八、移動平臺使用輕量級」移動平臺」的着色器
九、移動平臺:同屏面數不能超過五萬,頂點數八萬如下,DC控制在100之內
十、不使用陰影 不使用動態光照
十一、使用LightMaps烘培光照貼圖
十二、雙聲道一致時能夠轉換成單聲道
1三、資源提取減少包體積動畫
===============================================================================htm
影響性能的因素:接口
CPU:
過多的Draw Calls ( DrawCall是CPU調用底層圖形接口。好比有上千個物體,每個的渲染都須要去調用一次底層接口,而每一次的調用CPU都須要作不少工做,那麼CPU必然不堪重負 )
複雜的腳本 ( 不重要的能夠間距調用不用Update ) 或者物理模擬 ( 少用物理組件 )
頻繁的GC ( GC是用來處理內存的,可是是由CPU來使用GC去處理內存,增長CPU開銷 , 因此要儘可能少的觸發GC )
提升代碼質量 , 代碼優化 ( foreach , 字符串操做 )圖片
GPU:
填充率,能夠簡單的理解爲圖形處理單元每秒渲染的像素數量
像素的複雜度,好比動態陰影,光照,複雜的shader等等
幾何體的複雜度 , 減小計算複雜度(減小頂點數量)
GPU的顯存帶寬: 壓縮圖片,以適應顯存帶寬
MipMapip
內存:
Unity3D內部內存
Mono託管內存
若干咱們本身引入的DLL或者第三方DLL所須要的內存內存
頂點處理:
過多的頂點
過多的逐頂點計算資源
像素(Fragment)處理:
過多的fragment,overdraws
過多的逐像素計算字符串
帶寬:
尺寸很大且未壓縮的紋理
分辨率太高的frame buffer
===============================================================================
優化技術:
頂點優化:
優化幾何體
使用LOD(Level of detail)技術
使用遮擋剔除(Occlusion culling)技術
像素優化:
控制繪製順序
警戒透明物體
減小實時光照
CPU優化:
減小Draw Calls
靜態批處理 Batching static
動態批處理
利用網格的頂點數據信息 ( 合併到材質球 )
四分圖或二分圖
剝離A通道
減小GC ( 代碼優化 )
字符串優化
循環優化
Update優化
GPU 優化:
減小繪製的數目
保持材質的數目儘量少。這使得Unity更容易進行批處理
使用紋理圖集(一張大貼圖裏包含了不少子貼圖)來代替一系列單獨的小貼圖。它們能夠更快地被加載,具備不多的狀態轉換,並且批處理更友好
合併網格合併材質紋理 , 而不是合併成子網格
若是使用了紋理圖集和共享材質,使用Renderer.sharedMaterial 來代替Renderer.material
使用光照紋理(lightmap)而非實時燈光
使用LOD,好處就是對那些離得遠,看不清的物體的細節能夠忽略
遮擋剔除(Occlusion culling)
使用mobile版的shader , 由於簡單
大型場景可以使用九宮格場景切割法
優化顯存帶寬
壓縮圖片,減少顯存帶寬的壓力。
OpenGL ES 2.0使用ETC1格式壓縮等等,在打包設置那裏都有
使用mipmap
內存優化:
管理好內存 , 合理釋放
四分圖或二分圖
GC觸發的兩種狀況:
1) 堆的內存不足時,會自動調用GC。
2) 咱們本身也能夠手動的調用GC。
3) 當GC超過200B
帶寬優化:
減小紋理大小
利用縮放
動畫:
控制骨骼數
減小動畫幀數
Animator優化
===============================================================================
關於批處理與合併
動態批處理 :
同一材質 , 知足動態批處理限制條件 , 如頂點限制等 , 便可被unity自動動態批處理
能夠移動
靜態批處理 :
只需勾選靜態項 , unity則會進行靜態批處理 , 把靜態項的物體所有合併到一個網格里面 , 可是他們都是子網格 , 在這個總體的靜態網格內 , 只有使用同一個材質的網格纔會被批處理合並DC , 靜態批處理沒有限制條件 , 可是會多出一份合併網格的內存 , 靜態物體不可移動
合併網格紋理集 :
以上批處理都須要知足的一個條件就是須要同一材質 , 咱們能夠合併網格UV 從而使多個物體使用一個材質 , 從而批處理優化 .
狀況一:
把多個網格合併UV , 而後多個網格使用一個紋理集 , 若是知足動態批處理的限制條件可不勾選靜態項 , 讓其動態批處理 , 若是不知足 , 則須要勾選靜態項 , 讓其靜態批處理 , 從而優化DC
狀況二:
把多個網格合併UV , 而後再把他們合併成一個網格使用一個紋理集材質 , 這樣作也沒有動態批處理和靜態批處理( 除非場景裏有多個這個合併的網格存在.. )的概念 , 由於它已經被合併成一個單網格 , 只有一個材質 , 因此也只有一個DC , 好處是不須要勾靜態項 , 優化了內存 , 能夠移動 , 可是不足處是增長了的包體大小 , 緣由是增長了一份合併網格的本地資源.
因此優化就要根據具體狀況作出對應的取捨啦 !