This Week in Bevy

What happened this week in the Bevy Engine ecosystem

Links

Shader Reflection, Inverse Kinematics, and the GMTK Jam

2024-08-26

This week we see some Bevy entries for the 2024 GMTK Jam, an inverse kinematic spider, and asset-driven shaders.

There are a number of different conversations happening at any given time and this week is no different, seeing some interesting WGSL thoughts and experiments in progress as well as more conversation around FixedTimestep usage.

There was also some great conversation this week in #engine-dev around Bevy's target audience, feature set, RFC and working group processes, and more.

New utility methods on InfinitePlane3d

If you know you have points on an InfinitePlane3d, you can choose to work in 2d instead of 3d (because its a plane) and sometimes this is even preferable depending on the algorithm you want to use. #14651 introduces a set of utility methods to project 3D points on a plane to 2D points and inject them back into 3D.

  • signed_distance
  • project_point
  • isometry_into_xy
  • isometry_from_xy
  • isometries_xy

Allow ordering variable timesteps around fixed timesteps

In the ongoing community conversation around FixedTimesteps, it came up that there was no clear schedule to update a camera's Transform when using a FixedTimestep. This is conceptually related to ordering data changes in relation to functionality like physics: In a frame, sometimes you want the physics systems to read data you've written, and sometimes you want to react to updates those physics systems have written.

#14881 introduces a new SystemSet called RunFixedMainLoopSystem which creates a more supported way to run logic once-per-frame (like Update), and before or after fixed update logic.

The documentation included in this one is a great read if you're looking for additional context.

Some Thoughts on Bevy WGSL

There are a number of interesting efforts around WGSL happening including better tooling and a general desire to have a better future experience. None have working groups at the moment, but they spurred a GitHub Discussion "Some Thoughts on Bevy WGSL" in which @cart makes some assertions and talks a bit about what a WGSL future should look like.

Its an interesting post if you're interested in working on future WGSL extensions.

Contributing

The Contributing Guide Collective working group has shipped new documentation on the website for onboarding new contributors.


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.

retained egui

egui retained widget trees

showcase

Using a branch of bevy, this demo added retained widgets to egui. The work was driven by a need for a UI framework with text editing support, which egui provides.

The full sample code is available.

csg character controller

Avian + CSG Character Controller

showcase

A character controller combined with Avian Physics and a CSG crate we saw in last week's issue.

shadersshaders

asset driven, reflection based shaders

showcase

video description: the source of a shader and javascript asset are both displayed. the javascript file contains a single function shader_update that is called each frame with a supplied variable shader, printing the js object's keys to the terminal's output. this value is built by introspecting the shader's ir via reflection and building an object that is supplied to the js runtime. edits to the shader produce a new layout which is dynamically applied to the material pipeline, creating new bindings on demand. see towards the end for introducing a new value on the js side that is instantly applied once the uniform is defined in the shader.

ik spiderik spider

Inverse Kinematic Spider

showcase

This Spider is an inverse kinematic system crafted from scratch. Inverse Kinematics is the act of determining where the joints should be to achieve a desired end position.

One suggested crate in the Discord thread is k.

multiplayer rtsmultiplayer rts

multiplayer RTS

showcase

An 8v8 (or 8 player FFA) multiplayer RTS game using bevy. Uses bevy_water, bevy_quill, and bevy_quinnet.

Terrain is randomly generated mesh and colors are added afterwards using WGSL shader. Assets are made using blender, for now they are just placeholders.

architect of ruin menu

Architect of Ruin Menu

showcase

A new menu for Architect of Ruin: A Sword & Sorcery colony survival game centered on the reconstruction of an ancient ruined temple.

roguelike

Making a roguelike game - Timelapse 1

showcase

A timelapse video covering the development of a new roguelike game

submerge ui

SubmergeUI Sliders

showcase

Customizable sliders built with Submerge UI.

prop pickupprop pickup

Generic Prop Pickup

showcase

A sneak peek at a generic prop pickup plugin for Avian physics

netrisenetrise

NetRise

showcase

NetRise is a game where you "work" as a data center manager and you have to purchase, connect and maintain servers and process traffic to earn money and survive a catastrophic event at the end.

skyscaleskyscale

Skyscale

showcase

Skyscale is a retro tower defense game made in Bevy for the GMTK Game Jam 2024. This is the author's first Bevy project.

scaler defender

Scaler Defender

showcase

A planet defending game submitted to the GMTK game jam.

cormine

corMine

showcase

corMine is a Bevy 0.14 voxel game that was originally written for a CTF challenge (which got its own writeup, and was included last week).

bevy_clay_tiles

spirit_editor wall

showcase

This tooling enables drawing polygons on a 2D grid which then get extruded upwards into a 3D mesh at the specified height. The 3D meshes are also save/loadable.

Gothic 2gothic 2, ktx2

Gothic 2 in Bevy

showcase

The Gothic 2 (an action rpg from 2002) world imported into Bevy. There's some discussion of ktx2 and other kind of optimizations in the thread.

  • 1,200,000 vertices
  • 332 materials (simple texture)
  • 190 000 vertices collider mesh (rapier3d)

0 optimizations

media manager

Media Manager

showcase

A media manager app with tagging, searching and browsing. Currently it uses egui for UI with an eye towards a reimplementation in the future.

Wild SpikesWild Spikes

Wild Spikes

showcase

🚀 Wild Spikes keeps on rollin’!

  • Camera Collision 🎥
  • Iggy can roll now 🔄
  • Bloom Effects with HDR ✨
  • Day-Night Cycle 🌅
  • Inventory System 🎒

Crates

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

bevy_scene_postprocess 0.1.0

crate_release

A crate allowing you to post-process your scenes before they are spawned.

This is similar to bevy_scene_hook with one key difference: bevy_scene_hook waits until after the scene is spawned to do its actions, while bevy_scene_postprocess does its actions at load time. This also means you can spawn your scenes synchronously rather than only with a SceneBundle (which means deferring your mutations).

bevy_material_tool

crate_release

bevy_material_tool uses materials stored in a .gltf and a second .ron file to configure the materials. These materials can then used to replace all of the StandardMaterials attached to a mesh entity.

tooltips

pyri_tooltip v0.1.1

crate_release

A tooltip crate built on bevy_ui

use pyri_tooltip::prelude::*;
app.add_plugins(TooltipPlugin::default());
commands.spawn((
  NodeBundle::default(),
  Interaction::default(),
  Tooltip::cursor("Hello, world!"))
);

bevy_observed_utility

crate_release

bevy_observed_utility is ergonomic and correct Utility AI, powered by observers.

Features

  • Minimal boilerplate: Add utility AI to pre-existing entities with little ceremony.
  • Highly expressive: Build scoring hierarchies for whatever occasion, as complex or as simple as needed.
  • Order-correct scoring: Hierarchies score their children before their parents.
  • Familiar design: Reuses standard Parent/Children hierarchy components to build actor entities that select actions based on their child score entities.
  • Pay-for-what-you-use performance: Scoring and Picking variants' observers are only registered when they're spawned for the first time.
  • Game flow agnostic: Works well with both real-time and turn-based game simulation.
No devlogs this week

Educational

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

dice

Building a Bevy Plugin for Rolling Dice

educational

A post covering the author's adventure making custom dice and rolling them in Bevy.

bevy labs

Using the Mesh2d Depth Texture - Bevy Labs

educational

I had someone ask about the new 2d opaque depth buffer that was recently merged so I made a brief introductory video on it. I've also started labelling videos for features that are "merged, but not released, or experimental, like meshlets" as "labs" videos.

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