虽然 Unity 支持许多常见的图像格式作为导入纹理的源文件(例如 JPG、PNG、PSD 和 TGA),但在 3D 图形硬件(如显卡或移动设备)的实时渲染过程中不会使用这些格式。3D 图形硬件要求纹理以专门格式进行压缩,这些格式针对快速纹理采样进行了优化。各种不同的平台和设备都有自己不同的专有格式。
默认情况下,Unity Editor 会自动将纹理转换为最合适的格式,以匹配您选择的构建目标。只有转换后的纹理才会包含在您的构建中;源资源文件保留为原始格式,位于项目的 Assets 文件夹中。但是,在大多数平台上,可选择许多不同的受支持的纹理压缩格式。Unity 为每个平台设置了一些默认格式,但在某些情况下,您可能希望覆盖默认值并为某些纹理选择不同的压缩格式(例如,如果使用纹理作为遮罩,只有一个通道,则可以选择使用 BC4 格式来节省空间,同时保持质量)。
要为每个平台应用自定义设置,请使用纹理导入器 (Texture Importer) 设置默认选项,然后使用__特定于平台的覆盖 (Platform-specific overrides)__ 面板覆盖特定平台的默认设置。
下表显示了每个平台使用的默认格式。
平台 | 颜色模型 | 无 | 正常质量(默认设置) | 高质量 | 低质量(更高性能) |
---|---|---|---|---|---|
Windows、Linux、macOS、PS4、XBox One | 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(默认子目标) | RGB | RGB 24 位 | RGB Compressed ETC2 | RGB Compressed ETC2 | RGB Compressed ETC2 |
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 块 | |
RGBA | RGBA 32 位 | RGBA 16 位 | RGBA 16 位 | RGBA 16 位 |
下表显示了每个平台上可用的纹理压缩格式选项以及生成的压缩文件大小(基于 256 像素平方图像)。选择纹理压缩格式需要在文件大小和质量之间取得平衡;质量越高,文件越大。在下面的描述中,假定游戏纹理的最终文件大小为 256 x 256 像素。
使用目标平台不支持的纹理压缩格式时,纹理将解压缩为 RGBA 32 并与压缩纹理一起存储在内存中。发生这种情况时,解压缩纹理会损失时间,并因为存储两次而导致内存损失。此外,所有平台都有不同的硬件,并经优化后可最有效地处理特定压缩格式;因此,选择不兼容的格式会影响游戏的性能。下表显示了每种压缩格式支持的平台。
关于下表的注意事项:
RGB 是一种颜色模型,其中红色、绿色和蓝色通过各种方式叠加在一起以再现各种颜色。
RGBA 是具有 Alpha 通道的 RGB 版本,支持混合和不透明度更改。
Crunch compression is a lossy compression format (meaning that parts of the data are lost during compression) on top of DXT or ETC Texture compression. Textures are decompressed to DXT or ETC on the CPU, and then uploaded to the GPU at runtime. Crunch compression helps the Texture use the lowest possible amount of space on disk and for downloads. Crunch Textures can take a long time to compress, but decompression at runtime is very fast.
纹理压缩格式 | 描述 |
大小 (256x256 像素纹理) |
平台支持 |
---|---|---|---|
RGB Compressed DXT1 | 压缩无符号标准化整数 RGB 纹理。 | 32KB(4 位/像素) | Windows, Linux, macOS, PS4, XBox One, Android (Nvidia Tegra and Intel Bay Trail), WebGL Note: With linear rendering on web browser that doesn’t support sRGB DXT, textures are uncompressed at runtime to RGBA32. |
RGB Crunched DXT1 | 与 RGB Compressed DXT1 类似,但使用 Crunch 压缩方式进行压缩。有关 Crunch 压缩的更多信息,请参阅上面的注意事项。 | 可变,取决于纹理中内容的复杂程度。 | Windows, Linux, macOS, PS4, XBox One, Android (Nvidia Tegra and Intel Bay Trail), WebGL Note: With linear rendering on a web browser that doesn’t support sRGB DXT, textures are uncompressed at runtime to RGBA32. |
RGBA Compressed DXT5 | 压缩无符号标准化整数 RGBA 纹理。8 位/像素。 | 64KB(8 位/像素) | Windows, Linux, macOS, PS4, XBox One, Android (Nvidia Tegra and Intel Bay Trail), WebGL Note: With linear rendering on a web browser that doesn’t support sRGB DXT, textures are uncompressed at runtime to RGBA32. |
RGBA Crunched DXT5 | 与 RGBA Compressed DXT5 类似,但使用 Crunch 压缩方式进行压缩。有关 Crunch 压缩的更多信息,请参阅上面的注意事项。 | 可变,取决于纹理中内容的复杂程度。 | Windows, Linux, macOS, PS4, XBox One, Android (Nvidia Tegra and Intel Bay Trail), WebGL Note: With linear rendering on a web browser that doesn’t support sRGB DXT, textures are uncompressed at runtime to RGBA32. |
RGB Compressed BC6H | 压缩无符号浮点/高动态范围 (HDR) RGB 纹理。 | 64KB(8 位/像素) | Windows Direct3D 11: OpenGL 4, Linux. Note: BC6H Textures are uncompressed at runtime to RGBA half on the following platform configurations: - macOS with OpenGL - Platforms with Direct3D 10 Shader Model 4 or OpenGL 3 GPUs. |
RGB(A) Compressed BC7 | 高质量压缩无符号标准化整数 RGB 或 RGBA 纹理。 | 64KB(8 位/像素) | Windows Direct3D 11: OpenGL 4, Linux Note: BC7 Textures are uncompressed at runtime to RGBA 32bits on the following platform configurations: - macOS with OpenGL - Platforms with Direct3D 10 Shader Model 4 Platforms with OpenGL 3 GPUs. |
RGB Compressed ETC | Compressed RGB Texture. Note: ETC1 is supported by all OpenGL ES 2.0 GPUs. It does not support alpha. |
32KB(4 位/像素) | Android、iOS、tvOS。 |
RGB Crunched ETC | Similar to RGB Compressed ETC, but compressed using Crunch compression. See Notes, above, for more on crunch compression. | 可变,取决于纹理中内容的复杂程度。 | Android、iOS、tvOS。 |
RGB Compressed ETC2 | Compressed RGB Texture. This is the default Texture compression format for Android projects. Note: ETC2 is part of OpenGL ES 3.0. It does not support alpha. On Android platforms that don’t support ETC2, the Texture is uncompressed at runtime to RGB 24 bit. |
32KB(4 位/像素) | Android (OpenGL ES 3.0) Note: On Android mobiles that don’t support ETC2, the Texture is uncompressed at runtime to RGBA32. |
RGBA Compressed ETC2 | Compressed RGBA Texture. 8 bits per pixel (64KB for a 256x256 Texture). This is the default Texture compression format for Android projects. Note: ETC2 is part of OpenGL ES 3.0. It does not support alpha. On Android, iOS and tvOS platforms that don’t support ETC2, the Texture are uncompressed at runtime to RGBA 32 bit. |
64KB(8 位/像素) | Android (OpenGL ES 3.0), iOS (OpenGL ES 3.0), tvOS (OpenGL ES 3.0) Note: On Android, iOS and tvOS devices that don’t support ETC2, the Texture is uncompressed at runtime to RGBA32. |
RGBA Crunched ETC2 | Similar to RGBA Compressed ETC2, but compressed using Crunch compression. See Notes, above, for more on crunch compression. | 可变,取决于纹理中内容的复杂程度。 | Android (OpenGL ES 3.0), iOS (OpenGL ES 3.0), tvOS (OpenGL ES 3.0) Note: On Android, iOS and tvOS devices that don’t support ETC2, the Texture is uncompressed at runtime to RGBA32 |
RGB Compressed ASTC | 可变块大小压缩 RGB 纹理。 | 12x12:0.89 位/像素(256x256 纹理的大小为 7.56KB) 10x10:1.28 位/像素(256x256 纹理的大小为 10.56KB) 8x8:2 位/像素(256x256 纹理的大小为 16KB); 6x6:3.56 位/像素(256x256 纹理的大小为 28.89KB) 5x5:5.12 位/像素(256x256 纹理的大小为 42.25KB) 4x4:8 位/像素(256x256 纹理的大小为 64KB) |
tvOS(所有)、iOS (A8)、Android(PowerVR 6XT、Mali T600 系列、Adreno 400 系列、Tegra K1)。 |
RGBA Compressed ASTC | 可变块大小压缩 RGBA 纹理。 | 12x12:0.89 位/像素(256x256 纹理的大小为 7744 字节) 10x10:1.28 位/像素(256x256 纹理的大小为 10816 字节) 8x8:2 位/像素(256x256 纹理的大小为 16KB); 6x6:3.56 位/像素(256x256 纹理的大小为 29584 字节) 5x5:5.12 位/像素(256x256 纹理的大小为 43264 字节) 4x4:8 位/像素(256x256 纹理的大小为 64KB) |
tvOS(所有)、iOS (A8)、Android(PowerVR 6XT、Mali T600 系列、Adreno 400 系列、Tegra K1)。 |
RGB Compressed PVRTC 2 位 | 高压缩 RGB 纹理。质量低,但较小,因此提高了性能。 | 16KB(2 位/像素) | Android (PowerVR)、iOS、tvOS。 |
RGBA Compressed PVRTC 2 位 | 高压缩 RGBA 纹理。质量低,但较小,因此提高了性能。 | 16KB(2 位/像素) | Android (PowerVR)、iOS、tvOS。 |
RGB Compressed PVRTC 4 位 | 压缩 RGB 纹理。高质量纹理,尤其是颜色数据,但可能需要很长时间压缩。 | 32KB(4 位/像素) | Android (PowerVR)、iOS、tvOS。 |
RGBA Compressed PVRTC 4 位 | 压缩 RGB 纹理。高质量纹理,尤其是颜色数据,但可能需要很长时间压缩。 | 32KB(4 位/像素) | Android (PowerVR)、iOS、tvOS。 |
RGB Compressed ATC | 压缩 RGB 纹理。 | 32KB(4 位/像素) | Android (Qualcomm - Adreno)、iOS、tvOS。 |
RGBA Compressed ATC | 压缩 RGBA 纹理。 | 64KB(8 位/像素) | Android (Qualcomm - Adreno)、iOS、tvOS。 |
RGB 16 位 | 65,000 种颜色,没有 Alpha。使用比压缩格式更多的内存,但可能更适合没有渐变的 UI 或清晰纹理。 | 128KB(16 位/像素) | 所有平台。 |
RGB 24 位 | 真实色彩,但没有 Alpha。 | 192KB(24 位/像素) | 所有平台 |
Alpha 8 | 高质量 Alpha 通道,但没有任何颜色。 | 64KB(8 位/像素) | 所有平台。 |
RGBA 16 位 | 低质量真实色彩。这是具有 Alpha 通道的纹理的默认压缩格式。 | 128KB(16 位/像素) | 所有平台。 |
RGBA 32 位 | 真实色彩,并有 Alpha。这是具有 Alpha 通道的纹理的最高质量压缩格式。 | 256KB(32 位/像素) | 所有平台。 |
可从 DDS 文件导入纹理,但仅支持 DXT、BC 压缩格式或未压缩像素格式。
除非针对特定硬件(例如 Tegra),否则 ETC2 压缩是 Android 最高效的选项,可提供最佳的质量与文件大小(及相关的内存大小要求)平衡。如果需要 Alpha 通道,可将其存储在外部,并仍能受益于较低的纹理文件大小。
可对具有 Alpha 通道的纹理使用 ETC1 格式,但仅当构建目标为 Android 且纹理放置在图集上(通过指定打包标签)时才适用。要启用此功能,请勾选纹理的 Compress using ETC1 复选框。Unity 会将生成的图集拆分为两个纹理,每个纹理都没有 Alpha 通道,然后将它们组合在渲染管线的最后部分中。
要在纹理中存储 Alpha 通道,请使用 RGBA16 位压缩,这是所有硬件供应商都支持的格式。