

◂▸
Inspired by Nokia's IBC 2026 demo of streaming Gaussian splats over DASH, we cut one of our own splat scenes into a quality ladder, from 1.2 MB to 14 MB, with a manifest like a video stream's. The browser shows the smallest version at once, measures the connection, and swaps in sharper versions as they arrive.
What we tried
- Rendered 160 views of our factory robot cell with exact cameras and trained a Gaussian splat in LichtFeld Studio.
- Ranked every Gaussian, cut a four-rung ladder and compressed each rung to SOG, with a small manifest.
- Built a browser player on Spark that starts small, measures throughput and picks the next rung that can arrive in about 5 seconds.
- Scored every rung against the full scene from six fixed viewpoints, in the same renderer visitors use.
What we measured
| Measure | Download the whole scene | Stream the ladder | Note |
|---|---|---|---|
| First 3D view, 20 Mbit/s | 5.6 s | 0.5 s | |
| First 3D view, 5 Mbit/s | about 22 s | 1.9 s | Settles on the 300k version at 7.4 s |
| Match to full scene, T0 · T1 · T2 | — | 13.9 · 19.7 · 35.1 dB | PSNR over six viewpoints |
| Ladder sizes | — | 1.2 · 3.3 · 13.0 · 14.0 MB | |
| Full colour detail costs | — | +1 MB | Spherical harmonics degree 3 against 1, in SOG |
What went wrong
- Our first ladder pruned a 5-million-Gaussian model. Ranking by opacity × size kept big faint blobs (haze) and dropped the small opaque ones that make surfaces: the 1M rung scored only 16 dB against the full scene.
- Ranking by pixels covered across the training cameras helped (18 dB), but the real fix was training the scene with a 1-million cap, so the top rung is the whole model.
- LichtFeld Studio writes SPZ version 4, which Spark can't read yet, so we switched to SOG, which is also 37% smaller.
- Our first quality numbers were nonsense (100 dB and 1 dB side by side) because the page's own animation loop kept moving the camera between captures. We stopped it before measuring.
What happens next
- Additive streaming, where each rung adds Gaussians instead of replacing the last.
- Moving splats: per-segment 4D Gaussians on the same ladder, towards what Nokia showed.
- Our own capture instead of a rendered scene.
Built with
- LichtFeld Studio (training, SOG export) GPL-3.0
- Spark 2.2 MIT
- three.js MIT
- Blender (test scene) GPL
Next experiment
Flat 360° video turned into stereo 360° for VR headsets →
Want this for your data?