From df9c4e499f7db18fb03238e166690a9925209cec Mon Sep 17 00:00:00 2001 From: sudhir Date: Mon, 20 Apr 2026 11:25:36 +0530 Subject: [PATCH] Restrict ground occluder to recessed slabs --- .../src/components/renderers/site/site-renderer.tsx | 11 ++++++++++- .../viewer/src/components/viewer/ground-occluder.tsx | 10 +++++++++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/packages/viewer/src/components/renderers/site/site-renderer.tsx b/packages/viewer/src/components/renderers/site/site-renderer.tsx index e52b6c4c..c16e056a 100644 --- a/packages/viewer/src/components/renderers/site/site-renderer.tsx +++ b/packages/viewer/src/components/renderers/site/site-renderer.tsx @@ -55,7 +55,16 @@ export const SiteRenderer = ({ node }: { node: SiteNode }) => { }) const next = nodeList - .filter((n): n is SlabNode => n.type === 'slab' && n.visible && n.polygon.length >= 3) + .filter( + (n): n is SlabNode => + n.type === 'slab' && + n.visible && + n.polygon.length >= 3 && + // Only recessed slabs should punch through the site ground. + // Positive slabs are real floor geometry and should not create a + // ghost footprint in the background ground fill. + (n.elevation ?? 0.05) < 0, + ) .filter((n) => { if (!Number.isFinite(lowestLevelIndex)) return true const parentLevel = n.parentId ? levelIndexById.get(n.parentId as string) : undefined diff --git a/packages/viewer/src/components/viewer/ground-occluder.tsx b/packages/viewer/src/components/viewer/ground-occluder.tsx index c04e9d81..54be8b51 100644 --- a/packages/viewer/src/components/viewer/ground-occluder.tsx +++ b/packages/viewer/src/components/viewer/ground-occluder.tsx @@ -38,7 +38,15 @@ export const GroundOccluder = () => { const polygons: [number, number][][] = [] Object.values(nodes).forEach((node) => { - if (!(node.type === 'slab' && node.visible && node.polygon.length >= 3)) { + if ( + !( + node.type === 'slab' && + node.visible && + node.polygon.length >= 3 && + // Only recessed slabs should punch through the ground plane. + (node.elevation ?? 0.05) < 0 + ) + ) { return }