bevy
bevy copied to clipboard
Fix incorrect function calls to hsv_to_rgb in render debug code.
Objective
- Fixes https://github.com/bevyengine/bevy/issues/14139
Solution
- correct the input parameters at these call sites.
Testing
- Use a 3D scene example with PBR lighting and shadows enabled, such as the
shadow_caster_receiver
andload_gltf
example, for testing. - Enable relevant shader defines in crates/bevy_pbr/src/pbr_material.rs for the StandardMaterial.
impl Material for StandardMaterial {
// ...
fn specialize(
_pipeline: &MaterialPipeline<Self>,
descriptor: &mut RenderPipelineDescriptor,
_layout: &MeshVertexBufferLayoutRef,
key: MaterialPipelineKey<Self>,
) -> Result<(), SpecializedMeshPipelineError> {
// ...
// shader_defs.push("CLUSTERED_FORWARD_DEBUG_Z_SLICES".into());
// shader_defs.push("CLUSTERED_FORWARD_DEBUG_CLUSTER_COHERENCY".into());
shader_defs.push("DIRECTIONAL_LIGHT_SHADOW_MAP_DEBUG_CASCADES".into());
// ...
}
}
Showcase
CLUSTERED_FORWARD_DEBUG_Z_SLICES
- example: examples/3d/shadow_caster_receiver.rs
CLUSTERED_FORWARD_DEBUG_CLUSTER_COHERENCY
- example: examples/3d/shadow_caster_receiver.rs
DIRECTIONAL_LIGHT_SHADOW_MAP_DEBUG_CASCADES
For this one, we need to use a large scene and modity the CascadeShadowConfigBuilder
, here is a simple patch for the load_gltf
example:
diff --git a/examples/3d/load_gltf.rs b/examples/3d/load_gltf.rs
index 358446238..9403aa288 100644
--- a/examples/3d/load_gltf.rs
+++ b/examples/3d/load_gltf.rs
@@ -18,7 +18,7 @@ fn main() {
fn setup(mut commands: Commands, asset_server: Res<AssetServer>) {
commands.spawn((
Camera3dBundle {
- transform: Transform::from_xyz(0.7, 0.7, 1.0)
+ transform: Transform::from_xyz(0.7, 0.7, 2.0)
.looking_at(Vec3::new(0.0, 0.3, 0.0), Vec3::Y),
..default()
},
@@ -39,30 +39,40 @@ fn setup(mut commands: Commands, asset_server: Res<AssetServer>) {
// We also adjusted the shadow map to be larger since we're
// only using a single cascade.
cascade_shadow_config: CascadeShadowConfigBuilder {
- num_cascades: 1,
- maximum_distance: 1.6,
+ num_cascades: 5,
+ maximum_distance: 20.0,
..default()
}
.into(),
..default()
});
+
commands.spawn(SceneBundle {
scene: asset_server
.load(GltfAssetLabel::Scene(0).from_asset("models/FlightHelmet/FlightHelmet.gltf")),
..default()
});
+
+ for i in 1..=10 {
+ commands.spawn(SceneBundle {
+ scene: asset_server
+ .load(GltfAssetLabel::Scene(0).from_asset("models/FlightHelmet/FlightHelmet.gltf")),
+ transform: Transform::from_xyz(i as f32 * 0.5, 0.0, i as f32 * -2.0),
+ ..default()
+ });
+ }
}
fn animate_light_direction(
time: Res<Time>,
mut query: Query<&mut Transform, With<DirectionalLight>>,
) {
- for mut transform in &mut query {
- transform.rotation = Quat::from_euler(
- EulerRot::ZYX,
- 0.0,
- time.elapsed_seconds() * PI / 5.0,
- -FRAC_PI_4,
- );
- }
+ // for mut transform in &mut query {
+ // transform.rotation = Quat::from_euler(
+ // EulerRot::ZYX,
+ // 0.0,
+ // time.elapsed_seconds() * PI / 5.0,
+ // -FRAC_PI_4,
+ // );
+ // }
}