Remove LioghtProbe requirement from example and doc

This commit is contained in:
Máté Homolya 2025-07-17 01:01:41 -07:00
parent 9c56874b24
commit c589cd2b39
No known key found for this signature in database
2 changed files with 26 additions and 34 deletions

View File

@ -2,14 +2,15 @@
//! //!
//! A *generated environment map* converts a single, high-resolution cubemap //! A *generated environment map* converts a single, high-resolution cubemap
//! into the pair of diffuse and specular cubemaps required by the PBR //! into the pair of diffuse and specular cubemaps required by the PBR
//! shader. Add [`bevy_light::GeneratedEnvironmentMapLight`] (together with //! shader. Add [`bevy_light::GeneratedEnvironmentMapLight`] to a camera
//! [`bevy_light::LightProbe`]) to an entity and Bevy will, each frame: //! and Bevy will, each frame, generate the diffuse and specular cubemaps
//! required by the PBR shader.
//! //!
//! 1. Copy the base mip (level 0) of the source cubemap into an //! 1. Copy the base mip (level 0) of the source cubemap into an intermediate
//! intermediate storage texture. //! storage texture.
//! 2. Generate mipmaps using single-pass down-sampling (SPD). //! 2. Generate mipmaps using single-pass down-sampling (SPD).
//! 3. Convolve the mip chain twice: //! 3. Convolve the mip chain twice:
//! * a Lambertian convolution for the 32 × 32 diffuse cubemap; //! * a Lambertian convolution for the 32 × 32 diffuse cubemap
//! * a GGX convolution, once per mip level, for the specular cubemap. //! * a GGX convolution, once per mip level, for the specular cubemap.
//! //!
//! The filtered results are then consumed exactly like the textures supplied //! The filtered results are then consumed exactly like the textures supplied

View File

@ -152,18 +152,6 @@ fn spawn_reflection_probe(commands: &mut Commands, cubemaps: &Cubemaps) {
)); ));
} }
fn spawn_generated_environment_map(commands: &mut Commands, cubemaps: &Cubemaps) {
commands.spawn((
LightProbe,
GeneratedEnvironmentMapLight {
environment_map: cubemaps.specular_environment_map.clone(),
intensity: 5000.0,
..default()
},
Transform::from_scale(Vec3::splat(2.0)),
));
}
// Spawns the help text. // Spawns the help text.
fn spawn_text(commands: &mut Commands, app_status: &AppStatus) { fn spawn_text(commands: &mut Commands, app_status: &AppStatus) {
// Create the text. // Create the text.
@ -202,7 +190,6 @@ fn add_environment_map_to_camera(
fn change_reflection_type( fn change_reflection_type(
mut commands: Commands, mut commands: Commands,
light_probe_query: Query<Entity, With<LightProbe>>, light_probe_query: Query<Entity, With<LightProbe>>,
sky_box_query: Query<Entity, With<Skybox>>,
camera_query: Query<Entity, With<Camera3d>>, camera_query: Query<Entity, With<Camera3d>>,
keyboard: Res<ButtonInput<KeyCode>>, keyboard: Res<ButtonInput<KeyCode>>,
mut app_status: ResMut<AppStatus>, mut app_status: ResMut<AppStatus>,
@ -217,34 +204,38 @@ fn change_reflection_type(
app_status.reflection_mode = app_status.reflection_mode =
ReflectionMode::try_from((app_status.reflection_mode as u32 + 1) % 3).unwrap(); ReflectionMode::try_from((app_status.reflection_mode as u32 + 1) % 3).unwrap();
// Add or remove the light probe. // Remove light probes
for light_probe in light_probe_query.iter() { for light_probe in light_probe_query.iter() {
commands.entity(light_probe).despawn(); commands.entity(light_probe).despawn();
} }
for skybox in sky_box_query.iter() {
commands.entity(skybox).remove::<Skybox>();
}
match app_status.reflection_mode { match app_status.reflection_mode {
ReflectionMode::EnvironmentMap => {} ReflectionMode::EnvironmentMap => {}
ReflectionMode::ReflectionProbe => spawn_reflection_probe(&mut commands, &cubemaps), ReflectionMode::ReflectionProbe => spawn_reflection_probe(&mut commands, &cubemaps),
ReflectionMode::GeneratedEnvironmentMap => { ReflectionMode::GeneratedEnvironmentMap => {}
spawn_generated_environment_map(&mut commands, &cubemaps);
}
} }
// Add or remove the environment map from the camera. // Update the environment-map components on the camera entity/entities
for camera in camera_query.iter() { for camera in camera_query.iter() {
// Remove any existing environment-map components
commands
.entity(camera)
.remove::<(EnvironmentMapLight, GeneratedEnvironmentMapLight)>();
match app_status.reflection_mode { match app_status.reflection_mode {
ReflectionMode::EnvironmentMap // A baked or reflection-probe environment map
| ReflectionMode::ReflectionProbe ReflectionMode::EnvironmentMap | ReflectionMode::ReflectionProbe => {
| ReflectionMode::GeneratedEnvironmentMap => {
let image = cubemaps.specular_environment_map.clone();
commands commands
.entity(camera) .entity(camera)
.insert(create_camera_environment_map_light(&cubemaps)) .insert(create_camera_environment_map_light(&cubemaps));
.insert(Skybox { }
image,
brightness: 5000.0, // GPU-filtered environment map generated at runtime
ReflectionMode::GeneratedEnvironmentMap => {
commands
.entity(camera)
.insert(GeneratedEnvironmentMapLight {
environment_map: cubemaps.specular_environment_map.clone(),
intensity: 5000.0,
..default() ..default()
}); });
} }