Unity技术之贴图常用的格式
简介
在Unity中纹理是非常重要的一种资源,为了正确使用纹理资源需要针对特定的平台使用不同的纹理格式,本文将简单介绍一下常用的部分纹理的格式设置,希望能借此帮助大家理解各个格式的不同
声明
本文中的内容属于个人总结整理而来,个人水平有限,对于部分细节难免有理解错误及遗漏之处,如果您在阅读过程中有所发现,希望您能指正,同时文章中的部分内容也参考了其它大神的文章,如果文章中的内容侵犯了您的权益,表示非常歉意,请您指出,我将尽快修改。
如果您进行转载,请标明出处。
Unity技术 纹理格式(http://www.liyubin.com/articles/2019/05/13/1557754462593.html)
纹理格式
为了方便查看,本文将以表格的形式展示,对于其中部分内容解释如下:
- 本文中并未完全列举全部格式,主要还是以在iOS与android平台上常用的为例
- 如果在使用中了机型不支持的格式,GPU将会解压为RGB或者RGBA,不过会增加CPU解压时间,并占用更多的内存
- BPP表示像素深度,一个像素的颜色在计算机中由多少个字节表示
- 画质的质量用5个星(★★★★★)来表示最好效果,其中空心的星(☆)表示半颗星
- 对于表格中第一列中的RGB与RGBA只是用来区别带A通道与不带A通道
- 对于统计的压缩率,只是一个粗略值,不代表绝对正确
- 对于表格中使用的多个横线(----)表示无限制或者不支持
格式 | 真彩-TrueColor | 16位-RGBA4444/RGB565 | Dither16位-RGBA4444/RGB565 | PVRTC | PVRTC+Alpha8 | ASTC6x6 | ETC | ETC+Alpha8 | ETC2 |
---|---|---|---|---|---|---|---|---|---|
适用平台 | iOS & Android | iOS & Android | iOS & Android | iOS | iOS | iOS & 部分Android | Android | Android | Android |
支持要求 | ---- | ---- | ---- | ---- | ----- | iOS要求A8处理器, | opengl2.0及以上 | opengl2.0及以上 | opengl3.0(Android4.3以上) |
不支持情况 | ---- | ---- | ---- | ----- | ---- | iOS中iPhone5s,ipadmini2,ipadair有以下不支持, | ---- | ---- | 4.3以下的机型 |
尺寸要求 | ---- | ---- | ----- | 需要为2的N次方的正方形 | 需要为2的N次方的正方形 | ----- | 长宽需要为4的整数倍 | 长宽需要为4的整数倍 | 长宽需要为4的整数倍 |
RGB BPP | 24位 | 16位 | 16位 | 4位 | ---- | 3.56 | 4位 | ---- | 4位 |
RGBA BPP | 32位 | 16位 | 16位 | 4位 | 4+8位 | ---- | ---- | 4+8位 | 8位 |
RGB512x512 内存 | 768KB | 512KB | 512KB | 128KB | ---- | 115.6KB | 128KB | ---- | 128KB |
RGBA512x512 内存 | 1024KB | 512KB | 512KB | 128KB | 128KB+256KB | 115.6KB | ---- | 128KB+256KB | 256KB |
RGB压缩率 | 100% | 68% | 68% | 16.7% | ---- | 15.1% | 16.6% | ---- | 16.6% |
RGBA压缩率 | 100% | 50% | 50% | 12.5% | 37.5% | 11.29% | ---- | 37.5% | 25% |
RGB画质 | ★★★★★ | ★★★★ | ★★★★☆ | ★★★ | ---- | ★★★☆ | ★★★☆ | ---- | ★★★☆ |
RGBA画质 | ★★★★★ | ★★ | ★★★ | ★★ | ★★★ | ★★★ | ---- | ★★★☆ | ★★★ |
备注 | 原图不进行任何压缩,相对来说包体与内存占用量均比较大,但是质量会非常好 | 内存占用相对中等,绝大多数机型均支持,色阶/色差比较明显,对于不带A通道的图来说质量还可以,但是对于带A通道的会影响较大 | 内存占用中等,绝大多数机型也支持,与16位色对比的话,使用抖动算法,使用噪点代替色阶,不带A通道的基本上效果会好些,但是不适合拉伸和9宫的贴图,对于部分带A通道的贴图,如果效果能接受的话也可适用带A通道的贴图 | 要求贴图尺寸必须为2的N次方的正方形,对于长方形图不适用,内存占用量小,但是由于压缩会对画质有一定的影响,对于带A通道的影响明显 | 由于PVRTC对于带A通道的贴图,效果太差,所以对于带A通道的可以将A分离,从而得到RGB+A的两张贴图,其中A通道的可以不压缩 | 部分机型不支持,内存占用量小,同时对尺寸也不再有限制,此类有多种格式4x4,12x12等,此处以6x6为例,其中4x4效果最好,12x12效果最差 | 不支持带A通道的贴图,内存占用量小,同时画质较好 | 由于ETC本身并不支持A通道,所以将带A通道的图拆成RGB+A8通道的两张图,这样对于带A通道的效果会好很多 | 部分机型不支持,不过对于目前来说,对整体占有率影响不大,不管是带A或者不带的A的质量均可接受 |
总结:
根据上表的情况,一般在开发过程中,如果想要保证兼容性针对iOS平台,会限定使用PVRTC,对于Android平台会ETC,如果对旧设备不再提供支持,可以限定iOS平台使用ASTC,Android平台使用ETC2