Ignacio CastanoπŸ‰'s Avatar

Ignacio CastanoπŸ‰

@icastano.bsky.social

Master swimmer, mountain climber, and stand up coder. I work on texture processing tools at Ludicon. Formerly at Roblox, Thekla (The Witness), NVIDIA, OddWorld, Relic, Crytek.

353 Followers  |  180 Following  |  75 Posts  |  Joined: 31.12.2023
Posts Following

Posts by Ignacio CastanoπŸ‰ (@icastano.bsky.social)

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.

25.02.2026 16:47 β€” πŸ‘ 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.

24.02.2026 18:02 β€” πŸ‘ 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?

24.02.2026 04:50 β€” πŸ‘ 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.

23.02.2026 03:55 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

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

20.02.2026 17:42 β€” πŸ‘ 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.

20.02.2026 05:44 β€” πŸ‘ 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...

19.02.2026 00:17 β€” πŸ‘ 13    πŸ” 4    πŸ’¬ 2    πŸ“Œ 0
"Project Echo" early pre-alpha footage
YouTube video by Molecular Matters "Project Echo" early pre-alpha footage

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!

12.02.2026 16:50 β€” πŸ‘ 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...

10.02.2026 21:12 β€” πŸ‘ 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.

10.02.2026 20:30 β€” πŸ‘ 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.

10.02.2026 20:26 β€” πŸ‘ 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...

10.02.2026 00:29 β€” πŸ‘ 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...

10.02.2026 00:29 β€” πŸ‘ 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...

10.02.2026 00:29 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0
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

10.02.2026 00:29 β€” πŸ‘ 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

05.02.2026 05:04 β€” πŸ‘ 17    πŸ” 11    πŸ’¬ 0    πŸ“Œ 0
Post image

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

02.02.2026 14:01 β€” πŸ‘ 54    πŸ” 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++.

31.01.2026 15:17 β€” πŸ‘ 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. πŸ˜…

28.01.2026 15:18 β€” πŸ‘ 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

27.01.2026 05:33 β€” πŸ‘ 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

21.01.2026 17:26 β€” πŸ‘ 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.

12.01.2026 20:47 β€” πŸ‘ 9    πŸ” 2    πŸ’¬ 0    πŸ“Œ 0

Fuck Donald Trump

03.01.2026 08:25 β€” πŸ‘ 9    πŸ” 1    πŸ’¬ 0    πŸ“Œ 0

We have to impeach him.

03.01.2026 07:25 β€” πŸ‘ 19499    πŸ” 3046    πŸ’¬ 646    πŸ“Œ 208

I've also submitted a small spark.js update that enables the use of these formats when using the three.js GLTF loader:

github.com/Ludicon/spar...

Shaved a few more bytes too! The package is now down to 256KB!

#webgpu #threejs #sparkjs

10.12.2025 19:56 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

three.js r182 was just released! πŸŽ‰

github.com/mrdoob/three.js/rel

I contributed support for RG normal maps, enabling BC5 and EAC_RG normal map compression in both the WebGL and WebGPU renderers.

#webgpu #webgl #threejs

10.12.2025 19:49 β€” πŸ‘ 9    πŸ” 1    πŸ’¬ 1    πŸ“Œ 0
πŸ‡ meshoptimizer v1.0 Mesh optimization library that makes meshes smaller and faster to render

After nine years of development, meshoptimizer has reached its first major version, 1.0!

This release focuses on improvements in clusterization and simplification as well as stabilization. Here's a release announcement with more details on past, present and future; please RT!

meshoptimizer.org/v1

08.12.2025 16:56 β€” πŸ‘ 249    πŸ” 76    πŸ’¬ 9    πŸ“Œ 1

Very neat. I just run some quick tests and I'm getting relatively good results on BC1 albedo data. Similar compression ratios as zstd at level 22. I haven't measured it, but I imagine compression and decompression are much faster. On BC4-5 data I usually get small increases in texture sizes, though.

17.11.2025 06:08 β€” πŸ‘ 2    πŸ” 0    πŸ’¬ 3    πŸ“Œ 0

Funding: if your mid/large business uses Dear ImGui - and maybe you are approaching end of year budget/planning etc. - please consider reaching out (PM/email) so I can help you help Dear ImGui !

05.11.2025 20:00 β€” πŸ‘ 95    πŸ” 50    πŸ’¬ 0    πŸ“Œ 2