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.
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.
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
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 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™.
superluminal.eu
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
https://www.ludicon.com/castano/blog/2026/06/spark-for-unity/
t.co
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/...
Also in the demo: procedural virtual texturing. A 256K × 256K texture in 16 MB.
Texture2D compressed = Spark.EncodeTexture(source, SparkFormat.RGB); Integrating Spark in your games has never been easier. Coming next week.
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...
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/...
ludicon.com
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...
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...
ludicon.com
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...
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...
ludicon.com
Infinite Flight 26.1 is out. Spark is powering the new content pipeline under the hood. Great to see it shipping!
Infinite Flight 26.1 is here. 🚀 One of our biggest updates yet, with a new rendering system, new aircraft, and major improvements across the sim. Months of open beta work, now in your hands.
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
3D on the Web 2026 - spark.js glTF Demo and Real Time Texture Compression
YouTube video by The Khronos Group
youtube.com
20% faster texture encoding on Metal? Leverage heap aliasing to emulate resource casting and skip the blit. www.ludicon.com/castano/blog...
Writing to Compressed Textures in Metal
Writing to Compressed Textures in Metal using heap aliasing.
ludicon.com
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...
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...
ludicon.com
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
Announcing spark.js 0.1
I'm excited to announce spark.js 0.1, now with WebGL support!
ludicon.com
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...
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 ...
ludicon.com
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!
"Project Echo" early pre-alpha footage
YouTube video by Molecular Matters
youtube.com
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...
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—…
interplayoflight.wordpress.com
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
An Updated Sponza glTF – Ignacio Castaño
ludicon.com
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
Normal Map Compression Revisited – Ignacio Castaño
ludicon.com
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++.
I think most game dev teams underestimate how damaging slow workflows are to the ultimate quality of their game. If it takes 5 minutes to launch the game and see your changes, I think your game is going to be MUCH worse than the alternate timeline where it took 1 minute
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