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
~ Past: rendering lead @figma.com, indie VR dev, founder @ Workflowy, search backend @ Google, Quake modder
miketuritzin.com
Pinned
Playing around with a "tunnel gun" that can open a tunnel in front of you that can be looked into or moved through.
This type of thing is really simple in my engine - just spawn an SDF capsule subtraction that is locked to the player's view.
This type of thing is really simple in my engine - just spawn an SDF capsule subtraction that is locked to the player's view.
New take on the tunnel gun:
Make a tunnel, walk through it, and then close it up behind you.
Going to experiment with this for gameplay in a mining context.
Make a tunnel, walk through it, and then close it up behind you.
Going to experiment with this for gameplay in a mining context.
November 7, 2025 at 8:41 PM
New take on the tunnel gun:
Make a tunnel, walk through it, and then close it up behind you.
Going to experiment with this for gameplay in a mining context.
Make a tunnel, walk through it, and then close it up behind you.
Going to experiment with this for gameplay in a mining context.
Demo of bilinear interpolation of SDF samples:
- Negative (interior) samples of the analytic SDF are blue, positive (exterior) samples are orange.
- Circles are drawn around samples to show distance magnitude.
- Intermediate bilinear interp samples / segments are drawn.
1/
- Negative (interior) samples of the analytic SDF are blue, positive (exterior) samples are orange.
- Circles are drawn around samples to show distance magnitude.
- Intermediate bilinear interp samples / segments are drawn.
1/
November 5, 2025 at 10:25 PM
Demo of bilinear interpolation of SDF samples:
- Negative (interior) samples of the analytic SDF are blue, positive (exterior) samples are orange.
- Circles are drawn around samples to show distance magnitude.
- Intermediate bilinear interp samples / segments are drawn.
1/
- Negative (interior) samples of the analytic SDF are blue, positive (exterior) samples are orange.
- Circles are drawn around samples to show distance magnitude.
- Intermediate bilinear interp samples / segments are drawn.
1/
Making an animation illustrating sparse allocation of SDF bricks:
- White line is the analytic SDF curve.
- Sparsely-allocated cells (and distance samples) are shaded.
- Yellow line in the reconstructed SDF curve from cached samples (via bilinear interpolation of distances).
- White line is the analytic SDF curve.
- Sparsely-allocated cells (and distance samples) are shaded.
- Yellow line in the reconstructed SDF curve from cached samples (via bilinear interpolation of distances).
October 30, 2025 at 7:33 PM
Making an animation illustrating sparse allocation of SDF bricks:
- White line is the analytic SDF curve.
- Sparsely-allocated cells (and distance samples) are shaded.
- Yellow line in the reconstructed SDF curve from cached samples (via bilinear interpolation of distances).
- White line is the analytic SDF curve.
- Sparsely-allocated cells (and distance samples) are shaded.
- Yellow line in the reconstructed SDF curve from cached samples (via bilinear interpolation of distances).
Just learned that the equivalent of "warp"/"wave" in ispc is a "gang".
"Gangs of Program Instances" has a certain menacing ring to it 😁
"Gangs of Program Instances" has a certain menacing ring to it 😁
October 30, 2025 at 5:49 PM
Just learned that the equivalent of "warp"/"wave" in ispc is a "gang".
"Gangs of Program Instances" has a certain menacing ring to it 😁
"Gangs of Program Instances" has a certain menacing ring to it 😁
My foes when I confront them
October 28, 2025 at 6:38 PM
My foes when I confront them
A lesson I've learned: digging holes into shiny red stuff always ends up looking pretty gross🤨
October 22, 2025 at 11:58 PM
A lesson I've learned: digging holes into shiny red stuff always ends up looking pretty gross🤨
I want to save/load scene data in my engine, but I don't want to implement a real system for this yet (partly laziness, partly don't want to commit to a design).
So my quick solution is to dump literal C++ code that creates all scene objects. Then copy/paste into my init code😂
So my quick solution is to dump literal C++ code that creates all scene objects. Then copy/paste into my init code😂
October 16, 2025 at 7:58 PM
I want to save/load scene data in my engine, but I don't want to implement a real system for this yet (partly laziness, partly don't want to commit to a design).
So my quick solution is to dump literal C++ code that creates all scene objects. Then copy/paste into my init code😂
So my quick solution is to dump literal C++ code that creates all scene objects. Then copy/paste into my init code😂
From my notes about stuff to add in the video about my engine (lol)
October 14, 2025 at 9:55 PM
From my notes about stuff to add in the video about my engine (lol)
Playing around with a "tunnel gun" that can open a tunnel in front of you that can be looked into or moved through.
This type of thing is really simple in my engine - just spawn an SDF capsule subtraction that is locked to the player's view.
This type of thing is really simple in my engine - just spawn an SDF capsule subtraction that is locked to the player's view.
October 14, 2025 at 7:57 PM
Playing around with a "tunnel gun" that can open a tunnel in front of you that can be looked into or moved through.
This type of thing is really simple in my engine - just spawn an SDF capsule subtraction that is locked to the player's view.
This type of thing is really simple in my engine - just spawn an SDF capsule subtraction that is locked to the player's view.
Playing around more with the Donut County vibes - but this time you have both a portable hole and a portable mound.
And the hole grows bigger when it consumes cubes, because that's what holes do (obviously).
And the hole grows bigger when it consumes cubes, because that's what holes do (obviously).
October 9, 2025 at 9:42 PM
Playing around more with the Donut County vibes - but this time you have both a portable hole and a portable mound.
And the hole grows bigger when it consumes cubes, because that's what holes do (obviously).
And the hole grows bigger when it consumes cubes, because that's what holes do (obviously).
Feeding the hole.
October 9, 2025 at 1:58 AM
Feeding the hole.
Herding cubes, HD remaster.
October 2, 2025 at 7:53 PM
Herding cubes, HD remaster.
Finished work on directional light shadows (for now!).
This took a while because I didn't implement "normal" cascaded shadow maps (via frustum slices) but rather world-space cascades that are updated in chunks as the camera moves, and incrementally when the scene changes.
1/
This took a while because I didn't implement "normal" cascaded shadow maps (via frustum slices) but rather world-space cascades that are updated in chunks as the camera moves, and incrementally when the scene changes.
1/
October 1, 2025 at 9:15 PM
Finished work on directional light shadows (for now!).
This took a while because I didn't implement "normal" cascaded shadow maps (via frustum slices) but rather world-space cascades that are updated in chunks as the camera moves, and incrementally when the scene changes.
1/
This took a while because I didn't implement "normal" cascaded shadow maps (via frustum slices) but rather world-space cascades that are updated in chunks as the camera moves, and incrementally when the scene changes.
1/
I found that in addition to NVRHI (which I discussed previously on here) NVIDIA, somewhat confusingly, also provides NRI ("NVIDIA Render Interface").
NRI is intended to be a low-level interface wrapping D3D12 and Vulkan, whereas NVRHI also wraps these APIs but simplifies some ..
NRI is intended to be a low-level interface wrapping D3D12 and Vulkan, whereas NVRHI also wraps these APIs but simplifies some ..
October 1, 2025 at 7:25 PM
I found that in addition to NVRHI (which I discussed previously on here) NVIDIA, somewhat confusingly, also provides NRI ("NVIDIA Render Interface").
NRI is intended to be a low-level interface wrapping D3D12 and Vulkan, whereas NVRHI also wraps these APIs but simplifies some ..
NRI is intended to be a low-level interface wrapping D3D12 and Vulkan, whereas NVRHI also wraps these APIs but simplifies some ..
Teardown was released 5 years ago, has sold millions of copies, and was acquired (super rare for an indie game) - and yet it still has effectively no clones/competitors.
Shows how powerful having insane technical skills can be.
Shows how powerful having insane technical skills can be.
September 27, 2025 at 3:24 AM
Teardown was released 5 years ago, has sold millions of copies, and was acquired (super rare for an indie game) - and yet it still has effectively no clones/competitors.
Shows how powerful having insane technical skills can be.
Shows how powerful having insane technical skills can be.
As a kludge for lack of global illumination (which I plan to add eventually), I am attenuating the visibility of ambient lighting (the skybox) deeper within the terrain.
One of the benefits of using SDFs - just eval the terrain SDF to get distance to surface for any point!
One of the benefits of using SDFs - just eval the terrain SDF to get distance to surface for any point!
September 25, 2025 at 6:36 PM
As a kludge for lack of global illumination (which I plan to add eventually), I am attenuating the visibility of ambient lighting (the skybox) deeper within the terrain.
One of the benefits of using SDFs - just eval the terrain SDF to get distance to surface for any point!
One of the benefits of using SDFs - just eval the terrain SDF to get distance to surface for any point!
Experimenting with a SDF material blend function that is "stamps" the material volumetrically.
The previous function I was using (which is the common one) blends the material around the surface influence area, and so would have no effect below ground.
The previous function I was using (which is the common one) blends the material around the surface influence area, and so would have no effect below ground.
September 12, 2025 at 9:13 PM
Experimenting with a SDF material blend function that is "stamps" the material volumetrically.
The previous function I was using (which is the common one) blends the material around the surface influence area, and so would have no effect below ground.
The previous function I was using (which is the common one) blends the material around the surface influence area, and so would have no effect below ground.
Almost finished implementing shadows.
This ended up being a bigger project than expected, as I decided to render world-space shadow map cascades that update/"scroll" incrementally as the camera moves.
The benefit of this is that very little work needs to be done every frame!
This ended up being a bigger project than expected, as I decided to render world-space shadow map cascades that update/"scroll" incrementally as the camera moves.
The benefit of this is that very little work needs to be done every frame!
September 11, 2025 at 8:08 PM
Almost finished implementing shadows.
This ended up being a bigger project than expected, as I decided to render world-space shadow map cascades that update/"scroll" incrementally as the camera moves.
The benefit of this is that very little work needs to be done every frame!
This ended up being a bigger project than expected, as I decided to render world-space shadow map cascades that update/"scroll" incrementally as the camera moves.
The benefit of this is that very little work needs to be done every frame!
Reposted by Mike Turitzin
You mock, but this is actually art.
September 4, 2025 at 4:07 PM
You mock, but this is actually art.
Prowling around the SDF yards after dark, desecrating spheres with reckless abandon.
September 3, 2025 at 9:01 PM
Prowling around the SDF yards after dark, desecrating spheres with reckless abandon.
Playing with RenderDoc's shader debugger, and the "Run forwards to NaN/Inf" feature is incredibly useful and got me to the problem in one click.
[a story continued... ⬇️ :) ]
[a story continued... ⬇️ :) ]
September 2, 2025 at 1:54 AM
Playing with RenderDoc's shader debugger, and the "Run forwards to NaN/Inf" feature is incredibly useful and got me to the problem in one click.
[a story continued... ⬇️ :) ]
[a story continued... ⬇️ :) ]
Nicely-explained and illustrated article on making a spherical Minecraft-style blocky world.
(with playable web demo)
www.bowerbyte.com/posts/blocky...
(with playable web demo)
www.bowerbyte.com/posts/blocky...
August 28, 2025 at 5:47 PM
Nicely-explained and illustrated article on making a spherical Minecraft-style blocky world.
(with playable web demo)
www.bowerbyte.com/posts/blocky...
(with playable web demo)
www.bowerbyte.com/posts/blocky...
TIL the concept of a "net" of a polyhedron - the way its faces can be flattened and then "folded" back together.
These are 11 nets of a cube!
en.wikipedia.org/wiki/Net_(po...
These are 11 nets of a cube!
en.wikipedia.org/wiki/Net_(po...
August 28, 2025 at 5:39 PM
TIL the concept of a "net" of a polyhedron - the way its faces can be flattened and then "folded" back together.
These are 11 nets of a cube!
en.wikipedia.org/wiki/Net_(po...
These are 11 nets of a cube!
en.wikipedia.org/wiki/Net_(po...
While searching around for solutions to geometric problems, I periodically end up on this big list of PDFs written by Dave Eberly that cover a lot of topics rigorously.
Recommended!
www.geometrictools.com/Documentatio...
Recommended!
www.geometrictools.com/Documentatio...
Geometric Tools: Documentation
www.geometrictools.com
August 26, 2025 at 6:23 PM
While searching around for solutions to geometric problems, I periodically end up on this big list of PDFs written by Dave Eberly that cover a lot of topics rigorously.
Recommended!
www.geometrictools.com/Documentatio...
Recommended!
www.geometrictools.com/Documentatio...
Great article by @aras-p.bsky.social comparing the perf of rasterizing single-pixel triangles vs. compute-shader splatting.
The most fascinating part of this is how much different GPUs differ in comparative perf, and how they respond to different scenarios.
aras-p.info/blog/2025/08...
The most fascinating part of this is how much different GPUs differ in comparative perf, and how they respond to different scenarios.
aras-p.info/blog/2025/08...
This many points is surely out of scope! · Aras' website
aras-p.info
August 26, 2025 at 6:13 PM
Great article by @aras-p.bsky.social comparing the perf of rasterizing single-pixel triangles vs. compute-shader splatting.
The most fascinating part of this is how much different GPUs differ in comparative perf, and how they respond to different scenarios.
aras-p.info/blog/2025/08...
The most fascinating part of this is how much different GPUs differ in comparative perf, and how they respond to different scenarios.
aras-p.info/blog/2025/08...