KTX 2.0 (.ktx2) parser and serializer.
Install:
npm install --save ktx-parse
Import:
import { read, write } from 'ktx-parse';
Usage:
// Parse texture container from file:
const container = read(data /* ← Uint8Array or Buffer */);
// Write texture container to file:
const data = write(container); // → Uint8Array
See API documentation for more details:
KTX-Parse reads/writes KTX 2.0 containers, and provides access to the compressed texture data within the container. To decompress that texture data, or to compress existing texture data into GPU texture formats used by KTX 2.0, you'll need to use additional libraries such as encoders or transcoders.
Encoding:
Encoding GPU textures is a slow process, and should be completed at development/authoring time so that the compressed texture can be transmitted to the viewing device. GPU textures require much less GPU memory than image formats like PNG or JPEG, and can be uploaded to the GPU quickly with less impact on framerate. GPU textures can also have smaller filesizes in many, but not all, cases. See the Basis documentation for details on this process.
The following tools may be used to produce Basis Universal compressed textures in KTX 2.0 (.ktx2
) containers, which ktx-parse
can then read or edit:
- BinomialLLC/basis_universal CLI, C++, and WebAssembly encoders
- KhronosGroup/KTX-Software CLI, C++, and WebAssembly encoders
Transcoding / Decoding:
Basis Universal texture formats (ETC1S and UASTC) cannot be directly read by a GPU, but are designed to be very efficiently rewritten into many of the specific GPU texture formats that different GPUs require. This process is called transcoding, and typically happens on the viewing device after a target output format (e.g. ETC1, ASTC, BC1, ...) is chosen. These transcoders can also fully decode texture data to uncompressed RGBA formats, if raw pixel data is required.
- BinomialLLC/basis_universal provides official C++ and WebAssembly transcoders, which support all Basis Universal input formats and can transcode to any output format (with appropriate compilation flags). With common settings, a transcoder will likely be > 200kb on web. This transcoder can read KTX 2.0 files directly.
- KhronosGroup/Universal-Texture-Transcoders provides very small, fast WebAssembly transcoders each supporting only a single output texture format. Each transcoder is roughly 10-20kb, and the viewing device can choose which transcoder to download, as appropriate. These transcoders cannot read KTX 2.0 files directly. Instead, unpack the KTX 2.0 files with
ktx-parse
first, then transcode the mip levels using a low-level transcoder. Only UASTC texture formats currently supported.