Source

Thread

1/ @NOTimothyLottes

_/ Raytastic Friday _
Thinking out of the AABB-ox …
Rather lets press the full on crazy button
“You don’t need to shade or render in screen space at all!”

Branches: 2024-12-20-mcnabbd-now-youre-talking

2/ @NOTimothyLottes

Start with scaling-TAAs (ML or not)
16 fetches to do good reprojection (seriously)
4 in local neighborhood & matching 4 from reprojection
+lot more to do good spatial filtering

With so much work, perhaps it would be better to reconstruct from a different domain?

3/ @NOTimothyLottes

How about reconstructing the player’s view
directly from the environment probe shade cache

Assuming it has good enough density, and shading is impulse (not integrated over probe pixel … aka aliased, like screen space would be with infinite negative mip bias)

4/ @NOTimothyLottes

All env probes must be in one atlas for this to work!
Note probes can have empty space (holes)

And if a probe only contains objects sharing the same rigid transform, one can reuse the probe without requiring re-shading even if it moves, so it really can be a cache if desired

5/ @NOTimothyLottes

Each probe pixel computes and stores projected screen position in INT16x2 (subpixel resolution of 17 steps at 4K)
More than good enough for AA reconstruction

So note AA quality is thus decoupled from shading rate and frame rate

6/ @NOTimothyLottes

Each probe pixel packs 64-bit MSBs{f(z), probe pixel atlas coord}LSBs, computes projected screen position does atomicMax()

Do some pixel-jitter on projected screen position
So any probe collisions get filtered out spatially as grain
(aka no temporal filtering in reconstruction)

7/ @NOTimothyLottes

For screen reconstruction of a pixel
Grab the neighborhood of atomic values (can be holes)
Those point back to probes
Grab a N sample neighborhood from the probes
Do reconstruction
[costs like a scaling TAA but NOT from screen-space]