Advertisement · 728 × 90

Posts by Ignacio Castano

Preview
The True Size of ASTC Textures In my previous post Writing to Compressed Textures in Metal, I showed how Metal heaps can be used to alias buffers and textures to inspect their actual memory layout. Something that caught my attentio...

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...

6 days ago 7 2 0 0

Infinite Flight 26.1 is out. Spark is powering the new content pipeline under the hood. Great to see it shipping!

1 week ago 4 0 0 0
3D on the Web 2026 - spark.js glTF Demo and Real Time Texture Compression
3D on the Web 2026 - spark.js glTF Demo and Real Time Texture Compression YouTube video by The Khronos Group

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

1 week ago 3 0 0 0
Writing to Compressed Textures in Metal Writing to Compressed Textures in Metal using heap aliasing.

20% faster texture encoding on Metal? Leverage heap aliasing to emulate resource casting and skip the blit.
www.ludicon.com/castano/blog...

1 week ago 13 2 1 0

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.

3 weeks ago 1 0 1 0
Preview
Hardware Image Compression One of the things I've always lamented about hardware image formats is the slow pace of innovation. Developers were usually unwilling to ship textures in a new format unless that format was widely ava...

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...

3 weeks ago 7 2 2 0

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.

1 month ago 3 1 0 0
Preview
Announcing spark.js 0.1 I'm excited to announce spark.js 0.1, now with WebGL support!

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

1 month ago 15 2 0 0
Advertisement

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.

1 month ago 0 0 1 0
Post image

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.

1 month ago 0 0 1 0

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?

1 month ago 1 0 1 0

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.

1 month ago 1 0 1 0

Thanks, happy to help co-develop a solution for your use case, including switch support.

2 months ago 1 0 1 0

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.

2 months ago 0 0 1 0
Preview
Runtime Mipmap Generation One of the advantages of runtime texture compression is that mipmaps can also be computed at runtime and do not need to be transmitted. In contrast, offline codecs must precompute mipmaps so they can ...

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...

2 months ago 13 4 2 0
Advertisement
"Project Echo" early pre-alpha footage
"Project Echo" early pre-alpha footage YouTube video by Molecular Matters

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!

2 months ago 50 13 16 6
Preview
Adventures in Neural Rendering In recent years, neural networks have started to find their way into many areas of rendering. While antialiasing and upscaling are probably the most well‑known uses, they’re far from the only ones—…

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...

2 months ago 25 6 0 0

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.

2 months ago 0 0 1 0
Sponza texture compressed with KTX-UASTC.

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.

2 months ago 1 0 1 0
Preview
GitHub - Ludicon/webgpu-clustered-shading: Personal experimental project to implement clustered shading with WebGPU. Personal experimental project to implement clustered shading with WebGPU. - Ludicon/webgpu-clustered-shading

And my fork of the webgpu demo that inspired this article: github.com/Ludicon/webg...

2 months ago 1 0 0 0
Preview
GitHub - Ludicon/gltf-tex: Command-line tool for processing textures in glTF models with AVIF compression and parallel processing Command-line tool for processing textures in glTF models with AVIF compression and parallel processing - Ludicon/gltf-tex

The tool that I built to update the model with AVIF textures:
github.com/Ludicon/gltf...

2 months ago 1 0 1 0
Preview
GitHub - Ludicon/sponza-gltf: A cleaned up version of the Sponza glTF. A cleaned up version of the Sponza glTF. Contribute to Ludicon/sponza-gltf development by creating an account on GitHub.

You can find the new glTF files in this repo:
github.com/ludicon/spon...

2 months ago 1 0 1 0
Advertisement
An Updated Sponza glTF – Ignacio Castaño

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

2 months ago 13 2 3 1
Normal Map Compression Revisited – Ignacio Castaño

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

2 months ago 17 11 0 0
Post image

Graphics Programming weekly - Issue 426 - February 1st, 2026 www.jendrikillner.com/post/graphic...

2 months ago 55 15 1 0

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++.

2 months ago 23 3 1 0

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. 😅

2 months ago 7 1 0 0
Choosing Texture Formats for WebGPU applications – Ignacio Castaño

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

2 months ago 7 2 0 1
Preview
spark.js GLTF Demo: Real-Time Texture Transcoding for Faster Asset Delivery A GLTF viewer that ships textures as compact WebP or AVIF, then transcodes them to GPU-compressed formats in the browser. Small downloads, efficient VRAM. Spark.js handles the conversion so you get th...

spark.js has been featured on webgpu.com!

"Real-Time Texture Transcoding for Faster Asset Delivery"
www.webgpu.com/showcase/spa...

#webgpu #threejs #gamedev

3 months ago 18 5 0 0
Maxon Logo

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.

3 months ago 9 2 0 0
Advertisement