Repository navigation
Conversation
…amera moves Scans over 400k triangles get a vertex-clustered index buffer over their own vertices, drawn while the view is in motion; full detail returns once the camera holds still for 180 ms. Picking, colours, deviation and paint still use the full mesh.
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Orbiting or zooming a huge scan re-draws every triangle each frame, so the view stutters on multi-million-triangle meshes.
Scans over 400k triangles now get a coarse proxy: a vertex-clustered index buffer over the scan's own vertices (
src/viewer/lod.ts), drawn while the camera moves. Full detail comes back once the camera holds still for 180 ms. The proxy shares the vertex buffer, so colours and deviation still show on it, and picking, measuring, deviation and paint always use the full mesh.src/viewer/lod.ts: the clusteringsrc/viewer/SceneManager.ts: swap to the proxy while the view moves, back when it settlestests/lod.test.ts: proxy size, index validity, small meshes left aloneChecks:
npm run build: builtnpx vitest run --maxWorkers=8: passcheck-plugin-boundary,check-units: holdnpm run e2e:ci: all pass (e2e-patch-networkskipped, needs a real scan)Not yet tried by hand on a multi-GB scan.