Expand description
§3D Gaussian Splatting Viewer
…written in Rust using wgpu.

§Overview
[!WARNING]
This library is under active development, breaking API changes between versions may occur frequently.
Use at your own risk.
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:Viewerequivalent for multiple models. Requiresmulti-modelfeature.selection: Select Gaussians based on viewport interactions, e.g. rectangle or brush. Requiresselectionfeature.
[!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
wgputypes into functions.
§Simple Viewer
You can use Viewer to render a single 3D Gaussian Splatting model:
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.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.
Re-exports§
pub use wgpu_3dgs_core as core;pub use wgpu_3dgs_editor as editor;
Modules§
- selection
- Selection of Gaussians via viewport interactions.
- shader
- Shader modules for the
wesl::CodegenPkgwgpu-3dgs-viewer.
Structs§
- Camera
- A camera.
- Camera
Buffer - The camera buffer.
- Camera
Pod - The POD representation of camera.
- Gaussians
Depth Buffer - The Gaussians depth storage buffer.
- Indirect
Args Buffer - The indirect args storage buffer for
Renderer. - Indirect
Indices Buffer - The indirect indices storage buffer for
Renderer. - Multi
Model Viewer - The 3D Gaussian splatting viewer for multiple models.
- Multi
Model Viewer Bind Groups - The bind groups for
MultiModelViewer. - Multi
Model Viewer Gaussian Buffers - The buffers for
Viewerrelated to the Guassian model. - Multi
Model Viewer Model - The model of the
MultiModelViewer. - Multi
Model Viewer World Buffers - The buffers for
Viewerrelated to the world. - Preprocessor
- Preprocessor to preprocess the Gaussians.
- Radix
Sort Indirect Args Buffer - The dispatch indirect args storage buffer for
RadixSorter. - Radix
Sorter - Radix sorter for sorting Gaussians based on their depth (i.e. clipped z value).
- Renderer
- A renderer for Gaussians.
- Viewer
- The 3D Gaussian splatting viewer.
- Viewer
Create Options - The options for creating a
ViewerusingViewer::new_with_options.
Enums§
- Multi
Model Viewer Access Error - The error type for accessing model in
MultiModelViewer. - Preprocessor
Create Error - The error type for
Preprocessor::new. - Renderer
Create Error - The error type for
Renderer::new. - Viewer
Create Error - The error type for
Viewer::new.
Traits§
- Camera
Trait - A camera trait.
Type Aliases§
- Default
Gaussian Pod - The default viewer
GaussianPodtype. - Radix
Sorter Bind Groups