Reflection probes: recapture only on change (idle scheduler, content/env dirty) #772

Closed
opened 2026-10-15 01:09:38 +00:00 by sky_line · 1 comment
Owner

Reflection probes are GPU-scheduled (#478) with off-screen skip (#517) and an environment-change reset, but the scheduler has no idle state: one probe face is captured every frame, forever, by age order, whether or not anything changed (+ filter / mip / BC6H encode after each capture). The realtime probe (detail 2/3) captures all 6 faces every frame with no change test, and the mirror captures every frame unless fully occluded.

Today (clean_probe_gpu.comp, setProbes in llcleanrenderervk.cpp)

  • "Dirty" = probe origin moved > 1 m or radius changed > 15% -> only a +4 priority boost, not a gate.
  • Per-cell content hash re-places probes when cell bounds change; it does not force a recapture.
  • Environment change > 0.05 on the atmos lanes ages every capture (full nearest-first recapture); day-cycle drift repeats it.

Goal: recapture on change

  • Idle state: schedule only probes that are incomplete, stale (returned on screen), content-dirty, environment-dirty, or past a long safety period.
  • Content-dirty: per-probe change detection from the instance store's changed regions (gVKChangedSpheres / overflow, instance versions) intersecting the probe's influence volume; separate handling for dynamic contents (avatars / movers) for dynamic probes (e.g. lower-rate refresh only while dynamic contents are present and moving).
  • Environment: graded (small drift -> slow trickle refresh; big change -> reset).
  • Realtime probe: skip faces / frames when its view contents and environment are unchanged.
  • Mirror/hero probe: skip when its view is unchanged (camera/mirror static, no changes in view).
  • Live settings to A/B; log captures per second, idle frames, reasons; GPU ms of pr_* passes.
Reflection probes are GPU-scheduled (#478) with off-screen skip (#517) and an environment-change reset, but the scheduler has no idle state: one probe face is captured every frame, forever, by age order, whether or not anything changed (+ filter / mip / BC6H encode after each capture). The realtime probe (detail 2/3) captures all 6 faces every frame with no change test, and the mirror captures every frame unless fully occluded. ## Today (clean_probe_gpu.comp, setProbes in llcleanrenderervk.cpp) - "Dirty" = probe origin moved > 1 m or radius changed > 15% -> only a +4 priority boost, not a gate. - Per-cell content hash re-places probes when cell bounds change; it does not force a recapture. - Environment change > 0.05 on the atmos lanes ages every capture (full nearest-first recapture); day-cycle drift repeats it. ## Goal: recapture on change - Idle state: schedule only probes that are incomplete, stale (returned on screen), content-dirty, environment-dirty, or past a long safety period. - Content-dirty: per-probe change detection from the instance store's changed regions (`gVKChangedSpheres` / overflow, instance versions) intersecting the probe's influence volume; separate handling for dynamic contents (avatars / movers) for dynamic probes (e.g. lower-rate refresh only while dynamic contents are present and moving). - Environment: graded (small drift -> slow trickle refresh; big change -> reset). - Realtime probe: skip faces / frames when its view contents and environment are unchanged. - Mirror/hero probe: skip when its view is unchanged (camera/mirror static, no changes in view). - Live settings to A/B; log captures per second, idle frames, reasons; GPU ms of pr_* passes.
sky_line added this to the Slipstream project 2026-10-15 01:09:38 +00:00
Author
Owner

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.

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.
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#772
No description provided.