RT sun shadows: static stipple / dither pattern in penumbras that the denoiser never resolves (regression?) #841
Labels
No labels
amd
avatars
bug
builder
cannot-reproduce
crash
epic
feature
from-viewer
gl-removal
known-limitation
monitoring
parity
perf
platform
priority
critical
priority
high
priority
low
priority
medium
provenance
rendering
rt
status
in-progress
status
testing
status
up-next
triage
ui
upstream
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
sky_line/Slipstream#841
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
RT sun shadow penumbras show a fine, regular stipple / dither pattern that the denoiser never resolves. With a static sun and camera the pattern is completely static (doesn't crawl or settle). The test was with FSR off; the owner's normal setup is FSR native AA.
Setup:
RenderVKSunShadows2 (RT sun), shadow mask at half resolution (also at full, similar);RenderVKRTShadowSoftness0.01. Every denoiser setting is on and at default (RenderVKRTShadowDenoise,…Svgf,…Atrous3,…TemporalAlways, history 32, anti-lag, reactive, zoom-aware). The owner doesn't remember this grain surviving after the denoiser work, so it looks like a regression.A static pattern means the per-frame noise / sample sequence isn't changing (a frozen seed or frame index), so temporal accumulation averages identical samples, AND the spatial filter isn't smoothing the penumbra either.
Suspects
RenderVKRTShadowCertainBypass"certain" pixels, history-length gates).Expected
Soft, noise-free penumbras with RT sun shadows, with and without TAA / FSR, as after the denoiser work (#666 and related).
Root cause (
7434f07789): the mask push packs its mode bits into a float (p0.y). Bits 22-23 (slope bias, default 2, added inda32667379, shipped in beta 13) push that value into [2^23, 2^24), where floats are spaced 1 apart. The shader decoded it as uint(x + 0.5), which rounds every odd value up to the next even one. That clears bit 0 (the denoiser) and the carry flips bit 1 (history valid). So on default settings every frame ran the legacy mask path: no history, and noise phase 0, giving a frozen stipple.Evidence: RenderVKRTMaskDiag showed history len 0 and meta 0 on 64/64 surface samples, with the host's denoise flag on. Fix: decode with round(), which is exact for representable integers. p0.z gets the same decoder.
This affects release/1.3, so it's a hotfix candidate.
Fixed in Slipstream 1.3.0 (stable): https://git.slipstreamviewer.org/sky_line/Slipstream/releases/tag/v1.3.0
If you still see this on 1.3.0, reply here and we'll reopen it.