在Unity開發(fā)Android應用優(yōu)化指南(上)一文中,從游戲性能贩汉,腳本等方面進行了分析和總結驱富,今天這篇文章將由Niels Tiercelin繼續(xù)分享在光照,UI匹舞,著色器等方面優(yōu)化的經驗褐鸥。(一切從盡量優(yōu)化的角度出發(fā))
光照
接下來討論渲染優(yōu)化,首先要講的是光照赐稽。盡可能不要使用動態(tài)光照叫榕,盡量使用不帶光照的紋理。因為光照計算需要占用大量資源姊舵,尤其是當場景中有很多物體需要渲染時晰绎。
(1)烘焙光照
如果可以,盡量利用烘焙光照(Baked Lighting)技術來滿足項目需求括丁,該技術會將光照結果一次性地直接“繪制”在紋理中荞下,最后游戲中無需進行任何計算。通過這種方法您可以隨意放置光源史飞,制作復雜場景而無需考慮性能锄弱,因為所有光照都會被烘焙到紋理中。當然祸憋,這樣就失去了動態(tài)光照的一些特性会宪,例如動態(tài)陰影,且由于光源沒有任何變化蚯窥,物體在場景中的移動可能會讓玩家產生違和感掸鹅。
(2)光照探頭
可以利用光照探頭(Light Probes)來解決烘焙光照無法動態(tài)變化的問題。這些探頭會在光照烘焙時將環(huán)境光信息存儲起來拦赠,不同的是它并非保存在紋理而是停在空間的某個位置巍沙。通過這種方式,物體在探頭活動區(qū)域內移動時就會被預先烘焙好的光照“照亮”荷鼠。
(3)陰影投射器
另一種方式是為場景中的重要角色使用假動態(tài)陰影句携。可以在角色的腳底放個圓形黑色紋理允乐,讓玩家覺得“這就是陰影”矮嫉,和老式電影一樣。當然前提是這種做法適合您的游戲牍疏。
右側:初始陰影 —— 左側:“blob 陰影” 紋理
您也可以使用陰影投射器蠢笋,這種技術會利用物體本身的網格信息,在其下方投射出以假亂真的陰影鳞陨。盡管這不是動態(tài)光源投射出的那種真實陰影昨寞,但用在項目中應該足夠了,而且它使用的資源也更少。還可以借助Fast Shadow Receiver插件來實現(xiàn)陰影投射援岩。3D空間中歼狼,陰影是不可或缺的重要元素。然而陰影的渲染會給GPU帶來很大的負擔享怀。
(4)陰影
如果一定要用動態(tài)光照羽峰,請保證數(shù)量越少越好,并且整個游戲中僅使用一個方向光源凹蜈。當然,使用動態(tài)光源有個很大的益處忍啸,尤其是在3D世界中仰坦,可以實現(xiàn)比較真實的陰影,但這也是光照處理過程中占用資源最多的步驟计雌。為了達到實用與性能之間的平衡悄晃,可以通過調整參數(shù)來得到理想的陰影效果。
(5)方向光設置
在場景唯一的方向光上凿滤,可以將Culling Mask設為僅影響需要被光照的GameObject妈橄,以免消耗更多性能。多多嘗試設置 Shadows Resolution 的值翁脆,找到剛好合乎需求的設置眷蚓。當然,分辨率越低反番,消耗的資源就越少沙热。但有一點要注意,編輯器中的效果不一定與設備上的顯示效果一致罢缸。例如設置了某種低分辨率陰影篙贸,在電腦上看起來可能很粗糙,但在設備上可能剛剛好枫疆。因此記得在設備上查看最終結果爵川。
(6)質量設置
打開Quality Settings (Edit > Project Settings > Quality),看看其中的設置息楔。
這些設置會切實影響到游戲性能表現(xiàn)寝贡,所以盡量理解它們的作用。
Pixel Count:如需減少光照計算所需的量值依,將 “Pixel Count” 的值降為1兔甘,如果沒有任何光源則設為0。
Antialiasing:最好不要啟用抗鋸齒(Antialiasing)鳞滨,因為對于移動設備來說這是消耗過大洞焙。
Soft particles:如果對軟粒子沒有特別需求則不要啟用該選項。
Shadows:仔細調整陰影相關的參數(shù),它非常重要澡匪。
軟陰影(Soft Shadows)會占用更多資源熔任,您可以選擇僅使用硬陰影“Hard Shadows Only”。不過硬陰影有個缺點唁情,分辨率很低時這種陰影看起來顆粒感很強疑苔。解決方案是設置 “Shadow Projection” 選項,將“Stable Fit” 改為 “Close Fit”甸鸟,這樣可以或多或少地緩解這種顆粒感惦费。如果調整后畫面看起來效果很差,別急抢韭!在設備上運行看看實際效果薪贫。最后,慢慢減少“Shadow Distance”的值刻恭∏剖。可以看到遠處的陰影開始消失。這個選項就是用來設置需要處理的陰影距離鳍贾。超過該距離的陰影會被忽略鞍匾。所以將該值減小至理想效果即可。現(xiàn)在Quality Settings窗口如下圖:
(7)紋理
如果仔細研究編輯器日志骑科,會發(fā)現(xiàn)紋理是游戲內存占用大頭橡淑。大多數(shù)情況下,這些紋理占用的內存遠遠地超過了它們的價值咆爽。可以先在項目窗口中點擊紋理梳码,進入紋理的 “Import Settings”。點擊 “Advanced” 箭頭伍掀,勾選 “Generate Mip Maps”掰茶。Unity強烈推薦勾選該選項,它可以加快紋理的載入速度蜜笤,降低渲染時間濒蒋。
最后拣播,可以使用紋理圖集(Atlas)減少DrawCall。所謂圖集就是一張大的紋理收擦,其中包含游戲中部分或全部的紋理贮配。這種做法確實可以帶來很大的性能提升!
(8)UI
談到Unity Android優(yōu)化塞赂,另一個很大的課題是UI方面的優(yōu)化泪勒。可以利用一些小技巧來獲得最佳性能表現(xiàn)宴猾。
Sprites
在UI中使用精靈(Sprite)時圆存,保證其中透明區(qū)域越少越好,因為這會影響性能表現(xiàn)仇哆。可以像紋理一樣將所有UI Sprite放到一個圖集中沦辙,然后將 “Max Size” 設為可以接受的值。同時勾選 “Generate Mip Maps” 選項税产,UI不僅需要更快的渲染速度怕轿,同時最好也能流暢地顯示在屏幕上偷崩。
(9)Canvas
Unity中辟拷,UI是與Canvas一起搭配使用的。盡量減少Canvas存在的數(shù)量阐斜,因為一個Canvas就表示需要進行一次渲染處理衫冻。有時候您的UI不需要與用戶交互,此時可以移除 “Graphic Raycaster” 組件谒出。因為后者是用來檢測交互操作的隅俘。此外,取消勾選“Pixel Perfect”選項可以獲得更佳性能笤喳,尤其是使用Scrool Rects時为居。
(10)文本與圖像
文本(Text)組件對移動設備的性能要求很高,所以可以禁用 “Rich Text”功能杀狡。如果圖像與文本組件無需與玩家交互蒙畴,可以取消勾選 “Raycast Target”,從而避免不必要的射線檢測計算呜象。
(11)字體
使用文本對象時常希望自己設置字體膳凝。但要小心,網上的一些低質量字體可能會帶來性能方面的問題恭陡。盡量使用字符集較小的字體蹬音,如果遇到性能問題,請嘗試取消勾選所有Text組件的 “Best Fit”選項休玩。
(12)UI材質
經確認著淆,如果圖像和文本組件的材質一欄為空劫狠,那么它將拖慢運行速度。我們要做的是新建一個材質牧抽,著色器就用“UI/Default”嘉熊,然后讓所有的圖像和文字組件使用該材質。
(13)Rect Mask 2D
Rect Mask 2D是一種UI組件扬舒,與Mask組件類似阐肤。不同的是前者可以在UI元素超出遮罩區(qū)域時禁用這個元素,從而避免多余的渲染工作讲坎。
(14)Scroll Rect
另一種UI組件Scroll Rect是用來顯示大量內容的孕惜,它會隱藏部分內容并允許用戶進行滾動操作。這種組件的交互可以給玩家?guī)砀洋w驗晨炕,但盡量少用衫画,因為它對移動設別并不是特別友好。可以將其與Rect Mask 2D組件配合使用瓮栗,以獲得更佳性能削罩。
(15)Canvas Group與動畫菜單
與菜單元素交互時,一般做法是在元素顯示時啟用费奸,不顯示時禁用弥激。但這并不是最高效的辦法。實際上愿阐,啟用與禁用會重新激活部分GameObject上的一些操作微服。例如前面提到的Scroll Rect,在啟用時會重新載入其中填充的內容缨历,這種操作可能會產生卡頓以蕴。還有一種方法是就讓GameObject保持激活,但使用Canvas Group進行管理辛孵。
? 這些組件很實用丛肮,它可以將UI元素分組,并整體地控制它們的行為魄缚。您可以嘗試調整透明度宝与,即Canvas Group的“Alpha”,然后禁用UI的交互功能(使用“Interactable” 和 “Blocks Raycasts”選項)鲜滩。
(16)著色器
最后也是最重要的伴鳖,來探討一下著色器。從渲染的角度來看徙硅,這是一種很神奇的東西榜聂,但對于移動設備,它可能會瞬間榨干設備的性能嗓蘑,因此一定要當心须肆。從Niels的經驗來看匿乃,著色器的Keyword越少越好、著色器數(shù)量越少越好豌汇、內容越簡單越好幢炸。PostProcessing著色器是性能消耗大戶,所以不要在移動設備上使用拒贱,或者提前做好功課做足測試宛徊,保證移動設備上的運行性能。
注:轉自unity官方中文論壇