
Procedural Atmospheric Scattering, no_std, and DefaultQueryFilters
2025-01-27
Three new working groups were formed this week including
- Turtles all the way down: fixing !Send data in the ECS
- Decoupled Rendering
- Better release notes
Better release notes is, well, probably self explanatory while Decoupled Rendering aims to allow the decoupling of rendering from the Main Schedule. This decoupling could make it easier to have first-party frame limiting (ex: bevy_framepace) and could have benefits for async work (ex: bevy_fixed_update_task).
Turtles all the way down has a design doc intends to eliminate NonSend
resources, improving the experience along the way.
As always working groups can be found in the #working-groups channel in the Bevy Discord
SCOREWARRIOR became a corporate titanium sponsor this week which is always great to see. The company was founded in 2015 and is focused on 4X strategy and mid-core MMO games.
Speaking of sponsors, if you want to donate to Bevy head over to bevyengine.org/donate and join me in supporting the development effort.
Procedural Atmospheric Scattering
#16314 implements procedural atmospheric scattering from Sebastien Hillaire's 2020 paper. This approach should scale well even down to mobile hardware, and is physically accurate.
Seeing this PR come together in Discord was really fun and it seems like there's more to come from the authors.
no_std
As part of the ongoing no_std'ization of Bevy, bevy_asset
was switched to core::prelude
(instead of std::prelude
) and the bevy_platform_support
crate was created. The following crates all got no_std
support:
Relationships
After Entity Relations merged last week, Parent
was renamed to ChildOf
marking a change from "has a X" towards "is a X" naming making the relation ChildOf
and Children
for 0.16.
A new example detailing how to use the Relation APIs was introduced in #17443 and #17447 added support for non-Vec datastructures (specifically, SmallVec
in this PR) in those relations.
FromWorld Macro
A new FromWorld
macro was introduced in #17352 which seems to be mostly interesting for easier implementation of FromWorld
when all member fields also implement FromWorld
. Any type that implements Default
already implements FromWorld
.
Using Retained Rendering
Rendering is taking advantage of the new retained rendering world in #16985 by retaining RenderMaterialInstances
and RenderMeshMaterialIds
resulting in a performance improvement.
These are the extracted instances of a Material
and mapping from mesh instance to material and binding ids in the render world.
Track callsite for Observers
Progress on #16775 was made with #15607 landing this week, which introduced callsite tracking for observers and hooks. Observer Triggers now have a caller
field with this information.
DefaultQueryFilters
#13120 introduced DefaultQueryFilters
which are an opt-in approach to functionality that can power entity disabling. DefaultQueryFilters
is extensible by third parties, which can register default filters and thus "hide" entities from Bevy and other consumers.
Recursive insert/remove
#17463 introduces two new functions
insert_recursive
remove_recursive
These new functions allow user to insert a Component on an Entity and all related entities or remove a Component from an Entity and all related entities. This functionality takes advantage of the new generic relations APIs, so isn't restricted to just "ChildOf/Children".
Alice's Merge Train is a maintainer-level view into active PRs, both those that are merging and those that need work.

Showcase
Bevy work from the #showcase channel in Discord and around the internet. Use hashtag #bevyengine.


VARG outdoor environment
showcase
A new outdoor environment for VARG. It makes use of two directional lights (sun and "ground reflection"), weak ambient light, weak environment maps, and strategically placed point lights.

Bevy on the Game Boy Advance
showcase
The no_std work on Bevy is paying off with proof of concept work deploying Bevy to the Game Boy Advance. So far the demo has run on Game Boy Advance emulators as well as on a hypervisor on real DS hardware with real "direct on gba" attempts coming soon.
The demo uses Bevy's main branch and agb to produce the rom. Systems, plugins, resources, queries, the gamepad input API, it all just works!

bevy_girk_demo
showcase
A networked game tech stack demo that can support single or multi-player games. The networking is supported through renet2 and bevy_replicon.

bevy_easy_player_handler
showcase
bevy_easy_player_handler is an in-progress player and party handler system integrated with a local SQLite database. The current version is in the process of being extracted from a pre-existing Bevy 0.14 game with intention to update it to 0.15 eventually.


Tag with bevy_oxr
showcase
bevy_oxr powers this "gorilla tag" demo with half life alyx style locomotion. The demo uses Quest 3 controllers.

Fog of war prototype
showcase
A fog of war prototype for 2d Bevy games using analytical shapes rendered to a texture.

Destructible Pixel Terrain
showcase
This demo uses two textures attached via a Material2d to persist destructible terrain to alternating textures per frame.

Crates
New releases to crates.io and substantial updates to existing projects


bevy_lit 0.5
crate_release
Version 0.5 of bevy_lit introduces frustum culling for lighting artifacts, improving performance by only rendering lights within the viewport. A new shadows_enabled option for PointLight2d provides more control over shadow projection. WebGL2 support has been dropped in favor of focusing on WebGPU compatibility.

Devlogs
vlog style updates from long-term projects

Educational
Tutorials, deep dives, and other information on developing Bevy applications, games, and plugins
bevy_cobweb_ui with tabs
educational
The bevy_cobweb_ui book gained instructions on setting up a tab interface for bevy_cobweb_ui.
Flattened `PointerAction::Pressed` into `Press` and `Release`. authored by AlephCubed
Correct 'Text2dBundle' to 'Text2d' in example comment authored by theotherphil
docs: rewrite scene loading example documentation for clarity and depth authored by Arend-Jan
Rename `TargetCamera` to `UiTargetCamera` authored by ickshonpe
Reworked Segment types into their cartesian forms authored by Sigma-dev
Diagnostics for label traits authored by SpecificProtagonist
Add DefaultQueryFilters authored by NiseVoid
Parent -> ChildOf authored by cart
Add an example teaching users about custom relationships authored by alice-i-cecile
Include ReflectFromReflect in all non-dynamic data types. authored by anlumo
docs: enhance documentation in `query.rs` to clarify borrowing rules authored by younes-io
Fixing ui antialiasing clamp call parameters order (#14970) authored by hexroll
Create `bevy_platform_support` Crate authored by bushrat011899
remove unsound DerefMut impls from `EntityHashMap`/`EntityHashSet` authored by Victoronz
Expose a few primitive builders, which seemed to be missed? authored by Vrixyz
Support non-Vec data structures in relations authored by alice-i-cecile
Add docs to custom vertex attribute example authored by ChristopherBiscardi
Make the `animated_mesh` example more intuitive authored by greeble-dev
Text 2d alignment fix authored by ickshonpe
`FromWorld` derive macro authored by ecoskey
Run example validation jobs on `ubuntu-latest` authored by rparrett
Switch `bevy_asset` to `core::prelude` authored by bushrat011899
Add insert and remove recursive methods on `EntityWorldMut` and `EntityCommands` authored by alice-i-cecile
Added helper methods to `Bundles`. authored by AlephCubed
Move `Resource` trait to its own file authored by alice-i-cecile
Change `World::try_despawn` and `World::try_insert_batch` to return `Result` authored by JaySpruce
fix double comment characters authored by LucDrenth
`no_std` Support for `bevy_input_focus` authored by bushrat011899
Retain `RenderMaterialInstances` and `RenderMeshMaterialIds` from frame to frame. authored by pcwalton
Add `no_std` Support to `bevy_time` authored by bushrat011899
Track callsite for observers & hooks authored by SpecificProtagonist
Add reflection to the remaining `glam` `Vec` types authored by ilyvion
`flex_basis` doc comment fix authored by ickshonpe
Procedural atmospheric scattering authored by ecoskey
Fix Typo in `bevy_platform_support`'s `spin` Feature authored by bushrat011899
Updated the 2D examples to make them uniform authored by chamaloriz
Move `hashbrown` and `foldhash` out of `bevy_utils` authored by bushrat011899
Move `spin` to `bevy_platform_support` out of other crates authored by bushrat011899
DeriveWorld for enums authored by Bleachfuel
Fix Time authored by bushrat011899
Add warning for font sizes `<= 0.0` authored by rparrett
Refactored `ComponentHook` Parameters into `HookContext` authored by bushrat011899
Add `no_std` Support to `bevy_a11y` authored by bushrat011899
Mesh::merge to return a Result authored by Vrixyz
Add `no_std` support to `bevy_diagnostic` authored by bushrat011899
Update `async-broadcast` authored by rparrett
Only include distance fog in the PBR shader if the view uses it. authored by pcwalton
`Readback`: Add support for texture depth/array layers authored by EmbersArc
Remove `ViewVisibility` from UI nodes authored by ickshonpe
Proportional scaling for the sprite's texture. authored by silvestrpredko
implement EntityIndexMap/Set authored by Victoronz
Adds update interval config for FpsOverlayPlugin authored by spvky
Add many_materials stress test authored by CrazyRoka
Clarify docs for OnAdd, OnInsert, OnReplace, OnRemove triggers authored by RJ
implement FromEntitySetIterator authored by Victoronz
Make CustomCursor variants CustomCursorImage/CustomCursorUrl structs authored by mgi388
Replace checks for empty uinodes authored by ickshonpe
Want to contribute to Bevy?
Here you can find two types of potential contribution: Pull Requests that might need review and Issues that might need to be worked on.
Pull Requests Opened this week
EaseFunction svg graphs in doc authored by SpecificProtagonist
Fix calculation of skybox rotation authored by hukasu
Replace Ambient Lights with Environment Map Lights authored by SparkyPotato
Store resources as components on singleton entities authored by alice-i-cecile
Move all internal dependancies into the workspace. authored by AlephCubed
Support for non-browser `wasm` authored by bushrat011899
Add simple Disabled marker authored by NiseVoid
Improved Spawn APIs and Bundle Effects authored by cart
Move bounding_2d example to math folder authored by NiseVoid
Setup `World` to be optionally `!Send` authored by joshua-holmes
Rework WindowMode::Fullscreen API authored by jf908
expose OverflowAxis::Hidden as Overflow functions authored by LucDrenth
Add an example for stochastic texture sampling authored by cBournhonesque
added Hash to MouseScrollUnit; authored by AustinHellerRepo
Simplify derive_from_world authored by Bleachfuel
Fix window close in example cause panic authored by jiangheng90
Issues Opened this week
Add diagnostics for counting draw calls. authored by mintlu8
Make the `RelationshipTarget` component half of relationships optional authored by alice-i-cecile
Tracking issue for `Res<_>` deref rust-analyzer autocompletion failure authored by raldone01
LineBreak Text Wrapping does not work reliably authored by ethereumdegen
Better explanation of the Bevy Scene example authored by Arend-Jan
can we require bundle? authored by MushineLament
Add observers to asset server authored by Hexorg
dynamic_linking makes AssetPlugin very slow in workspace packages authored by UkoeHB
Fog Volume rendering from behind a mesh authored by Dusty844
Improve errors for recursive schedule running authored by UkoeHB
Add an example for disabling entities authored by alice-i-cecile
Add a first-party `Disabled` component authored by alice-i-cecile
Grid column_gap incorrect layout authored by rectalogic
Multi-window + camera UI example authored by ickshonpe
Add optional alpha / transparency passthrough for UI picking backend authored by mgi388
Bevy should deny `eprintln` and `println` and prefer `log` and/or `tracing` authored by BenjaminBrienen
Add a `detect_cyclic_traversal` debug feature to `bevy_ecs` authored by alice-i-cecile
Emit warning when mixing node types on an entity authored by viridia
Runtime generation of simple environment maps authored by viridia
Crahsing on android authored by hasbonahad
WireframeMaterial and Wireframe2dMaterial don't derive Reflect authored by anlumo
Allow for click detection (mouse picking) of a TextSpan authored by ethereumdegen
Missing a method to insert related entities at a specific index (`insert_children`) authored by villor
Return `Result` instead of `Option` from `FilteredResources::get` and similar authored by Shatur
Add ComputedNode.logical_size() method authored by viridia
WakeUp doesn't unfreeze systems when dragging authored by chlobes
wgpu_hal::gles::egl: EGL 'eglCreateSyncKHR' code 0x3004: EGL_BAD_ATTRIBUTE authored by lomirus
Storing `Layout` for `Reflect` types authored by makspll
Should we use the `darling` crate for proc macros authored by Bleachfuel
Clean up no_std CI check authored by BenjaminBrienen
Color docs should specify acceptable value ranges authored by thebluefish
More safely support untyped `Observer` events authored by ItsDoot
Support reflected event types for `Observer` triggers. authored by ItsDoot
Add `uv_transform` to `ColorMaterial` authored by rparrett
Eliminate `NonSend` resources by making `World` optionally `!Send` using generics authored by alice-i-cecile
Trigger some type of `ButtonEvent` on but input authored by spvky
Support KHR_node_visibility glTF extension authored by vveisard
Remove `bevy_pbr::generate_view_layouts` authored by rambip
`MeshRenderPlugin` should be usable as a standalone plugin. authored by rambip
GLTF loading and animation performance regression authored by aloucks
In example parallel_query close window cause panic authored by jiangheng90
Second camera ToneMapping and/or RenderLayers impacts first camera authored by lucidBrot
Yoink `assert_object_safe` authored by BenjaminBrienen