在 Android App Bundle 中指定目标纹理压缩格式

纹理是可应用于 3D 模型表面的图片。2D 渲染程序也会使用纹理来绘制拼合图或背景等元素。本页介绍了游戏中常用的纹理压缩格式,以及如何在 Android App Bundle 中指定目标纹理压缩格式。在开始阅读本指南之前,请先阅读 Android App Bundle 简介Play Asset Delivery

背景

GPU 通常支持一组纹理压缩格式。纹理压缩格式(即 TCF)是一种针对 GPU 进行优化的文件格式。与在内存中使用 RGBA 值数组相比,GPU 加载和渲染纹理的速度更快,占用的内存也更少。这种支持在硬件层级实现:GPU 制造商将读取、解压缩和渲染所支持格式的组件嵌入到显卡芯片中。

以下是现代移动设备硬件上常见的纹理压缩格式:

  • ASTC:专为取代之前的格式而设计的新格式。比先前的格式更加灵活,因为它支持各种块大小。使用这种格式可以帮助您优化游戏大小。
  • ETC2:在所有支持 OpenGL ES 3.0 及更高版本的设备上均受支持。 包括几乎所有活跃的 Android 移动设备。

这些格式受以下大致百分比的 Android 设备支持:

纹理压缩格式 提供支持的 Google Play 设备的百分比
ASTC >80%
ETC2 >95%

运行 Google Play Games 电脑版的桌面设备 GPU 也支持此格式:

  • DDS 或 S3TC:有时称为 BCn、DXTC 或 DXTn。

不再推荐的旧版纹理压缩格式包括:

  • ETC1:大多数设备都支持此格式。这种格式不支持透明度,但游戏可将第二个纹理文件用于 Alpha 通道组件。
  • PVRTC:iOS 游戏常用的格式,在某些 Android 设备上也受支持。

只有那些支持非常陈旧设备的游戏,或不支持 OpenGL ES 3.0 及更高版本的部分 Android TV 设备,才要求支持 ETC1。

默认格式

由于可用的格式很多(设备支持程度各不相同),因此您在构建游戏纹理时可能不知道应使用哪些格式。为安全起见,您可以使用 app bundle 格式为每个资源包选择默认纹理压缩格式。如果设备不支持其他指定格式,系统会安装使用此默认格式的资源。

除非您以非常陈旧的设备硬件为目标平台,否则对于默认格式,ETC2 是不错的选择。您应使用保证受 OpenGL ES 3.0 支持的 ETC2 格式。这些格式在 Vulkan 图形 API 中也可用。

ASTC 格式定义了各种压缩块大小,以便您有选择地通过降低图片质量换取更大压缩率。对于给定的纹理,您可选择较小或较大的块大小以保持可接受的视觉质量,具体取决于原始艺术材料的性质。

如果您的游戏支持 Google Play Games 电脑版并使用 Vulkan,您应添加 S3TC 纹理。所有桌面 GPU 都支持 S3TC 格式。

构建 app bundle

Google Play 使用 Android App Bundle 针对每位用户的设备配置生成并提供经过优化的 APK,因此用户只需下载其运行您的应用所需的代码和资源。这些经过优化的 APK 包含一组单独的纹理资源,采用适用于设备的最佳压缩格式。

如果您的游戏不是用 Unity 开发的,可使用 Gradle 构建 App Bundle。高级用户可能需要使用