WebGPU renderer for Gaussian splats with optimized GPU radix sorting (portable and subgroup-optimized paths), plus a React component, loaders, and an interactive playground.
pnpm add zsplatimport { ZSplat } from "zsplat";
export function Viewer() {
return (
<ZSplat
src="/models/scene.ply"
className="w-full h-screen"
sortMethod="gpu-subgroup"
turntable
/>
);
}src accepts either:
- a URL string
- a
Fileobject
Supported load formats in the package:
- standard/compressed PLY
- SPZ
- SOG (
meta.jsonURL)
import { loadSplat } from "zsplat";
const data = await loadSplat("/models/scene.spz");
console.log(data.count);ZSplat supports:
gpu-subgroup(default): stable, subgroup-optimized path when supportedgpu: stable portable pathgpu-unstable: unstable GPU pathcpu: CPU fallback
src/- library source (renderer, camera, shaders, loaders, React component)playground/- interactive viewer app for local files and URL loadingradix-sort-visualized/- educational app explaining GPU radix sortdocs/- static build outputs:docs/playground/docs/radix-sort-visualized/
From repo root:
pnpm install
pnpm devThis runs the playground dev server.
Run the radix visualizer locally:
pnpm --dir radix-sort-visualized devFrom repo root:
pnpm buildBuilds the zsplat package to dist/.
pnpm build:docsBuilds both apps as static sites:
- playground ->
docs/playground/ - radix visualizer ->
docs/radix-sort-visualized/
pnpm previewPreviews the playground build.
The playground top bar currently includes:
- open local
.ply/.spz - load by URL (and
?src=...query param auto-load) - sort mode selector
- camera mode/turntable controls
- link to radix sort learning page
- link to this GitHub repository