Skip to content

Lumen follow-up: multi-cascade SDF clipmap #21

@proggeramlug

Description

@proggeramlug

Ticket 014 V2 landed a single-cascade 64³ SDF clipmap that camera-follows at 40 m extent with voxel-snapped origin (V5). The ticket's original plan called for 4 cascades at 2 m / 8 m / 32 m / 128 m half-widths, with per-cascade sparse brick allocation. In practice, V14's 3-cascade WSRC covers the long-range bounce and the single SDF clipmap covers the near sphere-trace, so the quality gap didn't force multi-cascade SDF.

When to do this

  • If sphere-trace noise / missed-hit streaking appears on scenes larger than Sponza where the 40 m clipmap can't reach far walls.
  • If a scene has interiors where fine detail (< 1 m) matters — V2's 40 m / 64³ = 0.625 m cell is too coarse for rooms with < 2 m features.

Scope

  • Per-cascade SDF texture (4 × 64³ R32Float = 4 MB).
  • Sparse brick allocator (original plan said "start dense per cascade and only sparsify if VRAM pressure demands it" — so dense first, ~4 MB is fine).
  • Per-cascade bake dispatch with different extents.
  • Sphere-trace shader: pick the finest cascade containing the current step position; fall through to coarser cascades as the ray advances.
  • Camera-follow + snap per cascade at its own voxel size.

Files likely to change

  • native/shared/src/renderer/formats.rs — cascade-array SDF textures
  • native/shared/src/renderer/shaders.rsSDF_BAKE_WGSL dispatched per cascade; SSGI_PROBE_TRACE_SDF_WGSL sphere-trace updated to pick cascade inline
  • native/shared/src/renderer/mod.rs — per-cascade state, invalidation, bake loop (mirror the V13 WSRC multi-cascade code)

See docs/perf/014-lumen-mesh-sdfs.md §V15 closure.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions