bevy_gaussian_splatting/
lib.rs

1#![allow(incomplete_features)]
2#![feature(lazy_type_alias)]
3
4use bevy::prelude::*;
5pub use bevy_interleave::prelude::*;
6
7pub use camera::GaussianCamera;
8
9pub use gaussian::{
10    formats::{
11        planar_3d::{Gaussian3d, PlanarGaussian3d, PlanarGaussian3dHandle, random_gaussians_3d},
12        planar_4d::{Gaussian4d, PlanarGaussian4d, PlanarGaussian4dHandle, random_gaussians_4d},
13    },
14    settings::{CloudSettings, GaussianMode, RasterizeMode},
15};
16
17pub use io::scene::{GaussianScene, GaussianSceneHandle};
18
19pub use material::spherical_harmonics::SphericalHarmonicCoefficients;
20
21use io::IoPlugin;
22
23pub mod camera;
24pub mod gaussian;
25pub mod io;
26pub mod material;
27pub mod math;
28pub mod morph;
29pub mod query;
30pub mod render;
31pub mod sort;
32pub mod stream;
33pub mod utils;
34
35#[cfg(feature = "noise")]
36pub mod noise;
37
38pub struct GaussianSplattingPlugin;
39
40impl Plugin for GaussianSplattingPlugin {
41    fn build(&self, app: &mut App) {
42        // TODO: allow hot reloading of Cloud handle through inspector UI
43        app.register_type::<SphericalHarmonicCoefficients>();
44
45        app.add_plugins(IoPlugin);
46
47        app.add_plugins((
48            camera::GaussianCameraPlugin,
49            gaussian::settings::SettingsPlugin,
50            gaussian::cloud::CloudPlugin::<Gaussian3d>::default(),
51            gaussian::cloud::CloudPlugin::<Gaussian4d>::default(),
52        ));
53
54        // TODO: add half types
55        app.add_plugins((
56            PlanarStoragePlugin::<Gaussian3d>::default(),
57            PlanarStoragePlugin::<Gaussian4d>::default(),
58        ));
59
60        app.add_plugins((
61            render::RenderPipelinePlugin::<Gaussian3d>::default(),
62            render::RenderPipelinePlugin::<Gaussian4d>::default(),
63        ));
64
65        app.add_plugins((material::MaterialPlugin, query::QueryPlugin));
66
67        #[cfg(feature = "noise")]
68        app.add_plugins(noise::NoisePlugin);
69    }
70}