Sign in

Mike Turitzin

@miketuritzin.bsky.social
1.5K followers 602 following 644 posts

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

PostsRepliesMedia
Mike Turitzin @miketuritzin.bsky.social · 23/09/2026
An interesting thing that distorts the online discourse on AI in software engineering: A lot of SWEs think (sadly accurately right now) that they will be unemployable if they express any view other than optimism and excitement for AI progress.
3201
Mike Turitzin @miketuritzin.bsky.social · 17/09/2026
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.)
4585
Mike Turitzin @miketuritzin.bsky.social · 15/09/2026
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
1445
Reposted by Mike Turitzin
Terence Tao @teorth.bsky.social · 11/09/2026
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-...
mathandai.org
Declaration — Math and AI
Read the declaration and add your name.
422055930
Mike Turitzin @miketuritzin.bsky.social · 10/09/2026
Playing with higher explosion knock-back forces :)
1160
Mike Turitzin @miketuritzin.bsky.social · 08/09/2026
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.
1233
Mike Turitzin @miketuritzin.bsky.social · 03/09/2026
Boring into metal using a special tool.
0362
Mike Turitzin @miketuritzin.bsky.social · 03/09/2026
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...
blog.doubleword.ai
What happens when a GPU reads memory | Doubleword
Following an LDG.E SASS instruction through the hardware units in an RTX 4090.
1247
Mike Turitzin @miketuritzin.bsky.social · 01/09/2026
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
2251
Mike Turitzin @miketuritzin.bsky.social · 27/08/2026
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.)
1240
Mike Turitzin @miketuritzin.bsky.social · 27/08/2026
The new version of Enshrouded has replaced triangle meshes with SDF bricks for terrain 👀 youtu.be/4AQycxtpPno?...
youtu.be
Enshrouded - Performance Improvements for 1.0
YouTube video by Enshrouded
56716
Mike Turitzin @miketuritzin.bsky.social · 26/08/2026
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...
youtube.com
How is this frame of Animal Well rendered?
YouTube video by FibbWare
1567
Mike Turitzin @miketuritzin.bsky.social · 21/08/2026
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/
1131
Mike Turitzin @miketuritzin.bsky.social · 18/08/2026
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/
1222
Mike Turitzin @miketuritzin.bsky.social · 13/08/2026
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/
1152
Mike Turitzin @miketuritzin.bsky.social · 12/08/2026
Great idea! I am 100% going to do this very soon.
030
Mike Turitzin @miketuritzin.bsky.social · 11/08/2026
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/
1280
Mike Turitzin @miketuritzin.bsky.social · 07/08/2026
A couple shots from the video I posted yesterday, as the low video (re)encoding bitrate completely nuked most of the texture detail
0150
Mike Turitzin @miketuritzin.bsky.social · 06/08/2026
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/
4391
Mike Turitzin @miketuritzin.bsky.social · 30/07/2026
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.
0131
Mike Turitzin @miketuritzin.bsky.social · 30/07/2026
9/10 Reddit users agree - barycentric coordinates are useful. Thanks AI!
5384
Mike Turitzin @miketuritzin.bsky.social · 30/07/2026
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,
390
Mike Turitzin @miketuritzin.bsky.social · 25/07/2026
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.
2375
Mike Turitzin @miketuritzin.bsky.social · 23/07/2026
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]
3110
Mike Turitzin @miketuritzin.bsky.social · 23/07/2026
A laser to fire while defending the base. Surely no inappropriate pictures will be drawn using this laser. Surely.
2120
Mike Turitzin @miketuritzin.bsky.social · 21/07/2026
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.)
0111
Mike Turitzin @miketuritzin.bsky.social · 18/07/2026
The NPR Tiny Desk concert we have been waiting for www.youtube.com/watch?v=e81L...
youtube.com
Napalm Death: Tiny Desk Concert
YouTube video by NPR Music
080
Mike Turitzin @miketuritzin.bsky.social · 17/07/2026
The constant focus on "productivity" (and "output") lately is driving me a little insane. What's the end result you're trying to achieve? (and why is that worthwhile?) What results show you're getting there more quickly?
1271
Mike Turitzin @miketuritzin.bsky.social · 16/07/2026
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/
3381
Mike Turitzin @miketuritzin.bsky.social · 15/07/2026
I've seen significant differences in shader execution times several times recently from just reordering code blocks (this is obviously non-dependent code). This is on NVIDIA hardware. Interesting to see, I suspect it has to do with hiding read latency with ALU work, but would ..
4190
Mike Turitzin @miketuritzin.bsky.social · 15/07/2026
Trying out a couple new 3D->1D hash functions for my terrain generation RNG, inspired by this paper: jcgt.org/published/00... The possibility of losing my now-fondly-familiar default seed terrain makes me a bit sad though 🥲
jcgt.org
0181
Reposted by Mike Turitzin
ceruleite.bsky.social @ceruleite.bsky.social · 15/07/2026
2026 Advances in Real-Time Rendering in Games course line up is here - check it out! advances.realtimerendering.com
16127
Mike Turitzin @miketuritzin.bsky.social · 08/07/2026
Something that just clicked for me - In the same way that dividing by distance-to-origin (L2 norm) projects a point onto the unit circle/sphere: Dividing by L1 norm projects onto the unit diamond/octahedron Dividing by L-infinity norm projects onto the unit square/cube cont.
2251
Reposted by Mike Turitzin
mmalex @mmalex.bsky.social · 06/07/2026
my #1 grizzly beard protip for (game) dev is: if you have a bug that you dont understand the cause of immediately, dont try to fix it; add & iterate visualization / inspection tools until the cause is plain to see. the accumulation of 'observability' in your system's state will pay off many times
1226242
Mike Turitzin @miketuritzin.bsky.social · 06/07/2026
Just got a major SDF ray-marching perf improvement based on a simple tweak: increase the minimum step size above the epsilon required to stop marching. This seems to work really well with my setup. Doesn't have the downside of visibly "bloating" silhouette edges (which ... 1/
2230
Mike Turitzin @miketuritzin.bsky.social · 01/07/2026
Because ray-marching SDF bricks is so comparatively expensive, with two-pass occlusion culling I'm generally rendering frames faster the more other stuff I add. (Disoccluded bricks are drawn in magenta.)
3271
Mike Turitzin @miketuritzin.bsky.social · 30/06/2026
Kind of obvious when you think about it, but it was cool to realize that I don't need to record position history to draw artillery trails, as the same closed-form trajectory equation can be used to "rewind time" for each shot to generate its trail positions.
1290
Mike Turitzin @miketuritzin.bsky.social · 25/06/2026
I'm not using it every day depending on what I'm doing, but man, hot-reload of C++ (using Live++) is a life-saver for gameplay iteration. I remember back when I was building my VR app, I would not only have to close/compile/run but also often take the headset off and on. Oof.
3202
Mike Turitzin @miketuritzin.bsky.social · 23/06/2026
The depth and thoroughness of @bgolus.bsky.social articles, when you are blessed with one relevant to what you're currently doing. (In this case, using normal maps with triplanar texture mapping.) bgolus.medium.com/normal-mappi...
bgolus.medium.com
Normal Mapping for a Triplanar Shader
Triplanar mapping is a great solution for dealing with texturing on complex geometry that is difficult or impossible to use traditional UVs…
1406
Mike Turitzin @miketuritzin.bsky.social · 18/06/2026
If you graph the representable floating point values on the 2D plane, you get something that looks like clipmaps/cascades. Therefore floating point representations are LODs for real numbers🤔 (also shows why floating point for absolute positions is bad)
1462
Mike Turitzin @miketuritzin.bsky.social · 17/06/2026
Dawn/Chrome now supports WebGPU "immediates" (aka. push constants). Curious of the perf impact vs. per-draw uniform buffer bindings via dynamic offsets. (Haven't used push constants in other APIs.) Bindless would/will also make this a lot more useful. developer.chrome.com/blog/new-in-...
developer.chrome.com
What's New in WebGPU (Chrome 149-150)  |  Blog  |  Chrome for Developers
Immediates and stricter validation for transient attachments.
0110
Mike Turitzin @miketuritzin.bsky.social · 16/06/2026
This is a clever use of 32-bit atomics for depth+color rasterization output that I hadn't thought of. (I hadn't read the FreePipe paper; this summary is from @m-schuetz.bsky.social's recent CuRast paper: github.com/m-schuetz/Cu... )
1103
Mike Turitzin @miketuritzin.bsky.social · 10/06/2026
Really love this project and article - a handmade early-mid-90s-ish FPS. The procedural pixel art "gibbing" and particle effects are pretty cool, among other stuff staniks.github.io/articles/cat...
staniks.github.io
Catlantean 3D - Making Graphics Like It's 1993
A deep dive into the asset creation pipeline for Catlantean 3D.
1345
Mike Turitzin @miketuritzin.bsky.social · 04/06/2026
Playing with my dolls in the Jolt Physics samples
1210
Mike Turitzin @miketuritzin.bsky.social · 03/06/2026
I am Totally Unconcerned™
3331
Mike Turitzin @miketuritzin.bsky.social · 02/06/2026
Experimenting with having enemies turn to full rigid bodies when damaged and then recover after bouncing around. It's pretty entertaining how they pop back up.
4564
Mike Turitzin @miketuritzin.bsky.social · 28/05/2026
Now that I am rendering meshes that need to cast shadows (sorry SDF purists!!), I had to update the world-space caching scheme I use for sun shadows. The SDF shadows are cached in tiles and incrementally redrawn as geometry changes. This is very cheap, which is ... 1/
1380
Mike Turitzin @miketuritzin.bsky.social · 26/05/2026
Attack of the capsules! They are considerably more menacing than I was expecting, especially from inside the dome.
2371
Mike Turitzin @miketuritzin.bsky.social · 22/05/2026
Interesting new SDF-related paper just dropped: "Dual Contouring of Signed Distance Data" (SIGGRAPH 2026) gatc.cs.columbia.edu/projects/dua...
gatc.cs.columbia.edu
Dual Contouring of Signed Distance Data
Dual Contouring of Signed Distance Data project page.
2446
Mike Turitzin @miketuritzin.bsky.social · 21/05/2026
I get a little dopamine hit when I use a feature of rendering APIs that I haven't used before. Just used viewport depth-range for the first time (not just the default [0,1]) as a way of rendering to a cached shadow map, but with the far plane pulled in for additional culling. ..
2130