Skip to content

fix: guard empty depth maps during dense fusion - #1308

Closed
woodongwong wants to merge 1 commit into
cdcseacave:developfrom
woodongwong:fix/dense-fuse-empty-depth-map
Closed

woodongwong wants to merge 1 commit into
cdcseacave:developfrom
woodongwong:fix/dense-fuse-empty-depth-map

Conversation

@woodongwong

Copy link
Copy Markdown

No description provided.

@cdcseacave

Copy link
Copy Markdown
Owner

Thanks for the report: fusion could indeed read an empty depth-map. The cause is different from eviction, though, so this is fixed at the source in #1309 instead of with a check in the fusion walk.

  • Why eviction can't be the cause: DMapCache is an LRU cache, and eviction stops at the current reference (SkipMemoryCheckIdxImage). The reference is loaded before its neighbours, so every neighbour flagged for it is newer than the reference and stays cached while it is fused.
  • The real path: a .dmap that fails to load (corrupt or truncated). DMapCache::UseImage ignored Load()'s failure and cached the empty map, and the fusion loops only asserted that the reference was non-empty.
  • The fix in densify: T&T-tuned fusion, decoupled confidence recalibration, bounded fusion memory #1309:
    • UseImage logs the failure and doesn't cache the empty map.
    • Both fusion loops skip such a reference.
    • EstimateNormalMaps skips the map instead of aborting, which used to leave later neighbours without normals.

With that, a map that can't be read is never fused or walked into, and the fusion loop needs no per-probe branch. Closing in favour of #1309.

@cdcseacave cdcseacave closed this Sep 26, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants