This Week in Bevy

What happened this week in the Bevy Engine ecosystem

Links

Asteroids, Shadows, and the Entry API

2024-09-23

Welcome back to another week in Bevy!

This week we see some much needed documentation added to Assets v2, the base of generalized animations, and the ability to turn anti-aliasing on and off.

On top of that there's a new compute-shader based asteroid generator, a fragment shader-based raytracing example, and updates on a couple of games.

Assets

bevy_assets and asset processing both got some brand new, much needed documentation.

Percentage-Closer Soft Shadows (PCSS)

pcss on

Percentage-closer soft shadows (PDF) are a technique from 2004 that allow shadows to become blurrier farther from the objects that cast them. #13497 introduces PCSS to Bevy including wonderfully documented Pull Request and code behind it.

A new 3d/pcss example is also introduced.

Reflecting derived traits

#[derive(Component, Default, Reflect)]
-#[reflect(Component)]
+#[reflect(Component, Default)]
pub struct AnimationPlayer {

All components and resources got additional traits that they derive, like Default, reflected as well in a large number of PRs this week, all by the same author. As a result, the reflection information for all components and resources is much more fleshed out now than it was last week.

You can find out more about why and how in #15187

HeadlessPlugins

There are DefaultPlugins, which is what most Bevy apps use when using various functionality, and MinimalPlugins, which are a set of plugins mostly useful for testing. As of #15260 there is now HeadlessPlugins, which is aimed at being more functional than MinimalPlugins and less functional than the DefaultPlugins and mostly used on servers.

Turns

In #15169 the Rot2 APIs got extended with the ability to specify rotation in terms of Turns.

Ui Anti-Aliasing

anti-aliasing

As of #15170 anti-aliasing in UI can now be turned off using a new UiAntiAlias component. This is useful for hard-pixel retro style game UI.

use bevy::{prelude::*, ui::prelude::*};

commands.spawn((Camera2dBundle::default(), UiAntiAlias::Off));

EntityCommands entry API

The "entry API" is an idiomatic Rust convention that starts out with an entry call and provides a set of additional functions for manipulating the existing or non-existing values.

#15274 introduces a subset of the entry API for modifying or inserting component values.

commands
    .entity(player)
    .entry::<Level>()
    .and_modify(|mut lvl| lvl.0 += 1)
    .or_default();

Picking

Picking upstreaming continues a variety of bug fixes.

Generalized Animation

This week #15207 sets the stage for the as-yet-unmerged generalized animation PR. #15207 is a deep PR but has great comments, so could be great to read over for anyone interested in getting deeper into the ECS.


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.

image composerimage composer selection

Image composer

showcase

This is a prototype of a non-destructive, node-based image composer. Features implemented include: Save, load, copy, paste, undo, redo, context menus, multi-select, drag, pan, zoom, port snapping, primitive property editing, shape rasterization in a compute shader, and more.

astrogen

AstroGen

showcase

A procedural asteroid generator in bevy using compute shaders, with source code available!

raytracing in one weekend

Bevy raytracing in one weekend

showcase

"raytracing in one weekend" done in a single fragment shader pass in bevy.

mesh particlesmesh particles

Mesh Particles in bevy_hanabi

showcase

This demo showcases mesh particles (the smoke puffs) in bevy_hanabi. The PR is up in draft form for upstreaming back to bevy_hanabi so hopefully we see it in a release soon.

rusty lander 0.2rusty lander 0.2rusty lander 0.2

Rusty Lander v0.2

showcase

Rusty Lander got a v0.2 release. The game is still a work in progress. New work includes fonts and colors as well as gameplay and UI:

  • add dynamic thrust particle's property effect
  • show fuel, score & high score UI texts
  • update score after spaceship landing
  • add space key pressed after landing system
warhammer: dark omenwarhammer: dark omen

Warhammer: Dark Omen in Bevy

showcase

This is a reproduction of Warhammer: Dark Omen in Bevy. The project has been in development for about 6 months during which the developer has been slowly chipping away at the hard gameplay problems.

character editorcharacter editor

Character combinations

showcase

A devtool to test out different character combinations

noodles from blenderstick animations

Stick Characters from Blender

showcase

These noodles will eventually be replaced with human models. They're created in Blender using two blend files, one for the models and one for the animations. The poses/animations file uses single frame NLA tracks.

HackeRPG

HackeRPG Steam Alpha

showcase

HackeRPG is an arena roguelike where the mission is to stay in an arena full of virtual enemies for 15 minutes. It is now on Steam in alpha.

fractalsfractals grayfractals spacefractals purple space

fractal terrain generation

showcase

Progress on a raymarched fractal world with a number of different placeholder environment colors

surface netssurface netssurface nets

Fast Surface Nets

showcase

The continuation of last week's marching cubes conversion to fast-surface-nets continues. Future work includes wacom-tablet based sculpting, which already has a working octotablet/bevy implementation, and automatic decorating of the mesh.

3d platformer3d platformer jump

3d platformer textures

showcase

This 3d platformer added texture blending (blends diffuse and normal maps) and shell texturing (which is used for moss and fur).

bevy_editor_pls

bevy_editor_pls enhancements

showcase

A fork of bevy_editor_pls that allows the querying of hierarchy with filters:

  • w: `With
  • x: Without
  • i: Entity Index.

Crates

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

lommix_uilommix_ui

lommix_ui MVP

crate_release

The MVP for a new XML-based UI crate with hot-reloadable workflows.

bevy light 2d

bevy_light_2d 0.4.0

crate_release

bevy_light_2d is a general purpose 2d lighting plugin.

Its 0.4 release includes:

  • Point lights colors are now added to ambient light, instead of multiplied by it
  • Fixed point lights rendering despite being despawned
  • Fixed shadow sometimes appearing when no occluders were present

Migration guide

Point light intensity needs to be adjusted to account for changes to ambient light. Generally this means point light intensity values need to be lowered. See the relevant changes to the dungeon example.

bevy_map_camera

bevy_map_camera

crate_release

A 3D camera controller inspired by Google Maps, f4maps and Change Finder.

Based upon LookTransform, LookAngles and Orbital Camera Controller from smooth-bevy-cameras.

bevy_advanced_decorum

bevy_advanced_decorum

crate_release

bevy_advanced_decorum is a window decoration plugin. Its first release includes:

  • customizable titlebar transparency
  • toggle window title visibility
  • control over standard window buttons (close, minimize, zoom)
  • fine-tuned positioning of window controls
No devlogs this week

Educational

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

retrofit bevy_quickstart with bevy_asset_loader

educational

This post cover's the authors own experience replacing the bevy quickstart's asset loading with bevy_asset_loader.

Apply your Transforms!

educational

Blender will happily let you scale, rotate and perform other operations on your objects.. which can result in unexpected output if you're not sure what's going on. This post covers what that looks like and how to fix it!

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