MCPcopy Index your code
hub / github.com/LioQing/wgpu-3dgs-viewer

github.com/LioQing/wgpu-3dgs-viewer @v0.7.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release v0.7.0 ↗ · + Follow
255 symbols 610 edges 40 files 106 documented · 42% updated 54d ago★ 581 open issues
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

3D Gaussian Splatting Viewer

...written in Rust using wgpu.

Crates.io Docs.rs Coverage License

Cover.gif

Overview

This library displays 3D Gaussian Splatting models with wgpu. It includes a ready‑to‑use pipeline and modular pieces you can swap out.

  • Rendering pipeline
  • Preprocess: cull off‑screen points and set up indirect draw data.
  • Sort and draw: sort by depth and draw the Gaussians.
  • Modes: Gaussians may be displayed as splat, ellipse, or point.
  • Transforms: apply model or per-Gaussian transforms.
  • Abstraction for renderer and buffers
  • Viewer: one type that manages the buffers and pipelines.
  • Low-level access: preprocessor, sorter, renderer, and their buffers can be used separately.
  • Supports PLY and SPZ file formats.
  • GPU buffer allows for compressed and uncompressed formats.
  • Optional features
  • Multi-model: render many models with custom draw orders.
  • Selection: viewport selection (e.g. rectangle, brush) that marks Gaussians for editing.
  • Shaders
  • WGSL shaders packaged with WESL, you can extend or replace them.

Usage

You may read the documentation of the following types for more details:

  • [Viewer]: Manages buffers and renders a model.
  • [Preprocessor]: Culls Gaussians and fills indirect args and depths.
  • [RadixSorter]: Sorts Gaussians by depth on the GPU.
  • [Renderer]: Draws Gaussians with the selected display mode.
  • [MultiModelViewer]: [Viewer] equivalent for multiple models. Requires multi-model feature.
  • [selection]: Select Gaussians based on viewport interactions, e.g. rectangle or brush. Requires selection feature.

[!TIP]

The design principles of this crate are to provide modularity and flexibility to the end user of the API, which means exposing low-level WebGPU APIs. However, this means that you have to take care of your code when accessing low-level components. You risk breaking things at run-time if you don't handle them properly.

If you do not want to take the risk, consider using the higher-level wrappers and avoid any instances of passing wgpu types into functions.

Simple Viewer

You can use [Viewer] to render a single 3D Gaussian Splatting model:

```rust ignore use wgpu_3dgs_viewer as gs; use wgpu_3dgs_viewer::core::glam::UVec2;

// Setup wgpu...

// Read the Gaussians from the .ply file let gaussians = gs::core::Gaussians::read_from_file(model_path, gs::core::GaussiansSource::Ply) .expect("gaussians");

// Create the camera let camera = gs::Camera::new(0.1..1e4, 60f32.to_radians());

// Create the viewer let mut viewer = gs::Viewer::new(&device, config.view_formats[0], &gaussians).expect("viewer");

// Setup camera parameters...

// Update the viewer's camera buffer viewer.update_camera( &queue, &camera, UVec2::new(config.width, config.height), );

// Create wgpu command encoder...

// Render the model viewer.render(&mut encoder, &texture_view); ```

Examples

See the examples directory for usage examples.

Dependencies

This crate depends on the following crates:

wgpu-3dgs-viewer wgpu glam wesl
0.7 29.0 0.32 0.3
0.6 28.0 0.30 0.3
0.5 27.0 0.30 0.2
0.4 26.0 0.30 0.2
0.3 25.0 0.30 N/A
0.1 - 0.2 24.0 0.29 N/A

Related Crates

Acknowledgements

This crate uses modified code from KeKsBoTer's wgpu_sort.

References are also taken from other 3D Gaussian splatting renderer implemntations, including antimatter15's splat, KeKsBoTer's web-splat, and Aras' Unity Gaussian Splatting.

Extension points exported contracts — how you extend this code

Core symbols most depended-on inside this repo

Shape

Method 144
Function 64
Class 38
Enum 6
Interface 3

Languages

Rust100%

Modules by API surface

src/radix_sorter.rs33 symbols
src/multi_model.rs20 symbols
src/preprocessor.rs12 symbols
src/lib.rs12 symbols
tests/e2e/multi_model.rs11 symbols
src/selection/buffer.rs11 symbols
src/camera.rs11 symbols
tests/buffer/selection.rs10 symbols
src/selection/viewport_selector.rs10 symbols
src/renderer.rs10 symbols
examples/utils/core.rs10 symbols
examples/selection.rs10 symbols

For agents

$ claude mcp add wgpu-3dgs-viewer \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page