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
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
*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
If you've ever worked with font rendering, then you'll know that it's the most impressive to get the fonts looking good at low sizes, because then hinting comes into play, which is where FreeType shines over other simpler libraries.
June 12, 2025 at 8:51 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
(cc @omershapira.com) Fun fact, this is also useful in computer graphics.

The complex IOR can be converted into an F0 (Fresnel reflectance value of a ray aligned with the normal). This can be used in Schlick's approximation. en.wikipedia.org/wiki/Schlick...
June 4, 2025 at 12:57 PM
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
Spotted some DirectX code in the movie Mars Express. www.imdb.com/title/tt2691...
January 15, 2025 at 8:50 PM
✅ Toy 2, differentiable rendering ( #PBR + #ML ): Learning the diffuse and roughness map.

This was way harder than learning just the diffuse map given a fixed roughness, and I learnt a LOT along the way.
December 7, 2024 at 10:28 PM
✅ Toy 1, PBR + ML: Learning the diffuse map
Ground truth: 128x128 diffuse map fed into disney diffuse + ggx lambert
Inference: 128x128 weights map fed into same model. L2 loss, learnt on a laptop GPU in 13 seconds.
Visually identical results.
November 14, 2024 at 11:05 PM
Git Fork always freezes for several minutes when I revert or stage a few thousand files. Took a leaf out of @sschoener.bsky.social 's book and Superluminaled it.

Turns out almost all of that time is taken on a UI update, 70% of which is an Array.ContainsItem check. Smells like an easy fix!
November 11, 2024 at 9:45 AM
Training my first ever original ML model, and finally got a dropping loss function. It was quite hard to get to this point, figuring out a workable learning rate, input data, and batch size.

I still can't run on the GPU for some reason, and my final output is still garbage, so lots to do.
November 10, 2024 at 9:15 PM
Did some physically based rendering in numpy. GGX specular + Disney diffuse.

Textures from matlib.gpuopen.com/main/materia...
November 2, 2024 at 11:06 PM