This Week in Bevy

What happened this week in the Bevy Engine ecosystem

Links

Vello, Steamdecks, and procedural generation

2024-05-06

This week in Bevy we've got some project changes relating to contributing, PR review, and the formalization of working groups, new color grading and state-management features, as well as some exciting experiments and demos.

Particularly interesting on the experimental side of things is a new crate and some experimentation with Bevy/Vello integration.

Additionally I'd like to call out the VisibilityRanges, Filmic color grading, and GPU Frustum Culling PRs as being particularly well-commented with straightforward PR descriptions. They serve as great entry points into reading about their respective topics in the Bevy context.

Filmic color grading

filmic settings

Bevy's existing tonemapping featureset expands to a complete set of filmic color grading tools, matching those of engines like Unity, Unreal, and Godot. This includes white point adjustment, hue rotation and color correction. There's also a brand new example (color_grading) that acts as a playground for exploring the color grading featureset.

Xilem and Vello

While not directly Bevy related, There's a talk on Xilem happening at RustNL this week. This is interesting because the rendering backend for Xilem, Vello, is already being used in tandem with Bevy for rendering SVG and other UI. This includes the bevy_vello crate as well as more experimental integrations like the board game showcase (discord link) mentioned later in this issue.

Project Contribution Changes

Alice has started their first day and generously decided to put up a public board indicating their personal priorities. This is by no means an "official Bevy roadmap" but rather it is just Alice sharing what they're working on. Some of the first changes made were

The formalization of working groups is especially nice as this means there is a documented process for broad consensus building and for joining in on or starting new work.

GPU Frustum Culling

The view frustum is the area of the world that might appear on-screen. "Frustum culling" is the process of removing objects that won't appear in that area and thus would waste resources to render. Frustum culling can now optionally be done on the GPU. To enable it, add the GpuCulling component to a camera.

Visibility Ranges (Hierarchical Level of Detail)

This commit introduces a new component, VisibilityRange, which allows developers to specify camera distances in which meshes are to be shown and hidden. Hiding meshes happens early in the rendering pipeline, so this feature can be used for level of detail optimization. Additionally, this feature is properly evaluated per-view, so different views can show different levels of detail.

Meshlets

Meshlets got LOD-compatible 2-pass occlusion culling and data upload performance optimizations this week.

The example added last week to demo meshlets requires downloading an asset that was deemed too large to include in the git repo. That asset is now documented in the meshlet example metadata.

ComputedStates (and SubStates)

With #11426 the capabilities of State related infrastructure expands from just States to include ComputedStates and SubStates.

ComputedStates are derived states while SubStates are states that only exist inside other states. The functionality seems very flexible and I'm excited to see what usage patterns people land on after they're more widely used.

There are three examples now, including the base state and the new computed_state and sub_state examples.


Alice's Weekly 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.

jarl

Jarl quick-items menu

showcase

The ui here is all vanilla bevy_ui for Jarl, a fantasy colony builder.

svincraft

Svincraft on Steamdeck!

showcase

Svincraft is a tech demo using Bevy that now also runs on Steamdecks! You can check out the code on the steamdeck branch or check out the video on YouTube

voxel lighting

Voxel lighting

showcase

An implementation of voxel lighting, with sources for the algorithms used, for Ethertia

sokoban

Sokoban game

showcase

A Sokoban puzzle game and a solver!

DOOM map editor

TrenchBroom inspired 2D map editor

showcase

HillVacuum is an editor for building 2d Doom-style maps. I found it easiest to see what it does in this YouTube video but the README is also informative.

vr chat

VR Chat vibes

showcase

This VR chat demo pulls inspiration from this hidden alley scene and the Discord thread contains some fun progress from the first image to the one that you see here.

eye ball vj

VJ display

showcase

This demo is prep work for a VJ set.

reactive JSON-based scripting language

showcase

A JSON-based scripting language for Bevy, now with events!

{
  "id": "sword_of_invincibility",
  "durability": 0.1,
  "max_durability": 1,
  "damage": ["-", 1, ["/", ["@", "durability"], ["@", "max_durability"]]],
  "on_equip": {
    "add": "invincible"
  }
}
wizard arena gamewizard arena game

Multiplayer wizard arena game

showcase

Score, kill feed, and a new lighting/camera system. The play tests for this wizard arena game happen at 20:15 CET every other Saturday. Link to the playtests are in the thread.

steam audio in rust

Steam Audio rewrite in Rust

showcase

Steam Audio is a spatial audio solution and this showcase is the beginning of a rewrite in Rust. As such it is an audio-based demo and is best listened to using the original upload found in the Discord thread

maze

Markov Junior

showcase

Markov Junior is a probabilistic programming language where programs are combinations of rewrite rules and inference is performed via constraint propagation. In another phrasing "Markov Junior is a DSL for procedural generation".

Consider the following, which is enough of a setup to generate the maze you see here.

let find = Pattern::basic_2d(vec![1, 0, 0]);
let replace = Pattern::basic_2d(vec![1, 2, 1]);
bevy vello

Cart's Chess-like Vello experiment

showcase

This showcase demos a Bevy rendering abstraction using Vello, as well as a nascent feature for required components.

The Require Components feature is an experiment itself in allowing Bevy Components to declare other Components that are required to exist on an Entity. Such required components would be inserted with their Default values in this experiment, if they didn't already exist.

#[derive(Component, Default)]
#[require(Transform, Visibility)]
pub struct VelloRendered;

On the topic of Vello, this demo uses a custom VelloRender trait that can be implemented for Components, which will then re-render with Vello whenever the Component changes. The code is available in a gist but if you plan on using Vello as a consumer you may prefer to use bevy_vello instead.

There's some great discussion on the topic of Bevy + Vello in the Discord thread.

tennis3d hp indicatorssfx handling

Dekirisu's Animal Crossing inspired game updates

showcase

Updates this week for this Animal Crossing-inspired aesthetic game include

boidsboids

boids!

showcase

Its a boids simulation! This is some of the author's first work with Bevy. Source available on GitHub

Crates

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

bevy_vello

bevy_vello

crate_release

bevy_vello is a rendering integration for rendering vector graphics in the Bevy game engine. Currently it renders standard vello Scenes, as well as SVG and Lottie files.

bevy ios gamecenter

bevy_ios_gamecenter 0.1

crate_release

Bevy Plugin and Swift Package to provide access to iOS GameKit (Gamecenter) from inside Bevy. Features include

  • authentication
  • save games (based on iCloud)
  • achievements
  • leaderboards

Bevy EntiTiles 0.9.0

crate_release

bevy_entitiles is a 2d tilemap crate inspired by bevy_ecs_tilemap and bevy_ecs_ldtk. The major feature in 0.8 is support for multiple tilesets on one tilemap.

bevy_rtc

crate_release

bevy_rtc is a simple, multi-platform WebRTC networking library for client<->server topologies using Bevy. It is a higher level built on top of matchbox

bevy_async_task

crate_release

Bevy Async Task provides Bevy system parameters to run asyncronous tasks in the background with timeout support and future output in the same system. It also provides syntactic sugar to reduce boiler plate when blocking on futures within synchronous contexts. Supports wasm and native. mobile is untested.

Devlogs

vlog style updates from long-term projects

to build a home

To Build a Home

devlog

This is the first look at an upcoming life simulation game called To Build a Home. It's inspired by games like the Sims and Dwarf Fortress, it aims to create a complex simulation of human life, focused on the small scale of everyday life. The game behavior is defined in text files and sprites that can be easily changed by players, making modding very easy.

Alice's Rust Gamedev survey

devlog

Alice ran a short (5 days) survey of the Rust gamedev space and the results are in! Take them with a grain of salt but the information can still be interesting.

foddian fish jump

The Making of Fishing for a Princess

devlog

"Fishing for a Princess" is a multiplayer Foddian game in the style of Jump King. This devlog covers the work done initially creating the game for a game jam and points at the author's intent to continue development moving forward. The game makes use of egui, laminar, and rapier.

saya

Saya's first devlog

devlog

Saya is a game featuring voxel graphics where you play a samurai summoned to rid the worlds of darkness. As you defeat enemies, you gradually accumulate evil essence with the help of your saya, which you can then utilize to enhance your abilities.

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