bevy/crates
robtfm 132950cd55 Spotlights (#4715)
# Objective

add spotlight support

## Solution / Changelog

- add spotlight angles (inner, outer) to ``PointLight`` struct. emitted light is linearly attenuated from 100% to 0% as angle tends from inner to outer. Direction is taken from the existing transform rotation.
- add spotlight direction (vec3) and angles (f32,f32) to ``GpuPointLight`` struct (60 bytes -> 80 bytes) in ``pbr/render/lights.rs`` and ``mesh_view_bind_group.wgsl``
- reduce no-buffer-support max point light count to 204 due to above
- use spotlight data to attenuate light in ``pbr.wgsl``
- do additional cluster culling on spotlights to minimise cost in ``assign_lights_to_clusters``
- changed one of the lights in the lighting demo to a spotlight
- also added a ``spotlight`` demo - probably not justified but so reviewers can see it more easily

## notes

increasing the size of the GpuPointLight struct on my machine reduces the FPS of ``many_lights -- sphere`` from ~150fps to 140fps. 

i thought this was a reasonable tradeoff, and felt better than handling spotlights separately which is possible but would mean introducing a new bind group, refactoring light-assignment code and adding new spotlight-specific code in pbr.wgsl. the FPS impact for smaller numbers of lights should be very small.

the cluster culling strategy reintroduces the cluster aabb code which was recently removed... sorry. the aabb is used to get a cluster bounding sphere, which can then be tested fairly efficiently using the strategy described at the end of https://bartwronski.com/2017/04/13/cull-that-cone/. this works well with roughly cubic clusters (where the cluster z size is close to the same as x/y size), less well for other cases like single Z slice / tiled forward rendering. In the worst case we will end up just keeping the culling of the equivalent point light.

Co-authored-by: François <mockersf@gmail.com>
2022-07-08 19:57:43 +00:00
..
bevy_animation Add helper methods for rotating Transforms (#5151) 2022-07-01 03:58:54 +00:00
bevy_app Remove the dependency cycles (#5171) 2022-07-04 13:04:18 +00:00
bevy_asset Derive default for enums where possible (#5158) 2022-07-01 03:42:15 +00:00
bevy_audio Remove the dependency cycles (#5171) 2022-07-04 13:04:18 +00:00
bevy_core Add global init and get accessors for all newtyped TaskPools (#2250) 2022-06-09 02:43:24 +00:00
bevy_core_pipeline Add ViewRangefinder3d to reduce boilerplate when enqueuing standard 3D PhaseItems. (#5014) 2022-07-05 06:13:39 +00:00
bevy_derive android - fix issues other than the rendering (#5130) 2022-06-30 19:42:45 +00:00
bevy_diagnostic Cleanups in diagnostics (#3871) 2022-06-20 17:02:25 +00:00
bevy_dylib Bump Bevy to 0.8.0-dev (#4505) 2022-04-17 23:04:52 +00:00
bevy_dynamic_plugin Bump Bevy to 0.8.0-dev (#4505) 2022-04-17 23:04:52 +00:00
bevy_ecs Improve EntityMap API (#5231) 2022-07-08 01:14:24 +00:00
bevy_ecs_compile_fail_tests Fix rust 1.62 changes (#5154) 2022-06-30 19:24:28 +00:00
bevy_encase_derive Updated glam to 0.21. (#5142) 2022-07-03 19:55:33 +00:00
bevy_gilrs Update gilrs to v0.9 (#4848) 2022-05-30 17:26:23 +00:00
bevy_gltf Spotlights (#4715) 2022-07-08 19:57:43 +00:00
bevy_hierarchy add more SAFETY comments and lint for missing ones in bevy_ecs (#4835) 2022-07-04 14:44:24 +00:00
bevy_input Updated glam to 0.21. (#5142) 2022-07-03 19:55:33 +00:00
bevy_internal enable optional dependencies to stay optional (#5023) 2022-06-20 10:32:43 +00:00
bevy_log Remove the dependency cycles (#5171) 2022-07-04 13:04:18 +00:00
bevy_macro_utils bevy_reflect_derive: Tidying up the code (#4712) 2022-05-12 19:43:23 +00:00
bevy_math Updated glam to 0.21. (#5142) 2022-07-03 19:55:33 +00:00
bevy_mikktspace Updated glam to 0.21. (#5142) 2022-07-03 19:55:33 +00:00
bevy_pbr Spotlights (#4715) 2022-07-08 19:57:43 +00:00
bevy_ptr add more SAFETY comments and lint for missing ones in bevy_ecs (#4835) 2022-07-04 14:44:24 +00:00
bevy_reflect Make reflect_partial_eq return more accurate results (#5210) 2022-07-05 17:41:54 +00:00
bevy_render Spotlights (#4715) 2022-07-08 19:57:43 +00:00
bevy_scene remove component and resource suffixes from reflect structs (#5219) 2022-07-06 02:59:51 +00:00
bevy_sprite Make the fields of the Material2dKey public (#5212) 2022-07-05 14:02:00 +00:00
bevy_tasks Miri can set thread names now (#5108) 2022-06-26 21:28:00 +00:00
bevy_text Updated glam to 0.21. (#5142) 2022-07-03 19:55:33 +00:00
bevy_time add more SAFETY comments and lint for missing ones in bevy_ecs (#4835) 2022-07-04 14:44:24 +00:00
bevy_transform Updated glam to 0.21. (#5142) 2022-07-03 19:55:33 +00:00
bevy_ui Rename CameraUi (#5234) 2022-07-08 00:59:39 +00:00
bevy_utils add more SAFETY comments and lint for missing ones in bevy_ecs (#4835) 2022-07-04 14:44:24 +00:00
bevy_window Move the configuration of the WindowPlugin to a resource (#5227) 2022-07-08 01:14:23 +00:00
bevy_winit Add option to center a window (#4999) 2022-07-04 13:04:14 +00:00