Bevy 0.14-rc.2, Powerglove, and Soup!
2024-06-10
For the 0.14 release cycle, Bevy is shipping a release candidate before the official release. As such, the 0.14.0-rc.2 release candidate is available now and some crates are already starting to ship 0.14-rc compatible versions.
You can check in on the Bevy 0.14 milestone if you're running into any issues with the release candidate.
In the showcases this week, we'll see a Bevy "Powerglove", Inkscape level editing, new global illumination projects, and more.
and of course, Soup!
State-Scoped Entities
#13649 implements support for tagging entities with a component and automatically cleaning them up when exiting a state.
Using .enable_state_scoped_entities::<IsPaused>()
, and labelling entities with StateScoped
, as seen in the sub_states example will enable the functionality.
commands.spawn((
StateScoped(IsPaused::Paused),
...
));
Map entities in Resources
Its fairly common for Resources to store entities and its desirable for Reflection to work well with these Resources, especially since Entity ids are World-specific. This has ramifications for Scene serialization and other use cases. As of #13650, these Resources can implement MapEntities
to gain access to an EntityMapper
which enables the translation of an Entity
from one world into another.
Anisotropy
Physically-based anisotropy is now available for materials, which enhances the look of surfaces such as brushed metal or hair. glTF scenes can use the new feature with the KHR_materials_anisotropy extension. The support is implemented in StandardMaterial
and as usual, the pull request is well-described and documented.
SMAA
In #13423 a new anti-aliasing strategy was implemented: SMAA or Subpixel morphological antialiasing.
Extrusion
As of #13478 new meshes can be created by extruding primitives. In #13676, support was extended to extrusions of CircularSector
, CircularSegment
, and Rhombus
.
GltfExtras
The gltf format allows extensions and #13453 implements support for GltfExtras for scenes, meshes, and materials. This will help enhance the Blender/Bevy support that exists in third party crates in the future. This PR also introduces a new example load_gltf_extras
.
In #13489 the names for many matrices has changed. This will affect Rust and wgsl code for 0.14.
Showcase
Bevy work from the #showcase channel in Discord and around the internet. Use hashtag #bevyengine.
GPU Particles
showcase
A custom GPU particle implementation. Each trail is composed of a number of particles that have their movement simulated on the GPU using several compute shaders, triangle vertices are generated based on the position of those particles in a vertex shader to draw trails onto the screen.
Ships and Planets
showcase
This video showcases ships, planet terrain, and planet-scale colliders with bevy_xpbd.
WIP global illumination
showcase
A work-in-progress 2d global illumination implementation aimed at working on webgl2 and mobile platforms. There's mentions of Radiance Cascades, ReSTIR GI, and other implementations in the Discord thread if you're interested in the topic.
Sunflower Golden Ratio
showcase
A simulation illustrating the golden ratio in the arrangement of seeds on sunflowers, for a presentation on fibonacci and the golden ratio.
Hiru's Island
showcase
Hiru's Island (a temporary stand-in name for this game) got a whole bunch of work done, including a great looking main menu. The game is open source and uses an interesting set of crates like bevy_rapier2d
, bevy_ecs_tilemap
, and bevy_hanabi
to build out the game world.
Inkscape as a level editor
showcase
svg output from inkscape is manually parsed and interesting features are extracted, such as translation, rotation, etc. This is combined with lyon's crates to tessellate into meshes.
Bevy Powerglove Proof of Concept
showcase
This is a custom controller glove including Xiao nRF52 microcontroller and casing, featuring a flex sensor for each finger and an integrated accelerometer + gyroscope.
The glove sends its data over bluetooth to the Bevy desktop app, which connects to the glove and loads a gaussian splat scan. Making a fist makes the camera rotate with the hand. Bluetooth polling logic is run in a separate thread using a fork of bevy_tokio_tasks.
HTML to bevy_ui
showcase
An experimental crate that uses html_parser_rscx to parse html and combines it with bevy_ecss which uses a subset of CSS to style bevy_ui entities.
Project Harmonia on Steam Deck
showcase
Project Harmonia running on a Steam Deck. The game runs at a stable 90 FPS, which is the refresh rate of this particular device, and consumes 13.1 W. The game hasn't yet been updated for the smaller screen and gamepad inputs, but the developer includes a bunch more information about using the Steam Deck as a development device in the Mastodon thread including information such as SteamOS' differences from Arch Linux and the immutable file system.
Soup!
showcase
This game involves soup, and making it.
Soup won the Cozy Spring Jam and uses Rapier for physics. The game was made over 3 days with about 48 hours of work in that time.
The game is playable on Itch.io
Crates
New releases to crates.io and substantial updates to existing projects
bevy_ratatui_render 0.3
crate_release
bevy_ratatui_render
uses headless rendering to render bevy to a texture, and then prints the texture with unicode halfblocks using ratatui_image
.
bevy_trackpad_haptic
crate_release
A bevy plugin for triggering trackpad haptic feedback on a mac.
bevy_oxr
crate_release
bevy_oxr is a crate that adds support for openxr to Bevy. The crate is one step on the way to upstreaming support for openxr. There will be another release for 0.14 and the hope is that further work will happen in the upstreaming effort.
bevy_mod_desync
crate_release
bevy_mod_desync is a proof of concept desync tracker. The README includes information about the CRC implementation and preventing false-positives.
bevy_terminal_display
crate_release
bevy_terminal_display
is another bevy/terminal rendering plugin. This one has a slightly different rendering in that it uses braille characters for rendering.
bevy_plane_cut
crate_release
A plugin that can cut a model visually with a plane by discarding fragments that are "below" the plane.
bevy_tween 0.5
crate_release
bevy_tween has revamped its entire API into an ECS-based Bevy procedural and asset animation library. New in 0.5 is integration with bevy_lookup_curve
bevy_device_lang first release
crate_release
Provides cross platform access to the device language. The intended use case is to pick the right language for localization.
fn bevy_system() {
let lang : Option<String> = get_lang();
}
bevy_spawn_fn
crate_release
bevy_spawn_function is a crate that attempts to improve the developer experience of spawning in Bevy, including supporting nested bundles and children.
Educational
Tutorials, deep dives, and other information on developing Bevy applications, games, and plugins
Evil Dungeon tutorial
educational
An open source 2d dungeon crawler made with the Bevy Engine in Rust.
bevy_lunex doc book
educational
The Bevypunk example is built with bevy_lunex, which now has the beginnings of a documentation book. Advanced examples are still to come, but installation and basic usage is covered.
Use correct minimal version of meshopt authored by SkiFire13
fix: upgrade to winit v0.30 authored by pietrosophya
Add compass direction constants to `Dir2` authored by alice-i-cecile
Added CompassQuadrant and CompassOctant as per #13647 authored by BobG1983
Normalise matrix naming authored by ricky26
Map entities from a resource when written to the world. authored by brandon-reinhart
add handling of all missing gltf extras: scene, mesh & materials authored by kaosat-dev
Add `binding()` helper function to `BufferVec` authored by IceSentry
Implement PBR anisotropy per `KHR_materials_anisotropy`. authored by pcwalton
Move utilities from examples to `bevy_state` and add concept of state-scoped entities authored by MiniaczQ
Generalize `StateTransitionEvent<S>` to allow identity transitions authored by MiniaczQ
`Dir2` -> `Rotation2d` conversions authored by mweatherley
Extrusion bounded authored by lynn-lumen
Use `BufferVec` for `gpu_readback` example authored by IceSentry
Forward exit codes in default app runner authored by Brezak
Meshable extrusions - Part 2 authored by lynn-lumen
Implement subpixel morphological antialiasing, or SMAA. authored by pcwalton
Add dynamic slice based variants of get_many_entities methods authored by maboesanman
rename touchpad to gesture, and add new gestures authored by mockersf
Rename "point light" to "clusterable object" in cluster contexts. authored by pcwalton
Fix a few typos authored by rparrett
Add `on_unimplemented` Diagnostics to Most Public Traits (#13347) authored by alice-i-cecile
Add axes_2d gizmo. authored by lambertsbennett
document need to update Aabb in Mesh::(with_)insert_attribute authored by ua-kxie
Meshable extrusions authored by lynn-lumen
flush key_input cache when Bevy loses focus (Adopted) authored by ramirezmike
Skip tonemapping in case it is none authored by lukaschod
make sure windows are dropped on main thread authored by mockersf
Allow creation of random `Rotation2d` authored by mweatherley
Allow `Bounded3d` implementations for custom primitives authored by lynn-lumen
Rename `Rotation2d` to `Rot2` authored by alice-i-cecile
Avoid a panic when loading labelled assets authored by ricky26
Add labels to Gltf Node and Mesh assets authored by freiksenet
hashing error in bevy_reflect now includes the type (bevyengine#13646) authored by Wuketuke
rename bevy_state_macros to bevy_state_macros_official authored by mockersf
Allow mix of hdr and non-hdr cameras to same render target authored by tychedelia
Fix links to `Transform` in `Transform` and `GlobalTransform` docs authored by rparrett
Provide more information when a filewatcher failure is hit. authored by brandon-reinhart
Misc meshlet changes authored by JMS55
Use TBN in apply_normal_mapping in pbr_prepass authored by IceSentry
make UI text rendering camera driven authored by mockersf
async_compute example: don't block in the task authored by mockersf
Allow loading assets with custom async behavior authored by JoJoJet
Made `Mesh::merge` take a reference of `Mesh`. authored by mintlu8
Make the component types of the new animation players clonable. authored by mintlu8
improved the error message by insert_boxed (issue #13646) (again) authored by Wuketuke
rename the crate bevy_state_macros_official back to its original name authored by mockersf
Document the Release Candidate process authored by mockersf
Update crate metadata for bevy state authored by mockersf
13743 app exit hang authored by tychedelia
Add `mappings` to `EntityMapper` authored by bushrat011899
Uncouple `DynamicTextureAtlasBuilder` from assets authored by djeedai
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
Make `SceneEntityMapper` constructor/destructor public authored by dmyyy
Add Squircle primitive authored by lynn-lumen
Hide some re-exports by default. authored by mintlu8
Adding skybox to motion_blur example authored by andristarr
Expose winit's `MonitorHandle` authored by tychedelia
Fix phantom key presses in winit on focus change (#13299) authored by hut
Start a built-in postprocessing stack, and implement chromatic aberration in it. authored by pcwalton
Poll system information in separate tasks authored by Brezak
Remove WinitEvents that aren't emitted authored by UkoeHB
Upstream `CorePlugin` from `bevy_mod_picking` authored by NthTensor
bevy_reflect: Allow parameters to be passed to type data authored by MrGVSV
initial work towards ordering schedules within state transition groups authored by lee-orr
Add segments to `ExtrusionBuilder` authored by lynn-lumen
Align `Scene::write_to_world_with` to match `DynamicScene::write_to_world_with` authored by dmyyy
Add feature requirement info to image loading docs authored by bugsweeper
Make gLTF node children Handle instead of objects authored by freiksenet
Fix bevy_core_pipeline and ktx2 dependencies authored by bugsweeper
Update serialize flag for bevy_ecs authored by cBournhonesque
Stable interpolation and smooth following authored by mweatherley
Clear messed up feature flag on AppExitStates impl authored by bugsweeper
Remove extra call to clear_trackers authored by chrisjuchem
Meshlet misc authored by JMS55
Add Display implementation to DebugName. authored by gagnus
Adds back in way to convert color to u8 array, implemented for the two RGB color types, also renames Color::linear to Color::to_linear. authored by gagnus
Proof of concept `StateRegistry` authored by MiniaczQ
view.inverse_clip_from_world should be world_from_clip authored by ChristopherBiscardi
Document trace_tracy_memory in profiling.md authored by theotherphil
make `App` implement `Send` again authored by cBournhonesque
Remove unused mip_bias parameter from apply_normal_mapping authored by JMS55
bug: Don't panic. Warn on missing file_watcher path. authored by shanecelis
Cluster light probes using conservative spherical bounds. authored by pcwalton
Improve error handling for `AssetServer::add_async` authored by JoJoJet
Issues Opened this week
Add more query join types (left, right, outer join) authored by alice-i-cecile
Add a simple skybox and envmap for use in examples authored by alice-i-cecile
Add a way to run CI on a specific crate authored by Adamkob12
Shader Instancing example does not render additional instanced entites with respect to their Transforms authored by DavidHospital
`animate_targets` should allow total blend weights greater than 1 authored by ricky26
Allow `Scene` to overwrite entities in a `World` authored by dmyyy
`Handle<Storage>` abstraction for material shaders authored by tychedelia
naga internal error: entered unreachable code when attempting to run shader authored by 00alia00
Investigate reusing `AudioSink` authored by BD103
Move all asset paths in examples to constants at the top of the example authored by alice-i-cecile
Shader is not loaded error is unclear authored by alice-i-cecile
MSVC: Linking with link.exe failed, exit code 1189 authored by Quentindeve
Add an illustration to the compass direction docs authored by alice-i-cecile
Command to efficiently drop matched archetypes and their tables authored by iiYese
Example script missing in compiler target authored by Wuketuke
Stochastic texture sampling authored by torsteingrindvik
bevy_gltf improvements to decouple it from scene creation authored by freiksenet
wgpu seems to ignore the wgpu::Limits config from RenderPlugin authored by 00alia00
how to handle `PrimaryWindow` despawning authored by mockersf
Be more honest/precise about what mathematical primitive types and values are authored by mweatherley
Texture atlas preprocessing & the art production pipeline. authored by brandon-reinhart
Ordered `OnExit` and `OnEnter` authored by MiniaczQ
weird startup scaling issues on macOS after winit `0.30` authored by tychedelia
`set_physical_resolution` broken on macOS after winit `0.30` authored by tychedelia
`Color`-related convenience methods should be more permissive authored by alice-i-cecile
EntityRef::get_ref should use the change ticks of the System (if it is called from within one) authored by cBournhonesque
bevy_state doesn't compile when only the `bevy_app` feature is enabled authored by vonforum
Document methods relative to projection authored by Selene-Amanita
In `0.14.0-rc.2`, minimal app with `bevy_core_pipeline` crashes without `ktx2`, `zstd`, and `bevy_pbr` authored by benfrankel
`CubicBezier` should not allow constructing discontinuous curves authored by mweatherley
RemovedComponents can miss removals in 0.14.0-rc2 authored by chrisjuchem
Segfault on default app on NixOS/NVIDIA GPU. authored by Azercoco
AssetLoader missing in AssetProcessor authored by Affinator
3d_gizmos example perspective change shader breaks authored by ChristopherBiscardi
Rendering Stutter/Ghosting on Vulkan Renderer authored by igorlp