diff --git a/README.md b/README.md index 96b69cf..b28c240 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ ### [project page](https://mosure.github.io/bevy_zeroverse/project/index.html) | [arXiv](https://arxiv.org/abs/) -bevy zeroverse synthetic reconstruction dataset generator. view the [live demo](https://mosure.github.io/bevy_zeroverse), press `r` to regenerate the scene. +bevy zeroverse synthetic reconstruction dataset generator. view the [live demo](https://mosure.github.io/bevy_zeroverse?yaw_speed=0.7&cameras_x=2&cameras_y=2®enerate_ms=8000&plucker_visualization=true). ## capabilities diff --git a/assets/materials/subset/Fabric/acg_fabric_009/basecolor.jpg b/assets/materials/subset/Fabric/acg_fabric_009/basecolor.jpg new file mode 100644 index 0000000..5993d44 Binary files /dev/null and b/assets/materials/subset/Fabric/acg_fabric_009/basecolor.jpg differ diff --git a/assets/materials/subset/Fabric/acg_fabric_009/displacement.jpg b/assets/materials/subset/Fabric/acg_fabric_009/displacement.jpg new file mode 100644 index 0000000..dfdcd7e Binary files /dev/null and b/assets/materials/subset/Fabric/acg_fabric_009/displacement.jpg differ diff --git a/assets/materials/subset/Fabric/acg_fabric_009/height.jpg b/assets/materials/subset/Fabric/acg_fabric_009/height.jpg new file mode 100644 index 0000000..c5800a8 Binary files /dev/null and b/assets/materials/subset/Fabric/acg_fabric_009/height.jpg differ diff --git a/assets/materials/subset/Fabric/acg_fabric_009/metallic_roughness.jpg b/assets/materials/subset/Fabric/acg_fabric_009/metallic_roughness.jpg new file mode 100644 index 0000000..cdbb5e5 Binary files /dev/null and b/assets/materials/subset/Fabric/acg_fabric_009/metallic_roughness.jpg differ diff --git a/assets/materials/subset/Fabric/acg_fabric_009/normal.jpg b/assets/materials/subset/Fabric/acg_fabric_009/normal.jpg new file mode 100644 index 0000000..2664b37 Binary files /dev/null and b/assets/materials/subset/Fabric/acg_fabric_009/normal.jpg differ diff --git a/assets/materials/subset/Terracotta/acg_painted_bricks_002/basecolor.jpg b/assets/materials/subset/Terracotta/acg_painted_bricks_002/basecolor.jpg new file mode 100644 index 0000000..4a071a7 Binary files /dev/null and b/assets/materials/subset/Terracotta/acg_painted_bricks_002/basecolor.jpg differ diff --git a/assets/materials/subset/Terracotta/acg_painted_bricks_002/displacement.jpg b/assets/materials/subset/Terracotta/acg_painted_bricks_002/displacement.jpg new file mode 100644 index 0000000..1b7ffd8 Binary files /dev/null and b/assets/materials/subset/Terracotta/acg_painted_bricks_002/displacement.jpg differ diff --git a/assets/materials/subset/Terracotta/acg_painted_bricks_002/height.jpg b/assets/materials/subset/Terracotta/acg_painted_bricks_002/height.jpg new file mode 100644 index 0000000..23f3721 Binary files /dev/null and b/assets/materials/subset/Terracotta/acg_painted_bricks_002/height.jpg differ diff --git a/assets/materials/subset/Terracotta/acg_painted_bricks_002/metallic_roughness.jpg b/assets/materials/subset/Terracotta/acg_painted_bricks_002/metallic_roughness.jpg new file mode 100644 index 0000000..a48009d Binary files /dev/null and b/assets/materials/subset/Terracotta/acg_painted_bricks_002/metallic_roughness.jpg differ diff --git a/assets/materials/subset/Terracotta/acg_painted_bricks_002/normal.jpg b/assets/materials/subset/Terracotta/acg_painted_bricks_002/normal.jpg new file mode 100644 index 0000000..876a550 Binary files /dev/null and b/assets/materials/subset/Terracotta/acg_painted_bricks_002/normal.jpg differ diff --git a/tools/viewer.rs b/tools/viewer.rs index 4b3aa3e..f17dad5 100644 --- a/tools/viewer.rs +++ b/tools/viewer.rs @@ -8,11 +8,15 @@ use bevy::{ core_3d::ScreenSpaceTransmissionQuality, tonemapping::Tonemapping, }, - render::camera::{ - Exposure, - Viewport, + render::{ + camera::{ + Exposure, + Viewport, + }, + render_resource::Extent3d, }, time::Stopwatch, + window::WindowResized, }; use bevy_args::{ parse_args, @@ -185,7 +189,7 @@ fn viewer_app() { app.add_systems(PreUpdate, press_m_shuffle_materials); app.add_systems(PreUpdate, setup_material_grid); - app.add_systems(Update, auto_yaw_camera); + app.add_systems(Update, (auto_yaw_camera, set_camera_viewports)); app.add_systems(PostUpdate, regenerate_scene_system); app.add_systems(PostUpdate, setup_plucker_visualization); @@ -211,34 +215,16 @@ fn get_viewports( .collect::>() } +#[derive(Component)] +struct CameraPosition { + pos: UVec2, +} + fn setup_camera( mut commands: Commands, args: Res, asset_server: Res, ) { - // TODO: set camera viewports to cell size on window resize - // fn set_camera_viewports( - // windows: Query<&Window>, - // mut resize_events: EventReader, - // mut query: Query<(&CameraPosition, &mut Camera)>, - // ) { - // // We need to dynamically resize the camera's viewports whenever the window size changes - // // so then each camera always takes up half the screen. - // // A resize_event is sent when the window is first created, allowing us to reuse this system for initial setup. - // for resize_event in resize_events.read() { - // let window = windows.get(resize_event.window).unwrap(); - // let size = window.physical_size() / 2; - - // for (camera_position, mut camera) in &mut query { - // camera.viewport = Some(Viewport { - // physical_position: camera_position.pos * size, - // physical_size: size, - // ..default() - // }); - // } - // } - // } - let camera_width = args.width as u32 / args.cameras_x as u32; let camera_height = args.height as u32 / args.cameras_y as u32; @@ -288,6 +274,9 @@ fn setup_camera( size: UVec2::new(camera_width, camera_height), }, environment_map.clone(), + CameraPosition { + pos: UVec2::new(column, row), + }, )); } @@ -302,6 +291,46 @@ fn setup_camera( }); } +fn set_camera_viewports( + args: Res, + mut images: ResMut>, + windows: Query<&Window>, + mut resize_events: EventReader, + mut query: Query<(&CameraPosition, &mut Camera, &PluckerOutput)>, +) { + for resize_event in resize_events.read() { + let window = windows.get(resize_event.window).unwrap(); + let size = window.physical_size() / UVec2::new(args.cameras_x as u32, args.cameras_y as u32); + + for ( + camera_position, + mut camera, + plucker_output, + ) in &mut query { + camera.viewport = Some(Viewport { + physical_position: camera_position.pos * size, + physical_size: size, + ..default() + }); + + let new_plucker_size = Extent3d { + width: size.x, + height: size.y, + ..default() + }; + + let plucker_u = images.get_mut(&plucker_output.plucker_u).unwrap(); + plucker_u.resize(new_plucker_size); + + let plucker_v = images.get_mut(&plucker_output.plucker_v).unwrap(); + plucker_v.resize(new_plucker_size); + + let plucker_visualization = images.get_mut(&plucker_output.visualization).unwrap(); + plucker_visualization.resize(new_plucker_size); + } + } +} + fn auto_yaw_camera( args: Res, time: Res