bevy_cube_marcher 0.5.3

A shader-based marching cubes implementation for Bevy
Documentation
use std::sync::Arc;

use bevy::color::palettes::{css, tailwind};
use bevy::pbr::wireframe::{WireframeConfig, WireframePlugin};
use bevy::prelude::*;
use bevy_cube_marcher::cpu::*;
use bevy_cube_marcher::*;
use fastnoise_lite::FastNoiseLite;

fn main() {
    App::new()
        .add_plugins((
            DefaultPlugins,
            WireframePlugin::default(),
            bevy_panorbit_camera::PanOrbitCameraPlugin,
            CpuMarchingCubesPlugin::<MyComputeSampler, StandardMaterial>::default(),
        ))
        .insert_resource(WireframeConfig {
            global: true,
            default_color: css::WHITE.into(),
            ..default()
        })
        .insert_resource(ChunkGeneratorSettings::<MyComputeSampler>::new(32, 8.0))
        .add_systems(Startup, setup)
        .run();
}

#[derive(Resource, Clone, Default)]
struct MyComputeSampler {
    noise: Arc<FastNoiseLite>,
}

impl CpuChunkComputer for MyComputeSampler {
    fn sample(
        &self,
        coord: UVec3,
        chunk_position: IVec3,
        settings: &ChunkGeneratorSettings<MyComputeSampler>,
    ) -> f32 {
        let coord = settings.sample_to_position(coord, chunk_position) * 10.0;
        self.noise.get_noise_3d(coord.x, coord.y, coord.z)
    }
}

fn setup(mut commands: Commands, mut materials: ResMut<Assets<StandardMaterial>>) {
    commands.spawn_scene(bsn! {
        #Camera
        Camera3d
        template_value(Transform::from_xyz(4.0, 6.5, 8.0).looking_at(Vec3::ZERO, Vec3::Y))
        bevy_panorbit_camera::PanOrbitCamera {
            button_orbit: MouseButton::Left,
            button_pan: MouseButton::Left,
            modifier_pan: Option::Some(KeyCode::ShiftLeft),
            reversed_zoom: true,
        }
    });

    commands.spawn_scene(bsn! {
        #Light
        DirectionalLight { illuminance: 4000.0 }
        Transform { rotation: Quat::from_euler(EulerRot::XYZ, -1.9, 0.8, 0.0) }
    });

    commands.spawn_scene(bsn! {
        ChunkLoader::<MyComputeSampler>::new(5)
    });

    commands.insert_resource(ChunkMaterial::<MyComputeSampler, StandardMaterial>::new(
        materials.add(Color::from(tailwind::EMERALD_500)),
    ));
}