Closed
Description
The Bevy Renderer Rework is starting to stabilize and it is time to start planning how to upstream it! The intent of this issue is to track the work required to merge the renderer rework as soon as possible. This isn't a "renderer feature wishlist". But feel free to discuss what you think should be on this list!
This is an issue to track work that still needs to be done. If there is a name in parentheses, that work has been claimed by someone.
For some history on this effort, check out:
- Bevy Render Rework: Initial Framing and Proof of Concept #2265
- Bevy Render Rework Round 2: SubGraphs, Views, and Shadows #2351
- experimental pull requests in @cart's repo: https://github.com/cart/bevy/pulls?q=is%3Apr
Here is a list of open prs against the pipelined-rendering branch
Missing Required Features
The new renderer must have (approximate) feature parity with the old renderer.
- actual pipelining
- currently ownership in the new renderer is set up in a way to facilitate this, but actual parallel pipelining in the context of winit will require some additional work
- simple custom shaders (@cart)
- [Merged by Bors] - Port bevy_ui to pipelined-rendering #2653 (@Davier)
- text (@StarArawn)
- [Merged by Bors] - Add sprite atlases into the new renderer. #2560 (@StarArawn)
- [Merged by Bors] - Port bevy_gltf to pipelined-rendering #2537 (@superdump)
- re-enable gltf tangent imports [Merged by Bors] - Support for normal maps including from glTF models #2741 (@superdump)
- crevice bugfixing
- Round Up Size of All Structures to Structure Alignment LPGhatguy/crevice#29
- investigate potential array alignment corner case (@cart)
- [Merged by Bors] - Use the infinite reverse right-handed perspective projection #2543 (@superdump)
- [Merged by Bors] - move bevy_core_pipeline to its own plugin #2552 (@cart)
- [Merged by Bors] - Implement Sub-App Labels #2695 (@zicklag)
- [Merged by Bors] - Add MSAA to new renderer #3042
Add MSAA support to pipelined-rendering #2541(@superdump @cart) - Update BufferVec to use Queue (like UniformVec does) ([Merged by Bors] - Use RenderQueue in BufferVec #2847)
- Better
run_sub_graph()
input api- it shouldn't require correctly-ordered inputs. accept a "named" map instead
- [Merged by Bors] - Support for normal maps including from glTF models #2741(@superdump)
- [Merged by Bors] - Add ClearColor Resource to Pipelined Renderer #2631 (@zicklag)
- [Merged by Bors] - bevy_pbr2: Add support for configurable shadow map sizes #2700 (@superdump)
- [Merged by Bors] - Add RenderWorld to Extract step #2555 (@cart)
- Add Opaque 3d render phase, sort that front-to-back, and sort transparent phase back-to-front (@superdump)
Missing Nice-To-Have Features
These aren't required for a merge, but would be very nice to have.
- Visibility culling (probably requires merging and implementing Primitive Shapes rfcs#12) ([Merged by Bors] - Frustum culling #2861)
- This is an important part of the renderer api that isn't fleshed out yet and might meaningfully change the architecture.
- [Merged by Bors] - Sprite Batching #3060
Implement Sprite Batching #2642(@cart @zicklag) - [Merged by Bors] - bevy_pbr2: Add support for not casting/receiving shadows #2726 (@superdump)
- [Merged by Bors] - bevy_pbr2: Add support for configurable shadow map sizes #2700 (@superdump)
- Add HDR and bloom to Pipelined rendering #2876 (@ChangeCaps)
- [Merged by Bors] - Clustered forward rendering #3153 (@superdump)
- shadow filtering (@superdump)
- make querying for "inner lifetimes" more ergonomic
- DrawFunction ergonomics (@cart)
- "high level" data binding (@cart)
- shader defs (@cart)
- [Merged by Bors] - Shader Imports. Decouple Mesh logic from PBR #3137 (@cart)
-
depth pre-pass(@superdump)- Tabled for now because it generally reduces performance in our tests. In the future new cases like using the depth prepass for early SSAO might justify adding it.
- nicer api for flexible/custom vertex attributes (@cart)
- Generic
MaterialPlugin<T: Material>
for low boilerplate custom shaders (@cart) - [Merged by Bors] - update wireframe rendering to new renderer #3193
Discussions To Have Before Merging
- Consider RenderDevice + RenderQueue -> GpuDevice + GpuQueue
- Consider using atomic counter instead of UUID for render resource ids
- Should we keep the BevyDefault trait?
- Agree on the final "shadow enable/disable" api
Steps to Merge
- Move work from https://github.com/cart/bevy/tree/pipelined-rendering to https://github.com/bevyengine/bevy/tree/pipelined-rendering
- Merge as many small, orthogonal, easy-to-retain-attribution changes from the pipelined-rendering branch as possible:
- AppBuilder -> App: [Merged by Bors] - Merge AppBuilder into App #2531 (@bjorn3)
- SubApps (@cart)
- Break out SystemParam state and world lifetimes [Merged by Bors] - System Param Lifetime Split #2605 (@cart)
- "Lifetimeless" system params (@cart)
- [Merged by Bors] - Add new SystemState and rename old SystemState to SystemMeta #2283 (@cart)
- [Merged by Bors] - Spawn specific entities: spawn or insert operations, refactor spawn internals, world clearing #2673 (@cart)
- Decide whether or not to "vendor" crevice (we will)
- RFC for new renderer architecture (@cart)
- Swap out old renderer crates for new renderer crates (after Missing Required Features section is complete)
- Port examples
- update docs
- Manually merge (to prevent bors from squashing history and making attribution difficult)