Mike Turitzin
@miketuritzin.bsky.social
370 followers 560 following 290 posts
Exploring. ~ Past: rendering lead @ Figma, creator of PARTICULATE for PC VR, founder @ Workflowy, search engine backend @ Google, Quake modder miketuritzin.com
Posts Media Videos Starter Packs
Pinned
miketuritzin.bsky.social
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.
miketuritzin.bsky.social
Good ideas. I haven't thought about the "mound" part too much yet but you're right there is definitely interesting design space there.
miketuritzin.bsky.social
Ha, good question. The end game is ... a game. This started as a technical exploration, and right now I'm putting together a video on what I've built so far, so I'm re-exploring some older stuff for the video.

Then it's full steam on game dev!
miketuritzin.bsky.social
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).
miketuritzin.bsky.social
Anyway, I'm glad this is done, as it was a pain in the ass to implement :)

/end
miketuritzin.bsky.social
It's also worth mentioning that the clipmap LOD I use for SDF rendering added more complexity to this and I had to rethink my approach a couple times.

Basically, you can only render LODs to the cached shadow map that are guaranteed to be available within its footprint.

7/
miketuritzin.bsky.social
The general approach I took was inspired by this recent presentation on Indiana Jones and the Great Circle (link is to the relevant timestamp):

youtube.com/watch?v=0QYE...

They also time-slice updates to the shadow map, which I don't do currently.

6/
REAC 2025: Pushing 60hz. Shipping Indiana Jones and The Great Circle.
YouTube video by Rendering Engine Architecture Conference
youtube.com
miketuritzin.bsky.social
I'm not currently rendering any non-SDF geometry, but the plan is to render that on top of the SDF shadow maps each frame, as it will be much cheaper to render. The SDF shadow maps thus don't need to be re-rendered even if other parts of the scene are changing.

5/
miketuritzin.bsky.social
The net effect of this is that shadow map rendering is generally taking less than 0.5ms per frame.

I was worried about the cost of shadows because ray-marching 3D textures (as the SDF is rendered) is not particularly cheap. This solution makes shadows quite cheap.

4/
miketuritzin.bsky.social
When the camera moves, the cascades are re-rendered in chunks. I could scroll the new chunks in smoothly, but for now they just pop in.

Any modifications to the SDF are projected into cascade space, and only the affected rectangle is re-rendered.

3/
miketuritzin.bsky.social
This video shows the world-space cascades centered around the camera. If the camera hasn't moved outside of the current shadow chunk and the (SDF) scene hasn't changed, no shadow map rendering happens at all.

2/
miketuritzin.bsky.social
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/
miketuritzin.bsky.social
I haven't used either of these but I am intrigued in particular by NVRHI.
miketuritzin.bsky.social
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 ..
miketuritzin.bsky.social
That should be "creates a moat"
miketuritzin.bsky.social
Yeah, 100% agree on the strength of the design and look/feel of Teardown. My point is more that technical difficulty opens doors to new designs and creates a "most", not that it is a guarantee of success.
miketuritzin.bsky.social
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.
miketuritzin.bsky.social
(I'm actually eval'ing just the first couple of octaves of noise used to generate the terrain SDF, which is good enough for this approximation.)
miketuritzin.bsky.social
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!
miketuritzin.bsky.social
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.
miketuritzin.bsky.social
I'm still dealing with an issue regarding how shadow map updating interacts with the SDF LOD system - will write up more about how things work when that's fixed!
miketuritzin.bsky.social
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!