This Week in Bevy

What happened this week in the Bevy Engine ecosystem

Links

Bevy Jam 5 WIPs, landmasses, and gizmos-in-practice

2024-07-29

Much of the ecosystem this week has been taking time to participate in the Bevy game jam in one way or another. By the time you're reading or watching this, Bevy Jam 5 will have closed for submissions and voting will have started. So go play some of the submissions and vote for a winner!

The Next Generation Scene/UI working group is kicking off with an almost 8k word proposal and a suitably large ensuing discussion. The overall proposal intends proposes to

Embrace the "Bevy data model" for both Scenes and UI. Fill in functionality and UX gaps where necessary.

This is a proposal, so if you're interested give it a read and catch up on what's already been discussed. The working group can be found in the Bevy Discord under #working-groups in the Next Generation SceneUI thread.

Following on that proposal, Alice wrote A vision for Bevy UI which kicked off even more discussion centering around the question "what should bevy_ui be?". This spawn a lot of great discussion which is accessible in the Discord thread in the #ui-dev channel. Especially check out the pinned posts for this one, which include wonderful dives into incrementalization and Reactive Design Choices by DreamerTalin, the author of Quill.

Meshlets

The meshlets tracking issue got a rewrite this week to better align with what the actual plan is, including what's left before the next big PR and the major goals after that.

Flag Frenzy

flag-frenzy is a new in-house tool built to automatically test the growing combinations of Bevy feature flags. It has already caught four bugs including the latest two: Fix bevy_winit not building with serialize feature and Fix bevy_gltf PBR features not enabling corresponding bevy_pbr flags.

Transform Propagation Optimizations

Transform Progagation got some work this week both in measured work improvements and in reducing unnecessary work

Run Conditions

app.add_systems(Update, (
    system_0.run_if(run_once),
    system_1.run_if(resource_changed_or_removed::<T>),
    system_2.run_if(resource_removed::<T>),
    system_3.run_if(on_event::<T>),
    system_4.run_if(any_component_removed::<T>),
));

In #14441 some Run Conditions got simpler. Now you no longer need to call them as functions yourself.

QueryManyIter DoubleEndedIterator

Query::iter_many allows the iteration of a Query filtered by a list of entities. In #14128 DoubleEndedIterator is implemented for the resulting iterator, allowing access from the back.

Hue Mixing

If you were using Oklcha or Lcha there were bugs in the mixing of hues, resulting in not-quite-right combinations. #14468 fixes this. This was a fix driven by game jam usage, so one more vote in favor of the game jams that happen every two releases.

Showcase

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

gizmos

Gizmos Best Rendering Technology

showcase

Why have volumetric fog, god rays, or reflections when you can have GIZMOS.

This demo nicely shows how you can use Bevy's built-in Gizmos to render something that actually has quite a nice aesthetic to it.

bevy jam progress!

Bevy Jam off to a good start!

showcase

The first steps in a Bevy game jam entry that kicked off the with the Bevy Quickstart template.

space sandbox

space sandbox

showcase

Cyclical movements to a space sandbox demo shared to honor the bevy jam theme without directly participating in it

gizmo devtool

Line graph devtool

showcase

Bevy and its gizmos are great for creating small tools for debugging and validating. This demo shows off one such tool for displaying clamped and derived bounds.

before tonemappingafter tonemapping

Tonemapping::AcesFitted

showcase

This demo shows off what a little tonemapping, bloom, and an environment map can do for your visuals.

Lissajous

Lissajous SDFs

showcase

These Lissajous curves are rendered via Signed Distance Fields.

firefly shrines

Cozy firefly shrines

showcase

Shrines that activate at night with fireflies around them.

2d wip prototype

2d WIP prototype

showcase

A prototype for a 2d game!

Probos Report

Probos Report

showcase

Probos Report was created for the 48h IGDC Game Jam and features

  • Procedural levels using transvoxel_rs
  • Bloom and fog effects that run in the browser.
  • Music and sound effects using bevy_kira_audio

Probos Report has a YouTube trailer and you can play in your browser

ethertia

Ethertia

showcase

Sandbox Voxel Game Ethertia has upgraded to Bevy 0.14 with SSR Liquid Reflection, Volumetric Fog, and light support.

vr desktop environmentvr desktop windows

Cloudcafe VR desktop environment

showcase

Cloudcafe is a VR desktop environment, a shell, that replaces the windows environment for VR. The goal is to provide an experience where any user can plug in their Quest 2 or Quest 3 into a laptop or pc, and have their windows show up as individual entities to be manipulated on a spherical plane. It is aiming for a very high level of polish and low-friction seamless interaction. Taking off the headset should immediately return the windows to their original locations on the computer monitor, and putting it back on should re-engage Cloudcafe.

By working over a wire, and doing the rendering on a mobile VR headset, one should be able to take any windows laptop to a coffee shop, plug in the headset, and immediately start work with the equivalent of a 2k monitor resolution, with any number of individual screens.

The screens are gnomically projected, maintaining their shape and size, giving the appearance of flat windows that are seamlessly moved around a spherical shell, and a custom task bar and search menu built to be faster and better than the windows version.

There and Back Again

There and Back again Jam Menu

showcase

This jam entry's main menu has at least two interesting facts about it. One is the main menu text that is formed from particles and the second is the navmesh implementation from vleue_navigator applied to the 3d pathfinding present in the menu's graphics.

elevated arcana

Elevated Arcana

showcase

Elevated Arcana is a new game that's been in progress since December that just got its alpha release. There are test builds for iOS and Android with Desktop expected to follow.

View the trailer on YouTube

aseprite as jam level editor

Aseprite as level editor

showcase

This Bevy Jam 5 submission is using Aseprite, and animated sprite and pixel editor, as a level editor

straight skeleton

Polygon generation via Straight Skeletons

showcase

This demo shows off a work-in-progress straight skeleton implementation for the generation of polygons

Crates

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

Moonshine Tag

crate_release

Cheap, fast, mostly unique identifiers designed for Bevy.

use bevy::prelude::*;
use moonshine_tag::prelude::*;

tags! { APPLE, ORANGE, JUICY, CRUNCHY, POISONED }

let mut world = World::new();

// Spawn some fruits!
let a = world.spawn([APPLE, CRUNCHY].into_tags()).id();
let b = world.spawn([ORANGE, JUICY].into_tags()).id();
let c = world.spawn([APPLE, CRUNCHY, POISONED].into_tags()).id();

// Only crunchy, edible apples, please! :)
let filter: TagFilter = (APPLE & CRUNCHY) & !POISONED;

assert!(filter.allows(world.tags(a)));

assert!(!filter.allows(world.tags(b)));
assert!(!filter.allows(world.tags(c)));
Delaunay triangulation

ghx_constrained_delaunay v0.1

crate_release

A fast Rust library for 2D constrained Delaunay triangulation

Examples & demos come with a visual Bevy debugger to observe the triangulation process.

bevy_mod_bbcode

crate_release

Format your UI text with BBCode:

commands.spawn(BbcodeBundle::from_content(
  "test [b]bold[/b] with [i]italic[/i] and [c=#ff00ff]color[/c]",
  BbcodeSettings {
      regular_font: asset_server.load("fonts/FiraSans-Regular.ttf"),
      bold_font: asset_server.load("fonts/FiraSans-Bold.ttf"),
      italic_font: asset_server.load("fonts/FiraSans-Italic.ttf"),
  
      font_size: 40.,
      color: Color::WHITE,
  },
));
bevy_lit

bevy_lit

crate_release

Inspired by bevy_light_2d and bevy-magic-light-2d, this new 2d lighting crate focuses on usability and ergonomics and has support for light occluders.

bevy_landmass

landmass 0.6.0 and bevy_landmass 0.7.0

crate_release

landmass (and bevy_landmass) is a navigation system focusing on pathfinding and local collision avoidance.

This update includes some decently sized features:

  • 2D navigation (expanded from just 3D before)
  • Adhoc navigation queries
    • Sampling a point on the nav mesh or finding a path
  • Node types with different costs
    • Some parts of your mesh can be slower (like mud), or faster (like speed gel in Portal 2).
  • Islands are simpler; they must always have a nav mesh.
  • Agents have a different desired speed from their max speed
    • This results in better local avoidance as agents can "run ahead" of each other.

Moonshine Check

crate_release

Validation and recovery solution for Bevy. Run checks against entities and action the result.

landmass_oxidized_navigation 0.1.0

crate_release

A brand new crate to allow using oxidized_navigation to feed into bevy_landmass! Previously it was up to the user to create navigation meshes for bevy_landmass. Now with oxidized_navigation, you just put colliders in your world and navigation meshes will automatically be created for bevy_landmass!

bevy_quill 0.1.3

crate_release

Contains a number of simplifications and performance improvements, including the use of component hooks for cleanup - so if you want to tear down a UI you can just despawn the view root entity and all cleanup should be automatic. Also adds a ListRow widget.

spirit editor

Spirit Editor V14.2

crate_release

Spirit Editor is an open source 3D world editor. It has been in development and usage for months now.

bevy_blendy_cameras

crate_release

A crate for Bevy camera controls. For editors or 3D view of desktop app. Inspired by Blender camera controls.

  • Pan/Orbit/Zoom controller with "Zoom to mouse position" and "Auto depth"
  • Fly controller
  • Set viewpoint (front, back, right, left, top, bottom)
  • Frame entities into view
  • EGUI support

This crate was inspired by bevy_panorbit_camera

Devlogs

vlog style updates from long-term projects

A day with bevy_ui

devlog

Alice's thoughts after spending a day building with bevy_ui as a user.

TL;DR: solid fundamentals, needs widgets, text handling is bad, bevy_mod_picking is great.

sickle_ui devlog

devlog

A check in with sickle_ui after the author came back from vacation

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