Sign in

Ignacio Castano

@icastano.bsky.social
425 followers 184 following 116 posts

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.

PostsRepliesMedia
Reposted by Ignacio Castano
Gianni Rosato @giannirosato.com · 07/10/2026
Introducing Iris-AVIF, a better AVIF encoder & the best image encoder in the world: halide.cx/blog/introdu... Iris-AVIF offers up to >21% better compression than libaom, the reference AV1 encoder with image-specific tuning. #av1 #avif #jxl
halide.cx
Iris | Halide Compression
Iris-WebP is a WebP encoder tuned for the human visual system. At equal encode time it produces files 27% smaller than libwebp by CVVDP, at equal quality.
044
Ignacio Castano @icastano.bsky.social · 09/10/2026
Not all at once. I was the first one to leave. None of the members of the original team stayed through the entire development.
100
Ignacio Castano @icastano.bsky.social · 08/10/2026
Ugh, that sucks. I hope you find some relief.
000
Reposted by Ignacio Castano
Corentin Wallez @kangz.net · 07/10/2026
Lots of new features in WebGPU developer.chrome.com/blog/new-in-... - WGSL @depth to keep early-Z - Unaligned compressed texture thanks to @castano.mastodon.gamedev.place.ap.brid.gy - Bindless blog and demo from @toji.dev - srgb/display-p3-linear colorspaces - snorm10-10-10-2 vertex format
developer.chrome.com
What's New in WebGPU (Chrome 155-156)  |  Blog  |  Chrome for Developers
WGSL fragment_depth extension, texture compression unaligned, srgb-linear and display-p3-linear color spaces, snorm10-10-10-2 vertex format, and more.
394
Reposted by Ignacio Castano
Arseny Kapoulkine @zeux.io · 25/09/2026
meshoptimizer 1.3 is out! Featuring a new voxel remesher, support for normal generation, several simplification improvements and various optimizations and fixes. GitHub stars and reposts appreciated! meshoptimizer was started 10 years ago; excited for the years to come! github.com/zeux/meshopt...
29427
Ignacio Castano @icastano.bsky.social · 25/09/2026
I revisited Metal Tile Shaders for real-time texture encoding. The encoder reads straight from tile memory, so the uncompressed render target never reaches DRAM. On most iPhones, rendering + encoding is now as fast as rendering alone. www.ludicon.com/castano/blog...
ludicon.com
Encoding Render Targets for Free with Tile Shaders
Encoding textures with tile shaders: on most iPhones, as fast as not encoding at all.
081
Ignacio Castano @icastano.bsky.social · 17/09/2026
Spark 1.4 is finally out! The highlight is HDR: new BC6H and ASTC HDR codecs, offline quality at real-time speeds. Also: BC1 Ultra, a BC7 codec for packed material maps, ASTC 5×5, and broader device support. www.ludicon.com/castano/blog...
ludicon.com
Spark 1.4
Spark 1.4 adds real-time BC6H and ASTC HDR texture compression, BC1 Ultra, BC7 NRM, ASTC 5×5, and broader GPU compatibility.
0164
Ignacio Castano @icastano.bsky.social · 29/08/2026
Instead of keeping large bitmaps in memory, Spark can compress them at runtime into GPU formats reducing their footprint by 4–8x. For image-heavy apps and games, runtime compression is more than a performance optimization. It's part of meeting the platform’s memory requirements.
010
Ignacio Castano @icastano.bsky.social · 29/08/2026
Real-time texture compression with Spark can help: ludicon.com/spark/
ludicon.com
Spark - Real-Time GPU Texture Codecs
Real-time GPU texture codecs optimized for mobile and web.
130
Ignacio Castano @icastano.bsky.social · 29/08/2026
As a response to the RAM crisis, Google is making memory efficiency a distribution requirement. Starting in February 2027, apps and games that exceed new memory and bitmap usage thresholds may face reduced visibility or publishing restrictions on Google Play.
1102
Reposted by Ignacio Castano
Mayor Zohran Kwame Mamdani @mayor.nyc.gov · 22/07/2026
Benjamin Netanyahu is a war criminal.
20368812624827
Ignacio Castano @icastano.bsky.social · 22/07/2026
Hi Siggraph!
391
Ignacio Castano @icastano.bsky.social · 11/07/2026
I'll be in LA next week! Not for SIGGRAPH, but for my daughter's water polo tournament. I'll have Wed/Thu (July 22–23) open to meet clients and partners while I'm there. Might also grab a SIGGRAPH day pass if I'm not too busy. Reach out if you want to connect.
040
Reposted by Ignacio Castano
Eric Lengyel @ericlengyel.bsky.social · 10/07/2026
Do you use the equation editor built into Microsoft Word? If so, you can put an end to your suffering by upgrading to Radical Pie. radicalpie.com
0277
Reposted by Ignacio Castano
Superluminal @superluminal.eu · 29/06/2026
We're finally bringing our powerful and user friendly CPU profiler to Linux! The beta version is now publically available, and it's free for 60 days during the open beta, so there's really no excuse not to try it out! Just download, extract, optimize. superluminal.eu/applications...
superluminal.eu
Superluminal For Linux | Fast Profiling Without The Challenges
No pages of installation guides. No Gigabytes to download and install. Just unzip, run and focus on performance issues. It Just Works™.
35421
Ignacio Castano @icastano.bsky.social · 23/06/2026
No, just three days hiking there. I was planning to backpack the Teton Crest Trail with my kids, but there was still too much snow, so we opted for a different trip in Yellowstone.
100
Ignacio Castano @icastano.bsky.social · 09/06/2026
Spark for Unity demo is now on Google Play. ludicon.com/spark/#demo #unity
030
Ignacio Castano @icastano.bsky.social · 04/06/2026
Contact me at spark@ludicon.com. I also have precompiled GLSL shader libraries that you can try. They are not heavily tested, but they should be more flexible than the spark.js kernels.
100
Ignacio Castano @icastano.bsky.social · 04/06/2026
Thanks for the heads-up on the README links. Fixing those now.
010
Ignacio Castano @icastano.bsky.social · 04/06/2026
Offline asset compression is a fine use case. For a custom engine, the easiest path right now is to pull the precompiled HLSL libraries out of the Spark for Unity package.
210
Ignacio Castano @icastano.bsky.social · 04/06/2026
Yes, the shaders can be used in any environment under the public license. The full terms are in the EULA; the main requirement is attribution.
110
Ignacio Castano @icastano.bsky.social · 04/06/2026
I don't want to discourage people getting started from adopting the techniques that Spark enables. The $1K license is cheap, but it's still a real expense for an indie in production who hasn't made any money yet.
010
Ignacio Castano @icastano.bsky.social · 04/06/2026
Source on GitHub: github.com/ludicon/spar... Free for projects under $100K in revenue, $1K/$10K commercial tiers, lifetime distribution rights. Same model as spark.js. Happy to answer questions.
github.com
210
Ignacio Castano @icastano.bsky.social · 04/06/2026
The demo app is available for iOS, Android, macOS, and Windows. ludicon.com/spark/#demo
100
Ignacio Castano @icastano.bsky.social · 04/06/2026
exture2D compressed = Spark.EncodeTexture(source, SparkFormat.RGB); One line of code replaces calls to Unity built-in encoders, but running in the GPU. It produces higher quality results and is orders of magnitude faster.
100
Ignacio Castano @icastano.bsky.social · 04/06/2026
Today I'm releasing Spark for Unity, a Unity package that brings the Spark texture codecs to the Unity engine and it's free for projects with lifetime revenue under $100K. t.co/RaUwMH90rK #unity #spark
t.co
https://www.ludicon.com/castano/blog/2026/06/spark-for-unity/
1217
Ignacio Castano @icastano.bsky.social · 03/06/2026
I limit the number of tiles rendered per frame to just 8, so at low framerates you can see some redrawing near the edges, but all things considered it works extremely well. The goal was to showcase the encoder, so I tried to keep the complexity of the virtual texturing system to a minimum.
010
Ignacio Castano @icastano.bsky.social · 03/06/2026
Nothing fancy. I do the simplest thing you can think of: just check if a tile at the higher mip level or lower mip level is present. The only trick is that the resolution of the indirection texture is twice the target mip level, so you can fallback to the high res mips when zooming out.
110
Ignacio Castano @icastano.bsky.social · 03/06/2026
So smooth! www.youtube.com/watch?v=mGip...
youtube.com
Procedural Virtual Texturing with Spark
YouTube video by Ignacio Castano
171
Reposted by Ignacio Castano
Draknek & Friends @draknek.bsky.social · 30/05/2026
The full Dittori will have hundreds of meticulously designed puzzles, each designed to be unique, surprising and memorable. You can try mastering a few of them today in the demo, now available on Steam: store.steampowered.com/app/4311980/...
1408
Ignacio Castano @icastano.bsky.social · 27/05/2026
Also in the demo: procedural virtual texturing. A 256K × 256K texture in 16 MB.
180
Ignacio Castano @icastano.bsky.social · 26/05/2026
Not looking bad!
020
Ignacio Castano @icastano.bsky.social · 26/05/2026
On PC the results are even more ridiculous:
011
Ignacio Castano @icastano.bsky.social · 26/05/2026
~10× faster and higher quality.
141
Ignacio Castano @icastano.bsky.social · 23/05/2026
Texture2D compressed = Spark.EncodeTexture(source, SparkFormat.RGB); Integrating Spark in your games has never been easier. Coming next week.
050
Ignacio Castano @icastano.bsky.social · 14/05/2026
Very soft hardware. Fascinating.
000
Ignacio Castano @icastano.bsky.social · 05/05/2026
Loading images is one of the most fundamental things a browser does. It turns out that doing it efficiently from JavaScript is an open problem. There are multiple APIs available and the right choice depends on the browser you are targeting. www.ludicon.com/castano/blog...
ludicon.com
Image Loading on the Web
You would think that loading images in the browser is a solved problem. After all, websites are basically composed of text and images. Turns out that loading images from JavaScript to use in WebGL/...
1203
Ignacio Castano @icastano.bsky.social · 25/04/2026
It's not too bad compared to ASTC and considering a lot of it is shared with lossless. Also, I suspect mobile decodes to a cache, rather than keeping data compressed. On PC texture decoders are 4x duplicated for bilinear filtering. BTW, this little app is using your sokol libs and imgui :)
010
Ignacio Castano @icastano.bsky.social · 24/04/2026
I spent some time reverse-engineering Apple's Lossy texture format. It wasn't as simple as I originally thought, and some of the details surprised me. Check it out! www.ludicon.com/castano/blog...
ludicon.com
Metal Lossy Compression Format
The Apple Lossy compression format was introduced in the A15 and M2 chipsets (which share the same GPU generation) and it enables sampling and rendering to textures with a 1:2 compression ratio. The f...
16320
Ignacio Castano @icastano.bsky.social · 24/04/2026
We need to chat some day. I'd love to hear how you end up in these collaborations.
100
Ignacio Castano @icastano.bsky.social · 15/04/2026
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...
ludicon.com
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...
072
Ignacio Castano @icastano.bsky.social · 14/04/2026
Infinite Flight 26.1 is out. Spark is powering the new content pipeline under the hood. Great to see it shipping!
040
Ignacio Castano @icastano.bsky.social · 11/04/2026
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
youtube.com
3D on the Web 2026 - spark.js glTF Demo and Real Time Texture Compression
YouTube video by The Khronos Group
030
Ignacio Castano @icastano.bsky.social · 11/04/2026
20% faster texture encoding on Metal? Leverage heap aliasing to emulate resource casting and skip the blit. www.ludicon.com/castano/blog...
ludicon.com
Writing to Compressed Textures in Metal
Writing to Compressed Textures in Metal using heap aliasing.
1132
Ignacio Castano @icastano.bsky.social · 28/03/2026
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.
110
Ignacio Castano @icastano.bsky.social · 28/03/2026
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...
ludicon.com
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...
272
Ignacio Castano @icastano.bsky.social · 09/03/2026
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.
031
Ignacio Castano @icastano.bsky.social · 05/03/2026
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
ludicon.com
Announcing spark.js 0.1
I'm excited to announce spark.js 0.1, now with WebGL support!
0152
Ignacio Castano @icastano.bsky.social · 25/02/2026
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.
100
Ignacio Castano @icastano.bsky.social · 24/02/2026
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.
100