Skip to content

feat: nearest-face deviation search on the GPU where WebGPU is available - #73

Open
Jozkah wants to merge 1 commit into
CNCKitchen:mainfrom
Jozkah:feat/gpu-deviation
Open

Jozkah wants to merge 1 commit into
CNCKitchen:mainfrom
Jozkah:feat/gpu-deviation

Conversation

@Jozkah

@Jozkah Jozkah commented Nov 1, 2026

Copy link
Copy Markdown
Contributor

The deviation map looks up each scan vertex's nearest reference face with a CPU BVH, which is the slow part on big scans.

Scans of 100k+ vertices now do that lookup in a WebGPU compute shader that walks the reference's own BVH node buffer (src/core/deviation/gpuNearest.ts). The reading itself (distance, pseudonormal sign, facing limit, direction) is still worked out on the CPU in doubles on the face the GPU found, so the map matches the CPU search: in the tests the two differ by at most about 3e-6 mm. No WebGPU, a reference too large for the buffers, or any GPU error falls back to the CPU BVH search unchanged.

  • src/core/deviation/gpuNearest.ts: the shader and its driver
  • src/core/deviation/surface.ts: the BVH laid out for the GPU
  • src/core/deviation/deviation.ts, src/core/meshWorker.ts: use the GPU result when there is one
  • tests/gpuDeviation.test.ts: GPU and CPU agree, fallbacks taken

Checks:

  • npm run build: built
  • npx vitest run --maxWorkers=8: pass
  • check-plugin-boundary, check-units: hold
  • npm run e2e:ci: all pass (e2e-patch-network skipped, needs a real scan)

Scans of 100k+ vertices look up each vertex's nearest reference face in a
WebGPU compute shader walking the reference's own BVH node buffer. The
reading itself (distance, pseudonormal sign, facing limit, direction) is
still resolved on the CPU in doubles on that face, so the map matches the
CPU search. No WebGPU, an oversized reference or any GPU error falls back
to the CPU BVH search unchanged.

This branch has not been deployed

No deployments
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.

1 participant