TAA / FSR: edges of objects in front of a media prim shimmer (no-history mask from #605 bleeds onto foreground edges) #609

Open
opened 2026-10-09 23:52:55 +00:00 by sky_line · 0 comments
Owner

Since #605 (no TAA / FSR history on media surfaces), objects in front of a media prim shimmer along their edges under TAA and FSR. It happens only on the silhouette edges where the media is showing behind the object; the same object's edges against normal scenery are stable.

Likely cause

Edge pixels are the ones where the per-frame jitter alternates between the foreground object and the media surface behind it. The #605 no-history mask is set wherever the media wins the depth test, and the resolve reads it too generously:

  • TAA reads the mask at the render pixel nearest the output pixel's centre. On the frames where that sample lands on the media, the foreground's edge pixel loses its history, so the anti-aliased edge collapses to a single jittered sample, which flickers.
  • FSR dilates the reactive input (3x3), which pushes the "no history" value from the media onto the adjacent foreground edge pixels.

Either way, the anti-aliasing of the foreground edge is thrown away because of what is behind it.

Fix direction

  • Only drop history for a pixel when its frontmost surface is media: pick the mask from the closest-depth sample of the 3x3 (the same closest-depth rule TAA uses for motion dilation), so a foreground edge pixel uses the foreground's mask value (0).
  • Or erode the mask by one pixel wherever there is a depth discontinuity against a nearer surface, before TAA / FSR read it.
  • For FSR, feed the media value through a path that is not dilated over nearer surfaces (or pre-erode as above).
  • Keep the media interior fully current-frame and keep #605's goal (no smear on video / scrolling text).

Test

A video or web MOAP screen with an avatar or object in front of it, with TAA (RenderFSAAType 3) and with FSR. Toggle RenderVKMediaNoTemporal: the edge shimmer should disappear with it off. Check RenderVKTAADebug 1 (history weight) along the foreground silhouette.

Follow-up to #605.

Since #605 (no TAA / FSR history on media surfaces), objects in front of a media prim shimmer along their edges under TAA and FSR. It happens only on the silhouette edges where the media is showing behind the object; the same object's edges against normal scenery are stable. ## Likely cause Edge pixels are the ones where the per-frame jitter alternates between the foreground object and the media surface behind it. The #605 no-history mask is set wherever the media wins the depth test, and the resolve reads it too generously: - **TAA** reads the mask at the render pixel nearest the output pixel's centre. On the frames where that sample lands on the media, the foreground's edge pixel loses its history, so the anti-aliased edge collapses to a single jittered sample, which flickers. - **FSR** dilates the reactive input (3x3), which pushes the "no history" value from the media onto the adjacent foreground edge pixels. Either way, the anti-aliasing of the foreground edge is thrown away because of what is behind it. ## Fix direction - Only drop history for a pixel when its frontmost surface is media: pick the mask from the closest-depth sample of the 3x3 (the same closest-depth rule TAA uses for motion dilation), so a foreground edge pixel uses the foreground's mask value (0). - Or erode the mask by one pixel wherever there is a depth discontinuity against a nearer surface, before TAA / FSR read it. - For FSR, feed the media value through a path that is not dilated over nearer surfaces (or pre-erode as above). - Keep the media interior fully current-frame and keep #605's goal (no smear on video / scrolling text). ## Test A video or web MOAP screen with an avatar or object in front of it, with TAA (RenderFSAAType 3) and with FSR. Toggle RenderVKMediaNoTemporal: the edge shimmer should disappear with it off. Check RenderVKTAADebug 1 (history weight) along the foreground silhouette. Follow-up to #605.
sky_line added this to the Slipstream project 2026-10-09 23:52:55 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
sky_line/Slipstream#609
No description provided.