KHR_gaussian_splatting_compression_spz_2#2531
KHR_gaussian_splatting_compression_spz_2#2531weegeekps wants to merge 2 commits intoKhronosGroup:mainfrom
Conversation
extensions/2.0/Khronos/KHR_gaussian_splatting_compression_spz_2/README.md
Outdated
Show resolved
Hide resolved
…2/README.md Co-authored-by: Sean Lilley <lilleyse@gmail.com>
| Data may be used directly from SPZ or may be mapped to the placeholder attributes this extension provides. When mapping to attributes, the data from SPZ is mapped from the `GaussianCloudData` struct in SPZ to the following attributes in glTF. Several fields require additional conversion to make them glTF and renderer ready. | ||
|
|
||
| | SPZ `GaussianCloudData` field | glTF Attribute | Required Conversion | | ||
| | --- | --- | |
There was a problem hiding this comment.
The table formatting is broken
|
Not sure whether it's on the radar (I know that there currently is some turmoils around this topic...), but the wording and description around This extension casually mentions |
|
@javagl I have updates in progress that bring this in line with the current base spec including the changes around color spaces. I plan on pushing those changes as soon as that work is fully settled and we have consensus. |
|
|
||
| This allows for a graceful fallback when an implementation does not support this extension. | ||
|
|
||
| When compressing or decompressing the SPZ data to be stored within the glTF, you must specify a Left-Up-Front (`LUF`) coordinate system in the SPZ `PackOptions` or `UnpackOptions` within the SPZ library. This ensures that the data is compressed and decompressed appropriately for glTF. |
There was a problem hiding this comment.
Hi, I've been looking into how KHR_gaussian_splatting_compression_spz_2 is implemented in Cesium, and there the spz data is stored in LUF coordinates, rather than the standard RUB, with no conversion on load.
Is the intention here for data in the spz files to be stored in the standard RUB coordinates and converted to/from LUF on read/write, or for the spz data to be stored in LUF coordinates like in the current Cesium implementation?
My interpretation of the spec would indicate the former.
There was a problem hiding this comment.
I think that this is one point that (has been brought up occasionally and) may have to be clarified. The comment at CesiumGS/cesium#12682 (comment) refers to an older state of the implementation, and it seems like the specific rotations that this comment is linking to are no longer applied. But it might be that some rotations are now done elsewhere.
(An aside: The rotation was originally done by the SPZ-loader library. And this is using the spz convertCoordinates function under the hood. And I'm about 95% sure that this implementation is wrong. But I haven't confirmed that yet...)
|
Coming back to the According to the current base extension specification, the |
|
Just so folks are aware: I have a lot of updates in queue for this extension, but I am waiting to see the final editorial draft of the base extension.
Most all of the SPZ loaders immediately apply As far as I can tell, this is very much in the "spirit" of SPZ. I don't believe we should require language to the SPZ extension to require implementations to change. I believe this is also why it's called "colors" and not DC or SH0. (DC with spherical harmonics does not mean diffuse component although that is a common point of confusion.) This is one of the reasons we put this statement in the spec:
|
And I'm not even sure that it is "correct" to do this, because it does not anticipate the "colorScale" in SPZ. See the "Colors" point at the bottom of the first comment of nianticlabs/spz#42 But the main reason for "reviving" this PR by adding that comment: We talked about some of that in the 3D Formats call. And one point that we talked about was that the That reduces ambiguities and simplifies the loaders that do support the extension. It has the drawback that any glTF asset that wants to offer the fallback path has to store this as additional (!) data. If it was non-exclusive, people could opt in for always representing (And I know one "creator" of glTF-SPZ splat file that does always write the |
Under the covers, SPZ packs these as RGB for stability. While doing so and to support values greater than 1.0, they use a scale of
On the surface I think this is a reasonable take, but when I think about it more it feels like we've pushed past the fine line we've been treading. There is a separation of concerns matter here that I think we have to account for; we've made it upfront in the base extension that other extensions, such as compression extensions, may have slightly different ways of providing the data. This rule violates that policy and to me it seems like we're telling compression extensions that if you don't fit this mold correctly, you can't build off of this base extension. That seems very wrong to me. There are some maths that we must specify for consistent rendering of 3DGS from glTF. The |
Hi @weegeekps and Khronos glTF community, This is a fascinating and much-needed proposal. We’ve been closely following the development of the KHR_gaussian_splatting and KHR_gaussian_splatting_compression_spz_2 extensions. As the draft approaches a critical stage, we wanted to share that a complete, production-ready, and community-vetted open-source toolchain implementing this specification already exists and is actively used. We are the maintainers of the SPZ Open-Source Ecosystem (spz-ecosystem), and we have built two core, interoperable projects that form a full pipeline for SPZ v2: spz_gatekeeper - The Format Compliance Engine
spz2glb - The High-Performance Conversion Hub
Why This Matters for the Spec:
We are fully aligned with the goal of a robust, interoperable standard. If helpful, we are ready to:
The repositories are under active development (currently at v2.0.1), and we welcome any feedback or collaboration. Best regards, |
This is a draft extension proposal for using Niantic Spatial's SPZ compression library for compression 3D Gaussian splatting data using the base KHR_gaussian_splatting extension with glTF. This extension targets version 2 of SPZ.
As we get closer to done with the base extension for 3D Gaussian splatting, KHR_gaussian_splatting, it has made more and more sense to break out the
KHR_gaussian_splatting_compression_spz_2extension for SPZ compression of 3DGS data. This allows them each to independently go through the ratification process and neither will hold up the other.For previous history and conversations regarding the development of this extension, please look at the PR for KHR_gaussian_splatting before this linked comment.