This Week in Bevy

What happened this week in the Bevy Engine ecosystem

Links

Bevy 0.14-rc.2, Powerglove, and Soup!

2024-06-10

For the 0.14 release cycle, Bevy is shipping a release candidate before the official release. As such, the 0.14.0-rc.2 release candidate is available now and some crates are already starting to ship 0.14-rc compatible versions.

You can check in on the Bevy 0.14 milestone if you're running into any issues with the release candidate.

In the showcases this week, we'll see a Bevy "Powerglove", Inkscape level editing, new global illumination projects, and more.

and of course, Soup!

State-Scoped Entities

#13649 implements support for tagging entities with a component and automatically cleaning them up when exiting a state.

Using .enable_state_scoped_entities::<IsPaused>(), and labelling entities with StateScoped, as seen in the sub_states example will enable the functionality.

commands.spawn((
    StateScoped(IsPaused::Paused),
    ...
));

Map entities in Resources

Its fairly common for Resources to store entities and its desirable for Reflection to work well with these Resources, especially since Entity ids are World-specific. This has ramifications for Scene serialization and other use cases. As of #13650, these Resources can implement MapEntities to gain access to an EntityMapper which enables the translation of an Entity from one world into another.

Anisotropy

anisotropy

Physically-based anisotropy is now available for materials, which enhances the look of surfaces such as brushed metal or hair. glTF scenes can use the new feature with the KHR_materials_anisotropy extension. The support is implemented in StandardMaterial and as usual, the pull request is well-described and documented.

SMAA

SMAA

In #13423 a new anti-aliasing strategy was implemented: SMAA or Subpixel morphological antialiasing.

Extrusion

extrusion

As of #13478 new meshes can be created by extruding primitives. In #13676, support was extended to extrusions of CircularSector, CircularSegment, and Rhombus.

GltfExtras

The gltf format allows extensions and #13453 implements support for GltfExtras for scenes, meshes, and materials. This will help enhance the Blender/Bevy support that exists in third party crates in the future. This PR also introduces a new example load_gltf_extras.

In #13489 the names for many matrices has changed. This will affect Rust and wgsl code for 0.14.

Showcase

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

Hiru's Islandhiru's island

Hiru's Island

showcase

Hiru's Island (a temporary stand-in name for this game) got a whole bunch of work done, including a great looking main menu. The game is open source and uses an interesting set of crates like bevy_rapier2d, bevy_ecs_tilemap, and bevy_hanabi to build out the game world.

planet collidersshipplanet

Ships and Planets

showcase

This video showcases ships, planet terrain, and planet-scale colliders with bevy_xpbd.

global illuminationgi sdfgi

WIP global illumination

showcase

A work-in-progress 2d global illumination implementation aimed at working on webgl2 and mobile platforms. There's mentions of Radiance Cascades, ReSTIR GI, and other implementations in the Discord thread if you're interested in the topic.

map editormap editor

Data Editor - Myriad Empires

showcase

This video shows off some of the custom editors for manipulating data in Myriad Empires.

golden ratio sunflower

Sunflower Golden Ratio

showcase

A simulation illustrating the golden ratio in the arrangement of seeds on sunflowers, for a presentation on fibonacci and the golden ratio.

couch movementcouch movement

To Build a Home: Multi-tile entities

showcase

Taking inspiration from the Sims 1, To Build a Home now includes a multi-tile entity implementation that uses a leader/follower architecture. The implementation takes advantage of Bevy's parent/child relationship capabilities.

bevy logoui particlesui node particles

13k UI Nodes

showcase

A fun example that reads a png, spawns a UI Node every two pixels, and then moves them around.

While this is definitely not intended to be shipped in a production App, its still a fun example, and handles almost 13k UI nodes.

inkscape level editorinkscape level editor

Inkscape as a level editor

showcase

svg output from inkscape is manually parsed and interesting features are extracted, such as translation, rotation, etc. This is combined with lyon's crates to tessellate into meshes.

power glovemicrocontrollerbevy power glovebevy power glove

Bevy Powerglove Proof of Concept

showcase

This is a custom controller glove including Xiao nRF52 microcontroller and casing, featuring a flex sensor for each finger and an integrated accelerometer + gyroscope.

The glove sends its data over bluetooth to the Bevy desktop app, which connects to the glove and loads a gaussian splat scan. Making a fist makes the camera rotate with the hand. Bluetooth polling logic is run in a separate thread using a fork of bevy_tokio_tasks.

bevy + iced

Bevy + Iced

showcase

A demo that uses bevy_iced with some custom patches to render Iced in the same winit instance as Bevy. There are additional changes to integrate Iced's systems with Bevy's systems as well.

html to bevy

HTML to bevy_ui

showcase

An experimental crate that uses html_parser_rscx to parse html and combines it with bevy_ecss which uses a subset of CSS to style bevy_ui entities.

chalkboard

Chalkboard drawing app

showcase

A chalkboard app where each splot is an ECS entity with ImageBundle's components. Kind of similar to a particle system.

steam decksteam decksteam decksteam deck

Project Harmonia on Steam Deck

showcase

Project Harmonia running on a Steam Deck. The game runs at a stable 90 FPS, which is the refresh rate of this particular device, and consumes 13.1 W. The game hasn't yet been updated for the smaller screen and gamepad inputs, but the developer includes a bunch more information about using the Steam Deck as a development device in the Mastodon thread including information such as SteamOS' differences from Arch Linux and the immutable file system.

plantsseedsputting items in a pot

Soup!

showcase

This game involves soup, and making it.

Soup won the Cozy Spring Jam and uses Rapier for physics. The game was made over 3 days with about 48 hours of work in that time.

The game is playable on Itch.io

gpu particlesgpu particles

GPU Particles

showcase

A custom GPU particle implementation. Each trail is composed of a number of particles that have their movement simulated on the GPU using several compute shaders, triangle vertices are generated based on the position of those particles in a vertex shader to draw trails onto the screen.

Crates

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

bevy ratatui render

bevy_ratatui_render 0.3

crate_release

bevy_ratatui_render uses headless rendering to render bevy to a texture, and then prints the texture with unicode halfblocks using ratatui_image.

bevy_oxr

crate_release

bevy_oxr is a crate that adds support for openxr to Bevy. The crate is one step on the way to upstreaming support for openxr. There will be another release for 0.14 and the hope is that further work will happen in the upstreaming effort.

bevy_mod_desync

crate_release

bevy_mod_desync is a proof of concept desync tracker. The README includes information about the CRC implementation and preventing false-positives.

terminal rendering

bevy_terminal_display

crate_release

bevy_terminal_display is another bevy/terminal rendering plugin. This one has a slightly different rendering in that it uses braille characters for rendering.

plane cutplane cut

bevy_plane_cut

crate_release

A plugin that can cut a model visually with a plane by discarding fragments that are "below" the plane.

bevy_spawn_fn

crate_release

bevy_spawn_function is a crate that attempts to improve the developer experience of spawning in Bevy, including supporting nested bundles and children.

bevy_tween 0.5

crate_release

bevy_tween has revamped its entire API into an ECS-based Bevy procedural and asset animation library. New in 0.5 is integration with bevy_lookup_curve

bevy_device_lang first release

crate_release

Provides cross platform access to the device language. The intended use case is to pick the right language for localization.

fn bevy_system() {
  let lang : Option<String> = get_lang();
}

bevy_trackpad_haptic

crate_release

A bevy plugin for triggering trackpad haptic feedback on a mac.

No devlogs this week

Educational

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

bevy lunex

bevy_lunex doc book

educational

The Bevypunk example is built with bevy_lunex, which now has the beginnings of a documentation book. Advanced examples are still to come, but installation and basic usage is covered.

Evil Dungeon tutorial

educational

An open source 2d dungeon crawler made with the Bevy Engine in Rust.

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