最近要做一個VR一體機(可以當做一部安卓機)的項目针姿,但是場景資源導入后發(fā)現(xiàn)在一體機上跑不動纽疟,幀率只有20左右,快速轉動頭部的時候幀率更低扔仓,所以學習了一下場景優(yōu)化的知識,下面就分享一下我學到的知識咖耘。
一、降低DrawCall的數(shù)量
DrawCall(又稱DC)撬码,在Unity中儿倒,每次引擎(CPU)準備數(shù)據(jù)并通知GPU的過程稱為一次Draw Call,GPU通過這些數(shù)據(jù)進行運算再把目標渲染出來呜笑。這一過程是逐個物體進行的夫否,對于每個物體,不止GPU的渲染叫胁,引擎重新設置材質/Shader也是一項非常耗時的操作凰慈。因此每幀的Draw Call次數(shù)是一項非常重要的性能指標,而降低DC就能很好的優(yōu)化我們的場景資源驼鹅。下面從幾個方面降低DC:
1微谓、降低渲染對象的數(shù)量——Occlusion Culling
這個很顯然,只要場景中需要渲染的目標數(shù)量減少了输钩,相應的DC也就隨之降低豺型。而做到這一步我們可以使用Unity自帶的遮擋剔除功能——Occlusion Culling。該功能使unity只渲染相機可見(被擋到的也不會渲染)視野范圍內的物體买乃,視野外的物體不渲染姻氨。詳細可自行學習:http://bbs.9ria.com/thread-216913-1-1.html
和http://blog.csdn.net/cartzhang/article/details/52684127。務必記得把靜態(tài)物體勾選上靜態(tài)剪验。
2肴焊、降低每個要渲染對象的渲染次數(shù)——LightMap
實時的燈光渲染會很消耗性能,所以我們可以為那些靜態(tài)不動的物體預先烘焙好貼圖來代替實時光照計算功戚,這樣就降低了DC娶眷,5.6版本后對全局光照系統(tǒng)做了很好的更新,感興趣可以學習一下:http://gad.qq.com/program/translateview/7187820疫铜。烘焙LightMap的時候記得一定把靜態(tài)的物體勾選上LightMap Static茂浮,,所有靜態(tài)選項都勾選也可以:
3壳咕、批處理——Batching
批處理的意思就是處理多個物體席揽,以此減少DC,批處理分為兩種:靜態(tài)批處理和動態(tài)批處理谓厘。這里只詳細介紹一下靜態(tài)批處理幌羞,因為動態(tài)批處理我沒用到,所以怕理解有誤竟稳,詳細可閱讀:http://blog.csdn.net/qinyuanpei/article/details/48262583属桦。
靜態(tài)批處理的前提條件:物體是靜態(tài)不能移動的熊痴,擁有同一種材質的,記得勾選靜態(tài):
再說一下Batches這個東西:
上面的小窗口視圖是在Game視圖的右上角點開的聂宾。
其中Batches——合并后的DrawCall次數(shù)果善。
SetPass calls——SetPass的調用次數(shù)。
Saved by batching——被合并的DrawCall次數(shù)系谐。
Batches就是你要看到的DrawCall巾陕。 減少了Batches就是減少了DC。
然后我們建個空場景纪他,里面放上兩個不同材質的物體:一個圓柱體和一個方塊鄙煤。如圖:
當沒有勾選靜態(tài),沒做任何處理時茶袒,batches為13梯刚,saved by batching為0,而圖中圓柱體和方塊的材質用的shader是同一種薪寓,只是圖片和顏色不同亡资。下面我們把它們材質中的圖片都干掉,值保留不一樣的顏色向叉,如圖:
此時Batches變成了10沟于,而Saved by batching變成了3。
然后我們再進行靜態(tài)批處理:把靜態(tài)勾選上植康,給兩個物體換上同一種材質(注意旷太,是同一種材質,不只是同一種shader或圖片销睁,上面測試的就是同一種shader不同顏色)供璧,
這時候靜態(tài)批處理就完成了,我們可以看到Batches已經(jīng)變成了8冻记,我們再在場景中多加幾個物體看看效果如何:
Batches還是8睡毒,這樣就達到了我們優(yōu)化DC的目的。但是靜態(tài)批處理也有不好的地方:會占用更多的內存冗栗,所以如何靈活運用要根據(jù)相應的項目需求了演顾。
我在查找資料的時候有看到說靜態(tài)批處理和遮擋剔除有沖突,說因為靜態(tài)批處理時相機只要看到物體的一個像素點就會把整個物體渲染出來隅居,而遮擋剔除此時只會渲染看到的像素點钠至,不會渲染那些不可見的。但是我沒有深入研究胎源,感興趣的老鐵可以研究一下棉钧。
4、特效的優(yōu)化
直接附上鏈接涕蚤,https://blog.csdn.net/github_32062421/article/details/49203501宪卿,這個優(yōu)化在移動端項目中很重要的诵,我的項目中就有很多特效,優(yōu)化過后幀率提高了也穩(wěn)定了很多佑钾。
5西疤、LOD技術
直接上鏈接,http://blog.csdn.net/yuxikuo_1/article/details/48795325休溶,這個我的項目中沒用到瘪阁,但是以后可能會在其它項目中用到,很好用的組件
6邮偎、地形的Draw
unity有自帶的地形組件,但是不提倡使用义黎,建議讓模型美術那邊做一個地形的模型禾进,因為unity的地形組件真的耗性能:
雖然不勾選地形的細節(jié)渲染可以降低了很多Batches,但是一般移動端的Batches不超過100為好廉涕,一個空地形就占了將近70(一個天空盒也會占2個batches)泻云,所以移動端不推薦使用unity自帶的地形組件。
二狐蜕、腳本優(yōu)化
腳本優(yōu)化宠纯,附上鏈接http://blog.csdn.net/u014779452/article/details/48395921,
http://blog.csdn.net/sw521314/article/details/75333025层释,
還要合理利用對象池婆瓜。