CesiumGS / CesiumGS/cesium

SPZ Gaussian Splat tile loading stalls the main thread during decode and SH packing

Open
#13,489 2 comments 0 reactions 0 assignees View on GitHub
category - gaussian splatting needs feedback needs triage type - bug
Dominant language
JavaScript
Stars
15.7k
Forks
3.9k
Avg merge
4d 6h
Merged PRs (30d)
34

Description

### 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

1. Open a CesiumJS app or Sandcastle example that loads a Gaussian Splat 3D Tiles tileset.
2. Use a tileset with large SPZ payloads and spherical harmonics attributes, especially SH degree 2 or 3.
3. Start navigating so new tiles stream in.
4. Observe that the viewer freezes or stutters while tiles are loading.
5. Capture a performance profile in browser DevTools.
6. 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

- [x] I used AI to generate this issue report.
- [x] (If the above is checked) I have reviewed the AI-generated content before submitting.

Contributor guide

Open the contributing guide

Research direction

No files, tests, or code entry points are named. Reproduce the issue with a large SPZ Gaussian Splat 3D Tiles tileset, SH degree 2 or 3, and a Chrome performance profile; compare tile loading and frame responsiveness during SPZ decoding and SH packing. Done means the reported stalls are addressed and profiling no longer shows long main-thread tasks during those operations.

Written by the indexing model from the issue text.

Assessment

Tech stack
javascript
Domain
computer-graphics, performance
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Needs clarification
Newbie friendliness
38/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.