本页包含以下信息:
此页面不包含有关游戏主机平台的信息。有关游戏主机平台的信息,请参阅特定于平台的文档。
有关纹理压缩格式的概述,请参阅纹理压缩格式。有关纹理导入设置以及如何设置特定于平台的覆盖的一般信息,请参阅纹理导入设置。
本页用到了以下术语:
对于具有 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。
有关所有支持格式的详细信息,请参阅支持的纹理压缩格式参考表。
对于使用 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 上的纹理压缩支持很复杂,您可能需要针对不同的子目标构建多个不同版本的应用程序。
除非您的应用针对的是特定硬件,支持有限范围的纹理压缩格式,您可在几种压缩格式和未压缩格式之间进行选择,考虑不同的取舍因素。
对于 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 格式。