A real-time 3D Gaussian Splatting renderer that runs in the browser, written in JavaScript and WGSL on WebGPU.
- GPU-driven tile-based Gaussian splatting rasterizer
- GPU radix sort over per-tile splat instances, with a parallel prefix-sum scan
- Full spherical harmonics (degree 3) evaluated per frame from the view direction
- Load user input
.plymodel by file picker or drag-and-drop - Live per-pass GPU timings, splat count, and FPS graph via Tweakpane
Per-frame averages from the in-app GPU pass (ms) panel. The count, scan*, and reorder rows are summed across
all four radix passes, since the profiler accumulates per label per frame.
| Step | ms |
|---|---|
| preprocess | 0.25 |
| offset scan | 3.888 |
| emit | 0.053 |
| indirect arg | 0.002 |
| count | 0.16 |
| scan | 1414.27 |
| reorder | 0.39 |
| tile ranges | 0.027 |
| raster | 0.774 |
| blit | 0.008 |
| TOTAL | 1419.821 |
| Step | Time (ms) |
|---|---|
| preprocess | 0.727 |
| offset scan | 4.782 |
| emit | 0.309 |
| indirect arg | 0.003 |
| count | 0.689 |
| scan local | 4.389 |
| scan block sums | 4.745 |
| scan add offset | 3.989 |
| reorder | 3.372 |
| tile ranges | 0.061 |
| raster | 1.202 |
| blit | 0.007 |
| TOTAL | 24.274 |

