diff --git a/crates/bevy_gizmos/src/pipeline_2d.rs b/crates/bevy_gizmos/src/pipeline_2d.rs index 72a2428ff0b5b..edf521f961e80 100644 --- a/crates/bevy_gizmos/src/pipeline_2d.rs +++ b/crates/bevy_gizmos/src/pipeline_2d.rs @@ -16,7 +16,7 @@ use bevy_ecs::{ }; use bevy_image::BevyDefault as _; use bevy_math::FloatOrd; -use bevy_render::sync_world::MainEntity; +use bevy_render::{sync_world::MainEntity, view::InheritedVisibleLayers}; use bevy_render::{ render_asset::{prepare_assets, RenderAssets}, render_phase::{ @@ -24,7 +24,7 @@ use bevy_render::{ ViewSortedRenderPhases, }, render_resource::*, - view::{ExtractedView, Msaa, RenderLayers, ViewTarget}, + view::{ExtractedView, Msaa, ViewTarget}, Render, RenderApp, RenderSet, }; use bevy_sprite::{Mesh2dPipeline, Mesh2dPipelineKey, SetMesh2dViewBindGroup}; @@ -297,7 +297,7 @@ fn queue_line_gizmos_2d( line_gizmos: Query<(Entity, &MainEntity, &GizmoMeshConfig)>, line_gizmo_assets: Res>, mut transparent_render_phases: ResMut>, - mut views: Query<(&ExtractedView, &Msaa, Option<&RenderLayers>)>, + mut views: Query<(&ExtractedView, &Msaa, Option<&InheritedVisibleLayers>)>, ) { let draw_function = draw_functions.read().get_id::().unwrap(); let draw_function_strip = draw_functions @@ -376,7 +376,7 @@ fn queue_line_joint_gizmos_2d( line_gizmos: Query<(Entity, &MainEntity, &GizmoMeshConfig)>, line_gizmo_assets: Res>, mut transparent_render_phases: ResMut>, - mut views: Query<(&ExtractedView, &Msaa, Option<&RenderLayers>)>, + mut views: Query<(&ExtractedView, &Msaa, Option<&InheritedVisibleLayers>)>, ) { let draw_function = draw_functions .read() diff --git a/crates/bevy_gizmos/src/pipeline_3d.rs b/crates/bevy_gizmos/src/pipeline_3d.rs index f7806b64d65bf..69d6c6e066c2f 100644 --- a/crates/bevy_gizmos/src/pipeline_3d.rs +++ b/crates/bevy_gizmos/src/pipeline_3d.rs @@ -20,7 +20,7 @@ use bevy_ecs::{ }; use bevy_image::BevyDefault as _; use bevy_pbr::{MeshPipeline, MeshPipelineKey, SetMeshViewBindGroup}; -use bevy_render::sync_world::MainEntity; +use bevy_render::{sync_world::MainEntity, view::InheritedVisibleLayers}; use bevy_render::{ render_asset::{prepare_assets, RenderAssets}, render_phase::{ @@ -28,7 +28,7 @@ use bevy_render::{ ViewSortedRenderPhases, }, render_resource::*, - view::{ExtractedView, Msaa, RenderLayers, ViewTarget}, + view::{ExtractedView, Msaa, ViewTarget}, Render, RenderApp, RenderSet, }; use tracing::error; @@ -295,7 +295,7 @@ fn queue_line_gizmos_3d( views: Query<( &ExtractedView, &Msaa, - Option<&RenderLayers>, + Option<&InheritedVisibleLayers>, ( Has, Has, @@ -410,7 +410,7 @@ fn queue_line_joint_gizmos_3d( views: Query<( &ExtractedView, &Msaa, - Option<&RenderLayers>, + Option<&InheritedVisibleLayers>, ( Has, Has, diff --git a/crates/bevy_gizmos/src/retained.rs b/crates/bevy_gizmos/src/retained.rs index 435f417552463..806ed00aa38d2 100644 --- a/crates/bevy_gizmos/src/retained.rs +++ b/crates/bevy_gizmos/src/retained.rs @@ -17,7 +17,7 @@ use { entity::Entity, system::{Commands, Local, Query}, }, - bevy_render::{view::RenderLayers, Extract}, + bevy_render::{view::InheritedVisibleLayers, Extract}, bevy_transform::components::GlobalTransform, }; @@ -102,7 +102,7 @@ pub struct Gizmo { pub(crate) fn extract_linegizmos( mut commands: Commands, mut previous_len: Local, - query: Extract)>>, + query: Extract)>>, ) { use bevy_math::Affine3; use bevy_render::sync_world::{MainEntity, TemporaryRenderEntity}; @@ -151,7 +151,7 @@ pub(crate) fn extract_linegizmos( line_perspective: gizmo.line_config.perspective, line_style: gizmo.line_config.style, line_joints: gizmo.line_config.joints, - render_layers: render_layers.cloned().unwrap_or_default(), + render_layers: render_layers.cloned().unwrap_or_default().0, handle: gizmo.handle.clone_weak(), }, MainEntity::from(entity), diff --git a/crates/bevy_pbr/src/cluster/assign.rs b/crates/bevy_pbr/src/cluster/assign.rs index 36a4aadfb31d6..8025b5a2e281b 100644 --- a/crates/bevy_pbr/src/cluster/assign.rs +++ b/crates/bevy_pbr/src/cluster/assign.rs @@ -14,7 +14,7 @@ use bevy_render::{ primitives::{Aabb, Frustum, HalfSpace, Sphere}, render_resource::BufferBindingType, renderer::{RenderAdapter, RenderDevice}, - view::{RenderLayers, ViewVisibility}, + view::{InheritedVisibleLayers, RenderLayers, ViewVisibility}, }; use bevy_transform::components::GlobalTransform; use bevy_utils::prelude::default; @@ -153,14 +153,14 @@ pub(crate) fn assign_objects_to_clusters( &Frustum, &ClusterConfig, &mut Clusters, - Option<&RenderLayers>, + Option<&InheritedVisibleLayers>, Option<&mut VisibleClusterableObjects>, )>, point_lights_query: Query<( Entity, &GlobalTransform, &PointLight, - Option<&RenderLayers>, + Option<&InheritedVisibleLayers>, Option<&VolumetricLight>, &ViewVisibility, )>, @@ -168,7 +168,7 @@ pub(crate) fn assign_objects_to_clusters( Entity, &GlobalTransform, &SpotLight, - Option<&RenderLayers>, + Option<&InheritedVisibleLayers>, Option<&VolumetricLight>, &ViewVisibility, )>, @@ -203,7 +203,7 @@ pub(crate) fn assign_objects_to_clusters( shadows_enabled: point_light.shadows_enabled, volumetric: volumetric.is_some(), }, - render_layers: maybe_layers.unwrap_or_default().clone(), + render_layers: maybe_layers.unwrap_or_default().0.clone(), } }, ), @@ -223,7 +223,7 @@ pub(crate) fn assign_objects_to_clusters( shadows_enabled: spot_light.shadows_enabled, volumetric: volumetric.is_some(), }, - render_layers: maybe_layers.unwrap_or_default().clone(), + render_layers: maybe_layers.unwrap_or_default().0.clone(), } }, ), diff --git a/crates/bevy_pbr/src/light/mod.rs b/crates/bevy_pbr/src/light/mod.rs index 1c9dc61374a1e..2685a8953d95e 100644 --- a/crates/bevy_pbr/src/light/mod.rs +++ b/crates/bevy_pbr/src/light/mod.rs @@ -13,8 +13,7 @@ use bevy_render::{ mesh::Mesh3d, primitives::{Aabb, CascadesFrusta, CubemapFrusta, Frustum, Sphere}, view::{ - InheritedVisibility, NoFrustumCulling, PreviousVisibleEntities, RenderLayers, - ViewVisibility, VisibilityClass, VisibilityRange, VisibleEntityRanges, + InheritedVisibleLayers, InheritedVisibility, NoFrustumCulling, PreviousVisibleEntities, ViewVisibility, VisibilityClass, VisibilityRange, VisibleEntityRanges }, }; use bevy_transform::components::{GlobalTransform, Transform}; @@ -667,7 +666,7 @@ pub fn check_dir_light_mesh_visibility( &DirectionalLight, &CascadesFrusta, &mut CascadesVisibleEntities, - Option<&RenderLayers>, + Option<&InheritedVisibleLayers>, &ViewVisibility, ), Without, @@ -676,7 +675,7 @@ pub fn check_dir_light_mesh_visibility( ( Entity, &InheritedVisibility, - Option<&RenderLayers>, + Option<&InheritedVisibleLayers>, Option<&Aabb>, Option<&GlobalTransform>, Has, @@ -841,21 +840,21 @@ pub fn check_point_light_mesh_visibility( &GlobalTransform, &CubemapFrusta, &mut CubemapVisibleEntities, - Option<&RenderLayers>, + Option<&InheritedVisibleLayers>, )>, mut spot_lights: Query<( &SpotLight, &GlobalTransform, &Frustum, &mut VisibleMeshEntities, - Option<&RenderLayers>, + Option<&InheritedVisibleLayers>, )>, mut visible_entity_query: Query< ( Entity, &InheritedVisibility, &mut ViewVisibility, - Option<&RenderLayers>, + Option<&InheritedVisibleLayers>, Option<&Aabb>, Option<&GlobalTransform>, Has, diff --git a/crates/bevy_pbr/src/render/light.rs b/crates/bevy_pbr/src/render/light.rs index 5dc225d4662bc..cbe35bf532b83 100644 --- a/crates/bevy_pbr/src/render/light.rs +++ b/crates/bevy_pbr/src/render/light.rs @@ -19,6 +19,7 @@ use bevy_render::experimental::occlusion_culling::{ OcclusionCulling, OcclusionCullingSubview, OcclusionCullingSubviewEntities, }; use bevy_render::sync_world::MainEntityHashMap; +use bevy_render::view::InheritedVisibleLayers; use bevy_render::{ batching::gpu_preprocessing::{GpuPreprocessingMode, GpuPreprocessingSupport}, camera::SortedCameras, @@ -257,7 +258,7 @@ pub fn extract_lights( &CascadesFrusta, &GlobalTransform, &ViewVisibility, - Option<&RenderLayers>, + Option<&InheritedVisibleLayers>, Option<&VolumetricLight>, Has, ), @@ -489,7 +490,7 @@ pub fn extract_lights( cascade_shadow_config: cascade_config.clone(), cascades: extracted_cascades, frusta: extracted_frusta, - render_layers: maybe_layers.unwrap_or_default().clone(), + render_layers: maybe_layers.unwrap_or_default().0.clone(), occlusion_culling, }, RenderCascadesVisibleEntities { @@ -727,7 +728,7 @@ pub fn prepare_lights( MainEntity, &ExtractedView, &ExtractedClusterConfig, - Option<&RenderLayers>, + Option<&InheritedVisibleLayers>, Has, Option<&AmbientLight>, ), diff --git a/crates/bevy_picking/src/mesh_picking/mod.rs b/crates/bevy_picking/src/mesh_picking/mod.rs index 5860fbc2b51c9..def2b0eeb22a3 100644 --- a/crates/bevy_picking/src/mesh_picking/mod.rs +++ b/crates/bevy_picking/src/mesh_picking/mod.rs @@ -23,7 +23,7 @@ use crate::{ use bevy_app::prelude::*; use bevy_ecs::prelude::*; use bevy_reflect::prelude::*; -use bevy_render::{prelude::*, view::RenderLayers}; +use bevy_render::{prelude::*, view::InheritedVisibleLayers}; use ray_cast::{MeshRayCast, MeshRayCastSettings, RayCastVisibility, SimplifiedMesh}; /// Runtime settings for the [`MeshPickingPlugin`]. @@ -76,10 +76,10 @@ impl Plugin for MeshPickingPlugin { pub fn update_hits( backend_settings: Res, ray_map: Res, - picking_cameras: Query<(&Camera, Option<&RayCastPickable>, Option<&RenderLayers>)>, + picking_cameras: Query<(&Camera, Option<&RayCastPickable>, Option<&InheritedVisibleLayers>)>, pickables: Query<&Pickable>, marked_targets: Query<&RayCastPickable>, - layers: Query<&RenderLayers>, + layers: Query<&InheritedVisibleLayers>, mut ray_cast: MeshRayCast, mut output: EventWriter, ) { @@ -100,7 +100,7 @@ pub fn update_hits( !backend_settings.require_markers || marked_targets.get(entity).is_ok(); // Other entities missing render layers are on the default layer 0 - let entity_layers = layers.get(entity).cloned().unwrap_or_default(); + let entity_layers = layers.get(entity).cloned().unwrap_or_default().0; let render_layers_match = cam_layers.intersects(&entity_layers); let is_pickable = pickables.get(entity).ok().is_none_or(|p| p.is_hoverable); diff --git a/crates/bevy_render/src/camera/camera.rs b/crates/bevy_render/src/camera/camera.rs index 298be27c5fa9e..28ec746c9aa2e 100644 --- a/crates/bevy_render/src/camera/camera.rs +++ b/crates/bevy_render/src/camera/camera.rs @@ -13,8 +13,7 @@ use crate::{ sync_world::{RenderEntity, SyncToRenderWorld}, texture::GpuImage, view::{ - ColorGrading, ExtractedView, ExtractedWindows, Msaa, NoIndirectDrawing, RenderLayers, - RenderVisibleEntities, RetainedViewEntity, ViewUniformOffset, Visibility, VisibleEntities, + ColorGrading, InheritedVisibleLayers, ExtractedView, ExtractedWindows, Msaa, NoIndirectDrawing, RenderVisibleEntities, RetainedViewEntity, ViewUniformOffset, Visibility, VisibleEntities, VisibleLayers }, Extract, }; @@ -1056,7 +1055,7 @@ pub fn extract_cameras( Option<&ColorGrading>, Option<&Exposure>, Option<&TemporalJitter>, - Option<&RenderLayers>, + Option<&InheritedVisibleLayers>, Option<&Projection>, Has, )>, @@ -1088,7 +1087,8 @@ pub fn extract_cameras( ExtractedView, RenderVisibleEntities, TemporalJitter, - RenderLayers, + VisibleLayers, + InheritedVisibleLayers, Projection, NoIndirectDrawing, ViewUniformOffset, diff --git a/crates/bevy_render/src/view/mod.rs b/crates/bevy_render/src/view/mod.rs index ba0f8cca62ced..18ca76fe6d7f8 100644 --- a/crates/bevy_render/src/view/mod.rs +++ b/crates/bevy_render/src/view/mod.rs @@ -108,6 +108,8 @@ impl Plugin for ViewPlugin { .register_type::() .register_type::() .register_type::() + .register_type::() + .register_type::() .register_type::() .register_type::() .register_type::() diff --git a/crates/bevy_render/src/view/visibility/mod.rs b/crates/bevy_render/src/view/visibility/mod.rs index 09dc516b6ea9b..2a4f3dd750b01 100644 --- a/crates/bevy_render/src/view/visibility/mod.rs +++ b/crates/bevy_render/src/view/visibility/mod.rs @@ -35,7 +35,7 @@ use crate::{ /// `Visibility` to set the values of each entity's [`InheritedVisibility`] component. #[derive(Component, Clone, Copy, Reflect, Debug, PartialEq, Eq, Default)] #[reflect(Component, Default, Debug, PartialEq)] -#[require(InheritedVisibility, ViewVisibility)] +#[require(InheritedVisibility, ViewVisibility, VisibleLayers)] pub enum Visibility { /// An entity with `Visibility::Inherited` will inherit the Visibility of its [`ChildOf`] target. /// @@ -315,7 +315,7 @@ pub enum VisibilitySystems { CalculateBounds, /// Label for [`update_frusta`] in [`CameraProjectionPlugin`](crate::camera::CameraProjectionPlugin). UpdateFrusta, - /// Label for the system propagating the [`InheritedVisibility`] in a + /// Label for the systems propagating [`InheritedVisibility`] and [`InheritedVisibleLayers`] in the /// [`ChildOf`] / [`Children`] hierarchy. VisibilityPropagate, /// Label for the [`check_visibility`] system updating [`ViewVisibility`] @@ -353,7 +353,7 @@ impl Plugin for VisibilityPlugin { PostUpdate, ( calculate_bounds.in_set(CalculateBounds), - (visibility_propagate_system, reset_view_visibility) + (visibility_propagate_system, visible_layers_propagate_system, reset_view_visibility) .in_set(VisibilityPropagate), check_visibility.in_set(CheckVisibility), mark_newly_hidden_entities_invisible.in_set(MarkNewlyHiddenEntitiesInvisible), @@ -503,7 +503,7 @@ pub fn check_visibility( Entity, &mut VisibleEntities, &Frustum, - Option<&RenderLayers>, + Option<&InheritedVisibleLayers>, &Camera, Has, )>, @@ -512,7 +512,7 @@ pub fn check_visibility( &InheritedVisibility, &mut ViewVisibility, &VisibilityClass, - Option<&RenderLayers>, + Option<&InheritedVisibleLayers>, Option<&Aabb>, &GlobalTransform, Has, diff --git a/crates/bevy_render/src/view/visibility/render_layers.rs b/crates/bevy_render/src/view/visibility/render_layers.rs index 1932abdf71fba..443b5eb4ad39f 100644 --- a/crates/bevy_render/src/view/visibility/render_layers.rs +++ b/crates/bevy_render/src/view/visibility/render_layers.rs @@ -1,4 +1,5 @@ -use bevy_ecs::prelude::{Component, ReflectComponent}; +use bevy_derive::{Deref, DerefMut}; +use bevy_ecs::{component::require, entity::Entity, hierarchy::{ChildOf, Children}, prelude::{Component, ReflectComponent}, query::{Changed, Or, With}, system::Query}; use bevy_reflect::{std_traits::ReflectDefault, Reflect}; use smallvec::SmallVec; @@ -7,20 +8,11 @@ pub const DEFAULT_LAYERS: &RenderLayers = &RenderLayers::layer(0); /// An identifier for a rendering layer. pub type Layer = usize; -/// Describes which rendering layers an entity belongs to. -/// -/// Cameras with this component will only render entities with intersecting -/// layers. -/// -/// Entities may belong to one or more layers, or no layer at all. +/// Describes which rendering layers an entity belongs to via the [`VisibleLayers`] and [`InheritedVisibleLayers`] components. /// /// The [`Default`] instance of `RenderLayers` contains layer `0`, the first layer. -/// -/// An entity with this component without any layers is invisible. -/// -/// Entities without this component belong to layer `0`. -#[derive(Component, Clone, Reflect, PartialEq, Eq, PartialOrd, Ord)] -#[reflect(Component, Default, PartialEq, Debug)] +#[derive(Clone, Reflect, PartialEq, Eq, PartialOrd, Ord)] +#[reflect(Default, PartialEq, Debug)] pub struct RenderLayers(SmallVec<[u64; INLINE_BLOCKS]>); /// The number of memory blocks stored inline @@ -247,6 +239,136 @@ impl core::ops::BitXor for RenderLayers { } } +/// User indication of which [`RenderLayers`] an entity will render to. +/// +/// If this component is an [`Override`](Self::Override), all [`Children`] (and all of their children and so on) who +/// are set to [`Inherited`](Self::Inherited) will take this component's render layers. +/// +/// This is done in the [`VisibilityPropagate`](super::VisibilitySystems::VisibilityPropagate) system set, and the actual computed render layers +/// are put in the [`InheritedVisibleLayers`] component. +#[derive(Component, Clone, Reflect, PartialEq, Eq, PartialOrd, Ord, Debug, Default)] +#[reflect(Component, Default, PartialEq, Debug)] +#[require(InheritedVisibleLayers)] +pub enum VisibleLayers { + #[default] + Inherited, + Override(RenderLayers), +} + +impl VisibleLayers { + /// Create a new `VisibleLayers` belonging to the given layer. + /// + /// This `const` constructor is limited to `size_of::()` layers. + /// If you need to support an arbitrary number of layers, use + /// [`from_layers`](VisibleLayers::from_layers). + pub const fn layer(n: Layer) -> Self { + VisibleLayers::Override(RenderLayers::layer(n)) + } + + /// Create a new `VisibleLayers` that belongs to no layers. + /// + /// This is distinct from [`VisibleLayers::default`], which belongs to the first layer. + pub const fn none() -> Self { + VisibleLayers::Override(RenderLayers::none()) + } + + /// Create a `VisibleLayers` from a list of layers. + pub fn from_layers(layers: &[Layer]) -> Self { + VisibleLayers::Override(RenderLayers::from_layers(layers)) + } +} + +impl Default for &VisibleLayers { + fn default() -> Self { + &VisibleLayers::Inherited + } +} + +/// The actual [`RenderLayers`] computed from [`VisibleLayers`]. +/// +/// Entities may belong to one or more layers, or no layer at all. +/// +/// Cameras with this component will only render entities with intersecting +/// layers. +/// +/// Entities without this component belong to layer `0`. +/// +/// The [`Default`] instance of `InheritedVisibleLayers` contains layer `0`, the first layer. +#[derive(Component, Clone, Reflect, PartialEq, Eq, PartialOrd, Ord, Debug, Default, Deref, DerefMut)] +#[reflect(Component, Default, PartialEq, Debug)] +pub struct InheritedVisibleLayers(pub RenderLayers); + +impl Default for &InheritedVisibleLayers { + fn default() -> Self { + const { &InheritedVisibleLayers(RenderLayers::layer(0)) } + } +} + +pub(super) fn visible_layers_propagate_system( + changed: Query< + (Entity, &VisibleLayers, Option<&ChildOf>, Option<&Children>), + ( + With, + Or<(Changed, Changed)>, + ), + >, + mut visible_layer_query: Query<(&VisibleLayers, &mut InheritedVisibleLayers)>, + children_query: Query<&Children, (With, With)>, +) { + for (entity, visible_layers, parent, children) in &changed { + + let render_layers = match visible_layers { + VisibleLayers::Override(layers) => layers.clone(), + VisibleLayers::Inherited => parent + .and_then(|p| visible_layer_query.get(p.get()).ok()) + .map(|(_, x)| x.0.clone()) + .unwrap_or_default() + }; + + let (_, mut inherited_visible_layers) = visible_layer_query + .get_mut(entity) + .expect("With ensures this query will return a value"); + + // Only updates visible layers if they have changed. + if inherited_visible_layers.0 != render_layers { + inherited_visible_layers.0 = render_layers.clone(); + + for &child in children.into_iter().flatten() { + let _ = propagate_recursive(&render_layers, child, &mut visible_layer_query, &children_query); + } + } + } +} + +fn propagate_recursive( + parent_render_layers: &RenderLayers, + entity: Entity, + mut visible_layer_query: &mut Query<(&VisibleLayers, &mut InheritedVisibleLayers)>, + children_query: &Query<&Children, (With, With)>, + // BLOCKED: https://github.com/rust-lang/rust/issues/31436 + // We use a result here to use the `?` operator. Ideally we'd use a try block instead +) -> Result<(), ()> { + // Get the visible_layer components for the current entity. + // If the entity does not have the required components, just return early. + let (visible_layers, mut inherited_visible_layers) = visible_layer_query.get_mut(entity).map_err(drop)?; + + let render_layers = match visible_layers { + VisibleLayers::Override(layers) => layers.clone(), + VisibleLayers::Inherited => parent_render_layers.clone() + }; + + if inherited_visible_layers.0 != render_layers { + inherited_visible_layers.0 = render_layers; + let new_render_layers = inherited_visible_layers.0.clone(); + + for &child in children_query.get(entity).ok().into_iter().flatten() { + let _ = propagate_recursive(&new_render_layers, child, &mut visible_layer_query, &children_query); + } + } + + Ok(()) +} + #[cfg(test)] mod rendering_mask_tests { use super::{Layer, RenderLayers}; diff --git a/examples/2d/pixel_grid_snap.rs b/examples/2d/pixel_grid_snap.rs index 4f946f9f941b4..4064434e82cac 100644 --- a/examples/2d/pixel_grid_snap.rs +++ b/examples/2d/pixel_grid_snap.rs @@ -8,7 +8,7 @@ use bevy::{ render_resource::{ Extent3d, TextureDescriptor, TextureDimension, TextureFormat, TextureUsages, }, - view::RenderLayers, + view::VisibleLayers, }, window::WindowResized, }; @@ -21,10 +21,10 @@ const RES_HEIGHT: u32 = 90; /// Default render layers for pixel-perfect rendering. /// You can skip adding this component, as this is the default. -const PIXEL_PERFECT_LAYERS: RenderLayers = RenderLayers::layer(0); +const PIXEL_PERFECT_LAYERS: VisibleLayers = VisibleLayers::layer(0); /// Render layers for high-resolution rendering. -const HIGH_RES_LAYERS: RenderLayers = RenderLayers::layer(1); +const HIGH_RES_LAYERS: VisibleLayers = VisibleLayers::layer(1); fn main() { App::new() diff --git a/examples/3d/order_independent_transparency.rs b/examples/3d/order_independent_transparency.rs index 62854957f2f3a..917218a4c077f 100644 --- a/examples/3d/order_independent_transparency.rs +++ b/examples/3d/order_independent_transparency.rs @@ -7,7 +7,7 @@ use bevy::{ color::palettes::css::{BLUE, GREEN, RED}, core_pipeline::oit::OrderIndependentTransparencySettings, prelude::*, - render::view::RenderLayers, + render::view::VisibleLayers, }; fn main() { @@ -30,7 +30,7 @@ fn setup( Transform::from_xyz(0.0, 0.0, 10.0).looking_at(Vec3::ZERO, Vec3::Y), // Add this component to this camera to render transparent meshes using OIT OrderIndependentTransparencySettings::default(), - RenderLayers::layer(1), + VisibleLayers::layer(1), // Msaa currently doesn't work with OIT Msaa::Off, )); @@ -42,7 +42,7 @@ fn setup( ..default() }, Transform::from_xyz(4.0, 8.0, 4.0), - RenderLayers::layer(1), + VisibleLayers::layer(1), )); // spawn help text @@ -55,7 +55,7 @@ fn setup( left: Val::Px(12.0), ..default() }, - RenderLayers::layer(1), + VisibleLayers::layer(1), )) .with_children(|p| { p.spawn(TextSpan::new("Press T to toggle OIT\n")); @@ -135,7 +135,7 @@ fn spawn_spheres( let alpha = 0.25; - let render_layers = RenderLayers::layer(1); + let render_layers = VisibleLayers::layer(1); commands.spawn(( Mesh3d(sphere_handle.clone()), @@ -181,7 +181,7 @@ fn spawn_occlusion_test( let cube_handle = meshes.add(Cuboid::from_size(Vec3::ONE).mesh()); let cube_material = materials.add(Color::srgb(0.8, 0.7, 0.6)); - let render_layers = RenderLayers::layer(1); + let render_layers = VisibleLayers::layer(1); // front let x = -2.5; diff --git a/examples/3d/render_to_texture.rs b/examples/3d/render_to_texture.rs index cf428be9c36ed..0c3f14b0e6d6c 100644 --- a/examples/3d/render_to_texture.rs +++ b/examples/3d/render_to_texture.rs @@ -7,7 +7,7 @@ use bevy::{ render::{ render_asset::RenderAssetUsages, render_resource::{Extent3d, TextureDimension, TextureFormat, TextureUsages}, - view::RenderLayers, + view::{VisibleLayers, RenderLayers}, }, }; @@ -62,7 +62,7 @@ fn setup( }); // This specifies the layer used for the first pass, which will be attached to the first pass camera and cube. - let first_pass_layer = RenderLayers::layer(1); + let first_pass_layer = VisibleLayers::layer(1); // The cube that will be rendered to the texture. commands.spawn(( @@ -80,7 +80,7 @@ fn setup( commands.spawn(( PointLight::default(), Transform::from_translation(Vec3::new(0.0, 0.0, 10.0)), - RenderLayers::layer(0).with(1), + VisibleLayers::Override(RenderLayers::layer(0).with(1)), )); commands.spawn(( diff --git a/examples/camera/first_person_view_model.rs b/examples/camera/first_person_view_model.rs index 78168eac5ddbf..b0559b2e395ed 100644 --- a/examples/camera/first_person_view_model.rs +++ b/examples/camera/first_person_view_model.rs @@ -46,7 +46,7 @@ use std::f32::consts::FRAC_PI_2; use bevy::{ color::palettes::tailwind, input::mouse::AccumulatedMouseMotion, pbr::NotShadowCaster, - prelude::*, render::view::RenderLayers, + prelude::*, render::view::VisibleLayers, }; fn main() { @@ -134,7 +134,7 @@ fn spawn_view_model( ..default() }), // Only render objects belonging to the view model. - RenderLayers::layer(VIEW_MODEL_RENDER_LAYER), + VisibleLayers::layer(VIEW_MODEL_RENDER_LAYER), )); // Spawn the player's right arm. @@ -143,7 +143,7 @@ fn spawn_view_model( MeshMaterial3d(arm_material), Transform::from_xyz(0.2, -0.1, -0.25), // Ensure the arm is only rendered by the view model camera. - RenderLayers::layer(VIEW_MODEL_RENDER_LAYER), + VisibleLayers::layer(VIEW_MODEL_RENDER_LAYER), // The arm is free-floating, so shadows would look weird. NotShadowCaster, )); @@ -186,7 +186,7 @@ fn spawn_lights(mut commands: Commands) { }, Transform::from_xyz(-2.0, 4.0, -0.75), // The light source illuminates both the world model and the view model. - RenderLayers::from_layers(&[DEFAULT_RENDER_LAYER, VIEW_MODEL_RENDER_LAYER]), + VisibleLayers::from_layers(&[DEFAULT_RENDER_LAYER, VIEW_MODEL_RENDER_LAYER]), )); }