shadow_biases: Support different PCF methods (#10184)
# Objective - Demonstrate the different shadow PCF methods in the `shadow_biases` example ## Solution - Cycle through the available methods when pressing the `F` key - Display which filter method is being used
This commit is contained in:
parent
5d110eb96e
commit
219e2ac6e1
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
use std::f32::consts::PI;
|
use std::f32::consts::PI;
|
||||||
|
|
||||||
use bevy::{input::mouse::MouseMotion, prelude::*};
|
use bevy::{input::mouse::MouseMotion, pbr::ShadowFilteringMethod, prelude::*};
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
App::new()
|
App::new()
|
||||||
@ -11,6 +11,7 @@ fn main() {
|
|||||||
.add_systems(
|
.add_systems(
|
||||||
Update,
|
Update,
|
||||||
(
|
(
|
||||||
|
cycle_filter_methods,
|
||||||
adjust_point_light_biases,
|
adjust_point_light_biases,
|
||||||
toggle_light,
|
toggle_light,
|
||||||
adjust_directional_light_biases,
|
adjust_directional_light_biases,
|
||||||
@ -82,6 +83,7 @@ fn setup(
|
|||||||
..default()
|
..default()
|
||||||
},
|
},
|
||||||
CameraController::default(),
|
CameraController::default(),
|
||||||
|
ShadowFilteringMethod::Hardware2x2,
|
||||||
));
|
));
|
||||||
|
|
||||||
for z_i32 in (-spawn_plane_depth as i32..=0).step_by(2) {
|
for z_i32 in (-spawn_plane_depth as i32..=0).step_by(2) {
|
||||||
@ -115,6 +117,9 @@ fn setup(
|
|||||||
),
|
),
|
||||||
TextSection::new("DirectionalLight", style.clone()),
|
TextSection::new("DirectionalLight", style.clone()),
|
||||||
TextSection::new("]\n", style.clone()),
|
TextSection::new("]\n", style.clone()),
|
||||||
|
TextSection::new("F - switch between filter methods [", style.clone()),
|
||||||
|
TextSection::new("Hardware2x2", style.clone()),
|
||||||
|
TextSection::new("]\n", style.clone()),
|
||||||
TextSection::new("1/2 - change point light depth bias [", style.clone()),
|
TextSection::new("1/2 - change point light depth bias [", style.clone()),
|
||||||
TextSection::new("0.00", style.clone()),
|
TextSection::new("0.00", style.clone()),
|
||||||
TextSection::new("]\n", style.clone()),
|
TextSection::new("]\n", style.clone()),
|
||||||
@ -129,7 +134,7 @@ fn setup(
|
|||||||
style.clone(),
|
style.clone(),
|
||||||
),
|
),
|
||||||
TextSection::new("0.0", style.clone()),
|
TextSection::new("0.0", style.clone()),
|
||||||
TextSection::new("]", style),
|
TextSection::new("]\n", style.clone()),
|
||||||
])
|
])
|
||||||
.with_style(Style {
|
.with_style(Style {
|
||||||
position_type: PositionType::Absolute,
|
position_type: PositionType::Absolute,
|
||||||
@ -166,6 +171,33 @@ fn toggle_light(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn cycle_filter_methods(
|
||||||
|
input: Res<Input<KeyCode>>,
|
||||||
|
mut filter_methods: Query<&mut ShadowFilteringMethod>,
|
||||||
|
mut example_text: Query<&mut Text>,
|
||||||
|
) {
|
||||||
|
if input.just_pressed(KeyCode::F) {
|
||||||
|
for mut filter_method in &mut filter_methods {
|
||||||
|
let filter_method_string;
|
||||||
|
*filter_method = match *filter_method {
|
||||||
|
ShadowFilteringMethod::Hardware2x2 => {
|
||||||
|
filter_method_string = "Castano13".to_string();
|
||||||
|
ShadowFilteringMethod::Castano13
|
||||||
|
}
|
||||||
|
ShadowFilteringMethod::Castano13 => {
|
||||||
|
filter_method_string = "Jimenez14".to_string();
|
||||||
|
ShadowFilteringMethod::Jimenez14
|
||||||
|
}
|
||||||
|
ShadowFilteringMethod::Jimenez14 => {
|
||||||
|
filter_method_string = "Hardware2x2".to_string();
|
||||||
|
ShadowFilteringMethod::Hardware2x2
|
||||||
|
}
|
||||||
|
};
|
||||||
|
example_text.single_mut().sections[7].value = filter_method_string;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn adjust_point_light_biases(
|
fn adjust_point_light_biases(
|
||||||
input: Res<Input<KeyCode>>,
|
input: Res<Input<KeyCode>>,
|
||||||
mut query: Query<&mut PointLight>,
|
mut query: Query<&mut PointLight>,
|
||||||
@ -176,20 +208,22 @@ fn adjust_point_light_biases(
|
|||||||
for mut light in &mut query {
|
for mut light in &mut query {
|
||||||
if input.just_pressed(KeyCode::Key1) {
|
if input.just_pressed(KeyCode::Key1) {
|
||||||
light.shadow_depth_bias -= depth_bias_step_size;
|
light.shadow_depth_bias -= depth_bias_step_size;
|
||||||
example_text.single_mut().sections[7].value = format!("{:.2}", light.shadow_depth_bias);
|
example_text.single_mut().sections[10].value =
|
||||||
|
format!("{:.2}", light.shadow_depth_bias);
|
||||||
}
|
}
|
||||||
if input.just_pressed(KeyCode::Key2) {
|
if input.just_pressed(KeyCode::Key2) {
|
||||||
light.shadow_depth_bias += depth_bias_step_size;
|
light.shadow_depth_bias += depth_bias_step_size;
|
||||||
example_text.single_mut().sections[7].value = format!("{:.2}", light.shadow_depth_bias);
|
example_text.single_mut().sections[10].value =
|
||||||
|
format!("{:.2}", light.shadow_depth_bias);
|
||||||
}
|
}
|
||||||
if input.just_pressed(KeyCode::Key3) {
|
if input.just_pressed(KeyCode::Key3) {
|
||||||
light.shadow_normal_bias -= normal_bias_step_size;
|
light.shadow_normal_bias -= normal_bias_step_size;
|
||||||
example_text.single_mut().sections[10].value =
|
example_text.single_mut().sections[13].value =
|
||||||
format!("{:.1}", light.shadow_normal_bias);
|
format!("{:.1}", light.shadow_normal_bias);
|
||||||
}
|
}
|
||||||
if input.just_pressed(KeyCode::Key4) {
|
if input.just_pressed(KeyCode::Key4) {
|
||||||
light.shadow_normal_bias += normal_bias_step_size;
|
light.shadow_normal_bias += normal_bias_step_size;
|
||||||
example_text.single_mut().sections[10].value =
|
example_text.single_mut().sections[13].value =
|
||||||
format!("{:.1}", light.shadow_normal_bias);
|
format!("{:.1}", light.shadow_normal_bias);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -205,22 +239,22 @@ fn adjust_directional_light_biases(
|
|||||||
for mut light in &mut query {
|
for mut light in &mut query {
|
||||||
if input.just_pressed(KeyCode::Key5) {
|
if input.just_pressed(KeyCode::Key5) {
|
||||||
light.shadow_depth_bias -= depth_bias_step_size;
|
light.shadow_depth_bias -= depth_bias_step_size;
|
||||||
example_text.single_mut().sections[13].value =
|
example_text.single_mut().sections[16].value =
|
||||||
format!("{:.2}", light.shadow_depth_bias);
|
format!("{:.2}", light.shadow_depth_bias);
|
||||||
}
|
}
|
||||||
if input.just_pressed(KeyCode::Key6) {
|
if input.just_pressed(KeyCode::Key6) {
|
||||||
light.shadow_depth_bias += depth_bias_step_size;
|
light.shadow_depth_bias += depth_bias_step_size;
|
||||||
example_text.single_mut().sections[13].value =
|
example_text.single_mut().sections[16].value =
|
||||||
format!("{:.2}", light.shadow_depth_bias);
|
format!("{:.2}", light.shadow_depth_bias);
|
||||||
}
|
}
|
||||||
if input.just_pressed(KeyCode::Key7) {
|
if input.just_pressed(KeyCode::Key7) {
|
||||||
light.shadow_normal_bias -= normal_bias_step_size;
|
light.shadow_normal_bias -= normal_bias_step_size;
|
||||||
example_text.single_mut().sections[16].value =
|
example_text.single_mut().sections[19].value =
|
||||||
format!("{:.1}", light.shadow_normal_bias);
|
format!("{:.1}", light.shadow_normal_bias);
|
||||||
}
|
}
|
||||||
if input.just_pressed(KeyCode::Key8) {
|
if input.just_pressed(KeyCode::Key8) {
|
||||||
light.shadow_normal_bias += normal_bias_step_size;
|
light.shadow_normal_bias += normal_bias_step_size;
|
||||||
example_text.single_mut().sections[16].value =
|
example_text.single_mut().sections[19].value =
|
||||||
format!("{:.1}", light.shadow_normal_bias);
|
format!("{:.1}", light.shadow_normal_bias);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user