Skip to content

Interactive 3DGS Map Viewer

Spin the LiDAR-primed 3D Gaussian Splatting map in your browser — no install, no GPU. This is the same photoreal map produced by the 3DGS Photoreal Map pipeline, exported to a web-sized .splat and rendered with WebGL.

Controls

The viewer opens at one of the map's capture views, so the first frame is photoreal. Drag to orbit · scroll / pinch to dolly · right-click drag (or shift + scroll) to pan. Nudge gently — this is a single-bag, close-range capture, so orbiting far from the recorded path shows the usual view-dependent Gaussian smear. Drop any INRIA-layout .ply onto the viewer to convert and inspect it in-browser.

What you are looking at

The bundled map is the koide handheld scene (Livox MID-360 + RGB camera): a single-bag, close-range capture reconstructed at SH degree 1 over 15k iterations (~25.5 dB PSNR). The geometry is seeded from the SLAM point cloud (LiDAR-primed init), so the Gaussians sit on the metric surface rather than a photometric guess.

Export your own

The viewer reads the compact .splat format. Convert any map trained with train_gsplat.py using the numpy-only converter:

python3 tools/gaussian_splatting/ply_to_splat.py \
  output/<run>/gsplat/point_cloud.ply \
  -o docs/assets/3dgs-viewer/my_map.splat \
  --max-points 300000 --min-opacity 0.04 --max-scale 0.5

--max-points keeps the most significant Gaussians first (volume × opacity), trading file size for detail — 300k splats is ~9 MB, a good balance for a fast web load. --max-scale drops the handful of giant floater Gaussians that otherwise streak across off-axis angles. Point the viewer at your export with assets/3dgs-viewer/index.html?url=my_map.splat.

The renderer is vendored from antimatter15/splat (MIT); see docs/assets/3dgs-viewer/README.txt for the one-line local change.