Reflection probes: compressed formats for higher resolution -- Part 1 R11G11B10 (2x), Part 2 BC6H with GPU encode (8x) #565
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#565
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?
Reflection probes are RGBA16F cube arrays (
kProbeHdr,llcleanrenderervk.cpp~8966): 8 B/px with full mip chains.That memory cost is what holds probe resolution back. Do this in two parts and measure each before moving on.
Shared prerequisite: the probe alpha channel carries distance statistics for the Chebyshev visibility test (#88/#89, the P1 dome-leak fix). Neither target format has alpha, so move it to a separate small R16G16 moments texture, which may be lower resolution than radiance. Verify the leak fix still holds.
Part 1: R11G11B10 float radiance (2× smaller, no encoder)
VK_FORMAT_B10G11R11_UFLOAT_PACK32. Check the format supports storage/attachment and filtering on the target GPUs, and the capture/filter compute paths.Part 2: BC6H-compressed probes (8× smaller)
Done when: both parts have been measured, the result is recorded here, and the chosen defaults are applied (possibly a resolution bump).
Plan update 2026-10-10: one selectable format setting, all options built together for a side-by-side test
Probes are still RGBA16F today (
kProbeHdr, llcleanrenderervk.cpp:11361): nothing has been quantized yet.New setting
RenderVKProbeFormat(live, or applied on probe re-allocation):E5B9G9R9_UFLOAT_PACK32, 4 B/px). 9-bit mantissas with a shared exponent, closest to RGBA16F at half the size.B10G11R11_UFLOAT_PACK32, 4 B/px). 6/6/5-bit mantissas, no cross-channel coupling.Prerequisite for 1-3: the probe alpha (Chebyshev distance moments for the #88/#89 dome-leak fix) moves to its own R16G16 texture. The leak fix must still hold.
Memory at 256 probes:
All four go in at once for an in-world A/B/C/D, with a failure-mode test plan. The default stays 0 until the owner picks from the comparison.
Started 2026-10-10: all four probe formats are being built as one selectable setting for a side-by-side test (plan in the previous comment).
Correction 2026-10-10: there is no distance-moments alpha in the Vulkan probes
The plan comment's "prerequisite" was wrong. In the VK path:
clean_probe_filter.compstoresvec4(col, 1.0).uProbeRadiance/uProbeIrradianceread is.rgb.indra/vkclean/shaders.The P1 dome-leak fix (alpha distance statistics, #88/#89) was GL-only and went away with the GL removal (
0b3a52696a). So no moments texture was needed, and formats 1-3 lose nothing.Side effect: the Chebyshev dome-leak protection does not exist under Vulkan. The test plan's dome/house check is now a check of whether interior reflections leak outside sky at all, in every format. If they do, that is a separate (pre-existing) bug to file.
Implementation status: all four formats are merged (
RenderVKProbeFormat0-3, with debug view 20 showing which probes read the uncompressed live cube). Measured memory and the test plan are in the agent's report.All four probe formats (RGBA16F, RGB9E5, R11G11B10, BC6H) shipped in 1.3.0 Beta 2 as RenderVKProbeFormat, default RGB9E5. Still to do: the in-world side-by-side comparison, pick the final default, and actually raise the probe resolution the saved memory is meant to pay for.