《Unity性能優(yōu)化》系列課程筆記——第肆節(jié)
2022年2月8日 第肆講 Texture導(dǎo)入設(shè)置檢查與優(yōu)化

2D 最常用的2D紋理,默認(rèn)選項(xiàng)
Cube 一般用于天空和與反射探針,默認(rèn)支持Default、Normal、Single Channel幾種類型紋理,可以通過Assets > Create > Legacy > Cubemap生成,也可以通過C#代碼 Camera.RenderToCubemap在腳本中生成
2D Array 2D紋理數(shù)組,可以極大提高大量相同大小和格式的紋理訪問效率,但需要特定平臺(tái)支持,可以通過引擎SystemInfo.supports2DArrayTextures 接口運(yùn)行時(shí)查看是否支持。
3D 通過紋理位圖方式存儲(chǔ)或傳遞一些3D結(jié)構(gòu)話數(shù)據(jù),一般用于體積仿真,如霧效、噪聲、體積數(shù)據(jù)、距離場、動(dòng)畫數(shù)據(jù)等信息,可以外部導(dǎo)入,也可運(yùn)行時(shí)程序化創(chuàng)建。
Alpha Source
默認(rèn)選擇Input Texture Alpha就好,如果確定不使用原圖中的Alpha通道,可以選擇None。另外From Gray Scale我們一般不會(huì)選用
Alpha Is Transparency
指定Alpha通道是否開啟半透明,如果位圖像素不關(guān)心是否要半透明可以不開啟此選項(xiàng)。這樣Alpha信息只需要占1bit。節(jié)省內(nèi)存
Ignore Png file gamma
是否忽略png文件中的gamma屬性,這個(gè)選項(xiàng)是否忽略取決于png文件中設(shè)置不同gamma屬性導(dǎo)致的顯示不正常,一般原圖制作流程沒有特殊設(shè)置,這個(gè)選項(xiàng)一般默認(rèn)就好。
Read/Write
開啟此選項(xiàng)會(huì)導(dǎo)致內(nèi)存量增加一倍,默認(rèn)我們都是不開啟,除非你的腳本邏輯中需要?jiǎng)討B(tài)讀寫該紋理時(shí)需要打開此選項(xiàng)。
Streaming Mipmaps(Texture Streaming部分講解)
Virtual Texture Only(虛擬部分講解)
Generate Mip Maps
什么時(shí)候不需要生成MipMaps?
2D場景
固定視角,攝像機(jī)無法縮放遠(yuǎn)近
Border Mip Maps 默認(rèn)不開啟,只有當(dāng)紋理的是Light Cookies類型時(shí),開啟此選項(xiàng)來避免colors bleeding現(xiàn)象導(dǎo)致顏色滲透到較低級(jí)別的Mip Level紋理邊緣上
MipMap Filtering
Box 最簡單,隨尺寸減小,Mipmap紋理變得平滑模糊
Kaiser,避免平滑模糊的銳化過濾算法。
Mip Maps Preserve Coverage,只有需要紋理在開啟mipmap后也需要做Alpha Coverage時(shí)開啟。默認(rèn)不開啟。
Fadeout MipMaps, 紋理Mipmap隨Mip層級(jí)淡化為灰色,一般不開啟,只有在霧效較大時(shí)開啟不影響視覺效果。
選擇合適紋理過濾的最佳經(jīng)驗(yàn):
使用雙線性過濾平衡性能和視覺質(zhì)量。
有選擇地使用三線性過濾,因?yàn)榕c雙線性過濾相比,它需要更多的內(nèi)存帶寬。
使用雙線性和 2x 各向異性過濾,而不是三線性和 1x 各向異性過濾,因?yàn)檫@樣做不僅視覺效果更好,而且性能也更高。
保持較低的各向異性級(jí)別。僅對關(guān)鍵游戲資源使用高于 2 的級(jí)別。

其他可能有問題的紋理類型
紋理圖集大小設(shè)置不合理,圖集利用率低
大量只有顏色差異的圖片
UI背景貼圖而不采用9宮格縮放的圖
純色圖沒有使用Single Channel
不合理的半透明UI,占據(jù)大量屏幕區(qū)域,造成Overdraw開銷
大量2D序列幀動(dòng)畫,而且圖片大,還不打圖集
不合理的通道圖利用方案
大量漸變色貼圖,沒有采用1像素過渡圖,也不采用Single Channel, 粒子特效中較為常見。
優(yōu)化前后對比:
紋理內(nèi)存使用減少了170M左右, APK包體減少了140M左右

