Sparkspark logo

Real-Time GPU Texture Codecs

Spark is a software library that enables the use of compressed GPU textures in scenarios where it was not possible before. It accomplishes this by leveraging the compute capabilities of modern GPUs and achieves quality that is competitive with offline encoders.

Quality and throughput vs offline codecs Intel ARM NVIDIA Apple Spark vs offline codecs on M1 MacBook Pro

Tooltip text

The textures produced by the Spark encoders frequently match the quality and appearance of the original images so closely that they're nearly indistinguishable. Don't just take our word for it; see the impressive results with your own eyes:

“HypeHype has been investing in Spark development from the beginning. We are really excited about the new possibilities it opens for our real time texture composition pipeline on mobile devices and web. Minimizing texture storage while keeping compatibility with various formats is crucial for modern content sharing platforms.”
—Sebastian Aaltonen, Technical Director (Rendering) at HypeHype
“This is absolutely massive for a lot of mobile games (UGC, games that allow user customization, etc) Ignacio is a top notch engineer so I'm more than excited to give this a try at some point.”
—David Sena, Graphics Technical Director

Use Cases

Many applications require textures that can't use offline compression. When these textures are left uncompressed, the memory footprint expands, leading to diminished performance and a significant increase in power consumption. Real-time texture compression solves these issues, enabling these and other use cases:

GPU Optimized

Spark is designed to take advantage of the GPU's capabilities to optimize its performance. It runs on most graphics APIs including Metal, Vulkan, OpenGL and Direct3D.

While block compression is intrinsically parallel, targeting it requires carefully crafted algorithms that minimize divergence and fit within the constrained resource limits. Spark is the result of the refinement of these techniques over years of compression experience.

Spark aims to maximize the quality that can be attained while saturating memory bandwidth. To achieve this we optimize the use of the arithmetic units by meticulously implementing numerically sensitive algorithms and table lookups in half floating point, ensuring correctness and consistency across GPUs.

Designed for Mobile

Spark is specifically aimed at low- and mid-range mobile devices. It runs on most iOS devices with Metal 1.2 support and most Android devices with support for OpenGL ES 3.2 or Vulkan 1.1.

The following table summarizes the platforms and devices that we officially support:

Platform / Vendor Support Version
iOS / Apple iPhone 6 and above using Metal 1.2
Android / Arm Bifrost and above
Android / Qualcomm Adreno 500 and above with driver version ≥ 512.490
Android / ImgTec All PowerVR and BXM devices
Android / Samsung Xclipse 920
MacOS All Metal 1.2 devices from Apple, Intel, AMD, and NVIDIA
Windows All D3D11, D3D12, OpenGL, and Vulkan 1.1
Linux Valve's SteamDeck only

The following charts show the expected performance on a sample of iPhone and Android devices:

Chart of Spark throughput on iPhone devices Measured throughput on a subset of representative iPhone devices

Chart of Spark throughput on Android phones Measured throughput on a subset of representative Android phones

Old and low-end devices stand to benefit the most from GPU texture compression. We have put special attention to ensure Spark runs well on these devices:

Chart of Spark throughput on Android phones Measured throughput on some of our low-end Android phones

Formats

Spark has been optimized using a comprehensive collection of freely accessible PBR textures, complemented by assets generously shared by our clients. Our codecs target the formats best suited for this content: ASTC 4x4 for color and albedo maps, both with and without alpha, and EAC for normal maps, roughness, metalness, occlusion, and height.

On MacOS, Desktop PCs, and some Android devices Spark supports BC1, BC3, BC4, BC5, and BC7 formats. While there are several real-time GPU encoders that also target these formats, Spark provides higher quality and performance than the alternatives:

Chart showing quality and throughput of Spark and others BC encoders Error and Throughput of Spark BC codecs against competing BC encoders on the Adreno 740

AMD BC1 Microsoft BC1 Spark BC1

Demo

A demo of the Spark library for Android and iOS is available on the respective stores:

The demo shows several PBR textures encoded with Spark, some of which are generated procedurally in real-time. It allows you to experiment with various codec settings and benchmark the compression throughput on your device.

Licensing

We have many flexible licensing options available for a wide range of applications and budgets. For licensing inquiries and evaluation requests contact us at spark@ludicon.com




To stay in touch with us and receive Spark development updates, consider subscribing to our newsletter:


Spark is a product by Ludicon LLC