Unity贴图压缩格式设置

一、移动平台GPU

参考文档:

各种移动GPU压缩纹理的使用方法 - LuMing - 博客园​www.cnblogs.com图标

1、Imagination Technologies的PowerVR SGX系列

代表机型:Apple iPhone全系、iPad全系等
2、Imagination Technologies的 PowerVR Rogue系列

3、Qualcomm( 高通)的 Adreno系列

4、ARM的 Mali系列

5、 nVIDIA的Tegra系列

二、常用的纹理格式占用的大小

R8G8B8每个像素占用3个字节,A8R8G8B8每个像素占用 4个字节,可以计算出一张1024*1024大小的RGB 24bits的贴图在不压缩的情况下纹理所占用的大小为3M,RGBA 32bits的贴图在不压缩的情况下纹理所占用的大小为4M。所以我们需要对纹理进行压缩。

三、ETC纹理压缩格式(Ericssontexture compression)

  • ETC(ETC1)

ETC原ETC1格式,是OpenGL ES图形标准的一部分,被所有的Android设备所支持。

ETC 4bits 压缩格式每个像素占用0.5字节。常用的压缩格式RGB Compressed ETC 4bits,一张1024*1024大小的贴图压缩后的大小为0.5M,但是ETC并不支持透明通道,早期对于RGBA 32 bits的贴图纹理通常会选用RGBA16 压缩,将一张1024*1024大小的贴图从4M压缩为2M,或者拆分为两张RGB贴图再进行ETC格式的压缩,从4M压缩为2张0.5M。

  • ETC2

自从OpenGL ES 3.0发布后,ETC2压缩格式成为一种标准。 Unity5.2以后,默认的压缩格式为ETC2,ETC2支持透明通道,对于RGB24 bits的贴图可以选择压缩为RGB Compressed ETC2 4bits,一张1024*1024的贴图压缩后的大小为0.5M ;RGBA32 bits的贴图可以选择压缩为RGBA Compressed ETC 8bits,一张1024*1024大小的贴图压缩后的大小为1M。

ETC2的限制是Android设备的GPU必须支持 OpenGL ES 3.0,如果GPU不支持OpenGL ES 3.0,会对这种格式的纹理进行解压缩,占用更多的显存和内存。

  • 压缩质量对比

ETC2 4bits的压缩质量高于ETC 4bits。

RGBA ETC2 8bits的压缩质量高于拆分两张RGB ETC 4bits。
带透明通道的贴图,使用2张ETC 4bits与2张ETC2 4bits与1张ETC2 8bits对比,ETC2 8bits的压缩质量高于2张ETC2 4bits高于2张ETC 4bits。

从左到右:两张ETC1,两张ETC2,一张ETC2

四、PVRTC 纹理压缩格式(PowerVR texture compression)

  • PVRTC

支持PVRTC格式的GPU为ImaginationTechnologies的PowerVR SGX系列。也就是所有的苹果设备可以使用PVRTC压缩格式。

PVRTC 4bits 格式每个像素占用0.5字节。对于RGB 24 bits的贴图可以选择压缩为RGB Compressed PVRTC 4bits;RGBA 32 bits的贴图可以选择压缩为RGBA Compressed PVRTC 4bits,一张1024*1024大小的贴图压缩后的大小为0.5M。可见,带透明通道的贴图压缩质量会很差,可以选择拆分为两张RGB贴图再进行RGB Compressed PVRTC 4bits格式的压缩。

PVRTC格式要求纹理的长宽相等,且都是2的幂次(POT),在压缩时会将长宽比非1:1的贴图压缩为1:1,一张1024*512大小的贴图会压缩为1024*1024大小。

五、ASTC纹理压缩格式

  • ASTC

参考文档:

Using ASTC Texture Compression for Game Assets​developer.nvidia.com图标

ASTC是在OpenGL ES3.0出现后在2012年中产生的一种业界领先的压缩格式,它的压缩分块从4x4到12x12最终可以压缩到每个像素占用1bit以下,压缩比例有多种可选。很重要的是支持RGBA,且适用于2的幂次方长宽等比尺寸和无尺寸要求的NPOT(非2的幂次方)纹理。

以ASTC 4x4 block压缩格式为例,每个像素占用1字节,8bits。一张1024*1024大小的贴图压缩后的大小为1M。

六、其他纹理压缩格式

  • ATITC (ATI texture compression)

支持ATITC格式的GPU为Qualcomm的Adreno系列。

  • DXTC (Directx texture compression)

S3TC(S3 texturecompression)也被称为DXTC,在PC上广泛被使用,支持的GPU为NVIDIA Tegra系列。移动设备上使用GPU为nVIDIA的极少。

七、总结

1、安卓设备运行平台要求支持OpenGL ES 3.0的使用ETC2,RGB压缩为RGB Compressed ETC2 4bits,RGBA压缩为RGBA Compressed ETC2 8bits。

2、安卓设备运行平台需要兼容OpenGL ES 2.0的使用ETC,RGB压缩为RGB Compressed ETC 4bits,RGBA压缩为RGBA 16bits。(压缩大小不能接受的情况下,压缩为2张RGB Compressed ETC 4bits)

3、苹果设备运行平台要求支持OpenGL ES 3.0的使用ASTC,RGB压缩为RGB CompressedASTC 6x6 block,RGBA压缩为RGBA Compressed ASTC 4x4 block。对于法线贴图的压缩精度较高可以选择RGB CompressedASTC 5x5 block。

4、 苹果设备运行平台需要兼容 OpenGLES 2.0的使用 PVRTC,RGB压缩为PVRTC 4bits,RGBA压缩为RGBA 16bits。(压缩大小不能接受的情况下,压缩为2张RGB Compressed PVRTC 4bits)

posted @ 2020-12-08 10:03  oayx  阅读(1651)  评论(0编辑  收藏  举报