返回博客
格式详解

PKM 与 ETC 格式:完整指南

10 分钟阅读

PKM 是专为 ETC 压缩纹理设计的简单容器格式,广泛应用于 Android 和 OpenGL ES 平台。本文提供了理解 PKM 格式结构、ETC/ETC2 压缩版本及其有效使用方法的完整指南。

什么是 PKM 格式?

PKM('PoKeMon' 的缩写,由爱立信命名)是专门用于存储 ETC 压缩纹理数据的简单容器格式。与 KTX 或 DDS 等复杂格式不同,PKM 结构极简,仅包含 16 字节头部和压缩图像数据。

该格式的创建旨在为移动设备提供一种轻量级的方式来存储和加载 ETC 压缩纹理。其简单性使其易于实现和解析,除压缩纹理数据本身外几乎没有额外开销。

PKM 文件结构

  • 16 字节头部:魔数(PKM)、版本、格式、尺寸
  • 压缩纹理数据:原始 ETC/ETC2 块

ETC 压缩版本

ETC 压缩有两个主要版本,各具不同功能:

ETC1(爱立信纹理压缩 1)

原始 ETC 标准,仅支持 RGB 颜色通道,固定 4:1 压缩比。自 OpenGL ES 2.0 以来在 Android 设备上广泛支持。

支持: 所有 OpenGL ES 2.0+ 设备

压缩比: 固定 4:1(每像素 4 位)

ETC2(爱立信纹理压缩 2)

ETC1 的改进版本,增加了 RGBA 支持和多种格式选项。在保持向后兼容的同时提供更好的质量和 Alpha 通道支持。

支持: OpenGL ES 3.0+,Vulkan

压缩比: 根据格式 4:1 到 8:1

PKM 格式变体

PKM 可以包含不同的 ETC 格式类型:

ETC1 RGB

原始格式,仅 RGB,无 Alpha 通道

ETC2 RGB

改进的 RGB 压缩,质量优于 ETC1

ETC2 RGBA

完整 RGBA 支持,8:1 压缩(每像素 8 位)

ETC2 RGB + 穿透 Alpha

RGB 加 1 位 Alpha,保持 4:1 压缩

PKM/ETC 的优势

Android 通用支持

ETC1 在所有 Android 设备上都保证支持,使其成为 Android 开发中最具可移植性的压缩格式。

固定压缩比

可预测的内存使用,一致的 4:1 或 8:1 压缩比,简化内存预算计算。

良好的质量-大小比

ETC2 为大多数纹理类型提供出色的视觉质量,可与 DXT/BCn 等桌面格式媲美。

硬件解码

GPU 直接解压缩,渲染期间零 CPU 开销,实现高效的纹理采样。

局限性和注意事项

ETC1 质量限制

ETC1 在具有高频细节或平滑渐变的纹理上可能显示可见的伪影。考虑使用 ETC2 获得更好的质量。

ETC1 不支持 Alpha

ETC1 不支持 Alpha 通道。如果目标是 OpenGL ES 2.0 设备,需要使用 ETC2 RGBA 或单独存储 Alpha。

高级功能有限

PKM 不支持 Mipmap、立方体贴图或纹理数组。对于这些高级功能,请使用 KTX 或 KTX2 格式。

如何使用 PKM 格式

在项目中使用 PKM 文件非常简单:

编码为 PKM

  1. 上传您的 PNG/JPG 图像(必须具有 2 的幂次或 4 的倍数尺寸)
  2. 根据需要在 ETC1 RGB 或 ETC2 RGB/RGBA 之间选择
  3. 下载生成的 .pkm 文件并集成到您的项目中

解码 PKM 文件

  1. 上传您的 .pkm 文件以验证其内容
  2. 预览解压缩的纹理并检查质量
  3. 如果需要编辑或检查纹理,可导出为 PNG

最佳实践

  • 使用 ETC1 RGB 以获得所有 Android 设备的最大兼容性(OpenGL ES 2.0+)
  • 针对需要 Alpha 通道的现代设备(OpenGL ES 3.0+)时,优先使用 ETC2 RGBA
  • 确保纹理尺寸是 4 的倍数(ETC1)或 2 的幂次以获得最佳质量
  • 对于旧设备上需要 Alpha 的纹理,考虑使用单独的灰度纹理
  • 在实际目标设备上测试压缩纹理 - 质量感知因内容类型而异

结论

使用 ETC/ETC2 压缩的 PKM 是 Android 和移动 OpenGL ES 开发的标准选择。其通用支持、可预测的性能和良好的质量使其成为移动纹理压缩的绝佳默认选项。

我们的在线 PKM 编码器和解码器工具使您无需安装命令行工具或 SDK 即可轻松处理 ETC 压缩纹理。无论您是创建新纹理还是检查现有纹理,这些工具都可以帮助您优化移动图形管线。

扩展阅读与参考资料

深入了解 ETC 和 PKM 格式:

试用我们的工具