Unity中图片纹理压缩教程 VR资源

对纹理的处理是智能的:不论你放入的是PNG,PSD还是TGA,它们都会被自动转换成Unity自己的Texture2D格式。
在Texture2D的设置选项中,你可以针对不同的平台,设置不同的压缩格式,如IOS设置成PVRTC4,平台设置成RGBA16等。
嗯,非常的智能。
 
 
但是,在一些进阶的使用中,一些情况是难以满足的。
 
 
比如,我们NGUI的图集纹理,在Android平台,使用ETC1纹理+Alpha通道图的方式;iOS平台,使用PVRTC4的纹理。
个别图片纹理,要求清晰度较高的,使用RGBA16,但是使用RGBA16的渐变显示图片却惨不忍睹;
 
 
一些要求高保真的,则需要直接使用最高质量的RGBA32格式。
 
很多时候,随着项目的复杂需求发展,单纯的Unity纹理管理已经无法满足我们的需求了。这时候,往往需要我们做一些额外工作。
总结一下我自己的纹理压缩方案:
 
 

纹理压缩的策略

手游开发(Android/iOS)中,我会使用3个级别的压缩程度:高清晰无压缩、中清晰中压缩、低清晰高压缩;4种压缩方法:RGBA32, RGBA16+Dithering,ETC1+Alpha,PVRTC4。一般足够应付大部分的需求了。
 

高清晰无压缩 - RGBA32                          

 

Unity中图片纹理压缩教程 VR资源

 

Unity RGBA32 - 高清晰无压缩.png

 

RGBA32等同于原图了,优点是清晰、与原图一致,缺点是内存占用十分大;对于一些美术要求最好清晰度的图片,是首选。
 
 
要注意一些png图片,在硬盘中占用几KB,怎么在Unity中显示却变大?因为Unity显示的是Texture大小,是实际运行时占用内存的大小,而png却是一种压缩显示格式;可以这样理解,png类似于zip格式,是一个压缩文件,只不过在运行时会自动解压解析罢了。
 
 

中清晰中压缩 - RGBA16 + DitheringRGBA16 + Dithering

 

Unity中图片纹理压缩教程 VR资源 

 

Unity RGBA16,不抖动处理的渐变图片惨不忍睹

 

 
既然叫RGBA16,自然就是RGBA32的阉割版。


对于一些采用渐变的图片,从RGBA32转换成RGBA16,能明显的看出颜色的层叠变化,如上图。
 

 

Unity中图片纹理压缩教程 VR资源

 

 

采用Floyd Steinberg抖动处理后,除非放大,否则肉眼基本看不出区别