对于具有 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 设备,ASTC 是 RGB 和 RGBA 纹理的推荐纹理格式。此格式允许您在粒度级别上选择纹理质量和大小:从 8 位/像素(4x4 块大小)一直到 0.89 位/像素(12x12 块大小)。如果使用的是旧设备,或者您想要额外的 Crunch 压缩,从 A7 芯片 (2013) 起的 Apple 设备支持 ETC/ ETC2 格式。对于更旧的设备,需要使用 PVRTC 格式。在 iOS 上,您可以在播放器设置 (Player Settings) 中配置默认纹理格式。PVRTC 能为您提供尽可能广泛的兼容性。ASTC 是首选,但在 A7 设备(首个支持 Metal 的设备)上不受支持,将在运行时解压缩。
有关所有支持格式的详细信息,请参阅支持的纹理格式参考表。
Android 支持的纹理格式很复杂。可能需要构建具有不同子目标的多个应用程序版本。
可以在播放器设置 (Player Settings) 中选择默认格式。选项包括 ASTC、ETC2 和 ETC(ETC1 用于 RGB,ETC2 用于 RGBA)。请参阅纹理压缩设置以了解有关这些不同的设置如何交互的更多详细信息。
对于 LDR RGB 和 RGBA 纹理,大多数支持 OpenGL ES 3.1 或 Vulkan 的现代 Android GPU 也支持 ASTC 格式,包括:Qualcomm GPU(从 Adreno 4xx/Snapdragon 415 (2015) 开始),ARM GPU(从 Mali T624 (2012) 开始),NVIDIA GPU(从 Tegra K1 (2014) 开始),PowerVR GPU(从 GX6250 (2014) 开始)。
如果使用的是旧设备,或者您想要额外的 Crunch 压缩,则运行 Vulkan 或 OpenGL ES 3.0 的所有 GPU 都支持 ETC2 格式。产生的图像质量非常高,并且支持一到四个分量的纹理数据。对于更旧的设备,通常只有 ETC 格式可用。缺点是没有直接的 Alpha 通道支持。对于精灵 (Sprites),Unity 提供了一个选项,通过将纹理拆分为两个 ETC1 纹理来使用 ETC1 压缩:一个用于 RGB,一个用于 Alpha。为此,请在导入精灵图集 (Sprite Atlas) 时为纹理启用特定于 Android 的拆分 Alpha 通道 (Split Alpha Channel) 选项。精灵着色器对两个纹理进行采样并将它们组合成最终结果。
对于不支持 ASTC 格式的旧 Android 设备,纹理将解压缩为未压缩的 RGBA 32 位格式。这会增加内存使用量,并可能减慢在 CPU 上执行的解压缩的速度。
对于__ HDR__高动态范围
See in Glossary 纹理,ASTC HDR 是 Android 设备上唯一可用的压缩格式。ASTC HDR 需要 Vulkan 或 GL_KHR_texture_compression_astc_hdr 支持。ASTC 是最灵活的格式。如果设备不支持 ASTC HDR,则会在运行时将纹理解压缩为 RGB9e5 或 RGBA Half,具体取决于 Alpha 通道的使用情况。
对于不支持 ASTC HDR 的设备,所有运行 Vulkan、Metal 或 OpenGL ES 3.0 的设备都支持 RGB9e5(适用于没有 Alpha 通道的纹理)。如果需要 Alpha 通道或更广泛的支持,请使用 RGBA Half。这种格式占用的内存是 RGB9e5 的两倍。
如果要将应用程序分发到 Google Play,最佳做法是使用定向纹理压缩。
有关所有支持格式的详细信息,请参阅支持的纹理格式参考表。