返回博客
格式详解

KTX 格式:Khronos 纹理容器完整指南

20 分钟阅读

KTX (Khronos Texture) 是由 Khronos Group 开发和维护的官方开放标准纹理容器格式。作为一种免版税、供应商中立的格式,专门为现代图形 API 如 OpenGL、OpenGL ES 和 Vulkan 设计,KTX 提供了标准化方式在不同平台和应用程序之间存储和传输压缩纹理。拥有两个主要版本——用于传统 OpenGL 应用程序的 KTX1 和用于现代基于 Vulkan 工作流程的 KTX2——KTX 是专业图形开发中纹理资产管道的骨干。

什么是 KTX 格式?

KTX 是一种容器格式,旨在以可被图形硬件直接使用的方式存储纹理数据。与 PNG 或 JPEG 等图像格式不同,KTX 专门针对 GPU 纹理加载进行了优化,支持各种压缩格式,包括 ETC、ASTC、BCn 和 PVRTC。该格式包含正确纹理解释所需的基本元数据,使其成为跨平台图形应用程序的理想选择。

该格式最初是为了解决不同平台和 API 之间纹理压缩格式的碎片化问题而创建的。在 KTX 之前,开发人员必须处理多种专有格式,如 DirectX 的 DDS、PowerVR 的 PVR 以及各种平台特定格式。KTX 提供了一个可在 OpenGL、OpenGL ES 和 Vulkan 上工作的统一解决方案,具有直接 GPU 加载功能。

KTX 自推出以来有了显著发展,KTX2 在功能和特性方面代表了重大飞跃。新版本增加了对 Basis Universal 等超压缩方案的支持、通过数据格式描述符(DFD)改进的元数据处理,以及对纹理数组、3D 纹理和立方体贴图等现代纹理特性的更好支持。

KTX 格式的主要特性

Khronos 标准

官方 Khronos Group 标准,确保广泛的行业采用和跨平台兼容性

格式无关

支持几乎任何纹理压缩格式,包括 ETC、ASTC、BCn、PVRTC 和未压缩格式

丰富元数据

全面的元数据支持,包括方向、色彩空间、压缩设置和自定义键值对

完整 Mipmap 支持

原生支持 mipmap 链、纹理数组、3D 纹理和立方体贴图

高级纹理类型

支持纹理数组、3D 纹理、立方体贴图和其他高级纹理类型

跨平台

在 Windows、macOS、Linux、iOS、 Android 和 Web 平台上无缝工作

KTX 版本比较

了解 KTX1 和 KTX2 之间的差异对于为您的应用程序选择合适的格式至关重要:

KTX1(传统)

为 OpenGL 和 OpenGL ES 应用程序设计的原始 KTX 格式。基于 OpenGL 纹理参数的简单结构。

KTX1 使用简单的头部结构,后跟键值数据,然后是图像数据。它与较旧的 OpenGL 版本兼容,提供基本的纹理存储功能。虽然仍得到广泛支持,但缺乏 KTX2 的高级功能。

KTX2(现代)

为 Vulkan 和下一代图形应用程序设计的现代 KTX 格式。增强功能和超压缩支持。

KTX2 引入了重大改进,包括 Basis Universal 超压缩、数据格式描述符(DFD)、用于高效数据访问的级别索引,以及对纹理数组和 3D 纹理的更好支持。它是新项目的推荐选择。

支持的压缩格式

KTX 作为各种压缩格式的容器,使其具有令人难以置信的通用性:

ETC(爱立信纹理压缩)

移动设备的标准压缩,ETC1 用于 RGB 压缩,ETC2 用于 RGBA 压缩

ASTC(自适应可扩展纹理压缩)

现代、高质量压缩,支持从 4x4 到 12x12 像素的各种块大小

BCn(块压缩)

包括 BC1-BC7 的 DirectX 压缩格式,用于桌面游戏和 Windows 应用程序

PVRTC(PowerVR 纹理压缩)

PowerVR 专用压缩,用于 iOS 和嵌入式系统,具有 2bpp 和 4bpp 变体

未压缩格式

标准未压缩格式,如 RGB8、RGBA8 和各种 HDR 格式

KTX 文件结构

KTX 文件遵循结构化格式,包含三个主要组件:

文件头部

包含格式标识、版本信息和基本纹理元数据,如尺寸和格式

键值数据

包含自定义键值对以获取附加纹理信息的元数据部分

图像数据

按 mipmap 级别和数组层组织的实际压缩或未压缩纹理数据

KTX1 头部结构

KTX1 使用基于 OpenGL 纹理参数的 64 字节头部:

标识符(12 字节)

"«KTX 11»\r\n\x1A\n" - 用于验证的文件格式标识符

字节序(4 字节)

指定字节顺序:0x04030201 为小端,0x01020304 为大端

glType(4 字节)

OpenGL 数据类型(例如 GL_UNSIGNED_BYTE)- 压缩格式为 0

glFormat(4 字节)

OpenGL 格式(例如 GL_RGB)- 压缩格式为 0

glInternalFormat(4 字节)

OpenGL 内部格式(例如 GL_COMPRESSED_RGB8_ETC2)

glBaseInternalFormat(4 字节)

与较旧 OpenGL 版本兼容的基础 OpenGL 格式

pixelWidth(4 字节)

纹理宽度(像素)

pixelHeight(4 字节)

纹理高度(像素)(1D 纹理为 0)

pixelDepth(4 字节)

纹理深度(像素)(2D 纹理为 0)

numberOfArrayElements(4 字节)

数组元素数量(非数组纹理为 0)

numberOfFaces(4 字节)

面数(立方体贴图为 6,常规纹理为 1)

numberOfMipmapLevels(4 字节)

mipmap 级别数(无 mipmap 为 1)

bytesOfKeyValueData(4 字节)

键值数据部分的大小(字节)

KTX2 结构改进

KTX2 引入了几个新的结构组件以增强功能:

增强头部

改进的头部结构,具有版本信息、格式标识符和数据大小指示器

级别索引

高效的索引系统,用于快速访问特定的 mipmap 级别和纹理数据

数据格式描述符(DFD)

全面的格式描述系统,取代 OpenGL 格式常量

键值数据

增强的元数据系统,支持国际化和复杂数据类型

超压缩全局数据

Basis Universal 等超压缩方案的全局数据

元数据和键值数据

KTX 文件可以通过键值数据部分包含大量元数据:

纹理方向

指定纹理方向(左上、右下等)以正确渲染

格式信息

有关压缩格式、质量设置和编码参数的详细信息

写入器信息

有关创建 KTX 文件的工具或应用程序的信息

压缩设置

使用的特定压缩参数和质量设置

色彩空间

色彩空间信息,包括 sRGB、线性和 HDR 色彩配置文件

KTX 开发工作流程

创建和管理 KTX 纹理涉及这些关键阶段:

1

源资产准备

准备具有适当尺寸和色彩配置文件的高质量源图像

2

格式选择

根据目标平台和质量要求选择合适的压缩格式

3

纹理压缩

使用 toktx 等工具或资产管道将源图像压缩为 KTX 格式

4

元数据添加

添加适当的元数据,包括方向、色彩空间和自定义属性

5

文件验证

验证 KTX 文件与目标平台的兼容性和正确性

6

应用程序集成

将 KTX 加载和处理集成到您的图形应用程序中

KTX 格式的主要优势

行业标准

Khronos Group 标准确保长期支持和广泛的行业采用

格式灵活性

支持几乎任何压缩格式,使其具有未来性和通用性

丰富元数据

全面的元数据系统,用于正确的纹理解释和管理

高级功能

支持现代纹理功能,如数组、3D 纹理和超压缩

跨平台

在所有主要平台上工作,无需修改或转换

未来就绪

KTX2 和超压缩支持确保与未来图形技术的兼容性

常见用例

Vulkan 应用程序

现代 Vulkan 应用程序的主要格式,具有直接 GPU 加载功能

OpenGL 应用程序

OpenGL 和 OpenGL ES 应用程序的跨平台纹理格式

WebGL 应用程序

通过 KTX 纹理加载器和 WebGL 实现的基于 Web 的图形应用程序

游戏开发

具有跨平台纹理资产管道的专业游戏开发

VR/AR 应用程序

需要高效纹理加载的虚拟和增强现实应用程序

移动开发

具有优化纹理压缩格式的 iOS 和 Android 应用程序

KTX 与其他格式的比较

了解 KTX 与其他纹理格式的比较:

KTX 与 DDS

KTX 是跨平台和 API 无关的,而 DDS 是 DirectX 特定的,专注于 Windows

KTX vs PVR

KTX 支持多种压缩格式,而 PVR 针对 PowerVR GPU 和 iOS 进行了优化

KTX1 与 KTX2

KTX2 提供超压缩、更好的元数据和现代功能,优于传统 KTX1

KTX 与 Basis Universal 对比

KTX 是容器格式,而 Basis Universal 是可以存储在 KTX2 中的压缩格式

开发工具和资源

toktx 工具

用于从各种图像格式创建和转换 KTX 文件的官方命令行工具

KTX-Tools 包

完整的工具套件,包括 toktx、ktxinfo、ktxcheck 和其他实用程序

Vulkan SDK

官方 Vulkan SDK 包括 KTX 支持和加载实用程序

OpenGL 库

各种具有内置 KTX 支持的 OpenGL 库和框架

Unity KTX 支持

Unity 引擎通过插件和资产管道支持 KTX 纹理加载

虚幻引擎 KTX

Unreal Engine 通过纹理压缩设置提供 KTX 纹理支持

KTX 开发最佳实践

对新项目使用 KTX2,以利用现代功能和超压缩功能

根据目标平台选择合适的压缩格式:移动设备使用 ETC,桌面使用 BCn

包含全面的元数据,以确保跨平台的正确纹理解释

在开发早期在目标硬件上验证 KTX 文件,以避免兼容性问题

使用适当的 mipmap 设置以优化不同观看距离的渲染性能

考虑使用 Basis Universal 超压缩进行跨平台部署,获得最佳文件大小

使用实际目标硬件和网络条件测试纹理加载性能

实现适当的错误处理和不支持格式或功能的回退机制

迁移和升级路径

迁移到 KTX 或版本之间升级的指南:

从 KTX1 迁移到 KTX2

使用带有 --ktx2 标志的 toktx 将传统 KTX1 文件转换为现代 KTX2 格式

从 DDS 转换为 KTX

使用 toktx 或纹理转换工具将 DirectX 纹理迁移到跨平台 KTX 格式

从 PVR 转换为 KTX

将 iOS 特定的 PVR 纹理转换为 KTX 以实现跨平台兼容性

添加 Basis Universal 压缩

使用带有 Basis Universal 选项的 toktx 向 KTX2 文件添加超压缩

为什么选择 KTX2?

KTX2 相对于 KTX1 和其他格式提供显著优势:

Basis Universal 支持

原生支持 Basis Universal 超压缩,实现通用纹理部署

增强压缩

通过现代压缩方案改进压缩比和质量

超压缩方案

支持 Basis Universal 以外的各种超压缩格式

数据格式描述符

全面的格式描述系统,取代传统 OpenGL 常量

面向未来的设计

为现代和未来的图形 API 及压缩技术而设计

结论

KTX 格式代表了跨平台纹理管理的行业标准,为开发人员提供了强大、灵活且面向未来的纹理资产管道解决方案。无论是将传统 KTX1 用于 OpenGL 应用程序,还是将现代 KTX2 用于基于 Vulkan 的开发,KTX 都提供专业图形开发所需的工具和功能。

随着图形行业继续向跨平台发展和更先进的压缩技术发展,具有 Basis Universal 超压缩支持和现代功能的 KTX2 将自己定位为纹理管理的首选方案。了解 KTX 格式及其功能对于任何使用现代图形应用程序的开发人员来说都是必不可少的。

进一步阅读和资源

使用这些权威资源扩展您的知识:

试用我们的工具