This Week in Bevy

What happened this week in the Bevy Engine ecosystem

Links

bsn! prototypes, mixed lighting, and avian 0.2

2024-12-23

Happy Holidays! This week in Bevy we see bsn! prototypes, more provenance for change tracking, and of course, more no_std progress.

Times of Progress shows off some... progress... :laughing: and there are a number of fun shader demos like water and filters from the community.

Its also interesting to see more and more support for not just baked lighting, but mixed baked and realtime lighting. I feel like this is an underused aspect of Bevy at the moment and think I'll dive into it a bit more in the near future.

no_std

Following up on bevy_ecs gaining no_std support, bevy_app extends the functionality available on these targets to include the powerful App and Plugin abstractions. With this, library authors now have the option of making their plugins no_std compatible, or even offering plugins specifically to improve Bevy on certain embedded platforms!

To start making a no_std compatible plugin, simply disable default features when including bevy_app:

[dependencies]
bevy_app = { version = "0.16", default-features = false }

Library authors are encouraged to do this anyway, as it can also help with compile times and binary size on all platforms.

track_change_detection for spawns/despawns

Last week change detection was extended to events, and this week change detection is extended to spawns and despawns in #16047. This additional information was then used to enhance error messages:

thread 'main' panicked at src/main.rs:11:11:
Entity 0v1#4294967296 was despawned by src/main.rs:10:11

Mixed lighting

mixed lighting

Baked lightmaps can be created using software like Bakery and TheLightmapper while "real time" lighting is what you get when you put a light into a scene. #16761 introduces various stages of mixed lighting to combine baked and realtime lighting in different variations.

bindless lightmaps

The march towards bindless and multidraw continues with bindless lightmap support in #16653. The implementation allows binding up to 16 lightmaps at a time and falls back to binding them individually if bindless is not supported on the platform in use.

bevy_input_focus

bevy_input_focus continues to both be improved and made use of inside of Bevy to provide first-class input focus handling. This includes replacing bevy_a11y::Focus, generalizing bubbling, and a pluggable tab navigation framework.

Showcase

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

times of progress

Times of Progress

showcase

Development on Times of Progress continues, with a recent upgrade to Bevy 0.15 and a new pause menu! The pause menu uses two custom UI materials for the "paper texture" and the animated button plus a sliced texture for the border. It's all vanilla Bevy UI. Additionally the pause menu uses a kuwahara filter.

Times of Progress was also featured in Rock Paper Shotgun

bsn implementation

bsn! prototype

showcase

A bsn! implementation meant as a learning exercise to become more informed about the future of scenes. This demo shows off a hot-reload mechanism based on patches.

matrix-like drones

matrix-style drones

showcase

This demo uses bevy_ecs to power a sand engine and shows off matrix-style drones.

water shader

Water shader

showcase

New to shaders and Bevy, this author chose to try to recreate the water described in this video

guild simulatorguild simulator guild members

Guild Simulator

showcase

six months of effort have gone into this management/strategy game where you play the manager of a guild in a medieval/heroic fantasy world. Its a fully UI-driven game inspired by Potion Craft Simulator. An archive of the current state of the game is available on GitHub.

brushstroke tesselation

brushstroke tesselation

showcase

A rust translation of squiggy powers this brushstroke tesselation. You can define your own brush and use speed pressure, and other inputs to shape the final result.

The author is hoping to polish it up and get a release out in the future.

isometric mapsloot drops

pseudo-3d isometric maps

showcase

This game uses pseudo-3d isometric maps in the style of the Final Fantasy tactics games. Each tile has an x, y and height value.

asteroid eclipsing a star

asteroid eclipse

showcase

An image of an asteroid eclipsing a star from Cosmos.

The font used is Pixeloid

bevy_ui macro

WIP bevy_ui macro

showcase

work in progress on bevy_ui macros with autocomplete and more.

varg high resolution font

VARG high-resolution UI

showcase

Work on VARG's UI for high-resolution targets. The pixel font is hand-drawn, so the vector font isn't a perfect match but is close.

vscode bevy inspector

VSCode Bevy Inspector

showcase

This Bevy Inspector Visual Studio Code Extension first version is now available in the VSCode marketplace

The extension

  • Displays Bevy entities and components right in your editor side view.
  • Refresh data when wanted or via automatic polling with configurable delay.
  • Destroy an entity simply by the power of a click (hover over an entity, the bin icon is to the right).

Source is available on GitHub

Crates

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

gigs

gigs

crate_release

Gigs provides a simple abstraction for "graphics jobs", units of rendering work that only need to be done sporadically, on-demand. For example, a terrain generation compute shader would only need to be run once for each chunk of terrain. This crate helps avoid most of the manual extraction and resource prep boilerplate that comes along with this, and lets you focus on writing shaders.

bevy_hammer_ui

crate_release

bevy_hammer_ui is a UI framework lets you use bevy_ui and adds the UiBuilder pattern to build widgets and an optional .style() pattern to provide an alternate way of defining styles (as opposed to custom props in Node)

bevy_button_transitions

crate_release

A simple crate for button transitions.

Avian 0.2

crate_release

Avian is an ECS-driven physics engine for Bevy.

Avian 0.2 is another massive release, with several new features, quality-of-life improvements, and important bug fixes. There is a comprehensive announcement post, as usual that you should read to get up to date on the changes.

i-cant-believe-its-not-bsn 0.3

crate_release

i-cant-believe-its-not-bsn is a testing ground for bsn-like behavior. the 0.3 version introduces the template! macro, which you can see here.

fn counter<T: Component>(
    num: usize,
    name: &str,
    increase: T,
    decrease: T
) -> Template {
    template! {
        { Text::new("You have") } [
            { TextSpan::new(format!("{num}")) };
            { TextSpan::new(format!("{name}!")) };
            @{ another_template() };
        ];
        increase: {(
            Text::new("Increase"), increase,
            visible_if(num < 100)
        )};
        decrease: {(
            Text::new("Decrease"), decrease,
            visible_if(num > 0)
        )};
    }
}
No devlogs this week
No Educational this week
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