Skip to content

SOG writer hangs indefinitely when output has >1 SH band (works with -H 1; SPZ output of identical input completes in seconds) #238

@nickk123456

Description

@nickk123456

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions