Larger ASTC block sizes save bandwidth, but may not save memory at all. I tested many iOS and Android devices to find the actual cost of memory alignment:
www.ludicon.com/castano/blog...
Posts by Ignacio Castano
Infinite Flight 26.1 is out. Spark is powering the new content pipeline under the hood. Great to see it shipping!
I just noticed the talks from the Khronos 3D on the Web event at GDC were released a few days ago.
I gave a talk on bringing real-time GPU texture compression to the web with spark.js, with some live demos.
www.youtube.com/watch?v=eJN0...
#webgpu #webgl #sparkjs #gltf
20% faster texture encoding on Metal? Leverage heap aliasing to emulate resource casting and skip the blit.
www.ludicon.com/castano/blog...
I don't know yet what PVRIC4 does, but Metal's lossy format is a fairly standard block format (with an unusual block size 8x4). It has some similarities with ETC and EAC, combines some of the ideas of both, but it's designed in a way that's easy to encode for and it's lossless under some conditions.
I've been reverse engineering and benchmarking Apple's, ARM's, and ImgTec's hardware image compression formats. ARM's AFRC is the clear winner, but does native hardware compression make real-time texture encoding obsolete?
www.ludicon.com/castano/blog...
I'll be at GDC next week! With rising RAM costs and ever-growing asset sizes, texture compression has never mattered more. Get in touch if you'd like to meet and chat.
I'm excited to announce the release of spark.js 0.1 now with support for WebGL!
www.ludicon.com/castano/blog...
#webgl #webgpu #sparkjs
That's quite impressive. I'll have to give hardware decoding a try. It's unfortunate that the vulkan video extensions are not exposed in any mobile device, where the power savings would make them much more attractive.
Reminds me to the character rendering pipeline in Hades: www.youtube.com/watch?v=Vj9e...
Real-time compression would address the memory footprint problem, but the other challenges remain and it's unclear to me the hardware decoder would perform better than bink.
For Vulkan we provide spirv shaders and example code showing how to use them in your app. You would be responsible of the resource management and kernel dispatch.
I’m curious how the Vulkan video extensions are working for you. How’s the latency and what kind of decode rates are you able to get?
Yes, base texture and mips are block compressed in realtime. Spark is very fast and produces superior results than all other realtime codecs. It uses a constrained search space and is optimized for perceptual metrics. Happy to provide specific numbers for your target hardware.
Thanks, happy to help co-develop a solution for your use case, including switch support.
spark.js is just a webgpu runtime. The Spark codecs should run on both switch consoles, but access to Nintendo SDK requires demand from a licensed studio. I should be able to provide support for switch the moment a developer requests it.
Runtime mipmap generation can reduce texture transmission by 25%, with no loss of quality.
Real-time doesn’t mean compromises: the same algorithms used offline can run efficiently on the GPU.
Learn about the spark.js implementation here:
www.ludicon.com/castano/blog...
I've been working on something new since August 2025 and have decided to finally spill the beans:
Introducing "Project Echo", a deterministic Record & Replay tool for PS5:
www.youtube.com/watch?v=K_sd...
Please read the video description and let me know your brutally honest feedback!
I’ve recently been tinkering with MLPs, exploring different ways they might be used in rendering to get a feel for their potential. I also put together a blog post with some initial impressions. interplayoflight.wordpress.com/2026/02/10/a...
For offline compression NVTT used to be best option, but these days most people have forked/reimplemented it and amalgamated several codecs. Kram is a good example. I wish there was a more lightweight option for texture processing in the same spirit as meshoptimizer.
Sponza texture compressed with KTX-UASTC.
I generated the UASTC gltf after taking the screenshots, so I don't have the exact same shot. UASTC quality is pretty good, but takes 3x the size on disk than AVIF and doesn't scale to lower video memory requirements.
I've put together an updated version of the Sponza scene with uncompressed PNG and compressed AVIF textures. I wrote about the process and compared the results against KTX.
www.ludicon.com/castano/blog...
#webgpu #web3d #sparkjs
While working on spark.js, I realized that common normal map compression formats weren’t supported in popular frameworks like three.js. I added the necessary support to three.js and wrote an article to shed some light on the topic:
ludicon.com/castano/blog...
#webgpu #webgl #threejs #sparkjs
Graphics Programming weekly - Issue 426 - February 1st, 2026 www.jendrikillner.com/post/graphic...
For what I'm working on, I can change every file, asset, shader, and C++ code and see the changes in <1s.
Shaders take roughly 100ms, C++ code 500ms.
Using my own custom tech and Live++.
Really worthwhile reading from @icastano.bsky.social! If you're building with WebGPU, spark.js gives you new choices for texture compression that weren't possible with WebGL.
Also, I need to update my older blog post. 😅
Choosing texture formats for WebGPU apps
www.ludicon.com/castano/blog...
Loading large scenes and running out of VRAM? This guide is for you. A follow up to @donmccurdy.com's guide, with a new option: Ship AVIF/WebP over the network, with native block-compressed textures in VRAM
#webgpu #webgl
spark.js has been featured on webgpu.com!
"Real-Time Texture Transcoding for Faster Asset Delivery"
www.webgpu.com/showcase/spa...
#webgpu #threejs #gamedev
Maxon Logo
I'm excited to announce that @maxonvfx.bsky.social has licensed Spark for their cutting-edge Redshift renderer! Looking forward to supporting their work.