Mike Turitzin
banner
miketuritzin.bsky.social
Mike Turitzin
@miketuritzin.bsky.social
Building a game/engine based on signed distance fields

~ Past: rendering lead @figma.com, indie VR dev, founder @ Workflowy, search backend @ Google, Quake modder

miketuritzin.com
Pinned
I just released my video about the engine (and game) I've been working on.

The engine is based on dynamic SDFs, and the video describes how it works and what it makes possible.

Link in the reply!

This is my first YouTube video and it took forever - please repost!
Migrating hordes of Creepy Capsules work to build a tower of their own bodies... who knows their motivations.

(This started as a physics test and was pretty entertaining.)
September 17, 2026 at 12:24 AM
Playing with the probe/tunneling tool to make it more visually interesting - the tunnel wobbles while the probe is active and then "fuses" when you use it
September 15, 2026 at 8:49 PM
Reposted by Mike Turitzin
A group of 25 Fields Medalists, including myself, have made a joint declaration on Math and AI: mathandai.org . We welcome additional signatories. See also this article in the Economist announcing the declaration: www.economist.com/science-and-...
Declaration — Math and AI
Read the declaration and add your name.
mathandai.org
September 11, 2026 at 5:40 PM
Playing with higher explosion knock-back forces :)
September 10, 2026 at 7:03 PM
Another benefit of SDF edit lists:

Rewind changes!

(because every edit is non-destructive)

I'm doing this right now at the end of enemy waves for game balance reasons, but I'll likely play with letting them pile up in some scenarios.
September 8, 2026 at 6:57 PM
Boring into metal using a special tool.
September 3, 2026 at 7:16 PM
One thing I learned from this article is that (on NVIDIA GPUs) 128-byte cache lines are divided into 4 32-byte sectors, which are read independently.

So there's a benefit to reducing random-access reads below the cache-line size, but not below 32 bytes.

blog.doubleword.ai/what-happens...
What happens when a GPU reads memory | Doubleword
Following an LDG.E SASS instruction through the hardware units in an RTX 4090.
blog.doubleword.ai
September 3, 2026 at 5:43 PM
Immediate mode GUI (I use @ocornut.bsky.social's Dear ImGui) and C++ hot-reload is an extremely powerful combination.

Live-coding of UI is like building a Shadertoy - fast visual feedback gets you into a flow state.

I've been using ImGui's "background draw list" functionality (which
September 1, 2026 at 6:27 PM
Making more progress on enemy waves and base defense in my game.

(It uses a roguelike structure combining mining and base defense, with destruction / world modification as a big aspect of both.)
August 27, 2026 at 8:10 PM
The new version of Enshrouded has replaced triangle meshes with SDF bricks for terrain 👀

youtu.be/4AQycxtpPno?...
Enshrouded - Performance Improvements for 1.0
YouTube video by Enshrouded
youtu.be
August 27, 2026 at 4:47 AM
A nice little rendering breakdown of Animal Well, stepping through a frame with RenderDoc.

I love all the zany things that are done in 2D games, and this one is particularly creative.

www.youtube.com/watch?v=Htal...
How is this frame of Animal Well rendered?
YouTube video by FibbWare
www.youtube.com
August 26, 2026 at 3:44 AM
Tried iq's biplanar mapping, which is a cool technique (2 rather than 3 triplanar samples), but ran into issues for regular geometry like a capsule.

There's a singularity where the 3 triplanar weights are equal that extends along the capsule's length in some orientations.

1/
August 21, 2026 at 9:29 PM
It's easy to forget how 'discard' in a fragment shader interacts with automatically-calculated screenspace derivatives (and their use in mip selection for texture sampling).

If you don't handle it correctly, you'll see seams at the discard/no-discard boundary.

1/
August 18, 2026 at 7:20 PM
Just implemented instant flipping between the current and previous shaders (PSOs) after a hot-reload.

This is really simple to implement - just hold onto the previous PSOs after hot-reload, and then add a shortcut to flip between new and old, which is instant!

1/
August 13, 2026 at 8:07 PM
Great idea! I am 100% going to do this very soon.
Unsolicited but fun tip since you mentioned rollback support - keep that last set of PSOs around and add another hotkey that toggles them active, really handy for A/Bs with slim pipeline counts like this :-)
August 12, 2026 at 7:20 PM
Followed my own advice to do the simplest/dumbest implementation, and just (finally) got shader hot-reloading working.

Rather than watching files for changes, tracking dependencies between them, etc., I just implemented a ctrl+R shortcut that reloads ALL shader pipelines ...

1/
August 11, 2026 at 8:30 PM
A couple shots from the video I posted yesterday, as the low video (re)encoding bitrate completely nuked most of the texture detail
August 7, 2026 at 8:26 PM
At long last, SDF material textures are supported in my engine!

I've decided to go for a textural and slightly hand-painted look. Currently using color and normal maps, might consider roughness as well.

1/
August 6, 2026 at 8:06 PM
Another useful property of convex shapes:

A "convex combination" of the vertices of a convex shape (vertex weights that are non-negative and sum to 1) yields a point inside the shape.

Barycentric coordinates of triangles are a specific example of this.
Convex shapes (specifically polyhedra) come up constantly in games and graphics.

A few useful properties:

- A convex polyhedron is the convex hull of its vertices.
- One can also be defined as the intersection of half-spaces defined by a set of planes (one per face).

1/
July 30, 2026 at 5:34 PM
9/10 Reddit users agree - barycentric coordinates are useful. Thanks AI!
July 30, 2026 at 5:26 PM
Taking advantage of Jolt Physics's ability to "cook" its internal binary format to speed up startup times in Debug builds a ton.

It was taking a long time to generate SDF collision mesh chunks on startup for Debug builds in particular. I'd prefer not to have to cache this data,
July 30, 2026 at 12:14 AM
I'm surprised at how often following the thought experiment of "what is the simplest and dumbest way I could solve this problem" saves a ton of work.

AI-assisted coding discourages thinking this way, but I think that can be a trap, as code is still a liability.
July 24, 2026 at 11:05 PM
A cool thing about handling materials via palettes in this way is that you need only "pay for what you use" in terms of material complexity.

So in the common case of a brick that uses only 1 material, no material weights need be cached at all!

[cont]
I'm close to finishing a major rework of how materials are baked in my engine.

Rather than baking material properties directly, I now store a material palette per brick and bake blend weights.

This means that material property blending is "deferred" to render-time, ...

1/
July 23, 2026 at 10:36 PM
A laser to fire while defending the base.

Surely no inappropriate pictures will be drawn using this laser. Surely.
July 23, 2026 at 7:27 PM
Just used De Morgan's law to merge ANDs and ORs of multiple bit-flags into a single atomic-OR.

a & b == ~(~a | ~b)

So NOT the bits you want to AND, then atomic-OR, then NOT the result. The OR'd bits obviously work with no changes.

(Could also do this with atomic-AND.)
July 21, 2026 at 5:51 PM