Point light shadows (ray traced + cube shadow-map fallback) #439
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#439
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?
Point lights (SL's ordinary local lights) cast no shadows today. Only the sun/moon (ray traced) and projectors (shadow-map atlas
RenderVKProjShadow*, or ray tracedRenderVKRTProjShadowMax) do. Point lights are by far the most common lights in SL, and our site already says "lights cast proper shadows".Same shape as the projector work: one setting, Point light shadows: Off / Shadow maps / Ray traced. Ray traced is greyed out without ray-query support. Both modes share a per-frame cap on how many lights cast shadows.
Ray traced (primary path)
No projection is involved. A shadow ray goes from the receiver to the light's position, so a sphere is the easiest case for RT.
clean_rt_shadow_mask.comp). It already traces up to 4 shadowed projectors per pixel into the per-slotuRawProjarray, and the temporal and spatial denoisers already handle those slots. Point lights become more candidates for the same per-pixel slots, picked in cluster order.RenderVKRTPointShadowMax, default 8–16). Unselected lights stay unshadowed, as today.Shadow maps (fallback for cards without ray tracing)
gl_Layer/ multiview).RenderVKPointShadowDynamicInterval) and composited over the static layer.SL-specific hazards (must handle, both paths)
Performance estimate (to verify with RenderVKGpuTimers)
Direction decided 2026-10-10: point-light shadows come from ReSTIR DI (#91)
Instead of a standalone "top N shadowed point lights" selector in the RT mask's 4 slots, point lights become candidates in the shared ReSTIR DI many-light sampler. The design is in #91. Every point light can cast a shadow, with cost roughly independent of light count (~1 visibility ray per pixel plus reuse passes), and the same system handles projectors and emissive surfaces.
Requirements specific to this ticket (carry into the ReSTIR build):
The light scoring, light buffer and denoiser hookup planned here are the first pieces of the ReSTIR infrastructure, not separate work.