Version: 2021.1
纹理压缩格式
渲染纹理

各平台的推荐、默认和支持的纹理压缩格式

本页包含以下信息:

此页面不包含有关游戏主机平台的信息。有关游戏主机平台的信息,请参阅特定于平台的文档。

有关纹理压缩格式的概述,请参阅纹理压缩格式。有关纹理导入设置以及如何设置特定于平台的覆盖的一般信息,请参阅纹理导入设置

术语

本页用到了以下术语:

  • 每像素位数 (bpp) 表示单个纹理像素所需的存储量。Bpp 值越低的纹理在磁盘和内存中也越小。较低的 bpp 值意味着 GPU 可在缓存中存储更多的像素,从而可以更快地访问纹理。
  • LDR(低动态范围)是指最典型的图像,其中颜色在概念上介于 0.0(黑色)和 1.0(白色)值之间。大多数图像文件(例如 PNG 和 JPG)具有低动态范围。
  • HDR(高动态范围)是指特殊的图像和纹理格式,其中颜色的范围可以高于 0 到 1。像 .exr 或 .hdr 这样的图像文件格式通常用于 HDR 图像数据。在运行时和 GPU 上,有多种 HDR 格式,分别对精度、范围和内存使用情况进行取舍。
  • RGB 是一种颜色模型,通过红色、绿色和蓝色的组合生成一系列颜色。
  • RGBA 是具有 Alpha 通道的 RGB 版本,支持混合和不透明度更改。
  • 可变比特率 (VBR) 表示每像素的位数不是固定值,而是取决于实际内容。VBR 仅适用于 Crunch 压缩,仅限于磁盘上的纹理大小。内存中的大小与使用基础纹理格式时的大小相同(例如,RGB Compressed DXT1 对应 RGB Crunched DXT1)。

各平台的推荐纹理压缩格式

桌面端

对于具有 DirectX 11 或更高级别 GPU 的设备,可保证支持 BC7 和 BC6H 格式,推荐的压缩格式选择是: RGB 纹理 - DXT1 4 位/像素。 RGBA 纹理 - BC7(质量更高,压缩速度较慢)或 DXT5(压缩速度较快),均为 8 位/像素。 HDR 纹理 - BC6H 8 位/像素。 如果您需要在 PC 上支持 DirectX 10 类 GPU(2010 年之前的 NVIDIA GPU,2009 年之前的 AMD,2012 年之前的 Intel),则首选 DXT5(而不是 BC7),因为这些 GPU 不支持 BC7 和 BC6H。

有关所有支持格式的详细信息,请参阅支持的纹理压缩格式参考表

iOS 和 tvOS

对于使用 A8 芯片 (2014) 或以上的 Apple 设备,ATSC 是 RGB 和 RGBA 纹理的推荐纹理压缩格式。这种格式允许您在粒度级别对纹理质量和大小进行选择:从 8 位/像素(4x4 块大小)开始直至 0.89 位/像素(12x12 块大小)。 如果需要支持旧设备,或者您想要额外的 Crunch 压缩,从 A7 芯片 (2013) 起的 Apple 设备支持 ETC/ ETC2 格式。 对于更旧的设备,需要使用 PVRTC 压缩格式。 在 iOS 上,Unity 的默认纹理压缩格式是 PVRTC,以获得尽可能广泛的兼容性。ASTC 是首选,但在 A7 设备(第一个支持 Metal 的设备)上不受支持,将在运行时解压缩。

有关所有支持格式的详细信息,请参阅支持的纹理压缩格式参考表

Android

Android 上的纹理压缩支持很复杂,您可能需要针对不同的子目标构建多个不同版本的应用程序。

除非您的应用针对的是特定硬件,支持有限范围的纹理压缩格式,您可在几种压缩格式和未压缩格式之间进行选择,考虑不同的取舍因素。

对于 LDR RGB 和 RGBA 纹理,大多数现代 Android GPU 都支持 ASTC 压缩格式,包括: 自 Adreno 4xx 的 Qualcomm GPU/Snapdragon 415 (2015) 自 Mali T624 (2012) 的 ARM GPU 自 Tegra K1 (2014) 的 NVIDIA GPU 自 GX6250 (2014) 的 PowerVR GPU 如果您需要对旧设备的支持,或者您想要额外的 Crunch 压缩,所有运行 Vulkan 或 Metal 或 OpenGL ES 3.0 的 GPU 都支持 ETC2 格式。产生的图像质量非常高,并且支持一到四分量纹理数据。OpenGL ES 2 设备不支持 ETC2 格式,因此 Unity 在运行时将纹理解压缩为 ETC2 回退为该格式指定的格式。 对于更旧的设备,通常只有 ETC 格式可用。缺点是没有直接的 Alpha 通道支持。对于精灵,Unity 提供了一个选项,通过将纹理拆分为两个 ETC1 纹理来使用 ETC1 压缩:一个用于 RGB,一个用于 Alpha。为此,请在导入精灵图集时为纹理启用特定于 Android 的 Split Alpha Channel 选项。精灵着色器对两个纹理进行采样并将它们组合成最终结果。 对于 HDR 纹理,ASTC HDR 是 Android 设备上唯一可用的压缩格式。ASTC HDR 需要 Vulkan 或 GL_KHR_texture_compression_astc_hdr 支持。ASTC 是最灵活的格式。

对于不支持 ASTC HDR 的设备,所有运行 Vulkan、Metal 或 OpenGL ES 3.0 的设备都支持 RGB9e5,适用于没有 Alpha 通道的纹理。如果需要 Alpha 通道或更广泛的支持,请使用 RGBA Half。这种格式占用的内存是 RGB9e5 的两倍。

有关所有支持格式的详细信息,请参阅支持的纹理压缩格式参考表

各平台的默认纹理压缩格式

下表显示了每个平台使用的默认格式。

平台 颜色模型 正常质量(默认设置) 高质量 低质量(更高性能)
Windows、Linux、macOS RGB RGB 24 位 RGB Compressed DXT1 RGB(A) Compressed BC7 RGB Compressed DXT1
RGBA RGBA 32 位 RGBA Compressed DXT5 RGB(A) Compressed BC7 RGBA Compressed DXT5
HDR RGBA Half RGB Compressed BC6H RGB Compressed BC6H RGB Compressed BC6H
WebGL RGB RGB 24 位 RGB Compressed DXT1 RGB Compressed DXT1 RGB Compressed DXT1
RGBA RGBA 32 位 RGBA Compressed DXT5 RGBA Compressed DXT5 RGBA Compressed DXT5
Android(仅当在构建设置中启用了 Don’t override 时) RGB RGB 24 位 RGB Compressed ETC RGB Compressed ETC RGB Compressed ETC
RGBA RGBA 32 位 RGBA Compressed ETC2 RGBA Compressed ETC2 RGBA Compressed ETC2
iOS RGB RGB 24 位 RGB Compressed PVRTC 4 位 RGB Compressed PVRTC 4 位 RGB Compressed PVRTC 2 位
RGBA RGBA 32 位 RGBA Compressed PVRTC 4 位 RGBA Compressed PVRTC 4 位 RGBA Compressed PVRTC 2 位
tvOS RGB RGB 24 位 RGB Compressed ASTC 6x6 块 RGB Compressed ASTC 4x4 块 RGB Compressed ASTC 8x8 块
RGBA RGBA 32 位 RGBA Compressed ASTC 6x6 块 RGBA Compressed ASTC 4x4 块 RGBA Compressed ASTC 8x8 块
Default RGBA RGBA 32 位 RGBA 16 位 RGBA 16 位 RGBA 16 位

各平台支持的纹理压缩格式

下表显示了 Unity 中可用的每种压缩格式,以及支持它的平台。

纹理压缩格式 描述 通道 Quality 每像素位数 1024x1024 纹理的大小,以 MB 为单位 Windows Mac Linux Android iOS 和 tvOS WebGL
RGB(A) Compressed BC7 压缩 RGB 或 RGBA RGB 或 RGBA。 8 1 是 (1) 是 (1) no no no
RGBA Compressed DXT5 压缩 RGBA(也称为 BC3) RGBA 8 1 否 (3) no 部分 (2)
RGBA Crunched DXT5 Compressed RGBA,采用额外的磁盘上 Crunch 压缩。 RGBA 低到中 可变 可变 否 (3) no 部分 (2)
RGBA 64 位 未压缩 RGBA,精度非常高 RGBA 非常高 64 8 部分 (6) no
RGBA 32 位 未压缩 RGBA RGBA 32 4
RGBA 16 位 量化 RGBA RGBA 16 2
RGB Compressed DXT1 压缩 RGB(也称为 BC1) RGB 4 0.5 否 (3) no 部分 (2)
RGB Crunched DXT1 压缩 RGB,采用额外的磁盘上 Crunch 压缩。 RGB 低到中 可变 可变 否 (3) no 部分 (2)
RGB 48 位 未压缩 RGB,精度非常高。为 GPU 转换为 RGBA 64 位 RGB 非常高 48(磁盘),64(GPU) 6(磁盘),8(GPU) 部分 (6) no
RGB 24 位 未压缩 RGB。为 GPU 转换为 RGBA 32 位 RGB 24(磁盘),32(GPU) 3(磁盘),4(GPU)
RGB 16 位 量化 RGB RGB 16 2
RG Compressed BC5 压缩双通道 (RG) RG 8 1 no no no
RG 32 位 未压缩双通道 (RG),精度非常高 RG 非常高 32 4 部分 (6) no
R Compressed BC4 压缩单通道 (R) R 4 0.5 no no no
R 8 未压缩单通道 (R) R 8 1 部分 (5) 部分 (5)
R 16 位 未压缩单通道 (R),精度非常高 R 非常高 16 2 部分 (6) 部分 (6) no
Alpha 8 未压缩单通道 (A) A 8 1
RGBA Half HDR,半精度 (FP16) RGBA,–64k 至 +64k 范围 RGBA 64 8 部分 (7) 部分 (7)
RGB Compressed BC6H HDR,压缩 RGB,0 到 +64k 范围 RGB 8 1 是 (1) 是 (1) no no no
RGB9e5 32 位共享指数浮点 HDR,量化 RGB,0 到 +64k 范围 RGB 32 4 部分 (4) 部分 (4)
RGB(A) Compressed ASTC 压缩 RGB 或 RGBA,大小和质量取决于块大小 RGB 或 RGBA。 低到高 12x12: 0.89, 10x10: 1.28, 8x8: 2, 6x6: 3.56, 5x5: 5.12, 4x4: 8 12x12: 0.11, 10x10: 0.16, 8x8: 0.25, 6x6: 0.45, 5x5: 0.64, 4x4: 1.0 no no no 部分 (8) 是 (10) no
RGBA Compressed ETC2 压缩 RGBA RGBA 8 1 no no no 部分 (9) no
RGBA Crunched ETC2 Compressed RGBA,采用额外的磁盘上 Crunch 压缩。 RGBA 低到中 可变 可变 no no no 部分 (9) no
RGB + 1 位 Alpha Compressed ETC2 4 位 压缩 RGBA,Alpha 值完全不透明或完全透明 RGBA 4 0.5 no no no 部分 (9) no
RGBA Compressed PVRTC 4 位 压缩 RGBA,纹理要求为方形 RGBA 4 0.5 no no no 否 (12) no
RGBA Compressed PVRTC 2 位 压缩 RGBA,纹理要求为方形 RGBA 2 0.25 no no no 否 (12) no
RGB Compressed ETC2 压缩 RGB RGB 4 0.5 no no no 部分 (9) no
RGB Compressed ETC 压缩 RGB RGB 4 0.5 no no no no
RGB Crunched ETC 压缩 RGB,采用额外的磁盘上 Crunch 压缩。 RGB 可变 可变 no no no no
RGB Compressed PVRTC 4 位 压缩 RGB,纹理要求为方形 RGB 4 0.5 no no no 否 (12) no
RGB Compressed PVRTC 2 位 压缩 RGB,纹理要求为方形 RGB 2 0.25 no no no 否 (12) no
RG Compressed EAC 8 位 压缩双通道 (RG) RG 8 1 no no no 部分 (9) no
R Compressed EAC 4 位 压缩单通道 (R) R 4 0.5 no no no 部分 (9) no
RGB(A) Compressed ASTC HDR HDR,压缩 RGB 或 RGBA,大小和质量取决于块大小 RGB 或 RGBA。 低到高 12x12: 0.89, 10x10: 1.28, 8x8: 2, 6x6: 3.56, 5x5: 5.12, 4x4: 8 12x12: 0.11, 10x10: 0.16, 8x8: 0.25, 6x6: 0.45, 5x5: 0.64, 4x4: 1.0 no no no 部分 (11) 部分 (11) no

注意:

  1. 低于 DX11 级别的 GPU 或使用 OpenGL 时的 macOS 除外。如果不支持,BC6H 纹理在加载时会解压缩为 RGBA Half,而 BC7 在加载时会解压缩为 RGBA32。
  2. 在不支持 sRGB DXT 的 Web 浏览器上使用线性渲染,纹理在加载时被解压缩为 RGBA32。
  3. 采用 NVIDIA Tegra GPU 的 Android 设备除外;这些确实支持 DXT/ BC 格式。
  4. OpenGL ES 2.0 / WebGL 1 上除外。
  5. 对于 OpenGL ES 2.0/ WebGL 1:需要 GL_EXT_texture_rg 扩展支持。
  6. 在 Android 上需要 GL_EXT_texture_norm16 或相应 Vulkan 功能。
  7. 对于 OpenGL ES 2.0/ WebGL 1:需要 OES_texture_half_float 扩展支持。
  8. 需要 Vulkan 或 GL_KHR_texture_compression_astc_ldr OpenGL ES 扩展。
  9. OpenGL ES 2.0 上除外;这里的 ETC2 纹理被解压缩为在 Android Build Settings 中或 Platform-specific overrides 的 Android 选项卡上指定的格式 ETC2 回退
  10. Apple A7 芯片设备 (2013) 上除外。
  11. Android:需要 GL_KHR_texture_compression_astc_hdr 扩展。iOS:需要 A13 或更高版本的芯片 (2019)。如果不支持,则纹理将解压缩为 RGB9E5 格式,从而失去了 Alpha 通道。
  12. 采用 Imagination PowerVR GPU 的 Android 设备除外;这些确实支持 PVRTC 格式。
纹理压缩格式
渲染纹理