Skip to content

Conversation

@javagl
Copy link
Owner

@javagl javagl commented Nov 9, 2025

The PR for the Gaussian splat support in glTF went through a few iterations. Some of the most important changes have been...

  • The separation of the core/base extension, and the extension that uses SPZ compression (with the latter now being tracked in its own PR)
  • The update of the SPZ extension to use SPZ version 3... or 2, depending on how you look at it: It is SPZ version 2 (but the "version" in the SPZ header is "3", because "1" was never published... however...)
  • Adding prefixes to the Gaussian splat attribute names (as part of resolving Disambiguation of attribute semantic names KhronosGroup/glTF#2111 )

There is still some ongoing discussion about "What is 'color'?" and "What are 'spherical hamonics'?", and "What is this actually all about?" - this is tracked in KhronosGroup/glTF#2539

This PR updates the JSplat libraries to offer a dedicated reader/writer for splats that are stored in glTF using the KHR_gaussian_splatting base extension, without SPZ compression.

The implementation is not yet complete (e.g. quantized attributes are not yet supported). But the JSplatRoundtrips example (which is only an internal test, not specified in any way, and changing constantly!) can already read/convert/write all the splat formats, which now are GSPLAT, PLY_ASCII, PLY_BINARY_LE, PLY_BINARY_BE, SPZ, SPZ_GLTF, and (new:) GLTF.

The viewer application has not been updated yet. This will require some tweaking: When loading a glTF with splats, it's not immediately clear whether they are SPZ-compressed or not. I'll have to check where exactly that decision can be made. (I'd like to avoid a dependency from the glTF part to the glTF-SPZ part, but will sort this out somehow).

In the context of all this, I might rename the jsplat-io-spz-gltf project to jsplat-io-gltf-spz, which makes more sense in view of the extension structure and possible future extensions/compression methods that may be added to glTF. Good thing that all this is happening in version 0.0.1-SNAPSHOT, right? I can do whatever I want 😎

@javagl javagl marked this pull request as ready for review November 14, 2025 13:41
@javagl
Copy link
Owner Author

javagl commented Nov 14, 2025

I renamed the jsplat-io-spz-gltf project to jsplat-io-gltf-spz for consistency (including the package- and class names).

And I extended the viewer application to handle glTF that use the base extension or the SPZ extension. (The implementation is a bit quirky right now: It reads the glTF, checks whether it uses the extension or not, and then loads it again, either with the "base loader" or the "spz loader". A solution where the "base loader" can load both would be cleaner in some way, but would require the jsplat-io-gltf package to have a dependency to jsplat-io-gltf-spz. Maybe I'll change this later...)

The current state of the application is attached here, just for reference:

jsplat-app-0.0.1-SNAPSHOT-jar-with-dependencies-2025-11-14.jar.zip

I'll just merge this as it is for now.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants