diff --git a/blade-helpers/src/lib.rs b/blade-helpers/src/lib.rs index 9e3f2bfe..db7f2ec8 100644 --- a/blade-helpers/src/lib.rs +++ b/blade-helpers/src/lib.rs @@ -6,3 +6,18 @@ mod hud; pub use blade_render::Camera; pub use camera::ControlledCamera; pub use hud::{populate_debug_selection, ExposeHud}; + +pub fn default_ray_config() -> blade_render::RayConfig { + blade_render::RayConfig { + num_environment_samples: 1, + environment_importance_sampling: false, + temporal_tap: true, + temporal_history: 10, + spatial_taps: 1, + spatial_tap_history: 10, + spatial_radius: 20, + t_start: 0.01, + pairwise_mis: true, + defensive_mis: 0.1, + } +} diff --git a/blade-render/code/gbuf.inc.wgsl b/blade-render/code/gbuf.inc.wgsl index 374aa708..1f4d84a1 100644 --- a/blade-render/code/gbuf.inc.wgsl +++ b/blade-render/code/gbuf.inc.wgsl @@ -1,3 +1,5 @@ +#use DEBUG_MODE + const MOTION_SCALE: f32 = 0.02; const USE_MOTION_VECTORS: bool = true; -const WRITE_DEBUG_IMAGE: bool = false; +const WRITE_DEBUG_IMAGE: bool = DEBUG_MODE; diff --git a/blade-render/code/ray-trace.wgsl b/blade-render/code/ray-trace.wgsl index a51931ef..6f0a1f95 100644 --- a/blade-render/code/ray-trace.wgsl +++ b/blade-render/code/ray-trace.wgsl @@ -514,7 +514,7 @@ fn main(@builtin(global_invocation_id) global_id: vec3) { var rng = random_init(global_index, parameters.frame_index); let surface = read_surface(vec2(global_id.xy)); - let enable_debug = all(global_id.xy == debug.mouse_pos); + let enable_debug = DEBUG_MODE && all(global_id.xy == debug.mouse_pos); let enable_restir_debug = (debug.draw_flags & DebugDrawFlags_RESTIR) != 0u && enable_debug; let ro = compute_restir(surface, vec2(global_id.xy), &rng, enable_restir_debug); let color = ro.radiance; diff --git a/blade-render/src/asset_hub.rs b/blade-render/src/asset_hub.rs index 4245d5d3..98b49533 100644 --- a/blade-render/src/asset_hub.rs +++ b/blade-render/src/asset_hub.rs @@ -34,6 +34,7 @@ impl AssetHub { ); let mut sh_baker = crate::shader::Baker::new(gpu_context); + sh_baker.register_bool("DEBUG_MODE", cfg!(debug_assertions)); sh_baker.register_enum::(); sh_baker.register_bitflags::(); sh_baker.register_bitflags::(); diff --git a/blade-render/src/render/mod.rs b/blade-render/src/render/mod.rs index 2d61582f..751140a5 100644 --- a/blade-render/src/render/mod.rs +++ b/blade-render/src/render/mod.rs @@ -1044,10 +1044,7 @@ impl Renderer { draw_flags: config.draw_flags.bits(), texture_flags: config.texture_flags.bits(), unused: 0, - mouse_pos: match config.mouse_pos { - Some(p) => [p[0], self.surface_size.height as i32 - p[1]], - None => [-1; 2], - }, + mouse_pos: config.mouse_pos.unwrap_or([-1; 2]), } } diff --git a/blade-render/src/shader.rs b/blade-render/src/shader.rs index d99c9de3..69a14f72 100644 --- a/blade-render/src/shader.rs +++ b/blade-render/src/shader.rs @@ -19,17 +19,20 @@ pub struct Shader { pub raw: Result, } -pub struct Expansion(HashMap); +pub enum Expansion { + Values(HashMap), + Bool(bool), +} impl Expansion { pub fn from_enum>() -> Self { - Self( + Self::Values( E::iter() .map(|variant| (format!("{variant:?}"), variant.into())) .collect(), ) } pub fn from_bitflags>() -> Self { - Self( + Self::Values( F::FLAGS .iter() .map(|flag| (flag.name().to_string(), flag.value().bits())) @@ -64,6 +67,11 @@ impl Baker { pub fn register_bitflags>(&mut self) { self.register::(Expansion::from_bitflags::()); } + + pub fn register_bool(&mut self, name: &str, value: bool) { + self.expansions + .insert(name.to_string(), Expansion::Bool(value)); + } } fn parse_impl( @@ -93,8 +101,16 @@ fn parse_impl( ); } else if line.starts_with("#use") { let type_name = line.split_whitespace().last().unwrap(); - for (key, value) in expansions[type_name].0.iter() { - writeln!(text_out, "const {}_{}: u32 = {}u;", type_name, key, value).unwrap(); + match expansions[type_name] { + Expansion::Values(ref map) => { + for (key, value) in map.iter() { + writeln!(text_out, "const {}_{}: u32 = {}u;", type_name, key, value) + .unwrap(); + } + } + Expansion::Bool(value) => { + writeln!(text_out, "const {}: bool = {};", type_name, value).unwrap(); + } } } else { *text_out += line; diff --git a/examples/scene/main.rs b/examples/scene/main.rs index 7b34e4c7..237546ef 100644 --- a/examples/scene/main.rs +++ b/examples/scene/main.rs @@ -257,18 +257,7 @@ impl Example { is_file_hovered: false, last_render_time: time::Instant::now(), render_times: VecDeque::with_capacity(FRAME_TIME_HISTORY), - ray_config: blade_render::RayConfig { - num_environment_samples: 1, - environment_importance_sampling: false, - temporal_tap: true, - temporal_history: 10, - spatial_taps: 1, - spatial_tap_history: 10, - spatial_radius: 10, - t_start: 0.1, - pairwise_mis: true, - defensive_mis: 0.0, - }, + ray_config: blade_helpers::default_ray_config(), denoiser_enabled: true, denoiser_config: blade_render::DenoiserConfig { num_passes: 3, diff --git a/src/lib.rs b/src/lib.rs index 2ee0b77a..01889de7 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -482,18 +482,7 @@ impl Engine { reset_variance: false, reset_reservoirs: true, }, - ray_config: blade_render::RayConfig { - num_environment_samples: 1, - environment_importance_sampling: false, - temporal_tap: true, - temporal_history: 10, - spatial_taps: 1, - spatial_tap_history: 10, - spatial_radius: 10, - t_start: 0.01, - pairwise_mis: true, - defensive_mis: 0.1, - }, + ray_config: blade_helpers::default_ray_config(), denoiser_enabled: true, denoiser_config: blade_render::DenoiserConfig { num_passes: 4,