We're building animated and streamed Gaussian splat playback into Scenery, our native Apple AR/spatial authoring platform, and have a few questions about the intended usage of GaussianSplatComponent / GaussianSplatResource.
- Dynamic / animated splats (4D)
Is mutating the underlying LowLevelBuffer behind a BufferResource at runtime a supported pattern, or is the component intended for static captures? BufferResource's init is @MainActor and the resource's bufferResource property is let, which suggests static intent. For animated (4D) splats, do we need to wrap a new BufferResource each frame and reassign it, or will in-place writes to the existing buffer be picked up by the renderer? If re-wrapping is required, is there a recommended cadence, and does it trigger a full re-sort/re-upload internally?
- LOD streaming / swapping
Related: for streaming splat LOD, is swapping the BufferResource (or its buffers) at runtime supported, and is there a cost model we should design around — e.g. does a swap re-sort and re-upload everything, or can partial updates be done?
- Splat-count limit
The BufferResource initializer throws past an internal limit (we're seeing ~200k). Is this limit fixed, memory-derived, or per-device? Is it per-component or per-scene — i.e. can we tile a large capture across multiple GaussianSplatComponents to exceed it? Any guidance on the intended ceiling and whether it's expected to change?
- Large captures as immersive environments
We'd like to use a large splat capture as an environment the user walks inside (camera within the splat volume), rather than an object viewed from outside. Is this an intended use case? We're seeing splats appear to fade/break up as the camera gets very close — is that near-plane behavior, an opacity falloff, or the projection breaking down at close range, and can it be controlled? Does ProjectionMode.tangential help for inside-the-volume viewing?
Thank you and appreciate the great updates!
Hello @arthurfromberlin, thank you for your questions!
Dynamic / animated splats (4D): I don't think this is supported, but I understand how manipulating the underlying data at runtime seems like it could be possible. I would suggest filing feedback with more information about your use case.
LOD streaming / swapping: There is no built-in LOD support with GuassianSplatComponent itself, but you can swap out entities+components at runtime that contain higher or lower resolution splat data to achieve this same effect.
Splat-count limit: The limit is per component, not per scene, and you can have multiple splats in the same scene. However, there is an upper limit that the system will enforce.
Large captures as immersive environments: You are correct that a splat will disappear when the user enters. See this thread for more details and suggestions on how to work around this limitation.
We would love to learn more about your use case! If you file feedback using Feedback Assistant, please share the ticket numbers here to help us follow your issue on our end. Here's some more info on how to file a feedback on features or bugs. Thank you!