七彩极 发表于 2021-11-27 06:59

关于Unity贴图压缩

关键词

优化策略、贴图压缩格式
参考

Using ASTC Texture Compression for Game Assets | NVIDIA Developer
Unity - Manual: Recommended, default, and supported texture compression formats, by platform (unity3d.com)
你所需要了解的几种纹理压缩格式原理 - 知乎 (zhihu.com)
常用方案

[*]ETC:有损压缩,可对24-bitRGB进行6倍压缩。不支持Alpha。要求OpenGL ES2.0,并且长宽是4的倍数。不支持A通道贴图。
[*]ETC2:提供单通道R11和双通道RG11数据的压缩,支持Alpha。要求OpenGL ES3.0,并且长宽是4的倍数。
[*]ASTC:IOS9之后支持ASTC压缩,ASTC在压缩质量和容量上有很大优势,以ASTC 4x4 block压缩格式为例,每个像素占用1字节,8bits。一张1024*1024大小的贴图压缩后的大小为1M。ASTC的Nvidia引文
[*]现阶段安卓也逐步往ASTC上倾斜,但是支持有问题,支持OpenGL ES 3.1和部分支持OpenGL ES 3.0的GPU。Unity官方引文

<hr/>常用计算公式

下图是ASTC在Nvidia引文中的数据:




像素大小(Bits Per Pixel)(可能是这么翻译的-。-)
Bits Per Pixel = 16 bytes/Block Size * 8-bit;
压缩率
压缩率 = 原始像素大小(32-bit)/ Bits Per Pixel;
压缩后图像大小
图像大小 = 原始图片大小 / 压缩率;
各压缩格式的贴图注意事项

PVRTC:平台IOS。要求长宽一致。且为2的幂次方。
ASTC:平台IOS。没有过多限制。优先使用。
ETC:平台安卓。要求长宽为4的倍数。不支持A通道贴图。
ETC2:平台安卓。且为OpenGL ES3.0,要求长宽为4的倍数。

<hr/>建议

UI因为特殊性,有的项目是用无损压缩,有的项目直接上ASTC。
建议在IOS下常规下用ASTC 6X6作为普通diffuse贴图的压缩格式。
ASTC 4X4作为粗糙度/细节纹理的贴图的压缩格式。
ASTC 6X6作为通道贴图的压缩格式。
ASTC 4X4作为NormalMap贴图的压缩格式。
JPEG已经是有损格式了,JPEG原图精度丢失与ASTC/ETC压缩无关
贴图尺寸的话,尽可能是2的幂次方纹理。理由参考
页: [1]
查看完整版本: 关于Unity贴图压缩