🌐 Live Demo · 📄 arXiv · 💻 Code
Accepted to ACM Multimedia 2026 (the 35th ACM International Conference on Multimedia).
WebSplatter is a WebGPU-native rendering framework for 3D Gaussian Splatting (3DGS) in the browser. Existing web viewers port CUDA-era pipelines whose synchronization and memory patterns do not generalize across GPU architectures, which causes rendering failures on non-NVIDIA and mobile devices. WebSplatter eliminates both failure modes with a wait-free radix sort and a hardware-accelerated rasterization pipeline with opacity-aware quad sizing.
Evaluated across eleven devices spanning five GPU architectures (NVIDIA, Apple, Intel, AMD, Qualcomm), WebSplatter renders every benchmark scene on every tested device without failure, delivering 1.1×–2.5× speedups over the surviving baselines at near-lossless fidelity to the native CUDA renderer (average ΔPSNR 0.07 dB).
Try WebSplatter directly in your browser — no installation required:
The demo loads the Van Gogh Room scene (341K Gaussians) and runs on desktops, laptops, phones and handhelds alike. Click the canvas to focus it, then press ** to capture the mouse for FPS-style look controls. Use **WASD** to move, **Space/Ctrl** to fly up/down, **Shift** to move faster, and **Q/E** to roll; press **R** to restore the initial camera pose and **Esc** or ** to release the mouse. Drag to rotate, right-drag to translate, and scroll to zoom when the mouse is not captured. Camera controls are disabled while animation is enabled.
The project page consumes this repository as a pinned Git submodule. Run npm run build:release to create the streamlined production viewer in dist-release/; that target keeps only the GLB/SPZ Gaussian rendering path and is separate from the full development build.
Requires a browser with WebGPU enabled: Chrome 113+, Safari on iOS 26 / macOS 26, or Firefox 141+ (Windows only).
You can download the models from the following URL: https://drive.google.com/drive/folders/1WXCpR3kshQt2jmOtuCBsHKfzt1IMqey2
- PLY — original INRIA 3DGS
.plyfiles (loaded directly) - glTF/GLB — with
KHR_gaussian_splattingextension (uncompressed) - glTF/GLB + SPZ — with
KHR_gaussian_splatting_compression_spz_2extension (decompressed in-browser via WASM)
Use the included ply2gltf.py script to convert PLY files to glTF/GLB:
# Uncompressed GLB
python ply2gltf.py --input scene.ply --output scene.glb
# SPZ-compressed GLB (much smaller file size)
python ply2gltf.py --input scene.ply --output scene_spz.glb --compression=spzSPZ compression requires the spz Python package.
Organize your model files in the public folder as shown below. Both .ply and .glb formats are supported.
public
└── scenes
├── bicycle
│ ├── bicycle_30000.cleaned.ply
│ ├── bicycle_30000.ply
│ └── cameras.json
├── bonsai
│ ├── bonsai_30000.ply
│ └── cameras.json
├── garden
│ ├── cameras.json
│ └── garden_30000.ply
├── train
│ ├── cameras.json
│ └── train_30000.ply
├── truck
│ ├── cameras.json
│ └── truck_30000.ply
└── van_gogh_room
├── cameras.json
├── van_gogh_room.glb
├── van_gogh_room.ply
└── van_gogh_room_spz.glb
First, make sure you have Node.js installed on your system.
Then install the project dependencies using npm:
npm installAfter installation, start the development server:
npm run devThe application will be available in your web browser.
If you find WebSplatter useful in your research, please cite:
@inproceedings{han2026websplatter,
title={WebSplatter: Efficient and Faithful In-Browser 3D Gaussian Splatting across Devices via WebGPU},
author={Han, Yudong and Xu, Chao and Ye, Xiaodan and Bi, Weichen and Xu, Xuanhuai and Dong, Zilong and Ma, Yun},
booktitle={Proceedings of the 35th ACM International Conference on Multimedia},
year={2026},
doi={10.1145/3767308.3835220}
}MIT — see LICENSE.