紋理類型
- 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适贸,其他情況建議開啟
- Border Mip Maps 默認不開啟,只有當紋理的是Light Cookies類型時涝桅,開啟此選項來避免colors bleeding現(xiàn)象導致顏色滲透到較低級別的Mip Level紋理邊緣上
- 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)點:
- 采用共同紋理圖集的多個靜態(tài)網格資源可以進行靜態(tài)合批處理哼丈,減少DrawCall調用次數(shù)。
- 紋理圖集可以減少碎紋理過多筛严,因為他們打包在一個圖集里醉旦,通過壓縮可以更有效的利用壓縮,降低紋理的內存成本和冗余數(shù)據(jù)。
-
缺點
- 美術需要合理規(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)點:
- GPU不需要在遠距離上對對象進行全分辨率紋理采樣槐壳,因此可以提高紋理采樣性能
- 同時也解決了遠距離下的過采樣導致的噪點問題然低,提高的紋理渲染質量。
缺點:
由于Mipmap紋理要生成低分辨率副本务唐,會造成額外的內存開銷雳攘。
其他可能有問題的紋理類型
- 紋理圖集大小設置不合理,圖集利用率低
- 大量只有顏色差異的圖片
- UI背景貼圖而不采用9宮格縮放的圖
- 純色圖沒有使用Single Channel
- 不合理的半透明UI枫笛,占據(jù)大量屏幕區(qū)域吨灭,造成Overdraw開銷
- 大量2D序列幀動畫,而且圖片大刑巧,還不打圖集
- 不合理的通道圖利用方案
- 大量漸變色貼圖喧兄,沒有采用1像素過渡圖无畔,也不采用Single Channel, 粒子特效中較為常見