Oliver Franzke
banner
p1xelcoder.bsky.social
Oliver Franzke
@p1xelcoder.bsky.social
I'm making colored pixels for Double Fine Productions. Lead Programmer of Broken Age. Also worked on Keeper and the remastered versions of Grim, DotT, FT and Monkey Island.
We do not use hardware raytracing on any platform.
November 13, 2025 at 9:39 AM
For us it was important to still support regular meshes and that the morphs integrate well into a world full of Nanite objects. :)
November 13, 2025 at 9:21 AM
Yes Dreams also used distance fields as well as they had similar constraints. Alex did a excellent talk at SIGGRAPH about it: advances.realtimerendering.com/s2015/mmalex...
advances.realtimerendering.com
November 13, 2025 at 9:17 AM
In case you were wondering how these are rendered here is a visualization I spend way too much time on. :)
bsky.app/profile/p1xe...
I’ve talked about how Keeper’s morphs use distance fields (DFs) as their surface representation. But if there are no polys, how do we render them? A DF gives the distance to the nearest surface at any point, which we can exploit for rendering by marching along the view ray until we hit the surface.
November 13, 2025 at 8:23 AM
Please note that the yellow'ish surface in the illustration doesn't really exist. All we know is the distance from the surface, so we march until we get to the "iso threshold".
November 12, 2025 at 6:50 PM
This method is called "sphere tracing". It exploits the fact that we know for sure that there is no object in the sphere with radius d (distance to closest surface) at the current location. This decreases the necessary ray marching steps dramatically and makes it feasible to use implicit surfaces.
November 12, 2025 at 6:48 PM
We called these "Lumen Virtual Lights". With MegaLights they probably won't see much use in future projects though. :)
November 12, 2025 at 12:45 PM
That's correct. It works surprisingly well and didn't really degrade performance that much. :)
November 12, 2025 at 12:43 PM
Absolutely!
November 11, 2025 at 8:27 PM
I agree. This is mostly why I didn't stay in academia to come back to the industry. :)
November 11, 2025 at 7:21 PM
I'm glad that my little visualization helped to illustrate how distance fields work. :)
November 11, 2025 at 7:18 PM
I do want to stress though that the morphs in keeper do not use meshing or in other words when objects combine / blend / separate no new mesh is computed for rendering, mostly because it would be prohibitively slow for the resolution we need. I'll talk about how we render the morph surfaces soon.
November 11, 2025 at 7:17 PM
You can see this nicely in this closeup. Notice how the number and orientation of the edges changes on the left side as both meshes are merged.
November 11, 2025 at 7:15 PM
The topology of my madness is a infinitely regressing manifold! Haha.
November 11, 2025 at 8:13 AM
For the implicit surface? This is done using the distance field gradient.
November 10, 2025 at 8:51 PM
Hehe. Clay... the original implicit surface representation. :)
November 10, 2025 at 8:08 PM
Of course implicit surfaces representations have other problem. I'll talk about these issues in the future.
November 10, 2025 at 8:03 PM