From 937c738591b064a8bd7242f735769d7cecf59428 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ma=CC=81te=CC=81=20Homolya?= Date: Wed, 7 May 2025 22:56:53 -0700 Subject: [PATCH] Address feedback naming --- .../src/image_texture_conversion.rs | 16 --- crates/bevy_pbr/src/atmosphere/bluenoise.ktx2 | Bin 33016 -> 0 bytes crates/bevy_pbr/src/atmosphere/mod.rs | 1 - .../src/light_probe/environment_filter.wgsl | 21 ++- .../light_probe/{prefilter.rs => generate.rs} | 135 +++++++++--------- .../src/light_probe/irradiance_volume.rs | 2 +- crates/bevy_pbr/src/light_probe/mod.rs | 34 ++--- .../noise/sphere_coshemi_gauss1_0.png | Bin 0 -> 65742 bytes .../noise/vector2_uniform_gauss1_0.png | Bin 0 -> 57811 bytes examples/3d/reflection_probes.rs | 22 +-- 10 files changed, 108 insertions(+), 123 deletions(-) delete mode 100644 crates/bevy_pbr/src/atmosphere/bluenoise.ktx2 rename crates/bevy_pbr/src/light_probe/{prefilter.rs => generate.rs} (89%) create mode 100644 crates/bevy_pbr/src/light_probe/noise/sphere_coshemi_gauss1_0.png create mode 100644 crates/bevy_pbr/src/light_probe/noise/vector2_uniform_gauss1_0.png diff --git a/crates/bevy_image/src/image_texture_conversion.rs b/crates/bevy_image/src/image_texture_conversion.rs index 22460bf6d9..1eb3b78b1e 100644 --- a/crates/bevy_image/src/image_texture_conversion.rs +++ b/crates/bevy_image/src/image_texture_conversion.rs @@ -197,22 +197,6 @@ impl Image { }) .map(DynamicImage::ImageRgba8) } - TextureFormat::Rgba16Float => { - use half::f16; - let pixel_count = (width * height) as usize; - let mut rgba32f_data = Vec::::with_capacity(pixel_count * 4); - for rgba16f in data.chunks_exact(8) { - let r = f16::from_bits(u16::from_le_bytes([rgba16f[0], rgba16f[1]])).to_f32(); - let g = f16::from_bits(u16::from_le_bytes([rgba16f[2], rgba16f[3]])).to_f32(); - let b = f16::from_bits(u16::from_le_bytes([rgba16f[4], rgba16f[5]])).to_f32(); - let a = f16::from_bits(u16::from_le_bytes([rgba16f[6], rgba16f[7]])).to_f32(); - rgba32f_data.push(r); - rgba32f_data.push(g); - rgba32f_data.push(b); - rgba32f_data.push(a); - } - ImageBuffer::from_raw(width, height, rgba32f_data).map(DynamicImage::ImageRgba32F) - } // Throw and error if conversion isn't supported texture_format => return Err(IntoDynamicImageError::UnsupportedFormat(texture_format)), } diff --git a/crates/bevy_pbr/src/atmosphere/bluenoise.ktx2 b/crates/bevy_pbr/src/atmosphere/bluenoise.ktx2 deleted file mode 100644 index e6a472bb3195637900404c34ea578fee0422d75c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33016 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 Ds_O8< diff --git a/crates/bevy_pbr/src/atmosphere/mod.rs b/crates/bevy_pbr/src/atmosphere/mod.rs index 6650a3c2c0..8b08751428 100644 --- a/crates/bevy_pbr/src/atmosphere/mod.rs +++ b/crates/bevy_pbr/src/atmosphere/mod.rs @@ -45,7 +45,6 @@ use bevy_ecs::{ schedule::IntoScheduleConfigs, system::{lifetimeless::Read, Query}, }; -use bevy_image::Image; use bevy_math::{UVec2, UVec3, Vec3}; use bevy_reflect::{std_traits::ReflectDefault, Reflect}; use bevy_render::{ diff --git a/crates/bevy_pbr/src/light_probe/environment_filter.wgsl b/crates/bevy_pbr/src/light_probe/environment_filter.wgsl index 39f83cc552..e30ceb23aa 100644 --- a/crates/bevy_pbr/src/light_probe/environment_filter.wgsl +++ b/crates/bevy_pbr/src/light_probe/environment_filter.wgsl @@ -1,7 +1,7 @@ #import bevy_render::maths::{PI, PI_2}; #import bevy_pbr::lighting::perceptualRoughnessToRoughness; -struct PrefilterConstants { +struct FilteringConstants { mip_level: f32, sample_count: u32, roughness: f32, @@ -11,7 +11,7 @@ struct PrefilterConstants { @group(0) @binding(0) var input_texture: texture_2d_array; @group(0) @binding(1) var input_sampler: sampler; @group(0) @binding(2) var output_texture: texture_storage_2d_array; -@group(0) @binding(3) var constants: PrefilterConstants; +@group(0) @binding(3) var constants: FilteringConstants; @group(0) @binding(4) var blue_noise_texture: texture_2d; // Tonemapping functions to reduce fireflies @@ -196,11 +196,12 @@ fn hammersley_2d(i: u32, n: u32) -> vec2f { } // Blue noise randomization -fn blue_noise_offset(pixel_coords: vec2u) -> vec2f { +fn sample_noise(pixel_coords: vec2u) -> vec4f { // Get a stable random offset for this pixel let noise_size = vec2u(u32(constants.blue_noise_size.x), u32(constants.blue_noise_size.y)); let noise_coords = pixel_coords % noise_size; - return textureSampleLevel(blue_noise_texture, input_sampler, vec2f(noise_coords) / constants.blue_noise_size, 0.0).rg; + let uv = vec2f(noise_coords) / constants.blue_noise_size; + return textureSampleLevel(blue_noise_texture, input_sampler, uv, 0.0); } // GGX/Trowbridge-Reitz normal distribution function (D term) @@ -279,7 +280,7 @@ fn generate_radiance_map(@builtin(global_invocation_id) global_id: vec3u) { let roughness = constants.roughness; // Get blue noise offset for stratification - let blue_noise = blue_noise_offset(coords); + let vector_noise = sample_noise(coords); var radiance = vec3f(0.0); var total_weight = 0.0; @@ -297,7 +298,7 @@ fn generate_radiance_map(@builtin(global_invocation_id) global_id: vec3u) { for (var i = 0u; i < sample_count; i++) { // Get sample coordinates from Hammersley sequence with blue noise offset var xi = hammersley_2d(i, sample_count); - xi = fract(xi + blue_noise); // Apply Cranley-Patterson rotation + xi = fract(xi + vector_noise.rg); // Apply Cranley-Patterson rotation // Sample the GGX distribution to get a half vector let half_vector = importance_sample_ggx(xi, roughness, normal); @@ -370,14 +371,11 @@ fn generate_irradiance_map(@builtin(global_invocation_id) global_id: vec3u) { // Create tangent space matrix let tangent_frame = calculate_tangent_frame(normal); - // Get blue noise offset for stratification - let blue_noise = blue_noise_offset(coords); - var irradiance = vec3f(0.0); var total_weight = 0.0; let sample_count = min(constants.sample_count, 64u); - + for (var i = 0u; i < sample_count; i++) { // Using a predefined set of directions provides good hemisphere coverage for diffuse var dir = get_uniform_direction((i + u32(coords.x * 7u + coords.y * 11u + face * 5u)) % 64u); @@ -419,9 +417,6 @@ fn generate_irradiance_map(@builtin(global_invocation_id) global_id: vec3u) { irradiance = irradiance / total_weight * PI; } - // Add some low-frequency ambient term to avoid completely dark areas - irradiance = max(irradiance, vec3f(0.01, 0.01, 0.01)); - // Write result to output texture textureStore(output_texture, coords, face, vec4f(irradiance, 1.0)); } diff --git a/crates/bevy_pbr/src/light_probe/prefilter.rs b/crates/bevy_pbr/src/light_probe/generate.rs similarity index 89% rename from crates/bevy_pbr/src/light_probe/prefilter.rs rename to crates/bevy_pbr/src/light_probe/generate.rs index ccd15dccba..9c22d4fcf0 100644 --- a/crates/bevy_pbr/src/light_probe/prefilter.rs +++ b/crates/bevy_pbr/src/light_probe/generate.rs @@ -30,33 +30,36 @@ use bevy_render::{ Extract, }; -use crate::atmosphere; use crate::light_probe::environment_map::EnvironmentMapLight; -/// A handle to the SPD (Single Pass Downsampling) shader. +/// Single Pass Downsampling (SPD) shader handle pub const SPD_SHADER_HANDLE: Handle = weak_handle!("5dcf400c-bcb3-49b9-8b7e-80f4117eaf82"); -/// A handle to the environment filter shader. +/// Environment Filter shader handle pub const ENVIRONMENT_FILTER_SHADER_HANDLE: Handle = weak_handle!("3110b545-78e0-48fc-b86e-8bc0ea50fc67"); -/// Labels for the prefiltering nodes +/// Sphere Cosine Weighted Irradiance shader handle +pub const STBN_SPHERE: Handle = weak_handle!("3110b545-78e0-48fc-b86e-8bc0ea50fc67"); +pub const STBN_VEC2: Handle = weak_handle!("3110b545-78e0-48fc-b86e-8bc0ea50fc67"); + +/// Labels for the environment map generation nodes #[derive(PartialEq, Eq, Debug, Copy, Clone, Hash, RenderLabel)] -pub enum PrefilterNode { - GenerateMipmap, - RadianceMap, - IrradianceMap, +pub enum GeneratorNode { + Mipmap, + Radiance, + Irradiance, } -/// Stores the bind group layouts for the prefiltering process +/// Stores the bind group layouts for the environment map generation pipelines #[derive(Resource)] -pub struct PrefilterBindGroupLayouts { +pub struct GeneratorBindGroupLayouts { pub spd: BindGroupLayout, pub radiance: BindGroupLayout, pub irradiance: BindGroupLayout, } -impl FromWorld for PrefilterBindGroupLayouts { +impl FromWorld for GeneratorBindGroupLayouts { fn from_world(world: &mut World) -> Self { let render_device = world.resource::(); @@ -178,7 +181,7 @@ impl FromWorld for PrefilterBindGroupLayouts { StorageTextureAccess::WriteOnly, ), ), // Output specular map - (3, uniform_buffer::(false)), // Uniforms + (3, uniform_buffer::(false)), // Uniforms (4, texture_2d(TextureSampleType::Float { filterable: true })), // Blue noise texture ), ), @@ -202,7 +205,7 @@ impl FromWorld for PrefilterBindGroupLayouts { StorageTextureAccess::WriteOnly, ), ), // Output irradiance map - (3, uniform_buffer::(false)), // Uniforms + (3, uniform_buffer::(false)), // Uniforms (4, texture_2d(TextureSampleType::Float { filterable: true })), // Blue noise texture ), ), @@ -216,18 +219,18 @@ impl FromWorld for PrefilterBindGroupLayouts { } } -/// Samplers for the prefiltering process +/// Samplers for the environment map generation pipelines #[derive(Resource)] -pub struct PrefilterSamplers { +pub struct GeneratorSamplers { pub linear: Sampler, } -impl FromWorld for PrefilterSamplers { +impl FromWorld for GeneratorSamplers { fn from_world(world: &mut World) -> Self { let render_device = world.resource::(); let linear = render_device.create_sampler(&SamplerDescriptor { - label: Some("prefilter_linear_sampler"), + label: Some("generator_linear_sampler"), address_mode_u: AddressMode::ClampToEdge, address_mode_v: AddressMode::ClampToEdge, address_mode_w: AddressMode::ClampToEdge, @@ -241,19 +244,19 @@ impl FromWorld for PrefilterSamplers { } } -/// Pipelines for the prefiltering process +/// Pipelines for the environment map generation pipelines #[derive(Resource)] -pub struct PrefilterPipelines { +pub struct GeneratorPipelines { pub spd_first: CachedComputePipelineId, pub spd_second: CachedComputePipelineId, pub radiance: CachedComputePipelineId, pub irradiance: CachedComputePipelineId, } -impl FromWorld for PrefilterPipelines { +impl FromWorld for GeneratorPipelines { fn from_world(world: &mut World) -> Self { let pipeline_cache = world.resource::(); - let layouts = world.resource::(); + let layouts = world.resource::(); let render_device = world.resource::(); let features = render_device.features(); @@ -317,16 +320,16 @@ impl FromWorld for PrefilterPipelines { } #[derive(Component, Clone, Reflect, ExtractComponent)] -pub struct FilteredEnvironmentMapLight { +pub struct GeneratedEnvironmentMapLight { pub environment_map: Handle, pub intensity: f32, pub rotation: Quat, pub affects_lightmapped_mesh_diffuse: bool, } -impl Default for FilteredEnvironmentMapLight { +impl Default for GeneratedEnvironmentMapLight { fn default() -> Self { - FilteredEnvironmentMapLight { + GeneratedEnvironmentMapLight { environment_map: Handle::default(), intensity: 0.0, rotation: Quat::IDENTITY, @@ -335,18 +338,18 @@ impl Default for FilteredEnvironmentMapLight { } } -pub fn extract_prefilter_entities( - prefilter_query: Extract< +pub fn extract_generator_entities( + query: Extract< Query<( RenderEntity, - &FilteredEnvironmentMapLight, + &GeneratedEnvironmentMapLight, &EnvironmentMapLight, )>, >, mut commands: Commands, render_images: Res>, ) { - for (entity, filtered_env_map, env_map_light) in prefilter_query.iter() { + for (entity, filtered_env_map, env_map_light) in query.iter() { let env_map = render_images .get(&filtered_env_map.environment_map) .expect("Environment map not found"); @@ -389,12 +392,12 @@ pub struct RenderEnvironmentMap { } #[derive(Component)] -pub struct PrefilterTextures { +pub struct IntermediateTextures { pub environment_map: CachedTexture, } -/// Prepares textures needed for prefiltering -pub fn prepare_prefilter_textures( +/// Prepares textures needed for single pass downsampling +pub fn prepare_intermediate_textures( light_probes: Query>, render_device: Res, mut texture_cache: ResMut, @@ -405,7 +408,7 @@ pub fn prepare_prefilter_textures( let environment_map = texture_cache.get( &render_device, TextureDescriptor { - label: Some("prefilter_environment_map"), + label: Some("intermediate_environment_map"), size: Extent3d { width: 512, height: 512, @@ -424,7 +427,7 @@ pub fn prepare_prefilter_textures( commands .entity(entity) - .insert(PrefilterTextures { environment_map }); + .insert(IntermediateTextures { environment_map }); } } @@ -437,41 +440,45 @@ pub struct SpdConstants { _padding: u32, } -/// Constants for prefiltering +/// Constants for filtering #[derive(Clone, Copy, ShaderType)] #[repr(C)] -pub struct PrefilterConstants { +pub struct FilteringConstants { mip_level: f32, sample_count: u32, roughness: f32, blue_noise_size: Vec2, } -/// Stores bind groups for the prefiltering process +/// Stores bind groups for the environment map generation pipelines #[derive(Component)] -pub struct PrefilterBindGroups { +pub struct GeneratorBindGroups { pub spd: BindGroup, pub radiance: Vec, // One per mip level pub irradiance: BindGroup, } -/// Prepares bind groups for prefiltering -pub fn prepare_prefilter_bind_groups( +/// Prepares bind groups for environment map generation pipelines +pub fn prepare_generator_bind_groups( light_probes: Query< - (Entity, &PrefilterTextures, &RenderEnvironmentMap), + (Entity, &IntermediateTextures, &RenderEnvironmentMap), With, >, render_device: Res, queue: Res, - layouts: Res, - samplers: Res, + layouts: Res, + samplers: Res, render_images: Res>, mut commands: Commands, ) { // Get blue noise texture - let blue_noise_texture = render_images - .get(&atmosphere::shaders::BLUENOISE_TEXTURE) - .expect("Blue noise texture not loaded"); + let sphere_cosine_weights = render_images + .get(&STBN_SPHERE) + .expect("Sphere cosine weights texture not loaded"); + + let vector2_uniform = render_images + .get(&STBN_VEC2) + .expect("Vector2 uniform texture not loaded"); for (entity, textures, env_map_light) in &light_probes { // Create SPD bind group @@ -571,13 +578,13 @@ pub fn prepare_prefilter_bind_groups( 128 }; - let radiance_constants = PrefilterConstants { + let radiance_constants = FilteringConstants { mip_level: mip as f32, sample_count, roughness, blue_noise_size: Vec2::new( - blue_noise_texture.size.width as f32, - blue_noise_texture.size.height as f32, + vector2_uniform.size.width as f32, + vector2_uniform.size.height as f32, ), }; @@ -597,7 +604,7 @@ pub fn prepare_prefilter_bind_groups( (1, &samplers.linear), (2, &mip_storage_view), (3, &radiance_constants_buffer), - (4, &blue_noise_texture.texture_view), + (4, &vector2_uniform.texture_view), )), ); @@ -605,13 +612,13 @@ pub fn prepare_prefilter_bind_groups( } // Create irradiance bind group - let irradiance_constants = PrefilterConstants { + let irradiance_constants = FilteringConstants { mip_level: 0.0, sample_count: 64, roughness: 1.0, blue_noise_size: Vec2::new( - blue_noise_texture.size.width as f32, - blue_noise_texture.size.height as f32, + sphere_cosine_weights.size.width as f32, + sphere_cosine_weights.size.height as f32, ), }; @@ -636,11 +643,11 @@ pub fn prepare_prefilter_bind_groups( (1, &samplers.linear), (2, &irradiance_map), (3, &irradiance_constants_buffer), - (4, &blue_noise_texture.texture_view), + (4, &sphere_cosine_weights.texture_view), )), ); - commands.entity(entity).insert(PrefilterBindGroups { + commands.entity(entity).insert(GeneratorBindGroups { spd: spd_bind_group, radiance: radiance_bind_groups, irradiance: irradiance_bind_group, @@ -667,7 +674,7 @@ fn create_storage_view(texture: &Texture, mip: u32, _render_device: &RenderDevic pub struct SpdNode { query: QueryState<( Entity, - Read, + Read, Read, )>, } @@ -692,7 +699,7 @@ impl Node for SpdNode { world: &World, ) -> Result<(), NodeRunError> { let pipeline_cache = world.resource::(); - let pipelines = world.resource::(); + let pipelines = world.resource::(); // First pass (mips 0-5) let Some(spd_first_pipeline) = pipeline_cache.get_compute_pipeline(pipelines.spd_first) @@ -708,7 +715,7 @@ impl Node for SpdNode { for (entity, bind_groups, env_map_light) in self.query.iter_manual(world) { // Copy original environment map to mip 0 of the intermediate environment map - let textures = world.get::(entity).unwrap(); + let textures = world.get::(entity).unwrap(); render_context.command_encoder().copy_texture_to_texture( env_map_light.environment_map.texture.as_image_copy(), @@ -764,7 +771,7 @@ impl Node for SpdNode { /// Radiance map node for generating specular environment maps pub struct RadianceMapNode { - query: QueryState<(Entity, Read)>, + query: QueryState<(Entity, Read)>, } impl FromWorld for RadianceMapNode { @@ -787,7 +794,7 @@ impl Node for RadianceMapNode { world: &World, ) -> Result<(), NodeRunError> { let pipeline_cache = world.resource::(); - let pipelines = world.resource::(); + let pipelines = world.resource::(); let Some(radiance_pipeline) = pipeline_cache.get_compute_pipeline(pipelines.radiance) else { @@ -824,7 +831,7 @@ impl Node for RadianceMapNode { /// Irradiance Convolution Node pub struct IrradianceMapNode { - query: QueryState<(Entity, Read)>, + query: QueryState<(Entity, Read)>, } impl FromWorld for IrradianceMapNode { @@ -847,7 +854,7 @@ impl Node for IrradianceMapNode { world: &World, ) -> Result<(), NodeRunError> { let pipeline_cache = world.resource::(); - let pipelines = world.resource::(); + let pipelines = world.resource::(); let Some(irradiance_pipeline) = pipeline_cache.get_compute_pipeline(pipelines.irradiance) else { @@ -874,11 +881,11 @@ impl Node for IrradianceMapNode { } } -/// System that creates an `EnvironmentMapLight` component from the prefiltered textures -pub fn create_environment_map_from_prefilter( +/// System that generates an `EnvironmentMapLight` component based on the `GeneratedEnvironmentMapLight` component +pub fn generate_environment_map_light( mut commands: Commands, mut images: ResMut>, - query: Query<(Entity, &FilteredEnvironmentMapLight), Without>, + query: Query<(Entity, &GeneratedEnvironmentMapLight), Without>, ) { for (entity, filtered_env_map) in &query { // Create a placeholder for the irradiance map diff --git a/crates/bevy_pbr/src/light_probe/irradiance_volume.rs b/crates/bevy_pbr/src/light_probe/irradiance_volume.rs index 431d1245a2..df05d042b8 100644 --- a/crates/bevy_pbr/src/light_probe/irradiance_volume.rs +++ b/crates/bevy_pbr/src/light_probe/irradiance_volume.rs @@ -126,7 +126,7 @@ //! //! [Blender]: http://blender.org/ //! -//! [baking tool]: https://docs.blender.org/manual/en/latest/render/eevee/render_settings/indirect_lighting.html +//! [baking tool]: https://docs.blender.org/manual/en/latest/render/eevee/light_probes/volume.html //! //! [`bevy-baked-gi`]: https://github.com/pcwalton/bevy-baked-gi //! diff --git a/crates/bevy_pbr/src/light_probe/mod.rs b/crates/bevy_pbr/src/light_probe/mod.rs index 178aa12218..ac692fa3b7 100644 --- a/crates/bevy_pbr/src/light_probe/mod.rs +++ b/crates/bevy_pbr/src/light_probe/mod.rs @@ -31,10 +31,10 @@ use bevy_render::{ Extract, ExtractSchedule, Render, RenderApp, RenderSystems, }; use bevy_transform::{components::Transform, prelude::GlobalTransform}; -use prefilter::{ - create_environment_map_from_prefilter, extract_prefilter_entities, - prepare_prefilter_bind_groups, prepare_prefilter_textures, FilteredEnvironmentMapLight, - PrefilterPipelines, SpdNode, +use generate::{ + extract_generator_entities, generate_environment_map_light, prepare_generator_bind_groups, + prepare_intermediate_textures, GeneratedEnvironmentMapLight, GeneratorPipelines, SpdNode, + STBN_SPHERE, STBN_VEC2, }; use tracing::error; @@ -45,8 +45,8 @@ use crate::light_probe::environment_map::{EnvironmentMapIds, EnvironmentMapLight use self::irradiance_volume::IrradianceVolume; pub mod environment_map; +pub mod generate; pub mod irradiance_volume; -pub mod prefilter; /// The maximum number of each type of light probe that each view will consider. /// @@ -350,8 +350,8 @@ impl Plugin for LightProbePlugin { app.register_type::() .register_type::() .register_type::() - .add_plugins(ExtractComponentPlugin::::default()) - .add_systems(Update, create_environment_map_from_prefilter); + .add_plugins(ExtractComponentPlugin::::default()) + .add_systems(Update, generate_environment_map_light); } fn finish(&self, app: &mut App) { @@ -363,19 +363,19 @@ impl Plugin for LightProbePlugin { .add_plugins(ExtractInstancesPlugin::::new()) .init_resource::() .init_resource::() - .init_resource::() - .init_resource::() - .init_resource::() - .add_render_graph_node::(Core3d, PrefilterNode::GenerateMipmap) - .add_render_graph_node::(Core3d, PrefilterNode::RadianceMap) - .add_render_graph_node::(Core3d, PrefilterNode::IrradianceMap) + .init_resource::() + .init_resource::() + .init_resource::() + .add_render_graph_node::(Core3d, GeneratorNode::Mipmap) + .add_render_graph_node::(Core3d, GeneratorNode::Radiance) + .add_render_graph_node::(Core3d, GeneratorNode::Irradiance) .add_render_graph_edges( Core3d, ( Node3d::EndPrepasses, - PrefilterNode::GenerateMipmap, - PrefilterNode::RadianceMap, - PrefilterNode::IrradianceMap, + GeneratorNode::Mipmap, + GeneratorNode::Radiance, + GeneratorNode::Irradiance, Node3d::StartMainPass, ), ) @@ -384,7 +384,7 @@ impl Plugin for LightProbePlugin { .add_systems(ExtractSchedule, gather_light_probes::) .add_systems( ExtractSchedule, - extract_prefilter_entities.after(create_environment_map_from_prefilter), + extract_generator_entities.after(generate_environment_map_light), ) .add_systems( Render, diff --git a/crates/bevy_pbr/src/light_probe/noise/sphere_coshemi_gauss1_0.png b/crates/bevy_pbr/src/light_probe/noise/sphere_coshemi_gauss1_0.png new file mode 100644 index 0000000000000000000000000000000000000000..08199965dc8320a1e28b1c25d75cc4297280408e GIT binary patch literal 65742 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

MkE8sM@}j_rwIj34rqymNE0Q_y8s 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 Pf9+d$X%*XY@Vx&6jyPdn literal 0 HcmV?d00001 diff --git a/crates/bevy_pbr/src/light_probe/noise/vector2_uniform_gauss1_0.png b/crates/bevy_pbr/src/light_probe/noise/vector2_uniform_gauss1_0.png new file mode 100644 index 0000000000000000000000000000000000000000..c9b61dcae5c2cfde5c92c4908850d845521ebec6 GIT binary patch literal 57811 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 literal 0 HcmV?d00001 diff --git a/examples/3d/reflection_probes.rs b/examples/3d/reflection_probes.rs index 11f6482f0b..1c9fb97937 100644 --- a/examples/3d/reflection_probes.rs +++ b/examples/3d/reflection_probes.rs @@ -39,8 +39,8 @@ enum ReflectionMode { // Both a world environment map and a reflection probe are present. The // reflection probe is shown in the sphere. ReflectionProbe = 2, - // A prefiltered environment map is shown. - PrefilteredEnvironmentMap = 3, + // A generated environment map is shown. + GeneratedEnvironmentMap = 3, } // The various reflection maps. @@ -133,7 +133,7 @@ fn spawn_sphere( commands.spawn(( Mesh3d(sphere_mesh.clone()), MeshMaterial3d(materials.add(StandardMaterial { - base_color: Srgba::hex("#ffd891").unwrap().into(), + base_color: Srgba::hex("#ffffff").unwrap().into(), metallic: 1.0, perceptual_roughness: app_status.sphere_roughness, ..StandardMaterial::default() @@ -157,10 +157,10 @@ fn spawn_reflection_probe(commands: &mut Commands, cubemaps: &Cubemaps) { )); } -fn spawn_prefiltered_environment_map(commands: &mut Commands, cubemaps: &Cubemaps) { +fn spawn_generated_environment_map(commands: &mut Commands, cubemaps: &Cubemaps) { commands.spawn(( LightProbe, - FilteredEnvironmentMapLight { + GeneratedEnvironmentMapLight { environment_map: cubemaps.unfiltered_environment_map.clone(), intensity: 5000.0, ..default() @@ -232,8 +232,8 @@ fn change_reflection_type( match app_status.reflection_mode { ReflectionMode::None | ReflectionMode::EnvironmentMap => {} ReflectionMode::ReflectionProbe => spawn_reflection_probe(&mut commands, &cubemaps), - ReflectionMode::PrefilteredEnvironmentMap => { - spawn_prefiltered_environment_map(&mut commands, &cubemaps); + ReflectionMode::GeneratedEnvironmentMap => { + spawn_generated_environment_map(&mut commands, &cubemaps); } } @@ -245,9 +245,9 @@ fn change_reflection_type( } ReflectionMode::EnvironmentMap | ReflectionMode::ReflectionProbe - | ReflectionMode::PrefilteredEnvironmentMap => { + | ReflectionMode::GeneratedEnvironmentMap => { let image = match app_status.reflection_mode { - ReflectionMode::PrefilteredEnvironmentMap => { + ReflectionMode::GeneratedEnvironmentMap => { cubemaps.unfiltered_environment_map.clone() } _ => cubemaps.skybox.clone(), @@ -287,7 +287,7 @@ impl TryFrom for ReflectionMode { 0 => Ok(ReflectionMode::None), 1 => Ok(ReflectionMode::EnvironmentMap), 2 => Ok(ReflectionMode::ReflectionProbe), - 3 => Ok(ReflectionMode::PrefilteredEnvironmentMap), + 3 => Ok(ReflectionMode::GeneratedEnvironmentMap), _ => Err(()), } } @@ -299,7 +299,7 @@ impl Display for ReflectionMode { ReflectionMode::None => "No reflections", ReflectionMode::EnvironmentMap => "Environment map", ReflectionMode::ReflectionProbe => "Reflection probe", - ReflectionMode::PrefilteredEnvironmentMap => "Prefiltered environment map", + ReflectionMode::GeneratedEnvironmentMap => "Generated environment map", }; formatter.write_str(text) }