Summary
splat-transform's SOG writer hangs in the SH-clustering step when the output keeps more than 1 SH band. The same input with the same flags but output format .spz instead of .sog completes successfully in ~60 seconds. So the conversion math (decimate, NaN filter, Morton reorder, SH retention) is fine — the hang is specific to the SOG writer path when SH bands > 1.
Version & environment
@playcanvas/splat-transform@2.1.1
- GitHub Actions
ubuntu-latest runner
- Node.js 20
- CPU mode (
-g cpu)
Reproduction
Input: a 430 MB Brush-trained PLY with ~5M Gaussians. Decimated to 1.4M (or 750K) for output via -F.
# These three all hang past 90 minutes and had to be cancelled:
npx splat-transform -g cpu -i 2 input.ply -F 1400000 -N -M -H 3 output.sog
npx splat-transform -g cpu -i 2 input.ply -F 1400000 -N -M -H 2 output.sog
npx splat-transform -g cpu -i 2 input.ply -F 750000 -N -M -H 3 output.sog
# Identical input + flags, output format changed to .spz — completes in 62s, 23.67 MB:
npx splat-transform -g cpu -i 2 input.ply -F 1400000 -N -M -H 3 output.spz
# Adding -H 1 to the SOG runs also completes fast (~5-10 min, ~12 MB):
npx splat-transform -g cpu -i 2 input.ply -F 1400000 -N -M -H 1 output.sog
Expected
SOG output should complete in comparable time to SPZ output, since both formats represent the same underlying clustered data.
Observed
| Output |
SH bands |
Splats |
Result |
.sog |
3 |
1.4M |
hung >90 min, cancelled |
.sog |
2 |
1.4M |
hung >90 min, cancelled |
.sog |
3 |
750K |
hung >90 min, cancelled |
.sog |
1 |
1.4M |
✅ ~5-10 min, ~12 MB |
.spz |
3 |
1.4M |
✅ 62 sec, 23.67 MB |
GH Actions runs (public, logs viewable):
Test workflow that produced these runs: https://github.com/nickk123456/formchasers/blob/main/.github/workflows/test-multi-sh-conversion.yml
Impact
We can't ship multi-SH SOGs to our Gaussian splat gallery — viewers see matte materials instead of the real specular shine on chrome, paint, glass. Worked around for now by switching the high-quality tier output format to SPZ.
Happy to provide the source PLY (publicly accessible URL in the workflow logs) if it helps reproduce.
Summary
splat-transform's SOG writer hangs in the SH-clustering step when the output keeps more than 1 SH band. The same input with the same flags but output format.spzinstead of.sogcompletes successfully in ~60 seconds. So the conversion math (decimate, NaN filter, Morton reorder, SH retention) is fine — the hang is specific to the SOG writer path when SH bands > 1.Version & environment
@playcanvas/splat-transform@2.1.1ubuntu-latestrunner-g cpu)Reproduction
Input: a 430 MB Brush-trained PLY with ~5M Gaussians. Decimated to 1.4M (or 750K) for output via
-F.Expected
SOG output should complete in comparable time to SPZ output, since both formats represent the same underlying clustered data.
Observed
.sog.sog.sog.sog.spzGH Actions runs (public, logs viewable):
Test workflow that produced these runs: https://github.com/nickk123456/formchasers/blob/main/.github/workflows/test-multi-sh-conversion.yml
Impact
We can't ship multi-SH SOGs to our Gaussian splat gallery — viewers see matte materials instead of the real specular shine on chrome, paint, glass. Worked around for now by switching the high-quality tier output format to SPZ.
Happy to provide the source PLY (publicly accessible URL in the workflow logs) if it helps reproduce.