Spark is a set of real-time GPU texture codecs that produce results that are competitive with offline encoders, but have much higher performance:
Real-Time GPU Texture Codecs
Spark is a set of real-time GPU texture codecs that produce results that are competitive with offline encoders, but have much higher performance:
Spark vs offline codecs on M1 MacBook Pro
The textures produced by the Spark codecs 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
Many applications require textures that can't use offline compression. When these textures are left uncompressed, the increased memory footprint leads to diminished performance and a significant increase in power consumption. Real-time texture compression solves these issues, enabling these and other use cases:
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.
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:
Measured throughput on a subset of representative iPhone devices
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:
Measured throughput on some of our low-end Android phones
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. There are several real-time GPU encoders that also target some of these formats, but Spark provides higher quality and performance than the alternatives:
Error and Throughput of Spark BC1 and BC7 codecs against competing BC1 encoders on the Adreno 740
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.
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
Spark is a product by Ludicon LLC