Mesh generation, Voxels, and terminals
2024-12-30
Its the last week in Bevy before 2025 and holiday weeks are bug fixing weeks for the most part this year, but we still get some interesting new features.
Meanwhile the community keeps going with mesh generation, new voxels renderers, and more.
Personally after working with gltf extras and Blender's custom properties this week, I'm most excited about the new registry schema BRP endpoint, which could lead to more addon development!
BRP registry schema
#16882 builds on top of blenvy's initial work in defining a JSON serialization for the type registry that can be queried and served over the Bevy Remote Protocol at game runtime. The new endpoint is at bevy/registry/schema
.
Easing curves
#16945 introduces the ability to ease between tuples of values that themselves can be eased.
// Easing between two `(Vec3, Quat)` values:
let easing_curve = EasingCurve::new(
(vec3(0.0, 0.0, 0.0), Quat::from_rotation_z(-FRAC_PI_2)),
(vec3(1.0, 1.0, 1.0), Quat::from_rotation_z(FRAC_PI_2)),
EaseFunction::ExponentialInOut
);
While #16957 introduces smoothstep
and smootherstep
, also known as Hermite interpolation.
Parsing Val
Parse "10px"
and other Val
s with #16926
Showcase
Bevy work from the #showcase channel in Discord and around the internet. Use hashtag #bevyengine.
Signed-Voxel-Octree Directed-Acyclic-Graphs
showcase
A start to a new voxel renderer based on Signed-Voxel-Octree Directed-Acyclic-Graphs. The image is an 8x8x8 cube with a missing corner voxel.
The SVO DAG is uploaded to the GPU, expanded into cubes via a series of compute dispatches and then the cubes are rendered as 6 triangles
Jarl: Overhauled Picking
showcase
An overhauled picking system (that's object selection, not mining) for Jarl. The new system supports animations and sprite hierarchies.
Project Harmonia: Walls
showcase
Precise placement of walls for project harmonia. Takes advantage of new dashed gizmos and includes angle and length visualizations
Rusty Pong
showcase
A pong-style game built with Rapier physics. You can play it in your browser.
Sobel Filtering for ASCII
showcase
This sobel filter is aimed at producing ascii output to a terminal and is achieved by adding a new step in Bevy's render graph.
The code is available on GitHub and gets another mention in a crate release later.
boids
showcase
A boids simulation created while following along to Steering Behaviors For Autonomous Characters. The demo makes use of Avian Physics, bevy-inspector-egui, and gizmos.
bevy_terrain demos
showcase
This bevy_terrain demo shows off seamless LOD scaling from 1m to planet-wide as well as a number of datasets. The video for this one really shows the rendering off well so definitely check it out.
CPU vs GPU collision detection
showcase
An implementation that compares the performance of CPU-based collision detection with GPU-based collision detection. Some interesting results such as when it even makes sense to do this. The project is aimed at a use case of hundreds of thousands of simultaneously colliding entities.
Kataster
showcase
Kataster is a 2d space shooter demo game aimed at being a resource for Bevy beginners. It shows off how to use crates like avian2d, bevy_hanabi, and leafwing-input-manager.
bevy_minibuffer scriptables
showcase
A demo of scripting support making its way into bevy_minibuffer. The code is available on the scriptable branch
Crates
New releases to crates.io and substantial updates to existing projects
bevy_stat_query 0.1
crate_release
A versatile RPG stat system. The overview does a good job of explaining how buffs, debuffs, and modifiers work.
bevy_ecs_tilemap 0.15
crate_release
bevy_ecs_tilemap is an ECS driven tilemap rendering library. It’s designed to be fast and highly customizable. Each tile is considered a unique entity and all tiles are stored in the game world.
0.15 brings 3x performance wins in fps on the 1.6m tile benchmark example.
Two of the 2d level editor integrations that build on top of bevy_ecs_tilemap also made releases:
- bevy_ecs_ldtk 0.11
- bevy_ecs_tiled 0.5
bevy-ui-debug-overlay
crate_release
bevy-ui-debug-overlay is an improved UI debug overlay for Bevy 0.15.
bevy_renet 1.0
crate_release
renet has hit 1.0, and thus to match, so has bevy_renet.
Renet is a network library for Server/Client games written in rust. It is focused on fast-paced games such as FPS, and competitive games
The release notes include a selection of great showcases including Gunbug, Crystal Realms, and Project Harmonia
bevy_toon_material 0.1
crate_release
A shader to apply to your models if you're trying to get a stylized look in the vein of WindWaker.
bevy_ratatui_camera 0.8
crate_release
bevy_ratatui_render has been renamed to bevy_ratatui_camera for 0.8, because the new system is camera-centric and thus, simpler.
bevy_ratatui_camera is a plugin for rendering your bevy app to the terminal. 0.8 brings better ergonomics, a new render strategy, and edge detection.
Devlogs
vlog style updates from long-term projects
Educational
Tutorials, deep dives, and other information on developing Bevy applications, games, and plugins
Triple A game in Rust Bevy
educational
A few new entries in the "Triple A game in Rust Bevy" tutorial series were published. The link here is to the full playlist.
Prevent creation of superfluous empty table authored by omaskery
Fix several regressions from recent rendering changes. authored by pcwalton
Drive-by Docs Fixes: `bevy_picking`, `bevy_text` authored by coreh
Remove meshlet builder retry queue authored by JMS55
Fix meshlet shaders for bindless mode. authored by pcwalton
Set panic as default fallible system param behavior authored by MiniaczQ
Implement FromStr for Val authored by VictorKoenders
Fix `EaseFunction::Exponential*` to exactly hit (0, 0) and (1, 1) authored by scottmcm
Toggleable UI layout rounding authored by ickshonpe
Add `SubApp::take_extract()` authored by djeedai
Easing curves for tuples authored by mweatherley
[math] Add `SmoothStep` and `SmootherStep` easing functions authored by scottmcm
Fix panic in benches caused by missing resources authored by omaskery
Remove unnecessary cast in DynamicTextureAtlasBuilder authored by mgi388
Make `bevy_reflect` feature of `bevy_math` non-default authored by mweatherley
Expose access to `SubApps` within `App` authored by LikeLakers2
Rename "focus" in `bevy_picking` to "hover" authored by alice-i-cecile
don't trigger drag events if there's no movement authored by mockersf
bevy_winit feature should enable bevy_window authored by mockersf
Expose bevy_image as a feature authored by mockersf
Expose Tonemapping LUT binding indices authored by CrushedPixel
(fix) SSRPlugin: Don't reference default deferred lighting pass if it doesn't exist authored by CrushedPixel
Use `variadics_please` to implement `StableInterpolate` on tuples. authored by mweatherley
impl EntityBorrow for more types authored by Victoronz
Remove vestigial helper functions for `Commands` and `EntityCommands` authored by JaySpruce
Fix beta CI authored by BenjaminBrienen
Make animate_targets run before inherit_weights authored by DaAlbrecht
Migrate reflection benchmarks to new naming system authored by BD103
BRP registry JSON schema endpoint authored by Leinnan
Get lightmaps working in deferred rendering. authored by pcwalton
Fix panics in `scene_viewer` and `audio_control` authored by rparrett
Fix non-meshlet shaders for non-bindless mode authored by mockersf
Prefer `Display` over `Debug` authored by BenjaminBrienen
Fixed panic in pbr example authored by pin3-free
panic on system error authored by mockersf
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
Refactor non-core Curve methods into extension traits authored by mweatherley
Experiment to mitigate StorageId union access patterns authored by omaskery
`#[no_panic]` math authored by BenjaminBrienen
Add BRP method to mutate a component authored by purplg
Key render phases off the main world view entity, not the render world view entity. authored by pcwalton
show these 'fully qualified paths' for bevy_remote's rpc authored by alphastrata
METIS-based meshlet generation authored by JMS55
Move `futures.rs`, `ConditionalSend` and `BoxedFuture` types to `bevy_tasks` authored by mnmaita
Fix path checking for FileWatcher for virtual workspace projects authored by super-saturn
Added App::with_component_hooks authored by pin3-free
Make `extract_mesh_materials` and `MaterialBindGroupAllocator` public authored by BenjaminBrienen
Retain `RenderMaterialInstances` and `RenderMeshMaterialIds` from frame to frame. authored by pcwalton
Remove `Send + Sync` bounds from `PartialReflect` and friends authored by BenjaminBrienen
Fix logic error in loading_screen.rs authored by BenjaminBrienen
Add fallible add methods to `PluginGroupBuilder` authored by Brezak
Improve msrv CI authored by BenjaminBrienen
Don't overalign aligned values in `gpu_readback::align_byte_size` authored by Brezak
Use -D warnings in all relevant CI authored by BenjaminBrienen
Issues Opened this week
Replace workaround with proper monitor handle partialeq authored by BenjaminBrienen
Systems with parallelizable mutable access to multiple worlds. authored by ElliottjPierce
Bevy Panics when trying to load a single mesh from gltf file containing armature authored by PatrickChodowski
Add a way to globally disable the required components feature authored by Bcompartment
wgpu validation error when using `Readback` for images with more than one layer authored by EmbersArc
Float literal is Nan authored by patrulhasirius
mixed lighting example breaks with Res<InputFocus> authored by ChristopherBiscardi
ERROR wgpu::backend::wgpu_core: Handling wgpu errors as fatal by default authored by webdev3614
AsBindGroup derive macro should link to the AsBindGroup trait documentation authored by Lege19
Need an example of a simple material extension as a vertex shader authored by ethereumdegen
UI Texture Atlas Slice example looks broken on web authored by TheNeikos
Bevy picking DragDrop's Hit position is confusing. authored by Aqaao
Defining a stable core API for better maintainability authored by neshume
Observer Undefined Behavior authored by jnhyatt
Allow me to declare an animation clip event based on a frame, not on a time authored by ethereumdegen
Crashes on startup due to too many bindings authored by BenjaminBrienen
WARN bevy_pbr::render::gpu_preprocess: The preprocessing index buffer wasn't present with alien_cake_addict authored by C-Entropy
Add `contains` or `has` to `PluginGroupBuilder` authored by Jondolf
`Mesh` interface works against performance authored by djeedai
Incorrect alignment with `RenderDevice::align_copy_bytes_per_row` when using `Readback::texture` authored by ThePuzzlemaker
rust-analyzer autocomplete is broken for some ECS types authored by C-Entropy
Build warnings with certain feature combinations authored by BenjaminBrienen