Skip to content

Unified gsplat architecture is available to GSplatComponent #7861

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 9 commits into from
Jul 28, 2025

Conversation

mvaligursky
Copy link
Contributor

@mvaligursky mvaligursky commented Jul 25, 2025

A public way to utilize unified gsplat architecture, using additiona unified component property:

entity.addComponent('gsplat', {
    asset: assets.logo,
    unified: true
});

Note that this property can be changed only when the splat is disabled (it's internal data not created) at the moment, and ignored with a warning otherwise.

Details:

  • internal GSplatDirector class, managing instancing of GSplatManager for cameras / layers that have the gsplat component
  • Layers stores array of GSplatPlacement (equivanent to MeshInstance) - this is all private, used by GSplatDirector to manage what it needs to render
  • added an example to show / test rendering from multiple cameras.

Other changes:

  • dynamic sizing for internal buffers. Before, buffers were sized for all gaussian splats. Now they're dynamically adjusted to fit splats based on LOD, using significantly less memory for large scenes with LOD.
  • When Texture.upload() is manually called, the upload takes place immediately on WebGL now, to match WebGPU. This allows the upload buffer to be immediately reused on the CPU, instead of being required to be untouched till the rendering uploads the texture. This also avoids uploading textures in the middle of the render passes.
Screen.Recording.2025-07-25.at.14.45.53.mov

@mvaligursky mvaligursky self-assigned this Jul 25, 2025
@mvaligursky mvaligursky added feature area: graphics Graphics related issue labels Jul 25, 2025
@mvaligursky mvaligursky requested a review from a team July 25, 2025 14:27
@slimbuck slimbuck requested a review from Copilot July 28, 2025 12:21
Copy link
Contributor

@Copilot Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR introduces unified GSplat architecture that allows multiple GSplat components to be efficiently rendered together using a centralized director system. The new architecture provides better memory management through dynamic buffer sizing and enables multi-camera rendering scenarios.

Key changes:

  • Adds a unified property to GSplatComponent that enables the new unified rendering architecture
  • Introduces a GSplatDirector class that manages GSplatManager instances per camera and layer combination
  • Replaces fixed-size buffers with dynamic sizing based on LOD, reducing memory usage for large scenes

Reviewed Changes

Copilot reviewed 23 out of 23 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
src/framework/components/gsplat/component.js Adds unified property and GSplatPlacement support for new rendering architecture
src/scene/renderer/renderer.js Integrates GSplatDirector into the main renderer
src/scene/layer.js Adds GSplatPlacement management to layers
src/scene/gsplat/unified/gsplat-director.js New director class managing GSplatManager instances per camera/layer
src/scene/gsplat/unified/gsplat-manager.js Updates manager to work with placement-based architecture
examples/src/examples/gaussian-splatting/multi-view.example.mjs New example demonstrating unified architecture with multiple cameras

@mvaligursky mvaligursky merged commit 95a0998 into main Jul 28, 2025
7 checks passed
@mvaligursky mvaligursky deleted the mv-splat-unified-component branch July 28, 2025 12:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area: graphics Graphics related issue feature
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants