Foundations, Meetups, and more Bevy Cheatbook updates
2024-03-18
Welcome to another week in the Bevy ecosystem!
This week the Bevy Foundation was announced and several talks were given at the second unofficial Bevy Meetup.
If you're interested in some of the deeper magic, bevy_ptr
got some great new docs this week and the computational complexity of different input detection methods is now documented. bevy_dev_tools
started getting code filled in with the FpsOverlayPlugin and Gizmos also grew with the addition of 3d grids and line joints.
An interesting new query was merged in join
, which helps solve for cases where you want to process two queries separately but also want to process the intersection of them.
We also got a Rotation2d
type for rotating 2d vectors.
Bevy Foundation
The Bevy Foundation now exists! The tldr; mission statement is
We exist to develop Bevy and teach people how to use it!
The Bevy logo, website, and GitHub organization are now transferred to the foundation. Meeting minutes and other documents are also available.
Also notable is that this structure seems to align the Bevy Foundation with the community, which is great to see.
Most importantly: the non-profit structure helps ensure that our incentives are aligned. Profit motive introduces a significant risk to the Bevy community, as we would no longer just be trying to build what the community wants. We would need to balance that with the temptation to monetize.
Foundation members and Bevy community showed up in a Reddit thread asking and answering various Bevy/Foundation related questions.
Bevy Meetup #2
The second Bevy community meetup happened livestream and included 3 talks.
- Arend jr. spoke about Sudoku Pi and the custom UI implementation they used. There is an accompanying blog post available as well.
- Manuel talked about their animation graph node editor bevy_animation_graph. There is a YouTube video showing off their work as well. (note: This animation graph work is currently separate from the
AnimationGraph
that was merged last week). - EidLoi spoke about building a widget library with Bevy UI. This UI library has a number of devlogs on YouTube and got an open source announcement video later in the week.
Alice's Merge Train is a rundown of the status of current PRs at a maintainer level.
Showcase
Bevy work from the #showcase channel in Discord and around the internet. Use hashtag #bevyengine.
Many Trees
showcase
- 18 trees per wall
- 3k triangles per tree
- 20x20 maze == 200 walls == 3600 trees
10.6 million triangles
The Discord thread includes a great comment that talks about rendering performance in general as well as performance in Bevy and a whole bunch of other context.
Nagan & Go Conquer
showcase
Nagan and Go Conquer are both Android apps shipped by the same group. Nagan is educational fun aimed at kids, while Go is well... Go. They're working on a third game and hope to release on iOS in the future.
Goat Heard
showcase
Goat Heard is a reverse tower defense isometric platformer about herding goats, made for Acerola Jam 0
Playable on Itch.io
bevy_sly_compute and a Bevy fork
showcase
bevy_app_compute is a plugin to aid in writing compute shaders. bevy_sly_compute aims to provide easy way access data created or modified on the GPU, back in app world.
This showcase forks Bevy to extend AsBindGroup
.
BITT thesis survey
showcase
BITT is an integration testing toolkit for Bevy and the author is doing their Master's thesis about automated testing in games. There was a short survey posted in Discord.
The sample size ended up being 19 people, so I'll leave the results to the results thread itself.
Team Fortress 2 phong shader
showcase
Valve released a paper (pdf) explaining how they made Team Fortress 2 look like Team Fortress 2.
This showcase is a Bevy StandardMaterial
extension.
Custom Particles
showcase
A custom particle implementation that uses Instanced meshes and the option for custom shaders. The color, position, scale, and rotation are controlled from the CPU.
The author mentions that this was expanded from the "instanced mesh" example which I believe means this shader example.
7 Day Roguelike infinite procedural destructible worlds
showcase
Infinite procedurally generated destructible worlds with random enemies and random loot.
Playable on Itch.io
Chess: a first Bevy game!
showcase
A from-scratch Chess engine makes this author's first Bevy project (and first Rust program too!). Bitboards represent the board state (a u64 with 1 bit per square) and a minmax alpha-beta pruning algorithm searches for the best next move.
Playable on the web
Bevy MotionGfx
showcase
bevy_motiongfx is a motion graphics creation tool. It is highly inspired by Motion Canvas and Manim.
In Bevy MotionGfx, all vector graphics are rendered using Vello! This is done using the minimal Bevy Vello Renderer. There is also support for animation Typst! It comes with a compiler that compiles Typst content into SVG, which can then be rendered with Vello.
Project Harmonia: Automatic door opening
showcase
Project Harmonia is a life simulation game: Core gameplay will be similar to other games in this genre: player creates virtual people, places them in houses, and helps direct to satisfy their desires.
This demo shows off automated door opening when characters approach.
It has its own projects thread in the Bevy Discord server.
Murmuration
showcase
- observers are a draft PR to generalize ECS reactivity.
- octrees are a tree data structure in which each internal node has exactly eight children. Octrees are most often used to partition a three-dimensional space by recursively subdividing it into eight octants
This demo shows off a custom skip-octree structure which combined enable functionality like "get nearest entities to a point".
Memory Game
showcase
This is a short term memory game using Bevy UI and bevy_tweening. It is available on the App Store
Hellth: A 7 day roguelike submission
showcase
Hellth is a 7 day roguelike challenge submission that's been updated since the contest. It is available to play on Itch.io
I was able to make it to level 5 after 2901 turns.
Real Time Strategy!
showcase
This showcase is one year's worth of work into a RTS game. Currently implemented features includes
- click and drag unit selection and deselection
- heightmapped terrain
- a custom collision system with hard (buildings, terrain) and soft (units, trees) shapes
- pathfinding and location finding for groups of units.
Future goals include the addition of multiplayer, lua scripting, and an editor. The game has been designed for this extension using custom Command
s. The graphics and logic have already been split into separate crates, which should help the multiplayer implementation.
Crates
New releases to crates.io and substantial updates to existing projects
Magic Light 0.7+
crate_release
bevy-magic-light-2d
is a 2d shading, lighting, and shadow implementation.
The 0.7 release brings bevy-magic-light-2d
up to date with Bevy 0.13 support, and the tilemap
branch includes tilemap support. Its still going to get a bit more polish but already has a working example.
bevy_defer 0.4
crate_release
bevy_defer
is a simple asynchronous runtime for executing deferred queries.
bevy_defer
uses a single threaded runtime that always runs on bevy's main thread inside the main schedule, this is ideal for wait heavy or IO heavy tasks, but CPU heavy tasks should not be run here.
lightyear 0.12.0
crate_release
lightyear is a full-featured networking library to make multiplayer games!
This release brings support for multiple Transports at the same time: WebSocket, WebTransport, UDP, etc. This is most exciting for the potential to enable cross-play between Steam directly connected players. Steam and Epic Online Services support is planned for the future.
bevy_tween v0.2.0 First release!
crate_release
bevy_tween joins the ranks of bevy_easings and bevy_tweening in the ecosystem of animating from one value to another. If you're looking for a new tweening crate, check out the differences to decide which works for you!
bevy_picking_tilemap
crate_release
bevy_picking_tilemap
adds a bridging backend for bevy_mod_picking
to enable picking tiles from bevy_ecs_tilemap
(not on crates.io yet because a custom branch for bevy_ecs_tilemap is used to support bevy 0.13)
Devlogs
vlog style updates from long-term projects
GPU Particle Research: Bevy Hanabi
devlog
Part 1 of an article that dives into how Bevy Hanabi works.
Sickle UI open sourced
devlog
The widget library that was talked about at the unofficial Bevy Meetup #2 was open sourced later in the week. There's also a bunch of devlogs on the YouTube channel.
Educational
Tutorials, deep dives, and other information on developing Bevy applications, games, and plugins
Bevy Cheatbook: Programming Chapter
educational
The Bevy Cheatbook got a number of updates, including updates to Queries, building custom Commands, Plugins without a struct, and the ECS.
The Bevy Cheatbook is supported through GitHub sponsors
Add table showing complexity of methods for Input authored by ShadowMitia
Implement MutUntyped::from(mut_typed) authored by jkb0o
Simplified backtraces authored by SpecificProtagonist
don't attempt to set cursor relative position for zero sized nodes authored by robtfm
try_insert NoAutomaticBatching authored by robtfm
Add `scale_around_center` method to `BoundingVolume` trait authored by chompaa
Update funding link authored by mockersf
Send GamepadEvent for gamepads connected at startup authored by uwuPyxl
Add `Rotation2d` authored by Jondolf
Gizmos: Replace PositionItem with Vec3 authored by james7132
Fps overlay authored by matiqo15
Gizmo line joints authored by solis-lumine-vorago
Query Joins authored by hymm
Fix doc comment on AssetActionMinimal authored by Davier
correctly set up background color in mobile example authored by mockersf
Mention in docs about the query iteration order and result uniqueness. authored by james7132
Fix leftover references to children when despawning audio entities authored by rparrett
fix deprecations from toml_edit authored by mockersf
SystemId should manually implement `Eq` authored by eira-fransham
Reduce steady-state allocations in ui_stack_system authored by UkoeHB
Add more comprehensive crate level docs for bevy_ptr authored by james7132
Allow setting RenderAssetUsages for gLTF meshes & materials during load authored by 66OJ66
bevy_reflect: Remove `U32Visitor` authored by MrGVSV
low_power example: pick nits authored by awwsmm
Make `CreateWindowParams` type and `create_windows` system public authored by umut-sahin
Fix blurry text authored by rparrett
Extracting ambient light from light.rs, and creating light directory authored by nbielans
Fix `z` scale being `0.0` in breakout example authored by rparrett
Gizmo 3d grids authored by solis-lumine-vorago
Fix inconsistency between Debug and serialized representation of Entity authored by Zeenobit
Alignment API for Transforms authored by mweatherley
Breakout refactor authored by mrtolkien
Make a note about the performance of Query::is_empty authored by james7132
Fix: deserialize `DynamicEnum` using index authored by mrchantey
change file location for showcase patch for light authored by mockersf
Fix CI desktop mode patch authored by rparrett
Add `with_left`, `with_right`, `with_top`, `with_bottom` to `UiRect` authored by chompaa
Add reflect for type id authored by cBournhonesque
change doc for SphereKind::Ico to reflect that the triangles are equa… authored by EmiOnGit
order systems in axes example authored by mockersf
stop retrying removed assets authored by robtfm
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.
Pull Requests Opened this week
Add hue traits authored by oyasumi731
Implement QueryData for &Archetype and EntityLocation authored by james7132
Abstraction dev tools authored by matiqo15
adding the rect3d primitive authored by andristarr
Add into_ methods for EntityMut and EntityWorldMut that consume self. authored by jkb0o
Fix pink colors in examples authored by rparrett
Expose Winit's `with_skip_taskbar` on window creation authored by chompaa
Split ScheduleGraph::process_configs function (adopted) authored by yyogo
Update image requirement from 0.24 to 0.25 authored by mnmaita
check that patches are not broken authored by mockersf
Improve performance by binning together opaque items instead of sorting them. authored by pcwalton
send Unused event when asset is actually unused authored by robtfm
Color maths authored by solis-lumine-vorago
Remove archetype_component_access from QueryState authored by james7132
Uniform point sampling methods for some primitive shapes. authored by 13ros27
Store only the IDs needed for Query iteration authored by james7132
Make `from_reflect_or_world` also try `ReflectDefault` and improve some comments and panic messages authored by SkiFire13
Use dense fetches in Query::get and Query::iter_many authored by james7132
Add border radius to UI nodes (adopted) authored by chompaa
feat: add Style::with() method to overlay one UI Style onto another authored by awwsmm
Parallelize batching authored by james7132
Unify RenderLayers and TargetCamera authored by UkoeHB
Fix window panic on close authored by s-puig
make example font_atlas_debug deterministic with a seeded random authored by mockersf
Add methods to return the inner value for direction types authored by Multirious
fast-fail in as_bind_group authored by robtfm
Add missing ifdef guards around shader code. authored by viridia
Add `Triangle3d` primitive to `bevy_math::primitives` authored by vitorfhc
Return a static string for Enum::variant_name authored by cBournhonesque
add reflect for BinaryHeap authored by cBournhonesque
Issues Opened this week
Asset Meta Files should have an example authored by tbillington
Translucent window outline (window shadow) appears when moving windows with a transparent background with a transparent window authored by 5-23
Rotating a sliced sprite around off-center Anchor behaves erratic authored by lennart
CI test mismatch on local runner authored by s-puig
Despawned UI Nodes' parents' children need to be updated in UiSurface BEFORE despawn authored by eidloi
Hit testing for gizmos authored by pcwalton
Add an example for joining queries authored by alice-i-cecile
Ability to use non-default audio device authored by inodentry
Material BindGroup Storage returns arraylength of 1 when the vec is empty authored by ddorstijn
Missing EntityWorldMut::into_mut(self) authored by jkb0o
Expose Winit's `with_skip_taskbar` on window creation authored by RaeveNoir
Document the recipe for adding crate-relative asset source authored by viridia
The published web examples panic when opening Print dialog authored by Maximetinu
Check example showcase patches in CI authored by rparrett
`Touches` resource is discarding previous_position too eagerly authored by AldanTanneo
9-slicing: variable width response? authored by brandon-reinhart
WGPU Panic when there's a transmission material in scene and camera is switched authored by franklinblanco
Double sided doesn't work on transmissive material authored by franklinblanco
Re-export SmolStr from winit authored by viridia
Transmissive material doesn't allow light through authored by franklinblanco
Invalid children when working with dynamic scenes due to partial extraction authored by alice-i-cecile
Mechanism for inheritable render layers authored by viridia
Add or Swap to a Simpler Fixed Update Strategy authored by aarthificial
Clamp and Bounds for colors authored by solis-lumine-vorago
Equirectangular HDRI skybox authored by KristijanZic
Asset pre-processing is applied universally, even to custom asset sources authored by eidloi
Make more `Transform` APIs interoperate with `Dir3` authored by mweatherley
Screenshots from any render target not just windows authored by torsteingrindvik
mesh is culled based on original geometry authored by ua-kxie
"Pressed" detection bugged after unfocusing in game in WASM authored by newclarityex
`ButtonInput` docs should contain a usage example authored by Blainegith
Unify `RenderLayers` and `TargetCamera` and provide a single way to configure which camera entities are rendered to authored by alice-i-cecile
IO and Async Compute task spans authored by james7132
Transform Anchor authored by DanielDK05
VisibleEntities includes entities without an attached Mesh, which is slow authored by pcwalton
Gltf texture not rendering properly authored by hchockarprasad
Extend system piping with system calling authored by Hexorg
linker error on iOS authored by extrawurst
CameraBundle clarifications authored by UkoeHB
Support perspective projections with shear authored by viridia
Proposal towards modern `EntityNote` for better window ergonomics and more authored by DasLixou
Android TV crash: TextureUsages(RENDER_ATTACHMENT) are not allowed on a texture of type Depth32Float due to downlevel restrictions authored by edisno
Let GLTF labeled assets be accessed by their names authored by viridia
Visual artifacts when using 2d and 3d gizmos together authored by viridia