Repository navigation
Conversation
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.
This contribution adds an end-to-end tiled voxel workflow for large scenes: generating collision data one spatial tile at a time, then streaming nearby tiles in the viewer for collision-aware walking and debug visualization. Per-tile processing bounds the Gaussian upload size, while neighborhood loading limits the viewer's active collision working set.
This PR implements the generation half; supersplat-viewer #328 implements streaming, collision-aware walking and debug preview. Related discussions: #344, #343 and #253.
Public fixture and exact commands · Validation and screenshots
Problem, change and verified result
The default per-tile budget is 4,000,000 selected Gaussians. At 64 bytes per Gaussian, this bounds the Gaussian upload buffer to 256,000,000 bytes (256 MB, about 244 MiB), reduced further by the device's buffer and storage-binding limits. This is a code-derived bound for one Gaussian buffer, not measured total CPU/GPU memory or peak process RSS. Tiles exceeding their budget fail with guidance to reduce tile size or overlap.
The 149M-Gaussian scene from splat-transform #343 has not been rerun with this implementation. The existing monolithic writer is unchanged. No whole-scene peak-memory reduction, conversion-speed improvement or exhaustive large-scene walking validation is claimed.
Implemented
Reproduce
From this PR's checkout, use Node 24 and a WebGPU-capable adapter. Use a fresh
generateddirectory:Expected: six manifest entries, each resolving to a nonempty voxel JSON/bin pair. The single asset is the comparison output; the test checks decoded occupancy. For walking and visualization, follow the companion viewer's direct preview steps.
Validation
Revalidated on 10 October 2026, after merging official main 4593166 (3.10.1) into this branch. On Node 24.21.0, a fresh
npm ciandnpm testpassed (875 passed, 1 skipped); explicit tiled CPU/WebGPU tests passed 12/12 with the updatedwebgpu0.6.2 / PlayCanvas 2.23.1 dependencies. Formatting, lint, typecheck, publint and Typedoc also passed. Typedoc reported 13 pre-existing warnings and publint an existing metadata suggestion. Tests cover core occupancy compared with monolithic output, a rotated cross-boundary Gaussian, zero-overlap seams, grid alignment, transforms, empty tiles/gaps, capacity failures, failed reads and failed output writes.The CLI fixture was regenerated on 10 October 2026: 2,220 Gaussians and six populated tiles, with every relative JSON/bin URL resolving to a nonempty file. The viewer's actual collision classes loaded these files over localhost HTTP: four nearby tiles initially, deduplicated requests, neighborhood switching, floor queries on both sides of the X seam, and wall ray/capsule responses matching the regenerated monolithic output. Outside coverage was blocked and destruction cleared active colliders. This recheck used Node collision integration; it did not rerun browser rendering or visual walking.
In the 2 October 2026 Chrome integration, the public 2,220-Gaussian floor/wall fixture generated six populated tiles. At the initial camera position, the viewer requested four nearby tiles, leaving the other two unrequested until needed. In Chrome, WebGPU and WebGL2 both walked across the tile seam and stopped against the wall. WebGPU overlay and heatmap rendered; the single-voxel comparison also rendered and collided.
Draft scope and review questions
Historical application background
Dayun (293 entries) and Bijiashan (320 entries) motivated this contribution. They are historical MetaFlow builds with a coordinate adapter, not this upstream build. Deployment evidence records empty-entry 404s, resource errors and unvalidated walking from the tested elevated viewpoints. No original full capture is uploaded.
Hosted check status
The latest upstream GitHub Actions run currently reports
action_requiredwith no jobs run, pending maintainer approval. The results above are completed local Node 24 checks; hosted CI has not passed yet.