Unity3D:按平台推荐、默认和支持的纹理格式
推荐:将NSDT场景编辑器加入你的3D工具链
3D工具集:NSDT简石数字孪生
按平台推荐、默认和支持的纹理格式
本页包含以下信息:
- 术语 *各平台的推荐纹理压缩格式
- 桌面端
- iOS 和 tvOS
- 人造人
- 默认纹理压缩格式(按平台)
- 纹理压缩格式(按质量)
- 支持的纹理压缩格式(按平台)
此页面不包含有关游戏主机平台的信息。 有关游戏主机平台的信息,请参阅特定于平台的文档。
有关纹理格式的概述,请参阅纹理格式。有关纹理导入设置以及如何设置每个纹理平台特定替代的信息,请参阅纹理导入设置。某些纹理导入设置也可以在构建设置中全局覆盖,主要是为了加快开发过程中的迭代时间。
术语
本页用到了以下术语:
- 每像素位数 (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 设备,建议使用 RGB 和 RGBA 纹理使用 ATSC 纹理格式。这种格式允许您在粒度级别上在纹理质量和大小之间进行选择:从 8 位/像素(4x4 块大小)一直到 0.89 位/像素(12x12 块大小)。 如果需要支持较旧的设备,或者您想要额外的 Crunch 压缩,那么 Apple 设备支持从 A7 芯片 (2013) 开始的 ETC/ETC2 格式。 对于更旧的设备,PVRTC 是要使用的格式。在 iOS 上,您可以在播放器设置中配置默认纹理格式。PVRTC为您提供最广泛的兼容性。ASTC 是首选,但在 A7 设备(第一个支持 Metal 的设备)上不受支持,并将在运行时解压缩。
有关所有受支持格式的详细信息,请参阅支持的纹理格式参考表。
人造人
Android 上的纹理格式支持很复杂。您可能需要使用不同的子目标构建多个应用程序版本。
您可以在播放器设置中选择默认格式。您的选择是ASTC,ETC2和ETC(ETC1代表RGB,ETC2代表RGBA)。有关不同设置如何交互的更多详细信息,请参阅纹理压缩设置。
对于 LDR RGB 和 RGBA 纹理,大多数支持 OpenGL ES 3.1 或 Vulkan 的现代 Android GPU 也支持 ASTC 格式,包括: 自Adreno 4xx / Snapdragon 415(2015)以来的高通GPU,自Mali T624(2012)以来的ARM GPU,自Tegra K1(2014)以来的NVIDIA GPU,自GX6250(2014)以来的PowerVR GPU。
如果您需要支持较旧的设备,或者想要额外的Crunch压缩,那么所有运行Vulkan或OpenGL ES 3.0的GPU都支持ETC2格式。 生成的图像质量相当高,并且支持一到四分量的纹理数据。OpenGL ES 2 设备不支持 ETC2 格式,因此 Unity 会在运行时将纹理解压缩为 ETC2 回退指定的格式。 对于更旧的设备,通常只有 ETC 格式可用。缺点是没有直接的 alpha 通道支持。对于精灵,Unity 提供了一个使用 ETC1 压缩的选项,方法是将纹理拆分为两个 ETC1 纹理:一个用于 RGB,一个用于 alpha。要启用此功能,请在导入精灵图集时为纹理启用特定于 Android 的拆分 Alpha 通道选项。精灵着色器对两种纹理进行采样,并将它们组合到最终结果中。
对于HDR纹理,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 的两倍。
有关所有受支持格式的详细信息,请参阅支持的纹理格式参考表。
默认纹理格式,按平台
下表显示了每个平台使用的默认格式。
平台 | 颜色模型 | 无 | 正常质量(默认设置) | 高质量 | 低质量(更高性能) |
---|---|---|---|---|---|
Windows、Linux、macOS | RGB | RGB 24 位 | RGB 压缩 DXT1 | RGB(A) 压缩 BC7 | RGB 压缩 DXT1 |
吉巴 | RGBA 32 位 | RGBA 压缩 DXT5 | RGB(A) 压缩 BC7 | RGBA 压缩 DXT5 | |
高密度显示 | RGBA 半场 | RGB 压缩 BC6H | RGB 压缩 BC6H | RGB 压缩 BC6H | |
WebGL | RGB | RGB 24 位 | RGB 压缩 DXT1 | RGB 压缩 DXT1 | RGB 压缩 DXT1 |
吉巴 | RGBA 32 位 | RGBA 压缩 DXT5 | RGBA 压缩 DXT5 | RGBA 压缩 DXT5 | |
安卓(可配置)) | RGB | RGB 24 位 | RGBA 压缩 ASTC 6x6 块 RGB 压缩 ETC2 RGB 压缩 ETC | RGBA 压缩 ASTC 4x4 块 RGB 压缩 ETC2 RGB 压缩 ETC | RGBA 压缩 ASTC 8x8 块 RGB 压缩 ETC2 RGB 压缩 ETC |
吉巴 | RGBA 32 位 | RGBA 压缩 ASTC 6x6 块 RGBA 压缩 ETC2 | RGBA 压缩 ASTC 4x4 块 RGBA 压缩 ETC2 | RGBA 压缩 ASTC 8x8 块 RGBA 压缩 ETC2 | |
苹果(可配置)) | RGB | RGB 24 位 | RGBA 压缩 ASTC 6x6 块 RGB 压缩 PVRTC 4 位 | RGBA 压缩 ASTC 4x4 块 RGB 压缩 PVRTC 4 位 | RGBA 压缩 ASTC 8x8 块 RGB 压缩 PVRTC 2 位 |
吉巴 | RGBA 32 位 | RGBA 压缩 ASTC 6x6 块 RGBA 压缩 PVRTC 4 位 | RGBA 压缩 ASTC 4x4 块 RGBA 压缩 PVRTC 4 位 | RGBA 压缩 ASTC 8x8 块 RGBA 压缩 PVRTC 2 位 | |
电视操作系统 | RGB | RGB 24 位 | RGBA 压缩 ASTC 6x6 块 | RGBA 压缩 ASTC 4x4 块 | RGBA 压缩 ASTC 8x8 块 |
吉巴 | RGBA 32 位 | RGBA 压缩 ASTC 6x6 块 | RGBA 压缩 ASTC 4x4 块 | RGBA 压缩 ASTC 8x8 块 | |
违约 | 吉巴 | RGBA 32 位 | RGBA 16 位 | RGBA 16 位 | RGBA 16 位 |
纹理格式,按质量
下表显示了 Unity 中可用的每种格式及其质量详细信息。
纹理格式 | 描述 | 通道 | 质量 | 每像素位数 | 1024x1024 纹理的大小,以 MB 为单位 |
---|---|---|---|---|---|
RGB(A) 压缩 BC7 | 压缩 RGB 或 RGBA | RGB 或 RGBA。 | 高 | 8 | 1 |
RGBA 紧缩的 DXT5 | Compressed RGBA,采用额外的磁盘上 Crunch 压缩。 | 吉巴 | 低到中 | 可变 | 可变 |
RGBA 64 位 | 未压缩 RGBA,精度非常高 | 吉巴 | 非常高 | 64 | 8 |
RGBA 32 位 | 未压缩 RGBA | 吉巴 | 高 | 32 | 4 |
RGBA 16 位 | 量化 RGBA | 吉巴 | 中 | 16 | 2 |
RGB 压缩 DXT1 | 压缩 RGB(也称为 BC1) | RGB | 中 | 4 | 0.5 |
RGB 紧缩的 DXT1 | 压缩 RGB,采用额外的磁盘上 Crunch 压缩。 | RGB | 低到中 | 可变 | 可变 |
RGB 48 位 | 未压缩 RGB,精度非常高。 为 GPU 转换为 RGBA 64 位 | RGB | 非常高 | 48(磁盘),64(GPU) | 6(磁盘),8(GPU) |
RGB 24 位 | 未压缩 RGB。 为 GPU 转换为 RGBA 32 位 | RGB | 高 | 24(磁盘),32(GPU) | 3(磁盘),4(GPU) |
RGB 16 位 | 量化 RGB | RGB | 中 | 16 | 2 |
RG 压缩 BC5 | 压缩双通道 (RG) | RG | 高 | 8 | 1 |
RG 32 位 | 未压缩双通道 (RG),精度非常高 | RG | 非常高 | 32 | 4 |
R 压缩 BC4 | 压缩单通道 (R) | R | 高 | 4 | 0.5 |
R 8 | 未压缩单通道 (R) | R | 高 | 8 | 1 |
R 16 位 | 未压缩单通道 (R),精度非常高 | R | 非常高 | 16 | 2 |
阿尔法 8 | 未压缩单通道 (A) | 一个 | 高 | 8 | 1 |
RGBA 半场 | HDR,半精度 (FP16) RGBA,–64k 至 +64k 范围 | 吉巴 | 高 | 64 | 8 |
RGB 压缩 BC6H | HDR,压缩 RGB,0 到 +64k 范围 | RGB | 高 | 8 | 1 |
RGB9e5 32 位共享指数浮点数 | HDR,量化 RGB,0 到 +64k 范围 | RGB | 中 | 32 | 4 |
RGB(A) 压缩 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 |
RGBA 压缩 ETC2 | 压缩 RGBA | 吉巴 | 中 | 8 | 1 |
RGBA 紧缩 ETC2 | Compressed RGBA,采用额外的磁盘上 Crunch 压缩。 | 吉巴 | 低到中 | 可变 | 可变 |
RGB + 1 位 Alpha 压缩 ETC2 4 位 | 压缩 RGBA,Alpha 值完全不透明或完全透明 | 吉巴 | 中 | 4 | 0.5 |
RGBA 压缩 PVRTC 4 位 | 压缩 RGBA,纹理要求为方形 | 吉巴 | 中 | 4 | 0.5 |
RGBA 压缩 PVRTC 2 位 | 压缩 RGBA,纹理要求为方形 | 吉巴 | 低 | 2 | 0.25 |
RGB 压缩 ETC2 | 压缩 RGB | RGB | 中 | 4 | 0.5 |
RGB 压缩等 | 压缩 RGB | RGB | 低 | 4 | 0.5 |
RGB 紧缩等 | 压缩 RGB,采用额外的磁盘上 Crunch 压缩。 | RGB | 低 | 可变 | 可变 |
RGB 压缩 PVRTC 4 位 | 压缩 RGB,纹理要求为方形 | RGB | 中 | 4 | 0.5 |
RGB 压缩 PVRTC 2 位 | 压缩 RGB,纹理要求为方形 | RGB | 低 | 2 | 0.25 |
RG 压缩 EAC 8 位 | 压缩双通道 (RG) | RG | 高 | 8 | 1 |
R 压缩的 EAC 4 位 | 压缩单通道 (R) | R | 高 | 4 | 0.5 |
RGB(A) 压缩 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 |
支持的纹理格式(按平台)
下表显示了 Unity 中可用的每种纹理格式以及支持它们的平台。
纹理格式 | 窗户 | 苹果操作系统 | Linux目录 | 人造人 | iOS 和 tvOS | WebGL (桌面浏览器) | WebGL(iOS和Android浏览器) |
---|---|---|---|---|---|---|---|
RGB(A) 压缩 BC7 | 是 (1) | 是 (1) | 是 | 不 | 不 | 是 (1) | 不 |
RGBA 压缩 DXT5 | 是 | 是 | 是 | 否 (3) | 不 | 部分 (2) | 不 |
RGBA 紧缩的 DXT5 | 是 | 是 | 是 | 否 (3) | 不 | 部分 (2) | 不 |
RGBA 64 位 | 是 | 是 | 是 | 部分 (6) | 是 | 不 | 不 |
RGBA 32 位 | 是 | 是 | 是 | 是 | 是 | 是 | 是 |
RGBA 16 位 | 是 | 是 | 是 | 是 | 是 | 是 | 是 |
RGB 压缩 DXT1 | 是 | 是 | 是 | 否 (3) | 不 | 部分 (2) | 不 |
RGB 紧缩的 DXT1 | 是 | 是 | 是 | 否 (3) | 不 | 部分 (2) | 不 |
RGB 48 位 | 是 | 是 | 是 | 部分 (6) | 是 | 不 | 不 |
RGB 24 位 | 是 | 是 | 是 | 是 | 是 | 是 | 是 |
RGB 16 位 | 是 | 是 | 是 | 是 | 是 | 是 | 是 |
RG 压缩 BC5 | 是 | 是 | 是 | 不 | 不 | 是的 | 不 |
RG 32 位 | 是 | 是 | 是 | 部分 (6) | 是 | 不 | 不 |
R 压缩 BC4 | 是 | 是 | 是 | 不 | 不 | 是的 | 不 |
R 8 | 是 | 是 | 是 | 部分 (5) | 是 | 部分 (5) | 部分 (5) |
R 16 位 | 是 | 是 | 是 | 部分 (6) | 部分 (6) | 是 (14) | 是 (14) |
阿尔法 8 | 是 | 是 | 是 | 是 | 是 | 是 | 是 |
RGBA 半场 | 是 | 是 | 是 | 部分 (7) | 是 | 部分 (7) | 部分 (7) |
RGB 压缩 BC6H | 是 (1) | 是 (1) | 是 | 不 | 不 | 是 (1) | 不 |
RGB9e5 32 位共享指数浮点数 | 是 | 是 | 是 | 部分 (4) | 是 | 部分 (4) | 部分 (4) |
RGB(A) 压缩 ASTC | 不 | 不 | 不 | 部分 (8) | 是 (10) | 不 | 是 (13 & 10) |
RGBA 压缩 ETC2 | 不 | 不 | 不 | 部分 (9) | 是 | 不 | 是 |
RGBA 紧缩 ETC2 | 不 | 不 | 不 | 部分 (9) | 是 | 不 | 是 |
RGB + 1 位 Alpha 压缩 ETC2 4 位 | 不 | 不 | 不 | 部分 (9) | 是 | 不 | 是 |
RGBA 压缩 PVRTC 4 位 | 不 | 不 | 不 | 否 (12) | 是 | 不 | 不 |
RGBA 压缩 PVRTC 2 位 | 不 | 不 | 不 | 否 (12) | 是 | 不 | 不 |
RGB 压缩 ETC2 | 不 | 不 | 不 | 部分 (9) | 是 | 不 | 是 |
RGB 压缩等 | 不 | 不 | 不 | 是 | 是 | 不 | 是 |
RGB 紧缩等 | 不 | 不 | 不 | 是 | 是 | 不 | 是 |
RGB 压缩 PVRTC 4 位 | 不 | 不 | 不 | 否 (12) | 是 | 不 | 不 |
RGB 压缩 PVRTC 2 位 | 不 | 不 | 不 | 否 (12) | 是 | 不 | 不 |
RG 压缩 EAC 8 位 | 不 | 不 | 不 | 部分 (9) | 是 | 不 | 是 |
R 压缩的 EAC 4 位 | 不 | 不 | 不 | 部分 (9) | 是 | 不 | 是 |
RGB(A) 压缩 ASTC HDR | 不 | 不 | 不 | 部分 (11) | 部分 (11) | 不 | 部分 (11) |
注意:
- 除了在DX11之前的GPU上,或者在使用WebGL或OpenGL时的macOS上。如果不支持,BC6H 纹理将在加载时解压缩为 RGBA 一半,BC7 将解压缩为 RGBA32。
- 在不支持 sRGB DXT 的 Web 浏览器上使用线性渲染,纹理在加载时被解压缩为 RGBA32。
- 采用 NVIDIA Tegra GPU 的 Android 设备除外; 这些确实支持 DXT/ BC 格式。
- OpenGL ES 2.0 / WebGL 1 上除外。
- 对于 OpenGL ES 2.0/ WebGL 1:需要 GL_EXT_texture_rg 扩展支持。
- 在 Android 上需要 GL_EXT_texture_norm16 或相应 Vulkan 功能。
- 对于 OpenGL ES 2.0/ WebGL 1:需要 OES_texture_half_float 扩展支持。
- 需要 Vulkan 或 GL_KHR_texture_compression_astc_ldr OpenGL ES 扩展。
- 除了在OpenGL ES 2.0上;ETC2 纹理被解压缩为 ETC2 回退在 Android 构建设置或 Android 选项卡上为特定于平台的覆盖指定的格式。
- Apple A7 芯片设备 (2013) 上除外。
- 安卓:需要GL_KHR_texture_compression_astc_hdr扩展名。iOS:需要 A13 或更高版本的芯片 (2019)。WebGL:需要WEBGL_compressed_texture_astc扩展名和HDR配置文件。如果不支持,纹理将解压缩为 RGB9E5 格式,从而丢失 Alpha 通道。
- 采用 Imagination PowerVR GPU 的 Android 设备除外; 这些确实支持 PVRTC 格式。
- 需要WEBGL_compressed_texture_astc扩展。
- 需要EXT_texture_norm16扩展和 WebGL 2。
由3D建模学习工作室整理翻译,转载请注明出处!