This Week in Bevy

What happened this week in the Bevy Engine ecosystem

Links

Additive Blending, Required Components, and shipping games

2024-10-07

The state of Animation is looking great as we near a potential 0.15 release candidate: with additive blending landing and more PRs in the works.

This week we also see updates on a number of Bevy games in the ecosystem, a whole host of Required Components upgrades are happening, and more.

Let's start off with something that takes a bit more explanation.

Screen Space Ambient Occlusion with Visibility Bitmasks (ssaovb)

VBAO 1

Ambient Light is a light that affects all objects in a scene "equally" and Ambient Occlusion is the idea that a give point on a surface is obscured from that light to some extent.

Screen Space Ambient Occlusion is a technique for approximating Ambient Occlusion. It uses the depth buffer to compare the depth of the point being rendered to the depth of surrounding points and tries to compute the Ambient Occlusion value based on that.

Previously, Bevy implemented a version of SSAO using "Ground Truth Ambient Occlusion", or GTAO. #13454 implements an alternative called "Visibility Bitmasks".

Side note: it is so awesome that we can dig up the open source contribution that implemented the original implementation while reading the new implementation.

Here are some additional links if this topic is of interest to you (Pulled from the GitHub PR comments for reviewers).

Required Components

The Required Components refactor continues with

#15269 introduces the ability to use a closure as a Required Component default value.

#[derive(Component)]
#[require(
    FocusPolicy(|| FocusPolicy::Block)
)]
struct SomeComponent;

While Required Components enable adding sets of Components, #15026 introduces the ability to remove sets of Components. Its notable that the functions added here are short-term "footgunnable" methods that removes all components of the bundle and its required components. Future work will include introducing methods that are safer to use in more situations.

#15458 introduces the ability to define Required Components at runtime, which is useful for plugins that optionally require components based on other enabled plugins, as well as defining requirements for first-party types (for example: "each Handle should require my custom rendering data components").

Additive Blending

additive blending

Building on top of some really interesting work in #15589, Additive Blending has been merged in #15631! This is the feature that was the last requirement to enable functionality like a walking animation and a sword swinging animation at the same time.

The animation_masks example has been updated to demonstrate blending and masks and if you're interested in the details of how nodes are evaluated, make sure to read #15589.

Curve-based animation

#15434 building on top of the Generic Animation work to allow arbitrary curves to be used by the animation system to animate arbitrary properties.

#14788 introduced a number of ways to create a transition between two values. This includes LinearCurve, CubicBezierCurve, StepCurve, ElasticCurve, and FunctionCurve (including functions like quadratic ease out)

Capsule2d inner rectangle

#15388 adds a new function to get the inner rectangle of a 2d capsule.

try_despawn

If you try to despawn an entity that doesn't exist, Bevy will print a warning. As of #15480, new try_despawn* methods will silence this warning if attempting to depawn entities that are potentially already despawned is intentional behavior.


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.

jarljarl buildingjarl building

Jarl Building

showcase

Jarl is a fantasy colony builder. This demo shows off the construction mechanics with menus, placement, lighting, and more.

wasm cartridge

Bevy/Wasm Fantasy Console

showcase

This showcase is a fantasy console built with Bevy that uses wasm-based cartridges for games. The system can now initialize a Bevy app, load a cartridge, invoke cartridge-based functions, and "paint" cartridge draw calls using Bevy's 2d pipeline

small bevy dungeon

Small Bevy Dungeon

showcase

This is a small turn based dungeon crawler using Bevy and bevy_ecs_ldtk.

The game is playable on Itch and the source is available on GitHub

perlin noise levels

Week 1 with Bevy

showcase

This developer's first week with Bevy involved building integration with Perlin noise. The game doesn't have a defined "background" or "terrain" tileset yet, so the display directly uses the Perlin values.

ship guidance systemship guidance system

Orbital Tactics

showcase

This game is 75 hours into the author's 100h self-challenge to make many small space games. This update includes a targeting computer, since shooting moving targets while you're moving and affected by gravity can be tough!

stairswatch towerstairs

Varg: Watch Tower

showcase

This is a continuation of environment work on a game we've seen in previous weeks (currently called Varg). This week includes an entire watch tower, foliage, more terrain, and more.

3d mazetty saver

Screen Savers

showcase

This project powers screen savers for your terminal using bevy_ratatui! There are some recognizable classics available including 3D Maze

rtsrts

Real-Time Strategy for a Game Jam

showcase

This small, space-themed RTS was built for a local game jam. The jam ran for a month with a theme of "Astro".

The game is playable on Itch.io and the source is available on GitHub as well.

custom shadercustom shader, but for water

First custom shader test

showcase

This is the author's first test of a custom shader. The effect is that of twinkly stars applied to a cube surrounding the player, and since the author shared the code for the shader it later got repurposed by someone else for a nice water effect!

pop up debug menu

Pop up debug menu

showcase

A pop up debug menu implemented with egui. Similar vibes to bevy_inspector_egui but with more functionality.

left-to-rightright-to-left

left-to-right and right-to-left

showcase

A bevy-native implementation of RTL layout, showing off left-to-right as well as right-to-left text.

fog

Fog experiments

showcase

An experiment that uses point lights, fog, and normal maps. This is being used to power differences between cave and outdoor experiences.

snek

Snekwar

showcase

In Snekwar you control a Snake that can shoot other Snakes while avoiding a black hole at the center of the map. Eat the remnants of other Snakes to grow.

unit control system

Unit Control System

showcase

This is the first test for a unit control system. The game is a Bevy port of the developer's existing game .

elevanted arcanaelevanted arcana logo

Elevated Arcana

showcase

Elevated arcana is an action tower defense game with a focus on elemental magic. The alpha is currently available on iOS.

Crates

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

bevy_mod_opacity

crate_release

Hierarchical opacity management and fade in and fade out for bevy.

hillvacuumhillvacuum

HillVacuum mapeditor v0.8.0

crate_release

HillVacuum is a Doom Builder and TrenchBroom inspired editor that allows the creation of bidimensional maps through the manipulation of convex polygons, placement of items and entities, and texture mapping.

In addition to a number of changes, 0.8 drops support for map versions lower than 0.7.

bevy_flowfield_tiles_plugin 0.11

crate_release

A vector field pathfinding algorithm for grouped/flocking behavior. 0.11 brings a rewritten Line-of-Sight calculation with a refactored integration layer.

No devlogs this week

Educational

Tutorials, deep dives, and other information on developing Bevy applications, games, and plugins

chunk-based terrain

Infinite chunk based terrain generation in Bevy 0.14

educational

Continuing on from the first video (which covered generating low-poly terrain), this video covers building an infinite chunk-based terrain system that spawn and despawns chunks as a player moves.

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