①減面:對場景模型減面優化是最多見的優化操做。主要是去掉對模型造型沒有影響的面,用盡量少的面數表達清楚模型的結構和造型。好比:物件非關節點及物件背面、內部不會看見的面刪掉。 工具
②合併模型:合併同一小範圍內的非交互類的靜態小物件,同時合併小物件的貼圖。這樣能夠減小DRAW CALL的數量。如,一組不一樣大小的小草,一組大小形狀不一樣的石頭,一個書架和上面放置的不少書籍等。把這些小物件合併成一個object,貼圖也合成成一張貼圖。高端手機平臺上draw call通常控制在300左右。測試
③LOD:建築和複雜的物件用LOD模型和遠處剔除來減小同屏面數。地形的LOD系統也能夠對地形的面數作很大的優化。優化
④模型的重複利用:相同的多個物件在unity內複製使用,複製的多個物體在引擎計算上算一個物體。但也不可複製太多個,太多會對內存帶來很大壓力。相同的物件太多,建議把幾個合併成一組作爲一個Object,多作幾組,再進行復制。參考②。動畫
⑤地形優化:若是是用unity自帶的地形工具製做的地形,能夠用T4M插件轉化成T4M格式地形,設置一個頂點值轉化後能夠對地形優化不少。T4M也能夠設置lod模型。spa
以我作過的一個測試爲例:優化前,地形是1000*1000的。就是(1000-1)*(1000-1)=998001(面),將近100萬面。轉化頂點值設爲100,轉化後的面爲19602,才近2萬面。插件
①貼圖大小:在移動設備上的貼圖最大要控制在1024和512大小,可少許使用2048大小的貼圖,以102四、512大小貼圖爲主。設計
②重複貼圖的使用:大面積相同材質使用1-3種貼圖交替重複覆蓋,經過光影變化打破貼圖的重複感。3d
③ 小物件的貼圖合併,上文有講,單個物體的貼圖最好是一張,最多不易超過3張。相同貼圖的材質球統一。htm
④ 少用透明貼圖,能不用就不要用。透明貼圖很是消耗GPU資源。blog
⑤支持Mipmap, Mipmap 會增長遊戲包體的大小和佔用必定量的內存,但在遊戲中Mipmap的渲染能夠減小顯存帶寬,下降渲染壓力,隨着相機的推遠貼圖會隨之切換成低像素的體貼,從而節省資源開支。過的Mipmap使用會對內存形成很大壓力,所以建議只對大物件設置Mipmap。
(unity會根據相機距離由近到遠生成8張像素逐漸下降的貼圖,這裏只截取了5張,從左往右依次是原圖至Mipmap生成的低像素貼圖)
⑥小場景能夠用PBR材質,用PBR材質就必定要用實時燈光纔有效果。大場景避免使用PBR材質,大場景儘量用烘焙光影來達到光照效果。烘焙的場景模型就不要用法線貼圖了,貼了也沒效果,還佔空間資源。
⑦貼圖壓縮,對貼圖進行PVRT(Ios)或是ETC(Android)格式的壓縮能夠減小大量內存消耗。
⑧建議場景的材質能夠用substance材質系統轉成.sbsar 格式材質。 Substance材質能夠大大壓縮貼圖數據的大小但不損失貼圖質量。
以下圖所示:33.8MB的.tga格式貼圖製做成.Sbsar格式材質以後只有3.8MB。
一、燈光的數量:室外開放式大場景建議只用一盞平行光。室內場景可適當多一點,室內環境能夠用reflection probe來增強反射效果。
二、場景烘焙:大場景和比較複雜的室內場景要避免實時燈光的使用。利用UNITY的烘焙系統把光影烘焙成貼圖來實現光影效果。烘培貼圖自己是一個浩大的工程,大場景的烘培能夠選擇性的去烘焙。UNITY裏自動分UV功能很差控制,因此通常在max\Maya裏分好第2套UV,也能夠直接在max\Maya裏烘焙好lightmap導入到unity裏。
UNITY提供了混合模式燈光,因此咱們能夠用混合燈光來實現LIGHTMAP與實時燈光結合。既:一個大場景中,大件如建築、地形佔據畫面較大的物件烘焙lightmap,小物件繁多,佔據畫面的面積很小能夠不用烘焙,把燈光設置爲mixed模式。
①攝像機上少用鏡頭效果,有選擇性的使用。
②特殊的Shader慎用。
③美術資源的優化能夠從最先設定場景的時候就開始考慮。如ARPG遊戲的關卡根據狀況能用管道式的場景就避免設定成全開放式的室外場景。
(這是仙劍奇俠傳5的場景和地圖,根據劇情須要着重製做路徑兩邊的場景,其餘地方利用障礙遮擋,使玩家不能過去,就能夠歸納簡化交代一下。)
④在陸地上玩爲主的遊戲就避免設計飛到空中的設計。在近空俯視場景很是耗資源。
⑤開放式大場景中從設計上就要避免有過多的可破壞性物件,場景中可交互的點要清晰,避免大而全的設計,要注意取捨。
(這也是仙劍奇俠傳的一個小鎮場景,可交互的點很清晰,其餘建築NPC交互就可簡化製做或者不作交互。)
我作過的一個場景優化測試的數據以下:
優化前:
一、這個場景使用UNITY自帶地形,上面有大量的植被草地,30多棟廢棄建築,地上和建築上有繁多的植被野草、廢紙、酒瓶、石塊等,橫豎大小10條街道左右,街上有大量路燈、路牌、油桶等細節。
二、場景自己用了LOD系統。
三、整體面數在200多萬。小物件在15000多個。
在PC上跑起來幀數只有40多幀,在835芯片手機上畫面嚴重卡頓,跳幀嚴重。
優化方案:
一、把地形用T4M插件轉化成T4M格式,大規模減小遠處樹木植被。優化下來提升了5幀左右。
二、街道上的小物件刪減和合並,原場景中界面上小物件過多,路燈過密,作了適當刪減,對小範圍內的小物件模型進行模型和貼圖的合併。大概提升7幀左右
三、透明貼圖的減小,原場景是廢墟,因此建築上用了大量的透明題圖作藤蔓,對渲染消耗太大,進行適度刪減,大概刪掉一半,提升10幀左右。
四、對建築,街道和大地形、大物件進行了lightmap烘焙。小物件用燈花的混合模式實時照明。大概提升30幀左右
五、減小原場景中的鏡頭特效。原場景中鏡頭特效用了7個,關掉了Antialiasing As Post Effect、Vignetting、SSAO三個鏡頭效果,這三個特效對畫面影響較小,大概提升了10幀左右。
最終優化後面數爲70多萬面。FPS爲100幀左右。
總結:
美術場景資源的優化主要從模型、貼圖、燈光、特效等方面去着手,對應的是提升CPU、GPU、內存等硬件的使用效率。優化的細節還有不少,好比場景特效可儘可能用動畫去實現,避免過多的粒子特效,場景的碰撞體單獨用建模去作不要用unity默認的碰撞體等等。一個遊戲的後期優化是多方面的,包括場景、角色、動做、特效、音效、動畫、AI及程序運算等等,場景上能多優化一點,就能夠給其餘資源讓出一點空間。