Unity3D 效能優化 – Basic Texture , Setting 優化設定

簡介

無論是在 Unity 製作遊戲、模擬器或是互動 App,要在畫面產生視覺效果,都取決於 Texture,進而組合成 Material。這篇我們又要從最原始的元素來介紹一些優化效能的小撇步。千萬不要小看這些細節的地方,通常魔鬼都藏在細節裡;以下會以標題式的方式紀錄與分享給大家。

Texture – 沒必要盡量不要使用 Alpha Channel

在場景中有非常多的東西會使用到 Alpha Channel,例如樹葉、玻璃、路標等等,為了減少面數,就使用這套技法。但是個人覺得面數的耗能式小於材質(在龐大的物件數量場景中)。 貼圖的大小會影響到 GPU 需要的時候要花多少時間載入到繪圖記憶體,也會影響到繪圖記憶體的用量。 尤其是在手機載體中更要避免此類應用。

Texture – 使用 Unity 壓縮貼圖

在前一篇有提到使用 Substance 軟體合成並壓縮圖片成 .Sbsar 檔案,確實可以減少檔案的大小,但是在 Unity 中,也有提供,而一般我們直接匯入 Unity 中貼圖格式為 Automatic,基本上根本沒處理壓縮過。如下圖:

我們先來介紹一下大家較常用的 RGBA32 & RGB24 壓縮格式並帶 Alpha Channel的貼圖實際占用記憶體的情況:

RGBA 32
20482048*2048*416MB
10241024*1024*44MB
RGB 24
10241024*1024*33MB
512512*1024*31.5MB

為什麼我只舉例以上兩種格式,因為這是 AndroidIOS 都適用的格式,當然也有只符合單一平台的格式效能也比較好。可以看到下圖整理的通用與各平台壓縮格式。

小結論就是,你假如一定要使用到 Alpha Channel 的話,就可以選用 RGBA 32 壓縮格式,那假如不需要的話就可選用 RGB 24

Texture – 使用 Mipmaps

在Unity貼圖中有支援 Mipmap,在三維計算機圖形的貼圖渲染中有一個常用的技術被稱爲 Mipmapping。爲了加快渲染速度和減少圖像鋸齒,貼圖被處理成由一系列被預先計算和優化過的圖片組成的文件,這樣的貼圖被稱爲 MIP map 或者 mipmap。 可以在貼圖設定中的 Generate Mip Maps做設定。

Mipmap 會增加遊戲包體的大小和佔用一定量的記憶體 , 但在遊戲中 Mipmap 的渲染可以減少視訊記憶體頻寬 , 降低渲染壓力,隨著相機的推遠貼圖會隨之切換成低畫素的體貼,從而節省資源開支。過的 Mipmap 使用會對記憶體造成很大壓力 , 因此建議只對大物件設定 Mipmap

而在 Texture設定下方可以看到 Mip 的圖片鋸齒畫,如下圖,調整下方箭頭的拉霸,而在做動同時圖片會隨著變化,且會標示 Mip 等級。

大家可以下載 Colored Mipmap Texture – Visualized Checker 這套外掛來看看 Mipmap 到底是在做什麼的,可以直接看展示短片。

我們要如何製作呢? 我們先設定好階層 Mipmap 圖片後,請到 Assets→Create請到Assets→Create→Mipmap Maker

按下下圖的”+”新增不同階層的 Mipmap Texture,新增好後按下 Create Texture,就會產出一個 Mipmap 材質,並且可以直接賦予 MaterialBasicColor Channel,而 Normal Mask map 都可以使用 Substance 產生的圖片。

Texture – Project Setting Texture Quality

而大家假如很懶得一一修改 Texture 細部選項,或是懶得製作 Mipmap,那不訪可以直接修改整個 Project 的圖片品質。如下圖,至 Project Setting→Quality→Texture Quality,在選項中可以調整完整品質、減半、剩下1/4、1/8。這方法可以直接明顯的看到效能的提升,但也可以看到畫質明顯的下降。

小結

本篇的幾個對於材質貼圖的著墨來複習一下,由上到下的優化步驟,1.盡量不要使用 Alpha Channel,2.壓縮貼圖,3.使用 Mipmap 貼圖,4.依照 Project 整體視覺來調整材質品質,此外在整合前幾篇的 Texture Bake 功能後,整場景肯定會減低非常多的資源。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *