Skip to content

Commit

Permalink
feat: render-mode cli arg
Browse files Browse the repository at this point in the history
  • Loading branch information
mosure committed Jul 29, 2024
1 parent 63e3d6b commit dbcd8df
Show file tree
Hide file tree
Showing 5 changed files with 55 additions and 37 deletions.
2 changes: 1 addition & 1 deletion src/primitive.rs
Original file line number Diff line number Diff line change
Expand Up @@ -438,7 +438,7 @@ fn build_primitive(
}


fn process_primitives(
pub fn process_primitives(
mut commands: Commands,
mut meshes: ResMut<Assets<Mesh>>,
mut standard_materials: ResMut<Assets<StandardMaterial>>,
Expand Down
2 changes: 1 addition & 1 deletion src/render/depth.wgsl
Original file line number Diff line number Diff line change
Expand Up @@ -13,5 +13,5 @@ fn depth_to_rgb(depth: f32) -> vec3<f32> {

@fragment
fn fragment(in: VertexOutput) -> @location(0) vec4<f32> {
return vec4<f32>(depth_to_rgb(in.position.w), 1.0);
return vec4<f32>(vec3<f32>(in.position.w), 1.0);
}
38 changes: 32 additions & 6 deletions src/render/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,29 @@ use bevy::{
prelude::*,
render::render_resource::Face,
};
use bevy_args::{
Deserialize,
Serialize,
ValueEnum,
};

use crate::primitive::process_primitives;

pub mod depth;
pub mod normal;


#[derive(Default, Debug, Resource, Reflect)]
#[derive(
Debug,
Default,
Clone,
PartialEq,
Serialize,
Deserialize,
Reflect,
Resource,
ValueEnum,
)]
#[reflect(Resource)]
pub enum RenderMode {
#[default]
Expand All @@ -29,11 +46,20 @@ impl Plugin for RenderPlugin {
app.add_plugins(normal::NormalPlugin);

// TODO: add wireframe depth, pbr disable, normals
app.add_systems(PostUpdate, auto_disable_pbr_material::<depth::Depth>);
app.add_systems(PostUpdate, auto_disable_pbr_material::<normal::Normal>);

app.add_systems(PostUpdate, apply_render_modes);
app.add_systems(PostUpdate, enable_pbr_material);
app.add_systems(
Update,
apply_render_modes.after(process_primitives),
);
app.add_systems(
Update,
(
auto_disable_pbr_material::<depth::Depth>,
auto_disable_pbr_material::<normal::Normal>,
enable_pbr_material,
)
.after(apply_render_modes)
.after(process_primitives)
);
}
}

Expand Down
43 changes: 14 additions & 29 deletions src/scene/room.rs
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ impl Plugin for ZeroverseRoomPlugin {
#[derive(Clone, Debug, Reflect, Resource)]
#[reflect(Resource)]
pub struct ZeroverseRoomSettings {
pub camera_floor_padding: f32,
pub camera_wall_padding: f32,
pub center_primitive_count: CountSampler,
pub center_primitive_scale_sampler: ScaleSampler,
Expand All @@ -69,6 +70,7 @@ impl Default for ZeroverseRoomSettings {
// };

Self {
camera_floor_padding: 3.0,
camera_wall_padding: 1.0,
center_primitive_count: CountSampler::Bounded(4, 10),
center_primitive_scale_sampler: ScaleSampler::Bounded(
Expand All @@ -78,7 +80,7 @@ impl Default for ZeroverseRoomSettings {
center_primitive_settings: ZeroversePrimitiveSettings::default(),
looking_at_sampler: LookingAtSampler::Sphere {
geometry: Sphere::new(4.0),
transform: Transform::from_translation(Vec3::new(0.0, 1.0, 0.0)),
transform: Transform::from_translation(Vec3::new(0.0, 3.0, 0.0)),
},
room_size: ScaleSampler::Bounded(
Vec3::new(12.0, 8.0, 12.0),
Expand All @@ -105,27 +107,6 @@ fn setup_scene(
.insert(SpatialBundle::default())
.with_children(|commands| {
{// outer walls
// // bounding box
// let outer_walls_settings = ZeroversePrimitiveSettings {
// invert_normals: true,
// available_types: vec![ZeroversePrimitives::Cuboid], // TODO: change to plane, support multi-material hull
// components: 1,
// wireframe_probability: 1.0,
// noise_probability: 0.0,
// cast_shadows: false,
// position_sampler: PositionSampler::Exact {
// position: Vec3::new(0.0, scale.y / 2.0, 0.0),
// },
// rotation_sampler: RotationSampler::Identity,
// scale_sampler: ScaleSampler::Exact(scale),
// ..default()
// };

// commands.spawn(PrimitiveBundle {
// settings: outer_walls_settings,
// ..default()
// });

let base_plane_settings = ZeroversePrimitiveSettings {
cull_mode: Some(Face::Front),
available_types: vec![ZeroversePrimitives::Plane],
Expand Down Expand Up @@ -259,9 +240,9 @@ fn setup_scene(
let center_object_height = 8.0;
let center_object_sampler = PositionSampler::Cube {
extents: Vec3::new(
scale.x / 2.0,
scale.x / 1.5,
center_object_height / 2.0,
scale.z / 2.0,
scale.z / 1.5,
),
};

Expand Down Expand Up @@ -293,18 +274,22 @@ fn setup_scene(
});

for _ in 0..scene_settings.num_cameras {
let size = Vec3::new(
scale.x - room_settings.camera_wall_padding,
scale.y / 2.0,
scale.z - room_settings.camera_wall_padding,
let size: Vec3 = Vec3::new(
scale.x - room_settings.camera_wall_padding * 2.0,
scale.y - room_settings.camera_floor_padding,
scale.z - room_settings.camera_wall_padding * 2.0,
);

commands.spawn(ZeroverseCamera {
sampler: CameraPositionSampler {
sampler_type: CameraPositionSamplerType::Band {
size,
rotation: Quat::IDENTITY,
translate: Vec3::new(0.0, scale.y / 2.0 + size.y / 2.0, 0.0),
translate: Vec3::new(
0.0,
room_settings.camera_floor_padding + size.y / 2.0,
0.0,
),
},
looking_at: room_settings.looking_at_sampler.clone(),
},
Expand Down
7 changes: 7 additions & 0 deletions tools/viewer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ use bevy_zeroverse::{
},
plucker::ZeroversePluckerSettings,
primitive::ScaleSampler,
render::RenderMode,
scene::{
room::ZeroverseRoomSettings,
RegenerateSceneEvent,
Expand Down Expand Up @@ -94,6 +95,9 @@ struct BevyZeroverseViewer {
#[arg(long, default_value = "0.0")]
yaw_speed: f32,

#[arg(long, value_enum, default_value_t = RenderMode::Color)]
render_mode: RenderMode,

#[arg(long, value_enum, default_value_t = ZeroverseSceneType::Object)]
scene_type: ZeroverseSceneType,
}
Expand All @@ -112,6 +116,7 @@ impl Default for BevyZeroverseViewer {
name: "bevy_zeroverse".to_string(),
regenerate_ms: 0,
yaw_speed: 0.0,
render_mode: Default::default(),
scene_type: Default::default(),
}
}
Expand Down Expand Up @@ -181,6 +186,8 @@ fn viewer_app() {

app.add_plugins(BevyZeroversePlugin);

app.insert_resource(args.render_mode);

app.insert_resource(DefaultZeroverseCamera {
resolution: UVec2::new(args.width as u32, args.height as u32).into(),
});
Expand Down

0 comments on commit dbcd8df

Please sign in to comment.