Unity - 性能優(yōu)化實戰(zhàn)03 - Texture基礎概念介紹

紋理類型

  • Default:默認的紋理類型格式
  • Normal map:法線貼圖烂叔,可將顏色通道轉換為適合實時法線貼圖格式
  • Editor GUI and Legacy GUI:在編輯器GUI控件上使用紋理請選擇此類型
  • Sprite(2D and UI):在2D游戲中使用的精靈(Sprite)或UGUI使用的紋理請選擇此類型
  • Cursor:鼠標光標自定義紋理類型
  • Cookie:用于光照Cookie剪影類型的紋理
  • Lightmap:光照貼圖類型的紋理灾梦,編碼格式取決于不同的平臺
  • Single Channel:如果原始圖片文件只有一個通道,請選擇此類型,可以節(jié)省內存開銷

紋理形狀

  • 2D 最常用的2D紋理去枷,默認選項
  • Cube 一般用于天空和與反射探針久免,默認支持Default、Normal谢揪、Single Channel幾種類型紋理蕉陋,可以通過Assets > Create > Legacy > Cubemap生成,也可以通過C#代碼 Camera.RenderToCubemap在腳本中生成
  • 2D Array 2D紋理數(shù)組拨扶,可以極大提高大量相同大小和格式的紋理訪問效率凳鬓,但需要特定平臺支持,可以通過引擎SystemInfo.supports2DArrayTextures 接口運行時查看是否支持患民。
  • 3D 通過紋理位圖方式存儲或傳遞一些3D結構化數(shù)據(jù)缩举,一般用于體積仿真,如霧效、噪聲仅孩、體積數(shù)據(jù)托猩、距離場、動畫數(shù)據(jù)等信息辽慕,可以外部導入京腥,也可運行時程序化創(chuàng)建。

Alpha Source

默認選擇Input Texture Alpha就好溅蛉,如果確定不使用原圖中的Alpha通道公浪,可以選擇None。另外From Gray Scale我們一般不會選用

  • None:無論輸入紋理是否有 Alpha 通道船侧,導入的紋理都沒有 Alpha 通道
  • Input Texture Alpha:輸入紋理中的 Alpha 通道
  • From Gray Scale:從輸入紋理 RGB 值的平均值生成 Alpha欠气,一般不使用

Alpha Is Transparency

指定Alpha通道是否開啟半透明,如果位圖像素不關心是否要半透明可以不開啟此選項镜撩,這樣Alpha信息只需要占1bit晃琳,節(jié)省內存。開啟則會減少紋理過濾產生的瑕疵


Ignore Png file gamma

是否忽略png文件中的gamma屬性琐鲁,這個選項是否忽略取決于png文件中設置不同gamma屬性導致的顯示不正常卫旱,一般原圖制作流程沒有特殊設置,這個選項一般默認就好围段。


Advanced

  • Read/Write:開啟此選項會導致內存量增加一倍顾翼,默認我們都是不開啟,除非你的腳本邏輯中需要動態(tài)讀寫該紋理時需要打開此選項
  • Streaming Mipmaps
  • Virtual Texture Only
  • Generate Mip Maps:2D場景或者固定視角奈泪,攝像機無法縮放遠近不需要生成MipMaps适贸,其他情況建議開啟
    1. Border Mip Maps 默認不開啟,只有當紋理的是Light Cookies類型時涝桅,開啟此選項來避免colors bleeding現(xiàn)象導致顏色滲透到較低級別的Mip Level紋理邊緣上
    2. MipMap Filtering
      • Box 最簡單拜姿,隨尺寸減小,Mipmap紋理變得平滑模糊
      • Kaiser冯遂,避免平滑模糊的銳化過濾算法蕊肥。
      • Mip Maps Preserve Coverage,只有需要紋理在開啟mipmap后也需要做Alpha Coverage時開啟蛤肌。默認不開啟壁却。
      • Fadeout MipMaps, 紋理Mipmap隨Mip層級淡化為灰色,一般不開啟裸准,只有在霧效較大時開啟不影響視覺效果展东。

紋理大小

選擇合適紋理大小應盡量遵循以下經驗:
  • 不同平臺、不同硬件配置選擇不同的紋理大小炒俱,Unity下可以采用bundle變體設置多套資源盐肃、通過Mipmap限制不同平臺加載不同level層級的貼圖爪膊。
  • 根據(jù)紋理用途的不同選擇不同的紋理加載方式侨赡,如流式紋理加載Texture Streaming厌均、稀疏紋理Sparse Texture糜烹、虛擬紋理VirtualTexture等方式隐解。
  • 不能讓美術人員通過增加紋理大小的方式增加細節(jié),可以選擇細節(jié)貼圖DetailMap或增加高反差保留的方式敬特。
  • 在不降低視覺效果的情況下盡量減小貼圖大小,最好的方式是紋理映射的每一個紋素的大小正好符合屏幕上顯示像素的大小,如果紋理小了會造成欠采樣荷辕,紋理顯示模糊,如果紋理大了會造成過采樣件豌,紋理顯示噪點疮方。這一點做到完美平衡很難保障,可以充分利用Unity編輯器下SceneView->DrawMode->Mipmap來查看在游戲攝像機視角下哪些紋理過采樣茧彤,哪些紋理欠采樣骡显,進而來調整紋理大小(URP下暫時無法查看)。

紋理顏色空間

  • 默認大多數(shù)圖像處理工具都會使用sRGB顏色空間處理和導出紋理曾掂。但如果你的紋理不是用作顏色信息的話惫谤,那就不要使用sRGB空間,如金屬度貼圖珠洗、粗糙度貼圖溜歪、高度圖或者法線貼圖等。一旦這些紋理使用sRGB空間會造成視覺表現(xiàn)錯誤

紋理壓縮

  • 紋理壓縮是指圖像壓縮算法许蓖,保持貼圖視覺質量的同時蝴猪,盡量減小紋理數(shù)據(jù)的大小。默認情況下我們的紋理原始格式采用PNG或TGA這類通用文件格式膊爪,但與專用圖像格式相比他們訪問和采樣速度都比較慢自阱,無法通用GPU硬件加速,同時紋理數(shù)據(jù)量大米酬,占用內存較高沛豌。所以在渲染中我們會采用一些硬件支持的紋理壓縮格式,如ASTC 赃额、ETC琼懊、ETC2、DXT等爬早。

紋理圖集

紋理圖集是一系列小紋理圖像的集合

  • 優(yōu)點:

    1. 采用共同紋理圖集的多個靜態(tài)網格資源可以進行靜態(tài)合批處理哼丈,減少DrawCall調用次數(shù)。
    2. 紋理圖集可以減少碎紋理過多筛严,因為他們打包在一個圖集里醉旦,通過壓縮可以更有效的利用壓縮,降低紋理的內存成本和冗余數(shù)據(jù)。
  • 缺點

    1. 美術需要合理規(guī)劃模型车胡,并且要求模型有相同的材質著色器檬输,或需要制作通道圖去區(qū)分不同材質。制作和修改成本較高匈棘。

紋理過濾

  • Nearest Point Filtering:臨近點采樣過濾最簡單丧慈、計算量最小的紋理過濾形式,但在近距離觀察時主卫,紋理會呈現(xiàn)塊狀逃默。
  • Bilinear Filtering:雙線性采樣過濾會對臨近紋素采樣并插值化處理,對紋理像素進行著色簇搅。雙線性過濾會讓像素看上去平滑漸變完域,但近距離觀察時,紋理會變得模糊瘩将。
  • Trilinear Filtering:三線性過濾除與雙線性過濾相同部分外吟税,還增加了Mipmap等級之間的采樣差值混合,用來平滑過度消除Mipmap之間的明顯變化姿现。
  • Anisotropic Filtering:各向異性過濾可以改善紋理在傾斜角度下的視覺效果肠仪,跟適合用于地表紋理

選擇合適紋理過濾的最佳經驗:

  • 使用雙線性過濾平衡性能和視覺質量
  • 有選擇地使用三線性過濾,因為與雙線性過濾相比备典,它需要更多的內存帶寬
  • 使用雙線性和 2x 各向異性過濾异旧,而不是三線性和 1x 各向異性過濾,因為這樣做不僅視覺效果更好熊经,而且性能也更高
  • 保持較低的各向異性級別泽艘。僅對關鍵游戲資源使用高于 2 的級別

紋理Mipmap

  • Mipmap紋理
    逐級減低分辨率來保存紋理副本。相當于生成了紋理LOD镐依,渲染紋理時匹涮,將根據(jù)像素在屏幕中占據(jù)的紋理空間大小選擇合適的Mipmap級別進行采樣。

  • 優(yōu)點:

    1. GPU不需要在遠距離上對對象進行全分辨率紋理采樣槐壳,因此可以提高紋理采樣性能
    2. 同時也解決了遠距離下的過采樣導致的噪點問題然低,提高的紋理渲染質量。
  • 缺點:
    由于Mipmap紋理要生成低分辨率副本务唐,會造成額外的內存開銷雳攘。


其他可能有問題的紋理類型

  • 紋理圖集大小設置不合理,圖集利用率低
  • 大量只有顏色差異的圖片
  • UI背景貼圖而不采用9宮格縮放的圖
  • 純色圖沒有使用Single Channel
  • 不合理的半透明UI枫笛,占據(jù)大量屏幕區(qū)域吨灭,造成Overdraw開銷
  • 大量2D序列幀動畫,而且圖片大刑巧,還不打圖集
  • 不合理的通道圖利用方案
  • 大量漸變色貼圖喧兄,沒有采用1像素過渡圖无畔,也不采用Single Channel, 粒子特效中較為常見
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市吠冤,隨后出現(xiàn)的幾起案子浑彰,更是在濱河造成了極大的恐慌,老刑警劉巖拯辙,帶你破解...
    沈念sama閱讀 216,324評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件郭变,死亡現(xiàn)場離奇詭異,居然都是意外死亡涯保,警方通過查閱死者的電腦和手機诉濒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來遭赂,“玉大人循诉,你說我怎么就攤上這事横辆∑菜” “怎么了?”我有些...
    開封第一講書人閱讀 162,328評論 0 353
  • 文/不壞的土叔 我叫張陵狈蚤,是天一觀的道長困肩。 經常有香客問我,道長脆侮,這世上最難降的妖魔是什么锌畸? 我笑而不...
    開封第一講書人閱讀 58,147評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮靖避,結果婚禮上潭枣,老公的妹妹穿的比我還像新娘。我一直安慰自己幻捏,他們只是感情好盆犁,可當我...
    茶點故事閱讀 67,160評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著篡九,像睡著了一般谐岁。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上榛臼,一...
    開封第一講書人閱讀 51,115評論 1 296
  • 那天伊佃,我揣著相機與錄音,去河邊找鬼沛善。 笑死航揉,一個胖子當著我的面吹牛,可吹牛的內容都是我干的金刁。 我是一名探鬼主播帅涂,決...
    沈念sama閱讀 40,025評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼织咧,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了漠秋?” 一聲冷哼從身側響起笙蒙,我...
    開封第一講書人閱讀 38,867評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎庆锦,沒想到半個月后捅位,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,307評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡搂抒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,528評論 2 332
  • 正文 我和宋清朗相戀三年艇搀,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片求晶。...
    茶點故事閱讀 39,688評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡焰雕,死狀恐怖,靈堂內的尸體忽然破棺而出芳杏,到底是詐尸還是另有隱情矩屁,我是刑警寧澤,帶...
    沈念sama閱讀 35,409評論 5 343
  • 正文 年R本政府宣布爵赵,位于F島的核電站吝秕,受9級特大地震影響,放射性物質發(fā)生泄漏空幻。R本人自食惡果不足惜烁峭,卻給世界環(huán)境...
    茶點故事閱讀 41,001評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望秕铛。 院中可真熱鬧约郁,春花似錦、人聲如沸但两。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽镜遣。三九已至己肮,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間悲关,已是汗流浹背谎僻。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留寓辱,地道東北人艘绍。 一個月前我還...
    沈念sama閱讀 47,685評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像秫筏,于是被迫代替她去往敵國和親诱鞠。 傳聞我的和親對象是個殘疾皇子挎挖,可洞房花燭夜當晚...
    茶點故事閱讀 44,573評論 2 353

推薦閱讀更多精彩內容