Apoorva Joshi
apoorvaj.io
Apoorva Joshi
@apoorvaj.io
Computer graphics, systems programming, general methods.

Staff graphics engineer at @unity.com. Formerly Playdead, NVIDIA, Microsoft.

apoorvaj.io

📍Copenhagen
Reposted by Apoorva Joshi
I watch @smartereveryday.bsky.social ’s video on the nuclear power plant and there was one offhand comment by someone who works there about how “nuclear radiation” (specifically Cherenkov radiation) is blue, but “everyone thinks it’s green”.
November 12, 2025 at 10:32 AM
New blog post: Stop over-engineering static websites

apoorvaj.io/stop-overeng...
Stop over-engineering static websites
apoorvaj.io
October 4, 2025 at 5:16 PM
Reposted by Apoorva Joshi
https://mitchellh.com/writing/zig-builds-getting-faster
Zig Builds Are Getting Faster – Mitchell Hashimoto
https://mitchellh.com/writing/zig-builds-getting-faster
mitchellh.com
October 4, 2025 at 9:58 AM
I feel that Claude Code + Sonnet writes way more tasteful Zig code than it does JavaScript. JS is littered with dumb defensive programming, with null checks or conditions where here should be asserts.

My theory is that this is because of the delta in the quality of Zig vs JS human training data.
October 1, 2025 at 10:39 PM
Insanely well-made video on EUV photolithography: www.youtube.com/watch?v=B248...
How are Billions of Nanoscopic Transistors Made into a Microchip? EUV Photolithography 🛠️⚙️🤯
YouTube video by Branch Education
www.youtube.com
September 22, 2025 at 9:02 PM
New blog post: Testing that works

apoorvaj.io/testing-that...
Testing that works
apoorvaj.io
September 18, 2025 at 9:48 PM
This was an easy one to implement.

Then I started on white balance, fell into a rabbit hole of black body radiation and color spaces, and then noped out for a bit.
Papaya now has exposure, contrast, and saturation controls.

papaya.io/blog#color-a...
August 25, 2025 at 8:46 PM
Holy crap, #ziglang 0.14 -> 0.15.1 is quite the breaking change. This is literally 5% of @papaya.io's Zig codebase.
August 21, 2025 at 7:14 PM
I'm really proud of this.

1. Unlike many other web-based image editors, papaya.io rasterizes text in WebAssembly. This means that text rendering looks the same across browsers or OSes.

2. This means that I had to re-implement a text box, which was not fun.

...
After three months of work, text editing is now live!

papaya.io
August 15, 2025 at 10:31 PM
Reposted by Apoorva Joshi
A new article on my site: Approximate first principal component

It describes simple trick to estimate the direction of most spread of a bunch of points without running a full PCA. Includes my Python re-implementation and plots of some quick tests.

30fps.net/pages/approx...
July 17, 2025 at 5:56 PM
Reposted by Apoorva Joshi
Zig's New Async I/O

https://kristoff.it/blog/zig-new-async-io/
Zig's New Async I/O | Loris Cro's Blog
https://kristoff.it/blog/zig-new-async-io/
kristoff.it
July 12, 2025 at 10:35 PM
The Zig 2026 roadmap is absolute fire. Andrew and team are playing the long game, and it's really starting to pay off big time—incremental compilation, async await, cross compilation, fuzzing, and more. www.youtube.com/watch?v=x3hO...
Zig Roadmap 2026
YouTube video by Zig SHOWTIME
www.youtube.com
July 4, 2025 at 10:47 PM
*Tin foil hat* Has Google added a special case for Google Docs in Chrome to show the MacOS accent menu in the right spot? It renders out of the window in Firefox, which is what you'd expect to happen when using a hidden textbox to get input. I cannot find a web API do this. Looks like an inside job.
June 20, 2025 at 8:31 PM
Still long way to go, but got the beginnings of IME text composition working in papaya.io. I'm super impressed that @mikkomononen.bsky.social's Skribidi library even has this feature. Here's a video of me typing in '⌥-u' and then 'o' on Mac, which results in 'ö'.
June 15, 2025 at 10:35 PM
Got simplified Chinese and FreeType variable font rendering to work in papaya.io.
June 12, 2025 at 8:48 PM
Multi-script rendering in papaya.io is starting to come together. Here's glyph caching and retrieval across several fonts (including an emoji font)!
June 11, 2025 at 9:09 PM
Added intermingled rendering of Latin and emoji (from different font files) to papaya.io. (Also look at that automatic word-wrapping and left-alignment, courtesy of Skribidi!)
June 9, 2025 at 7:00 PM
Emoji font rendering in papaya.io with @mikkomononen.bsky.social's github.com/memononen/Sk... library.

Next up: intermingling font and emoji rendering.
June 8, 2025 at 8:57 PM
Reposted by Apoorva Joshi
I just published the bidi text stuff I have been working the past months. It's called Skribidi (because all text and font related things need funny name for some reason).

github.com/memononen/Sk...
GitHub - memononen/Skribidi: Nimble bidirectional text stack for UIs
Nimble bidirectional text stack for UIs. Contribute to memononen/Skribidi development by creating an account on GitHub.
github.com
June 5, 2025 at 8:02 AM
Started implementing text rendering for papaya.io. Got FreeType and HarfBuzz compiling to WebAssembly. Here's a demo of kerning working with Roboto.
June 3, 2025 at 10:10 PM
Just relaunched papaya.io — a web-based image editor I've been building on nights and weekends. What's new:

- .ppy file format for local saves
- Automatic browser persistence
- WebP import/export support

Building fast and shipping features regularly. Try it out — feedback very welcome.
May 22, 2025 at 9:29 PM
May 20, 2025 at 9:17 AM
Reposted by Apoorva Joshi
An update, a bit of retrospection, and a call for you, yes, you, to help JCGT a bit: www.realtimerendering.com/blog/jcgt-is...
JCGT is moving along | Real-Time Rendering
www.realtimerendering.com
May 16, 2025 at 5:34 PM
Reposted by Apoorva Joshi
I wrote a blog post about mipmap level selection. pema.dev/2025/05/09/m...
May 10, 2025 at 4:19 PM