纹理是可应用于 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 包含一组单独的纹理资源,采用适用于设备的最佳压缩格式。