bevy icon indicating copy to clipboard operation
bevy copied to clipboard

Lighting Should Only hold Vec<Entity> instead of TypeId<Vec<Entity>>

Open re0312 opened this issue 1 year ago • 0 comments

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"} image

system{name="bevy_pbr::render::light::extract_lights"} image

Migration Guide

now SpotLightBundle , CascadesVisibleEntities and CubemapVisibleEntities use VisibleMeshEntities instead of VisibleEntities

re0312 avatar Jun 30 '24 03:06 re0312