This Week in Bevy

What happened this week in the Bevy Engine ecosystem

Links

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

procedural atmospheric scattering demo

#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 outdoorvarg outdoor

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.

torp region selection

Torp region selection screen

showcase

Torp built out a region selection screen with highlighted regions using a layer on top of bevy_ui that enables asset-based UI development using .ron files

bevy on the game boy advance

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!

asteroids

Asteroids-like

showcase

This asteroids inspired ship-and-asteroids game is powered by avian2d and a custom line shader.

game ui with bevy blur regions

UI with bevy_blur_regions

showcase

bevy_egui and bevy_blur_regions combined to make the translucent ui for this game

raymarching

SDF Raymarching

showcase

A learning project bringing together SDFs (signed distance fields) and a dynamic BVH (bounding volume hierarchy) to power dynamic shape insertion, removal, and transforms in this raymarching demo.

whack a key

whack a key

showcase

An in-progress whack-a-mole style game for the bigmode gamejam.

catacombs dungeon crawler

Catacombs dungeon crawler

showcase

A Dungeon Crawler game set in catacombs with spooky hallways and enemies to fight.

bevy_girk_demo

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.

isometric mmorpg walls

Mirror Stone Walls

showcase

An isometric MMORPG with support for click/drag selection of terrain to generate walls around the area.

bevy_easy_player_handler

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.

bevy_oxr tagbevy_oxr cube

Tag with bevy_oxr

showcase

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

jellyfish

Jellyfish

showcase

A jellyfish

unreal level editor

Unreal Engine Editor

showcase

An example using Unreal Engine's editor to export a landscape as a heightmap. Objects are exported via a script that writes out the object type and Transform information. Bevy reads this information in and spawns accordingly.

fog of war

Fog of war prototype

showcase

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

rotation gizmos

Rotation gizmos

showcase

The eyes for this rotating moon-light circle follow the user's cursor. To help debug the implementation, gizmos were used.

desctructible pixel terrain

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_flair

bevy_flair

crate_release

bevy_flair enables styling bevy_ui interfaces using CSS syntax.

bevy_lit

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

arbgeom

Arbgeom

devlog

Arbgeom is a non-euclidean marble game that gained rotational phsyics, improvements to scripting, and more.

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.

Pull Requests Merged This Week
Contributing

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.

How do I contribute?

Pull Requests Opened this week

Issues Opened this week