obsidian/笔记文件/2.笔记/Unity贴图压缩格式设置.md
2025-03-26 00:02:56 +08:00

4.9 KiB
Raw Permalink Blame History

#unity/日常积累

一、移动平台GPU

参考文档:各种移动GPU压缩纹理的使用方法

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的贴图在不压缩的情况下纹理所占用的大小为3MRGBA 32bits的贴图在不压缩的情况下纹理所占用的大小为4M。所以我们需要对纹理进行压缩。

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

  • ETCETC1

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

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

  • ETC2

自从OpenGL ES 3.0发布后ETC2压缩格式成为一种标准。 Unity5.2以后默认的压缩格式为ETC2ETC2支持透明通道对于RGB24 bits的贴图可以选择压缩为RGB Compressed ETC2 4bits一张10241024的贴图压缩后的大小为0.5M RGBA32 bits的贴图可以选择压缩为RGBA Compressed ETC 8bits一张10241024大小的贴图压缩后的大小为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

!Pasted image 20240402143425.png

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

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

  • PVRTC

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

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

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

五、ASTC纹理压缩格式

  • ASTC

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

!Pasted image 20240402143508.png

以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的使用ETC2RGB压缩为RGB Compressed ETC2 4bitsRGBA压缩为RGBA Compressed ETC2 8bits。

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

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

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