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

Recommended, default, and supported texture formats, by platform - Unity 手册

本页包含以下信息:

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

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

术语

本页用到了以下术语:

  • 每像素位数 (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、macOSRGBRGB 24 位RGB Compressed DXT1RGB(A) Compressed BC7RGB Compressed DXT1
RGBARGBA 32 位RGBA Compressed DXT5RGB(A) Compressed BC7RGBA Compressed DXT5
HDRRGBA HalfRGB Compressed BC6HRGB Compressed BC6HRGB Compressed BC6H
WebGLRGBRGB 24 位RGB Compressed DXT1RGB Compressed DXT1RGB Compressed DXT1
RGBARGBA 32 位RGBA Compressed DXT5RGBA Compressed DXT5RGBA Compressed DXT5
Android(仅当在构建设置中启用了 Don’t override 时)RGBRGB 24 位RGB Compressed ETCRGB Compressed ETCRGB Compressed ETC
RGBARGBA 32 位RGBA Compressed ETC2RGBA Compressed ETC2RGBA Compressed ETC2
iOSRGBRGB 24 位RGB Compressed PVRTC 4 位RGB Compressed PVRTC 4 位RGB Compressed PVRTC 2 位
RGBARGBA 32 位RGBA Compressed PVRTC 4 位RGBA Compressed PVRTC 4 位RGBA Compressed PVRTC 2 位
tvOSRGBRGB 24 位RGB Compressed ASTC 6x6 块RGB Compressed ASTC 4x4 块RGB Compressed ASTC 8x8 块
RGBARGBA 32 位RGBA Compressed ASTC 6x6 块RGBA Compressed ASTC 4x4 块RGBA Compressed ASTC 8x8 块
DefaultRGBARGBA 32 位RGBA 16 位RGBA 16 位RGBA 16 位

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

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

纹理压缩格式描述通道Quality每像素位数1024x1024 纹理的大小,以 MB 为单位WindowsMacLinuxAndroidiOS 和 tvOSWebGL
RGB(A) Compressed BC7压缩 RGB 或 RGBARGB 或 RGBA。81是 (1)是 (1)nonono
RGBA Compressed DXT5压缩 RGBA(也称为 BC3)RGBA81否 (3)no部分 (2)
RGBA Crunched DXT5Compressed RGBA,采用额外的磁盘上 Crunch 压缩。RGBA低到中可变可变否 (3)no部分 (2)
RGBA 64 位未压缩 RGBA,精度非常高RGBA非常高648部分 (6)no
RGBA 32 位未压缩 RGBARGBA324
RGBA 16 位量化 RGBARGBA162
RGB Compressed DXT1压缩 RGB(也称为 BC1)RGB40.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 位RGB24(磁盘),32(GPU)3(磁盘),4(GPU)
RGB 16 位量化 RGBRGB162
RG Compressed BC5压缩双通道 (RG)RG81nonono
RG 32 位未压缩双通道 (RG),精度非常高RG非常高324部分 (6)no
R Compressed BC4压缩单通道 (R)R40.5nonono
R 8未压缩单通道 (R)R81部分 (5)部分 (5)
R 16 位未压缩单通道 (R),精度非常高R非常高162部分 (6)部分 (6)no
Alpha 8未压缩单通道 (A)A81
RGBA HalfHDR,半精度 (FP16) RGBA,–64k 至 +64k 范围RGBA648部分 (7)部分 (7)
RGB Compressed BC6HHDR,压缩 RGB,0 到 +64k 范围RGB81是 (1)是 (1)nonono
RGB9e5 32 位共享指数浮点HDR,量化 RGB,0 到 +64k 范围RGB324部分 (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: 812x12: 0.11, 10x10: 0.16, 8x8: 0.25, 6x6: 0.45, 5x5: 0.64, 4x4: 1.0nonono部分 (8)是 (10)no
RGBA Compressed ETC2压缩 RGBARGBA81nonono部分 (9)no
RGBA Crunched ETC2Compressed RGBA,采用额外的磁盘上 Crunch 压缩。RGBA低到中可变可变nonono部分 (9)no
RGB + 1 位 Alpha Compressed ETC2 4 位压缩 RGBA,Alpha 值完全不透明或完全透明RGBA40.5nonono部分 (9)no
RGBA Compressed PVRTC 4 位压缩 RGBA,纹理要求为方形RGBA40.5nonono否 (12)no
RGBA Compressed PVRTC 2 位压缩 RGBA,纹理要求为方形RGBA20.25nonono否 (12)no
RGB Compressed ETC2压缩 RGBRGB40.5nonono部分 (9)no
RGB Compressed ETC压缩 RGBRGB40.5nononono
RGB Crunched ETC压缩 RGB,采用额外的磁盘上 Crunch 压缩。RGB可变可变nononono
RGB Compressed PVRTC 4 位压缩 RGB,纹理要求为方形RGB40.5nonono否 (12)no
RGB Compressed PVRTC 2 位压缩 RGB,纹理要求为方形RGB20.25nonono否 (12)no
RG Compressed EAC 8 位压缩双通道 (RG)RG81nonono部分 (9)no
R Compressed EAC 4 位压缩单通道 (R)R40.5nonono部分 (9)no
RGB(A) Compressed ASTC HDRHDR,压缩 RGB 或 RGBA,大小和质量取决于块大小RGB 或 RGBA。低到高12x12: 0.89, 10x10: 1.28, 8x8: 2, 6x6: 3.56, 5x5: 5.12, 4x4: 812x12: 0.11, 10x10: 0.16, 8x8: 0.25, 6x6: 0.45, 5x5: 0.64, 4x4: 1.0nonono部分 (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 格式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值