Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Merged by Bors] - Better cascades config defaults + builder, tweak example configs #7456

Closed
wants to merge 15 commits into from

Conversation

danchia
Copy link
Contributor

@danchia danchia commented Feb 1, 2023

Objective

Solution

  • Introduce CascadeShadowConfigBuilder
  • Tweak various example cascade settings for better quality.

Changelog

  • Made examples look nicer under cascaded shadow maps.
  • Introduce CascadeShadowConfigBuilder to help with creating CascadeShadowConfig

Migration Guide

  • Configure settings for cascaded shadow maps for directional lights using the newly introduced CascadeShadowConfigBuilder.

@rparrett
Copy link
Contributor

rparrett commented Feb 1, 2023

The builder seems to be missing an overlap_proportion method.

@rparrett
Copy link
Contributor

rparrett commented Feb 1, 2023

Updated my little playground for this PR here: https://gist.github.com/rparrett/7f028c5893df13920ab792b398e65787

@rparrett
Copy link
Contributor

rparrett commented Feb 1, 2023

I am also debugging by logging the resulting texel size of each cascade, and this isn't producing the result I would expect when adjusting minimum_distance.

  • only the first cascade's texel size changes
  • the texel size increases rather than decreases?
  • shadows do not visually change.

(note) in the playground only the third and fourth cascades are actually visible

@alice-i-cecile alice-i-cecile added A-Rendering Drawing game state to the screen C-Examples An addition or correction to our examples C-Usability A simple quality-of-life change that makes Bevy easier to use labels Feb 1, 2023
@alice-i-cecile alice-i-cecile added this to the 0.10 milestone Feb 1, 2023
@alice-i-cecile
Copy link
Member

Adding to the milestone optimistically. I'd like to ship better UX / defaults if we can.

@danchia
Copy link
Contributor Author

danchia commented Feb 1, 2023

Thank you for trying it out!

I am also debugging by logging the resulting texel size of each cascade, and this isn't producing the result I would expect when adjusting minimum_distance.

  • only the first cascade's texel size changes

This is expected, as the first cascade is defined by minimum_distance)...first_cascade_far_bound and the rest of the cascades
are spaced exponentially from first_cascade_far_bound..maximum_distance

  • the texel size increases rather than decreases?

This is not really expected. Just to confirm, could you point me to what you're calculating as the texel size?

  • shadows do not visually change.

(note) in the playground only the third and fourth cascades are actually visible

Similarly, this is expected since only the third and fourth cascades are visible, and minimum_distance is only affecting the first. Adjusting first_cascade_far_bound does affect shadow visual quality in your example

@danchia
Copy link
Contributor Author

danchia commented Feb 1, 2023

@rparrett I just noticed the lack of validation of minimum_distance, which I have added. You'll need to adjust your playground to avoid exceeding first_cascade_far_bound when adjusting minimum_distance to avoid assertion failure

@rparrett
Copy link
Contributor

rparrett commented Feb 1, 2023

This is not really expected. Just to confirm, could you point me to what you're calculating as the texel size?

I am just tracing texel_size on Cascade in update_directional_light_cascades, and I am generally seeing smaller texel sizes and higher quality shadows when adjusting maximum_distance, but not minimum_distance.

This is expected, as the first cascade is defined by minimum_distance)...first_cascade_far_bound and the rest of the cascades
are spaced exponentially from first_cascade_far_bound..maximum_distance

I see... so in order to reduce the total shadow volume from the near side, I need to be adjusting both minimum_distance and first_cascade_far_bound?

That does seem to be working much better.

@rparrett
Copy link
Contributor

rparrett commented Feb 1, 2023

Thank you for trying it out!

Hopefully my bumbling around is at least providing some sort of insight into the user experience.

I thought that first_cascade_far_bound would be relative to minimum_distance.

@danchia
Copy link
Contributor Author

danchia commented Feb 1, 2023

Hopefully my bumbling around is at least providing some sort of insight into the user experience.

It is invaluable and I will be updating doc comments in response to them!

I thought that first_cascade_far_bound would be relative to minimum_distance.

Ah, I will add more comments to make this clear!

This is not really expected. Just to confirm, could you point me to what you're calculating as the texel size?

This is a bit in the weeds of how cascade shadow maps are implemented, but the shadow map covers an area that's more than what's strictly necessary for the sub-frustum defined by the cascade bounds. It actually covers a sphere in which the sub-frustum can freely rotate. The reason for this is shadow stability - we don't want the texel size to be changing as we look around as it would cause shadows to flicker.
http://the-witness.net/news/2010/03/graphics-tech-shadow-maps-part-1/ explains it well.

This does mean that if the(minimum distance to first cascade bound) of the view frustum was not driving the area covered by the shadow map (but rather it's width at first cascade bound for example), you would find that there's no change from moving minimum distance further out.

Copy link
Contributor

@superdump superdump left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Mostly good to go from looking through the code. But I'll have a play with it to see how it works. Probably in shadow_biases and scene_viewer.

crates/bevy_pbr/src/light.rs Outdated Show resolved Hide resolved
crates/bevy_pbr/src/light.rs Outdated Show resolved Hide resolved
crates/bevy_pbr/src/light.rs Outdated Show resolved Hide resolved
Co-authored-by: Robert Swain <robert.swain@gmail.com>
@superdump
Copy link
Contributor

superdump commented Feb 1, 2023

I did a bit of hacking to add some debug visualisation and then took a look at many_foxes. On this PR:
Screenshot 2023-02-01 at 19 48 19
And then I tweaked the minimum distance, first cascade far bound, and maximum_distance:
Screenshot 2023-02-01 at 19 44 49

EDIT: I noticed that currently on this PR, the foxes in the distance don't have shadows, I think. They're beyond the last cascade. And because the minimum distance wasn't adjusted, the first cascade was covering a lot of unused space.

@danchia
Copy link
Contributor Author

danchia commented Feb 1, 2023

I did a bit of hacking to add some debug visualisation and then took a look at many_foxes. On this PR: Screenshot 2023-02-01 at 19 48 19 And then I tweaked the minimum distance, first cascade far bound, and maximum_distance: Screenshot 2023-02-01 at 19 44 49

EDIT: I noticed that currently on this PR, the foxes in the distance don't have shadows, I think. They're beyond the last cascade. And because the minimum distance wasn't adjusted, the first cascade was covering a lot of unused space.

Oops, I thought I checked in Renderdoc, but probably made a mistake. The debug viz is really useful, I wonder if we should try and ship some form of it for end-users in future?

@superdump
Copy link
Contributor

superdump commented Feb 1, 2023

Here it is: 0001-bevy_pbr-Add-cascade-debug-visualization.patch You can just git am <path to patch> on top of your branch if you like and include it in this PR. danchia#1 We have clustered forward rendering cluster debug stuff like this.

@superdump
Copy link
Contributor

The debug visualisation shades the fragment based on the cascade index, which identifies the cascade shadow map that will be sampled. I guess looking in RenderDoc you would see the shadow map textures and see what they cover and you were tweaking based on that?

@superdump
Copy link
Contributor

Oh... that made me think "but I guess depending on the angle of the light, the cascades are going to cover a lot larger area than the view frustum slice" and then I thought that perhaps we should cull meshes against the view frustum slices (accounting for the overlap proportion) rather than the shadow map frusta... The shadow map frusta are >= the view frustum slice (accounting for the overlap iirc) but we will only sample from within the view frustum slice so there's no point rendering meshes outside that region.

@rparrett
Copy link
Contributor

rparrett commented Feb 1, 2023

With one cascade I am seeing a pretty interesting (to me) distribution of shadows. This behavior is dependent on light directon.
image
I'm guessing that this is not unexpected, but sharing just in case.

@danchia
Copy link
Contributor Author

danchia commented Feb 1, 2023

@danchia danchia closed this Feb 1, 2023
@danchia danchia reopened this Feb 1, 2023
@danchia
Copy link
Contributor Author

danchia commented Feb 1, 2023

Oh... that made me think "but I guess depending on the angle of the light, the cascades are going to cover a lot larger area than the view frustum slice" and then I thought that perhaps we should cull meshes against the view frustum slices (accounting for the overlap proportion) rather than the shadow map frusta... The shadow map frusta are >= the view frustum slice (accounting for the overlap iirc) but we will only sample from within the view frustum slice so there's no point rendering meshes outside that region.

Oh yes I was indeed looking at the shadow map! Indeed our culling is probably overly conservative right now. We could indeed consider culling against (part of) view frusta, but it's more subtle that it sounds - we need any shadow casters that are between the view frusta and the "infinitely far away directional light plane"

I will retweak the examples with your patch.

@superdump
Copy link
Contributor

superdump commented Feb 4, 2023

It seems like the default DirectionalLightShadowMap size was initially reduced to 1024 prior to webgl builds being limited to 1 cascade.

Should that be put back to 2048? Even with the tweaked bounds, shadows in wasm builds are noticeably worse (looking specifically at the lighting example)

Your suggestion makes sense, as long as webgl can only have one cascade.

@superdump
Copy link
Contributor

I think while the debug visualisation of which cascade is sampled for a given fragment is useful, we also need to be able to draw the cascade frusta so we can see the impact of adjusting the minimum distance. I was hacking on this when I was going to try to finish off CSM myself but @danchia figured out the problems without it. :)

Comment on lines 320 to 321
/// NOTE: Due to implementation details, this usually does not impact shadow quality as much as
/// `first_cascade_far_bound` and `maximum_distance`.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Depends on the FOV I suppose. A narrower FOV would make the view frustum body diagonal relatively larger compared to the far plane face diagonal. A wider FOV would shift their relationship in the other direction. Not sure how we can communicate this in a simple and easy way.

Copy link
Contributor

@superdump superdump left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Testing locally again to take a look at how the examples look to see if more tweaking is needed:

  • atmospheric_fog has quite a bit of aliasing in the foreground shadows.
  • CSM shadows don't seem to be working on load_gltf - there should be shadows cast by the helmet and stand on the base.
  • CSM shadows have aliasing in shadow_caster_receiver

The rest look good to me. :)

@superdump
Copy link
Contributor

Could the aliasing in atmospheric_fog be just a particularly challenging case for projective aliasing where a shadow map texel covers the depth difference of the foreground slope into shadow on the left to the crest of the hill casting that shadow? The cascade distribution looks fine to me.

@superdump
Copy link
Contributor

superdump commented Feb 4, 2023

load_gltf maximum distance needs to be at least 1.6 I think. At that point adjusting the minimum distance makes no difference.

Another interesting aspect of this is that the view frustum is impacted by the window size. So reducing the width of the window by resizing it does indeed seem to reduce the aliasing seen under the goggles as the light moves around behind the helmet.

@superdump
Copy link
Contributor

So, for clarity, I think for this PR we can adjust the load_gltf maximum distance to 1.6, and as webgl can only have one cascade for now, change the resolution back to what it was before the CSM PR, and then we can get this merged. It's not clear to me what more can be done to improve things and I'm happy to take a step now and then if we have more ideas we can always make new PRs.

@robtfm robtfm self-requested a review February 4, 2023 16:20
@danchia
Copy link
Contributor Author

danchia commented Feb 4, 2023

so in the latest four commits, I have

  1. adjusted webgl shadowmap size to default. (good catch @rparrett! I must have changed it before realizing webgl only had 1 cascade later only).
  2. tweaked load_gltf as suggested with only max_dist 1.6, and I also bumped the shadowmap res since we're only using 1 cascade.
  3. I tried to clarify the language around minimum_distance more. Please LMK if it can be made better.

@danchia danchia requested review from superdump and removed request for robtfm February 4, 2023 19:18
@robtfm robtfm self-requested a review February 4, 2023 19:31
Copy link
Contributor

@robtfm robtfm left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

looks far better on all the examples. a couple of nit-picky points (depending what others think) but i'll approve as-is.

crates/bevy_pbr/src/light.rs Outdated Show resolved Hide resolved
Self {
num_cascades: 1,
minimum_distance: 0.1,
maximum_distance: 100.0,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i think webgl and non-webgl should have the same default settings (apart from num cascades). then things will work the same (but look worse) on webgl by default.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hmm... not sure I agree on that. Having a 1km (assuming world units are metres) single-cascade will look horribly bad. I think it's better to reduce the shadow max distance instead and just not have shadows further away. If people want to, they can change it.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This was my intention behind the differing defaults - I felt with only 1 cascade it would be a better tradeoff to just have a shorter shadow distance.

Copy link
Contributor

@superdump superdump left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

robtfm's comments + these, then we can merge. :)

crates/bevy_pbr/src/light.rs Outdated Show resolved Hide resolved
crates/bevy_pbr/src/light.rs Outdated Show resolved Hide resolved
crates/bevy_pbr/src/light.rs Outdated Show resolved Hide resolved
@danchia danchia changed the title Better cascades config builder, tweak example configs Better cascades config defaults + builder, tweak example configs Feb 5, 2023
Copy link
Contributor

@superdump superdump left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

bors r+

bors bot pushed a commit that referenced this pull request Feb 5, 2023
# Objective

- Improve ergonomics / documentation of cascaded shadow maps
- Allow for the customization of the nearest shadowing distance.
- Fixes #7393 
- Fixes #7362 

## Solution

- Introduce `CascadeShadowConfigBuilder`
- Tweak various example cascade settings for better quality.

---

## Changelog

- Made examples look nicer under cascaded shadow maps.
- Introduce `CascadeShadowConfigBuilder` to help with creating `CascadeShadowConfig`

## Migration Guide

- Configure settings for cascaded shadow maps for directional lights using the newly introduced `CascadeShadowConfigBuilder`.

Co-authored-by: Robert Swain <robert.swain@gmail.com>
@bors bors bot changed the title Better cascades config defaults + builder, tweak example configs [Merged by Bors] - Better cascades config defaults + builder, tweak example configs Feb 5, 2023
@bors bors bot closed this Feb 5, 2023
bors bot pushed a commit to bevyengine/bevy-website that referenced this pull request Mar 6, 2023
## How This Works

For the Bevy 0.10 release blog post (and for the first time ever), I'm publicly opening the doors to other people writing blog post sections. Specifically, if you worked on a feature in a substantial way and are interested in presenting it, you can now ask to claim a section by leaving a comment in this PR. If you claim a section, submit a pull request to the `release-0.10.0` branch in this repo. For the next week, we will be filling in sections (the release target is Saturday March 4th). Please don't claim a section if you don't plan on completing it within that timeline. Also don't claim a section if you weren't an active participant in the design and implementation of the change (unless you are a Maintainer or SME).

I will claim any unclaimed sections.

Try to match the style of previous release blog posts as much as possible.

1. Show, don't tell. Don't bombard people with information. Avoid large walls of text _and_ large walls of code. Prefer the pattern "byte sized description of one thing" -> "example code/picture/video contextualizing that one thing" -> repeat. Take readers on a journey step by simple step.
2. Don't use up reader's "mental bandwidth" without good reason. We can't afford page-long descriptions of minor bug fixes. If it isn't a "headliner change", keep the description short and sweet. If a change is self describing, let it do that (ex: We now support this new mesh shape primitive ... this is what it looks like). If it is a "headliner change", still try to keep it reasonable. We always have a lot to cover.
3. In slight competition with point (2), don't omit interesting technical information when it is truly fun and engaging. A good chunk of our users are highly technical and enjoy learning how the sausage is made. Try to strike a balance between "terse and simple" and "nerdy details".
4. When relevant, briefly describe the problem being solved first, then describe the solution we chose. This contextualizes the change and gives the feature value and purpose.
5. When possible, provide visuals. They create interest / keep people hooked / break up the monotony.
6. Record images and videos at the default bevy resolution (1280x720)
7. Provide an accurate listing of authors that meaningfully contributed to the feature. Try to sort in order of "contribution scale". This is hard to define, but try to be fair. When in doubt, ask other contributors, SMEs, and/or maintainers.
8. Provide numbers and graphs where possible.  If something is faster, use numbers to back it up. We don't (yet) have automated graph generation in blog post style, so send data / info to me (@cart) if you want a graph made.

## Headliners

Headliners are our "big ticket high importance / high profile" changes. They are listed briefly at the beginning of the blog post, their entries are roughly sorted "to the top", and they are given priority when it comes to "space in the blog post". If you think we missed something (or didn't prioritize something appropriately), let us know.

* ECS Schedule v3 (previously known as "stageless")  
* Partial Android Support
* Depth and Normal Prepass
* Environment Map Lighting
* Cascaded Shadow Maps
* Distance and Atmospheric Fog
* Smooth Skeletal Animation Transitions
* Enable Parallel Pipelined Rendering
* Windows as Entities
* Renderer Optimizations
* ECS Optimizations

## Sections

These are the sections we will cover in the blog post. If a section has been claimed, it will have `(claimed by X)` in the title. If it is unclaimed it will have `(unclaimed)` in the title. Let us know if we missed a section. We don't cover every feature, but we should cover pretty much everything that would be interesting to users. Note that what is interesting or challenging to implement is not necessarily something that is relevant to our blog post readers. And sometimes the reverse is true!

If you believe a section should be split up or reorganized, just bring it up here and we can discuss it.

### ~~Schedule V3 (claimed by @alice-i-cecile)~~

* [Migrate engine to Schedule v3][7267]
* [Add `bevy_ecs::schedule_v3` module][6587]
* [Stageless: fix unapplied systems][7446]
* [Stageless: move final apply outside of spawned executor][7445]
* Sets
* Base Sets
  * [Base Sets][7466]
* Reporting
  * [Report sets][7756]
  * [beter cycle reporting][7463]
* Run Conditions
  * [Add condition negation][7559]
  * [And/Or][7605]
  * [Add more common run conditions][7579]
* States
  * [States derive macro][7535]
* System Piping Flexibility
  * [Support piping exclusive systems][7023]
  * [Allow piping run conditions][7547]

### ~~Depth and Normal Prepass (claimed by @IceSentry)~~

* [Add depth and normal prepass][6284]
* [Move prepass functions to prepass_utils][7354]

### ~~Distance and Atmospheric Fog (claimed by @coreh)~~

* [Add Distance and Atmospheric Fog support][6412]

### ~~Cascaded Shadow Maps (claimed by @cart)~~

* [Cascaded shadow maps.][7064]
* [Better cascades config defaults + builder, tweak example configs][7456]

### ~~Environment Map Lighting (claimed by @cart)~~

* [EnvironmentMapLight, BRDF Improvements][7051]
* [Webgl2 support][7737]

### ~~Tonemapping options (claimed by @cart)~~

* [Initial tonemapping options][7594]

### ~~Android support + unification (claimed by @mockersf)~~

* [IOS, Android... same thing][7493]

### ~~Windows as Entities (claimed by @Aceeri)~~

* [Windows as Entities][5589]
* [break feedback loop when moving cursor][7298]
* [Fix `Window` feedback loop between the OS and Bevy][7517]

### ~~Enable Parallel Pipelined Rendering (claimed by @james7132)~~

* [Pipelined Rendering][6503]
* [Stageless: add a method to scope to always run a task on the scope thread][7415]
* [Separate Extract from Sub App Schedule][7046]

### ~~Smooth Skeletal Animation Transitions (claimed by @james7132)~~

* [Smooth Transition between Animations][6922]

### ~~Spatial Audio (claimed by @harudagondi)~~

* [Spatial Audio][6028]

### ~~Shader Processor Features (claimed by @cart)~~

* [Shader defs can now have a value][5900]
* [Shaders can now have #else ifdef chains][7431]
* [Define shader defs in shader][7518]

### ~~Shader Flexibility Improvements (claimed by @cart)~~

* [add ambient lighting hook][5428]
* [Refactor Globals and View structs into separate shaders][7512]

### ~~Renderer Optimizations (claimed by @james7132)~~

* [bevy_pbr: Avoid copying structs and using registers in shaders][7069]
* [Flatten render commands][6885]
* [Replace UUID based IDs with a atomic-counted ones][6988]
* [improve compile time by type-erasing wgpu structs][5950]
* [Shrink DrawFunctionId][6944]
* [Shrink ComputedVisibility][6305]
* [Reduce branching in TrackedRenderPass][7053]
* [Make PipelineCache internally mutable.][7205]
* [Improve `Color::hex` performance][6940]
* [Support recording multiple CommandBuffers in RenderContext][7248]
* [Parallelized transform propagation][4775]
* [Introduce detailed_trace macro, use in TrackedRenderPass][7639]
* [Optimize color computation in prepare_uinodes][7311]
* [Directly extract joints into SkinnedMeshJoints][6833]
* [Parallelize forward kinematics animation systems][6785]
* [Move system_commands spans into apply_buffers][6900]
* [Reduce the use of atomics in the render phase][7084]

### ~~ECS Optimizations (claimed by @james7132 )~~

* [Remove redundant table and sparse set component IDs from Archetype][4927]
* [Immutable sparse sets for metadata storage][4928]
* [Replace BlobVec's swap_scratch with a swap_nonoverlapping][4853]
* [Use T::Storage::STORAGE_TYPE to optimize out unused branches][6800]
* [Remove unnecessary branching from bundle insertion][6902]
* [Split Component Ticks][6547]
* [use bevy_utils::HashMap for better performance. TypeId is predefined …][7642]
* [Extend EntityLocation with TableId and TableRow][6681]
* [Basic adaptive batching for parallel quer- [Speed up `CommandQueue` by storing commands more densely][6391]y iteration][4777]

### ~~Reflect Improvements (claimed by @cart)~~

* [bevy_reflect: Add `ReflectFromReflect` (v2)][6245]
* [Add reflection support for VecDeque][6831]
* [reflect: add `insert` and `remove` methods to `List`][7063]
* [Add `remove` method to `Map` reflection trait.][6564]
* [bevy_reflect: Fix binary deserialization not working for unit structs][6722]
* [Add `TypeRegistrationDeserializer` and remove `BorrowedStr`][7094]
* [bevy_reflect: Add simple enum support to reflection paths][6560]
* [Enable deriving Reflect on structs with generic types][7364]
* [bevy_reflect: Support tuple reflection paths][7324]
* [bevy_reflect: Pre-parsed paths][7321]
* [bevy_ecs: ReflectComponentFns without World][7206]

### ~~AsBindGroup Improvements (claimed by @cart)~~

* [Support storage buffers in derive `AsBindGroup`][6129]
* [Support raw buffers in AsBindGroup][7701]

### ~~Cylinder Shape (claimed by @cart)~~

* [Add cylinder shape][6809]

### ~~Subdividable Plane Shape (claimed by @cart)~~

* [added subdivisions to shape::Plane][7546]

### ~~StandardMaterial Blend Modes (claimed by @coreh)~~

* [Standard Material Blend Modes][6644]

### ~~Configurable Visibility Component (claimed by @cart)~~

* [enum `Visibility` component][6320]

### Task Improvements (claimed by @cart)

* [Fix panicking on another scope][6524]
* [Add thread create/destroy callbacks to TaskPool][6561]
* [Thread executor for running tasks on specific threads.][7087]
* [await tasks to cancel][6696]
* [Stageless: move MainThreadExecutor to schedule_v3][7444]
* [Stageless: close the finish channel so executor doesn't deadlock][7448]

### ~~Upgrade to wgpu 0.15 (claimed by @cart)~~

* [Wgpu 0.15][7356]

### ~~Expose Bindless / Non-uniform Indexing Support (claimed by @cart)~~

* [Request WGPU Capabilities for Non-uniform Indexing][6995]

### ~~Cubic Spline (claimed by @aevyrie)~~

* [Bezier][7653]

### ~~Revamp Bloom (claimed by @JMS55)~~

* [Revamp bloom](bevyengine/bevy#6677)

### ~~Use Prepass Shaders for Shadows (claimed by @superdump)~~

* [use prepass shaders for shadows](bevyengine/bevy#7784)

### ~~AccessKit (claimed by @alice-i-cecile)~~

* [accesskit](bevyengine/bevy#6874)

### ~~Camera Output Modes (claimed by @cart)~~

* [camera output modes](bevyengine/bevy#7671)

### ~~SystemParam Improvements (claimed by @JoJoJet)~~

* [Make the `SystemParam` derive macro more flexible][6694]
* [Add a `SystemParam` primitive for deferred mutations; allow `#[derive]`ing more types of SystemParam][6817]

### ~~Gamepad Improvements (claimed by @cart)~~

* [Gamepad events refactor][6965]
* [add `Axis::devices` to get all the input devices][5400]

### ~~Input Methods (claimed by @cart)~~

* [add Input Method Editor support][7325]

### ~~Color Improvements (claimed by @cart)~~

* [Add LCH(ab) color space to `bevy_render::color::Color`][7483]
* [Add a more familiar hex color entry][7060]

### ~~Split Up CorePlugin (claimed by @cart)~~

* [Break `CorePlugin` into `TaskPoolPlugin`, `TypeRegistrationPlugin`, `FrameCountPlugin`.][7083]

### ~~ExtractComponent Derive (claimed by @cart)~~

* [Extract component derive][7399]

### ~~Added OpenGL and DX11 Backends By Default (claimed by @cart)~~

* [add OpenGL and DX11 backends][7481]

### ~~UnsafeWorldCell (claimed by @BoxyUwU)~~

* [Move all logic to `UnsafeWorldCell`][7381]
* [Rename `UnsafeWorldCellEntityRef` to `UnsafeEntityCell`][7568]

### ~~Entity Commands (claimed by @cart)~~

* [Add a trait for commands that run for a given `Entity`][7015]

* [Add an extension trait to `EntityCommands` to update hierarchy while preserving `GlobalTransform`][7024]
* [Add ReplaceChildren and ClearChildren EntityCommands][6035]

### ~~Iterate EntityRef (claimed by @james7132)~~

* [Allow iterating over with EntityRef over the entire World][6843]

### ~~Ref Queries (@JoJoJet)~~

* [Added Ref to allow immutable access with change detection][7097]

### ~~Taffy Upgrade (claimed by @cart)~~

* [Upgrade to Taffy 0.2][6743]

### ~~Relative Cursor Position (claimed by @cart)~~

* [Relative cursor position][7199]

### ~~Const UI Config (claimed by @cart)~~

* [Add const to methods and const defaults to bevy_ui][5542]

### ~~Examples (claimed by @cart)~~

* [Add pixelated Bevy to assets and an example][6408]
* [Organized scene_viewer into plugins for reuse and organization][6936]

### ~~CI Improvements (claimed by @cart)~~

* [add rust-version for MSRV and CI job to check][6852]
* [msrv: only send a message on failure during the actual msrv part][7532]
* [Make CI friendlier][7398]
* [Fix CI welcome message][7428]
* [add an action to ask for a migration guide when one is missing][7507]

### ~~SMEs (@cart)~~

This was already covered in another blog post. Just briefly call out what they are and that this is the first release that used them. Link to the other blog post.

* [Subject Matter Experts and new Bevy Org docs][7185]

[4775]: bevyengine/bevy#4775
[4777]: bevyengine/bevy#4777
[4853]: bevyengine/bevy#4853
[4927]: bevyengine/bevy#4927
[4928]: bevyengine/bevy#4928
[5400]: bevyengine/bevy#5400
[5428]: bevyengine/bevy#5428
[5542]: bevyengine/bevy#5542
[5589]: bevyengine/bevy#5589
[5900]: bevyengine/bevy#5900
[5950]: bevyengine/bevy#5950
[6028]: bevyengine/bevy#6028
[6035]: bevyengine/bevy#6035
[6129]: bevyengine/bevy#6129
[6179]: bevyengine/bevy#6179
[6245]: bevyengine/bevy#6245
[6284]: bevyengine/bevy#6284
[6305]: bevyengine/bevy#6305
[6320]: bevyengine/bevy#6320
[6391]: bevyengine/bevy#6391
[6408]: bevyengine/bevy#6408
[6412]: bevyengine/bevy#6412
[6503]: bevyengine/bevy#6503
[6524]: bevyengine/bevy#6524
[6547]: bevyengine/bevy#6547
[6557]: bevyengine/bevy#6557
[6560]: bevyengine/bevy#6560
[6561]: bevyengine/bevy#6561
[6564]: bevyengine/bevy#6564
[6587]: bevyengine/bevy#6587
[6644]: bevyengine/bevy#6644
[6649]: bevyengine/bevy#6649
[6681]: bevyengine/bevy#6681
[6694]: bevyengine/bevy#6694
[6696]: bevyengine/bevy#6696
[6722]: bevyengine/bevy#6722
[6743]: bevyengine/bevy#6743
[6785]: bevyengine/bevy#6785
[6800]: bevyengine/bevy#6800
[6802]: bevyengine/bevy#6802
[6809]: bevyengine/bevy#6809
[6817]: bevyengine/bevy#6817
[6831]: bevyengine/bevy#6831
[6833]: bevyengine/bevy#6833
[6843]: bevyengine/bevy#6843
[6852]: bevyengine/bevy#6852
[6885]: bevyengine/bevy#6885
[6900]: bevyengine/bevy#6900
[6902]: bevyengine/bevy#6902
[6922]: bevyengine/bevy#6922
[6926]: bevyengine/bevy#6926
[6936]: bevyengine/bevy#6936
[6940]: bevyengine/bevy#6940
[6944]: bevyengine/bevy#6944
[6965]: bevyengine/bevy#6965
[6988]: bevyengine/bevy#6988
[6995]: bevyengine/bevy#6995
[7015]: bevyengine/bevy#7015
[7023]: bevyengine/bevy#7023
[7024]: bevyengine/bevy#7024
[7046]: bevyengine/bevy#7046
[7051]: bevyengine/bevy#7051
[7053]: bevyengine/bevy#7053
[7060]: bevyengine/bevy#7060
[7063]: bevyengine/bevy#7063
[7064]: bevyengine/bevy#7064
[7069]: bevyengine/bevy#7069
[7083]: bevyengine/bevy#7083
[7084]: bevyengine/bevy#7084
[7087]: bevyengine/bevy#7087
[7094]: bevyengine/bevy#7094
[7097]: bevyengine/bevy#7097
[7185]: bevyengine/bevy#7185
[7199]: bevyengine/bevy#7199
[7205]: bevyengine/bevy#7205
[7206]: bevyengine/bevy#7206
[7248]: bevyengine/bevy#7248
[7267]: bevyengine/bevy#7267
[7298]: bevyengine/bevy#7298
[7311]: bevyengine/bevy#7311
[7321]: bevyengine/bevy#7321
[7324]: bevyengine/bevy#7324
[7325]: bevyengine/bevy#7325
[7354]: bevyengine/bevy#7354
[7356]: bevyengine/bevy#7356
[7364]: bevyengine/bevy#7364
[7381]: bevyengine/bevy#7381
[7398]: bevyengine/bevy#7398
[7399]: bevyengine/bevy#7399
[7415]: bevyengine/bevy#7415
[7428]: bevyengine/bevy#7428
[7431]: bevyengine/bevy#7431
[7444]: bevyengine/bevy#7444
[7445]: bevyengine/bevy#7445
[7446]: bevyengine/bevy#7446
[7448]: bevyengine/bevy#7448
[7456]: bevyengine/bevy#7456
[7463]: bevyengine/bevy#7463
[7466]: bevyengine/bevy#7466
[7481]: bevyengine/bevy#7481
[7483]: bevyengine/bevy#7483
[7493]: bevyengine/bevy#7493
[7507]: bevyengine/bevy#7507
[7510]: bevyengine/bevy#7510
[7512]: bevyengine/bevy#7512
[7517]: bevyengine/bevy#7517
[7518]: bevyengine/bevy#7518
[7532]: bevyengine/bevy#7532
[7535]: bevyengine/bevy#7535
[7546]: bevyengine/bevy#7546
[7547]: bevyengine/bevy#7547
[7559]: bevyengine/bevy#7559
[7568]: bevyengine/bevy#7568
[7579]: bevyengine/bevy#7579
[7594]: bevyengine/bevy#7594
[7605]: bevyengine/bevy#7605
[7639]: bevyengine/bevy#7639
[7642]: bevyengine/bevy#7642
[7653]: bevyengine/bevy#7653
[7701]: bevyengine/bevy#7701
[7737]: bevyengine/bevy#7737
[7756]: bevyengine/bevy#7756


Co-authored-by: François <mockersf@gmail.com>
Co-authored-by: Alice Cecile <alice.i.cecile@gmail.com>
Co-authored-by: Mike <mike.hsu@gmail.com>
Co-authored-by: Boxy <supbscripter@gmail.com>
Co-authored-by: IceSentry <c.giguere42@gmail.com>
Co-authored-by: JoJoJet <21144246+JoJoJet@users.noreply.github.com>
Co-authored-by: Aevyrie <aevyrie@gmail.com>
Co-authored-by: James Liu <contact@jamessliu.com>
Co-authored-by: Marco Buono <thecoreh@gmail.com>
Co-authored-by: Aceeri <conmcclusk@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A-Rendering Drawing game state to the screen C-Examples An addition or correction to our examples C-Usability A simple quality-of-life change that makes Bevy easier to use
Projects
Status: Done
Development

Successfully merging this pull request may close these issues.

Many Foxes shadows vibrate Document how to configure cascaded shadow maps in different situations
5 participants