What happened?
Loading Gaussian Splat 3D Tiles with SPZ compression causes severe main-thread stalls. When tiles are requested and decoded, the viewer becomes noticeably unresponsive: frames are dropped and tile loading blocks rendering for a visible amount of time.
The main bottleneck appears to be SPZ decoding and spherical harmonics packing. In particular, decoding SPZ payloads and packing SH data into half-float texture-ready buffers currently performs expensive CPU work on the main thread. Large tiles or tiles with higher SH degree make the stall much worse.
Reproduction steps
- Open a CesiumJS app or Sandcastle example that loads a Gaussian Splat 3D Tiles tileset.
- Use a tileset with large SPZ payloads and spherical harmonics attributes, especially SH degree 2 or 3.
- Start navigating so new tiles stream in.
- Observe that the viewer freezes or stutters while tiles are loading.
- Capture a performance profile in browser DevTools.
- Notice long main-thread tasks during SPZ decode and spherical harmonics packing.
Sandcastle example
No response
Environment
Browser:Chrome
CesiumJS Version:1.141
Operating System:Windows
AI acknowledgment
What happened?
Loading Gaussian Splat 3D Tiles with SPZ compression causes severe main-thread stalls. When tiles are requested and decoded, the viewer becomes noticeably unresponsive: frames are dropped and tile loading blocks rendering for a visible amount of time.
The main bottleneck appears to be SPZ decoding and spherical harmonics packing. In particular, decoding SPZ payloads and packing SH data into half-float texture-ready buffers currently performs expensive CPU work on the main thread. Large tiles or tiles with higher SH degree make the stall much worse.
Reproduction steps
Sandcastle example
No response
Environment
Browser:Chrome
CesiumJS Version:1.141
Operating System:Windows
AI acknowledgment