Reuse VisibleEntities in check_light_mesh_visibilty#13894
Merged
alice-i-cecile merged 1 commit intobevyengine:mainfrom Jun 17, 2024
Merged
Reuse VisibleEntities in check_light_mesh_visibilty#13894alice-i-cecile merged 1 commit intobevyengine:mainfrom
alice-i-cecile merged 1 commit intobevyengine:mainfrom
Conversation
kristoff3r
approved these changes
Jun 17, 2024
Contributor
kristoff3r
left a comment
There was a problem hiding this comment.
Nice find, this wasn't caught in the original PR because both TypeIdMap and Vec have the clear / shrink_to functions and the code still compiled.
Elabajaba
approved these changes
Jun 17, 2024
github-merge-queue bot
pushed a commit
that referenced
this pull request
Jul 14, 2024
…14073) # Objective - After #13894, I noticed the performance of `many_lights `dropped from 120+ to 60+. I reviewed the PR but couldn't identify any mistakes. After profiling, I discovered that `Hashmap::Clone `was very slow when its not empty, causing `extract_light` to increase from 3ms to 8ms. - Lighting only checks visibility for 3D Meshes. We don't need to maintain a TypeIdMap for this, as it not only impacts performance negatively but also reduces ergonomics. ## Solution - use VisibleMeshEntities for lighint visibility checking. ## Performance cargo run --release --example many_lights --features bevy/trace_tracy name="bevy_pbr::light::check_point_light_mesh_visibility"}  system{name="bevy_pbr::render::light::extract_lights"}  ## Migration Guide > now `SpotLightBundle` , `CascadesVisibleEntities `and `CubemapVisibleEntities `use VisibleMeshEntities instead of `VisibleEntities` --------- Co-authored-by: Alice Cecile <alice.i.cecile@gmail.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Objective
VisibleEntitieslist into separate lists for 2D meshes, 3D meshes, lights, and UI elements, for performance. #12582 , Bevy split visibleEntities into a TypeIdMap for different types of entities, but the behavior incheck_light_mesh_visibilitysimply calls HashMap::clear(), which will reallocate memory every frame.Testing
cargo run --release --example many_cubes --features bevy/trace_tracy -- --shadows

~10% win in
check_light_mesh_visibilty