Android Player Settings
Gradle for Android

Android 2D 纹理覆盖

本页面将详细介绍 Android 特有的__纹理覆盖 (Texture Overrides)__。可在此处找到常规纹理覆盖的说明。

本页面包含的信息假定读者具备 DXT 和 ETC 纹理压缩、OpenGL ES 和 Android 开发的基本知识。

有关纹理压缩和 OpenGL ES 的更多信息,请访问以下 Wikipedia 页面:

Android 2D 纹理覆盖设置
Android 2D 纹理覆盖设置
纹理格式 内部表示
        RGB Compressed DXT1 压缩 RGB 纹理。受到 NVIDIA Tegra 的支持。4 位/像素(256x256 纹理为 32 KB)。
        RGBA Compressed DXT5 Compressed RGBA texture. Supported by NVIDIA Tegra. 6 bits per pixel (64 KB for a 256x256 texture).
        RGB Crunched DXT1 Compressed RGB Texture. Supported by NVIDIA Tegra. Crunch is a lossy compression format on top of DXT Texture compression. Textures are decompressed to DXT by the CPU and then uploaded to the GPU at runtime. Crunch produces smaller Textures than by regular DXT1 compression, but with lower quality. Crunch Textures can take a long time to compress, but decompression at runtime is very fast. 4 bits per pixel (output size varies depending on the Texture - from 1 KB for a 256x256 Texture).
        RGBA Crunched DXT5 Compressed RGBA Texture. Supported by NVIDIA Tegra. Crunch is a lossy compression format on top of DXT Texture compression. Textures are decompressed to DXT on the CPU and then uploaded to the GPU at runtime. Crunch compression can be used to produce significantly smaller Textures than by regular DXT5 compression, but with lower quality. Crunch Textures can take a long time to compress, but decompression at runtime is very fast. 6 bits per pixel (output size varies depending on the Texture - from 1 KB for a 256x256 Texture).
        RGB Compressed ETC 4 bits Compressed RGB Texture. This is the default Texture format for Android projects in Unity. ETC1 is a part of OpenGL ES 2.0 and is supported by all OpenGL ES 2.0 GPUs. It does not support alpha. 4 bits per pixel (32 KB for a 256x256 Texture)
        RGB Compressed ETC2 4 bits Compressed RGB Texture. ETC2 is a part of OpenGL ES 3.0 and is supported by all OpenGL ES 3.0 GPUs. 4 bits per pixel (32 KB for a 256x256 Texture)
        RGB + 1-bit Alpha Compressed ETC2 4 bits Compressed RGB Texture with 1-bit punchthrough alpha. ETC2 is a part of OpenGL ES 3.0 and is supported by all OpenGL ES 3.0 GPUs. 4 bits per pixel (32 KB for a 256x256 Texture)
        RGBA Compressed ETC2 8 bits 压缩 RGBA 纹理。受到所有 OpenGL ES 3.0 GPU 的支持。(256x256 纹理为 64 KB)
        RGB Compressed PVRTC 2 bits 压缩 RGB 纹理。受到 Imagination PowerVR GPU 的支持。2 位/像素(256x256 纹理为 16 KB)
        RGBA Compressed PVRTC 2 bits 压缩 RGBA 纹理。受到 Imagination PowerVR GPU 的支持。2 位/像素(256x256 纹理为 16 KB)
        RGB Compressed PVRTC 4 bits 压缩 RGB 纹理。受到 Imagination PowerVR GPU 的支持。4 位/像素(256x256 纹理为 32 KB)
        RGBA Compressed PVRTC 4 bits 压缩 RGBA 纹理。受到 Imagination PowerVR GPU 的支持。4 位/像素(256x256 纹理为 32 KB)
        RGB Compressed ATC 4 bits 压缩 RGB 纹理。受到 Qualcomm Snapdragon 的支持。4 位/像素(256x256 纹理为 32 KB)。
        RGBA Compressed ATC 8 bits 压缩 RGBA 纹理。受到 Qualcomm Snapdragon 的支持。8 位/像素(256x256 纹理为 64 KB)。
        RGB Compressed ASTC 4x4 block

        RGB Compressed ASTC 5x5 block

        RGB Compressed ASTC 6x6 block

        RGB Compressed ASTC 8x8 block

        RGB Compressed ASTC 10x10 block

        RGB Compressed ASTC 12x12 block
压缩 RGB 纹理。受到所有 OpenGL ES 3.2 和 OpenGL ES 3.1 + AEP GPU 以及一部分 OpenGL ES 3.0 GPU 的支持。此压缩类型使用固定的 128 位块大小,并根据像素块大小(4x4 到 12x12)可达 8 到 0.89 位/像素。压缩纹理的大小从 256x256 纹理(4x4 块,最高质量)的 64 KB 到 256x256 纹理(12x12 块,最高压缩率)的 7.6 KB 不等。
        RGBA Compressed ASTC 4x4 block

        RGBA Compressed ASTC 5x5 block

        RGBA Compressed ASTC 6x6 block

        RGBA Compressed ASTC 8x8 block

        RGBA Compressed ASTC 10x10 block

        RGBA Compressed ASTC 12x12 block
压缩 RGBA 纹理。受到所有 OpenGL ES 3.2 和 OpenGL ES 3.1 + AEP GPU 以及一部分 OpenGL ES 3.0 GPU 的支持。此压缩类型使用固定的 128 位块大小,并根据像素块大小(4x4 到 12x12)可达 8 到 0.89 位/像素。压缩纹理的大小从 256x256 纹理(4x4 块,最高质量)的 64 KB 到 256x256 纹理(12x12 块,最高压缩率)的 7.6 KB 不等。
        RGB 16 bit 65,000 种颜色,没有 Alpha。使用比压缩格式更多的内存,但可能更适合没有渐变的 UI 或清晰纹理。256x256 纹理为 128 KB。
        RGB 24 bit 真实色彩,但没有 Alpha。256x256 纹理为 192 KB。
        Alpha 8 bit 高质量 Alpha 通道,但没有任何颜色。256x256 纹理为 64 KB。
        RGBA 16 bit 低质量真实色彩。具有 Alpha 通道的纹理的默认压缩格式。256x256 纹理为 128 KB。
        RGBA 32 bit 真实色彩,并有 Alpha - 这是具有 Alpha 的纹理的最高质量压缩格式。256x256 纹理为 256 KB。
Compression quality 选择 Fast 可获得最快的性能,选择 Best 可获得最佳图像质量,选择 Normal 可获得这两者之间的平衡。

如果安装应用程序的设备不支持已使用的纹理压缩格式,Unity 会在应用程序运行时将纹理解压缩为 RGBA 32 并与压缩纹理一起存储在设备的内存中。这将导致加载时间增加和内存使用量增加,因为 Unity 必须解压缩纹理并存储两个版本的纹理(压缩和未压缩)。这也会对渲染性能产生很大影响,尤其是在较旧较慢的设备上。

除非是面向特定硬件(如 Nvidia Tegra),否则请使用 ETC2 压缩。ETC2 支持带有和不带 Alpha 通道的纹理,并且受到所有 OpenGL ES 3 设备的支持。要避免软件解压缩,请在 Player Settings 窗口中将最低图形 API 设置为 OpenGL ES 3,方法是从图形 API 列表中删除 OpenGL ES 2 并将 Minimum API Level 设置为 18+。

若要以 OpenGL ES 2 和 OpenGL ES 3 设备为目标设备,可创建两个不同的 APK,方法是首先构建面向 OpenGL ES 3 的 APK(如上所示),然后通过从 PlayerSettings 窗口的 Graphics API 部分中删除 OpenGL ES 2 和 Vulcan 来构建面向 OpenGL ES 2 的 APK。然后,可将这两个 APK 发布到 Google Play 应用商店。当用户下载应用程序时,Google Play 应用商店会自动为其设备安装最相关的 APK。有关发布多个 APK 文件的更多信息,请参阅 Android 开发者文档的发布多个 APK (Publishing Multiple APKs)Google Play 应用商店 APK 过滤 (Google Play Store APK filtering) 部分。

在构建面向 OpenGL ES 2 的 APK 时,可使用 ETC1 纹理压缩。

面向 OpenGL ES2 的 APK 的纹理压缩格式可采用 ETC1。Unity 可将 ETC1 用于带有 Alpha 的纹理,但前提是这些纹理放置在图集上(通过指定打包标签)并且构建目标为 Android。若要选择这样做,请勾选纹理的“Compress using ETC1”复选框。在后台,Unity 会将生成的图集拆分为两个纹理,每个纹理都带有 Alpha 通道,然后将它们组合在渲染管线的最后部分中。

如果确实要在纹理中存储 Alpha 通道,请使用所有硬件供应商都支持的 RGBA16 位压缩格式。


  • 2017–08–30 Page amended with editorial review

  • Unity 2017.1 中的更新功能

Android Player Settings
Gradle for Android