Tiny Glade, VJ performances, and 2d lighting
2024-06-03
This week in the Bevy ecosystem we see Tiny Glade ship a Steam demo, live VJ sets powered by Bevy, screen space reflections in the deferred renderer and more.
We've also got the usual showcases and a couple really interesting crate release for 2d lighting systems and gpu particles.
Tiny Glade's Demo is out this week with the ability to build small castles and yes, you can pet the sheep. Tiny Glade uses Bevy's ECS and their own custom renderer, which they talk about a bit in this 80 level article.
What would be in a hypothetical Bevy 1.0?
Are you one of the people wondering what Bevy is planning before declaring a 1.0 release? Alice gave her thoughts over on Reddit including the need for an editor, documentation, and more. This is not an "official Bevy 1.0 roadmap", rather it's just Alice's thoughts but its still useful to know what prominent Bevy developers think about what is needed for a 1.0.
DrLuke's VJ set
DrLuke performed a Bevy-based VJ set at GulaschProgrammierNacht, a hacker conference in Germany. It was about 2 months of work to build up the 2 hour set. Here are some images from the live set as well as Bevy UI for controlling it.
Rhombus Primitive
I've been working with isometric projection a lot lately, so its great to see the Rhombus get a primitive implementation which could simplify the handling of isometric projections in the future.
Grays
A new trait (Gray
) for color spaces allows the simpler implementation of a series of grays. Rather than needs to specify the full set of values, such as rgb, each trait implementation is defined with a pure black and a pure white. The gray
function then accepts a lightness value to generate a mix of these two values. 0 is black, and 1 is white.
impl Gray for Hsla {
const BLACK: Self = Self::new(0., 0., 0., 1.);
const WHITE: Self = Self::new(0., 0., 1., 1.);
}
Hsla::gray(0.5)
Random Sampling Example
A new random_sampling
example was introduced to show off the new ShapeSample
functionality we've talked about in previous issues. The example shows off sampling interiors and boundaries of a cube.
A second sampling example, sampling_primitives
, was also merged this week, showing off the rest of the shapes.
Screen-space reflections for the deferred renderer
Deferred rendering was introduced in Bevy 0.12 as an alternative to Bevy's existing "rendering style". This PR implements SSR, or Screen Space Reflections. This technique approximates real-time reflections based on raymarching through the depth buffer and copying samples from the final rendered frame.
loading gLTF
Using the gLTF loader can be a bit confusing with all of the elements in .gltf files. Loading specific Scenes, Nodes, Meshes and more has gained more documentation in 13548.
bevy_transform
The Transform
component is a useful struct inside and outside of Bevy contexts. With 13533 and 13599 bevy_transform became more modular and usable as a standalone dependency.
Showcase
Bevy work from the #showcase channel in Discord and around the internet. Use hashtag #bevyengine.
32-angle 2d isometric character controller
showcase
This showcase added controller support and applied the isometric projection to keyboard and controller input, as well as raycasting. The blender script to support rendering all 32 angles and 5 animations has grown to automatically select NLA tracks and produce json metadata that can be imported into Bevy.
This showcase includes the Blender script used to render out the spritesheet.
Doing Chores and Killing Bugs
showcase
This game is from a game jam in April that had additional work put into it over the month of May. Available to play and download on Itch
IceWarfare
showcase
An attempt at recreating a war3ft map where mages trying to fight by bashing into each other. The current work is demonstrating the character controller "on ice".
A mermaid flowchart visualizer for Bevy systems.
showcase
This is a mermaid flowchart visualizer for Bevy systems based on bevy_mod_debugdump
.
Cat Chaser
showcase
Cat Chaser is a Ludum Dare Jam entry back in 2017 that gains new life with a web release after being ported to Bevy. It can be played on Itch.io.
Bevypunk Character Creator
showcase
This is a first attempt at a character creator using bevy_lunex
for the Bevypunk example. It is scenario 5 described in the 10 Challenges for Bevy UI Frameworks GitHub discussion.
Scriptgrip
showcase
In Scriptgrip, the player controls a rocket by constructing a list of commands that then play over time. The aim is to finish the level as fast as possible, there is global leaderboard and players can compete with each other.
Crates
New releases to crates.io and substantial updates to existing projects
bevy_ratatui 0.4
crate_release
bevy_ratatui
0.4 is the re-start of a Bevy plugin for building TUIs (terminal user interfaces) with Ratatui. The 0.4 release is a completely new crate as the name has been transferred. This current release is still in the experimental phase and looking for feedback.
The new crate is located at bevy_ratatui
bevy_hanabi 0.11
crate_release
bevy_hanabi
is a GPU particle system plugin for the Bevy game engine. The most notable new feature in bevy_hanabi
0.11 is supports is a new trails and ribbons.
There is a migration guide and a changelog.
bevy_mod_sequence
crate_release
This crate provides a Sequencer
component that aids in queuing systems or animations and specify their ordering.
bevy_light_2d
crate_release
bevy_light_2d
is a general purpose 2D lighting plugin for Bevy that prioritizes ease of use and general application over depth of features. It takes inspiration from a number of 2d lighting crates that came before it:
Refactor `ci_testing` and separate it from `DevToolsPlugin` authored by BD103
Implement Rhombus 2D primitive. authored by salvadorcarvalhinho
add glsl feature for bevy_pbr authored by robtfm
Added a Grey trait, and implementations on baked-in colors. Fixes #13206 authored by Earthmark
fix rounded borders on buttons authored by mockersf
small improvements on the color_grading example authored by mockersf
Fix bevy_app not compiling without default features authored by ItsDoot
use ssr dynamic offset in volumetric fog bind group authored by mockersf
revert reflections PR changes to the meshlet example authored by mockersf
Example for random sampling authored by mweatherley
Implemented `Reflect` for (almost) all `bevy_math` types authored by Olle-Lukowski
Fix various bugs with UI rounded borders authored by hymm
Create a primitive sampling showcase example authored by IQuick143
Move `bevy_math` `Reflect` impls authored by Olle-Lukowski
Make gizmos take primitives by ref authored by Olle-Lukowski
Implement opt-in sharp screen-space reflections for the deferred renderer, with improved raymarching code. authored by pcwalton
Set ambient_intensity to 0.0 in volumetric_fog example, correct doc comment authored by GitGhillie
add tonemapping LUT bindings for sprite and mesh2d pipelines authored by arcashka
Refactor command application for more consistency authored by james-j-obrien
Generalize component reflection to operate on `FilteredEntityRef` and `FilteredEntityMut`, not `EntityRef` and `EntityMut`. authored by pcwalton
Fix unsoundness in `FilteredEntity{Ref,Mut}` various `get` methods authored by SkiFire13
Add docs to bevy_gltf about loading parts of a Gltf asset authored by IceSentry
Swapping back to using From<Color> for StandardMaterial in examples authored by andristarr
Clarify cone position authored by solis-lumine-vorago
Set the default target exposure to the minimum value, not 0 authored by alice-i-cecile
Fix UI in WebGPU: call `textureSample` from outside the if authored by mockersf
Implement `ShapeSample` for `Extrusion<T>` authored by solis-lumine-vorago
Run motion blur before TAA to reduce artifacts authored by aevyrie
Fix: Motion blur should sample onscreen fragments with no depth authored by aevyrie
disable gpu preprocessing on android with Adreno 6xx GPU authored by mockersf
constrain WorldQuery::init_state argument to ComponentInitializer authored by Victoronz
Fix image measure function to apply inherent aspect ratio to style sizes authored by nicoburns
Add wireframe toggle to 2d and 3d shapes example authored by IceSentry
Use standard instruction text / position in various examples authored by rparrett
Update docs for NextState authored by alice-i-cecile
glTF labels: add enum to avoid misspelling and keep up-to-date list documented authored by mockersf
Updates default Text font size to 24px authored by mnmaita
unload unused images that are RenderAssetUsages::RENDER_WORLD authored by mockersf
Implement motion vectors and TAA for skinned meshes and meshes with morph targets. authored by pcwalton
bevy_transform split up to allow feature gate modularity authored by torsteingrindvik
Add ability to clear all components on an entity via EntityWorldMut authored by dmyyy
Fix docs for `RenderLayers` authored by tychedelia
Add some missing reflect for volumetric fog types authored by IceSentry
Unify transition names to `exited` and `entered` authored by MiniaczQ
Add ImageFormatSetting::Guess to image loader authored by Azorlogh
color_grading: update UI when camera settings changed authored by mockersf
Simplify state transitions authored by MiniaczQ
Implemented GizmoPrimitive2d for `Arc2d`, `CircularSegment`, `CircularSector`, and make arc_2d use counter-clockwise angle. authored by Olle-Lukowski
Allow bevy_transform to be used as a barebones dependency authored by torsteingrindvik
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 a helper function for making loading a list of a given type of assets from a folder easier. authored by rydb
Use dynamic uniform buffer in post processing example authored by jgayfer
Add Hash for Tick authored by cBournhonesque
Adds bevy_tracing crate authored by mnmaita
Use rust-lld on windows rustdoc in config_fast_builds.toml authored by SkiFire13
Use correct minimal version of meshopt authored by SkiFire13
Add labels to Gltf Node and Mesh assets authored by freiksenet
Allow `GltfLoader` to load user defined materials. authored by mintlu8
Implement the Bevy Remote Protocol (BRP). authored by pcwalton
Allow custom prepass without normal attribute authored by Ansraer
Add dynamic slice based variants of get_many_entities methods authored by maboesanman
Dev tools abstraction authored by rewin123
Add subdivisions to PlaneMeshBuilder authored by IceSentry
Generalize `StateTransitionEvent<S>` to allow identity transitions authored by MiniaczQ
Smooth following via generalized interpolation authored by mweatherley
Update to `rodio` 0.18 authored by BD103
SystemParam `QueryRecursive` for safe recursive iteration. authored by mintlu8
Additional options to mesh primitives authored by ManevilleF
Extra info on Image debug assertions authored by kornelski
Combine transition systems of `Substates` authored by MiniaczQ
Handle wgsl errors in the game of life example authored by kornelski
Fix UI texture atlas with offset authored by s-puig
Add Skybox Motion Vectors authored by aevyrie
Issues Opened this week
Setting 'Specular Transmission' to a value higher than 0.0 on a standard material (or ext material) -> it wont write to depth buffer authored by ethereumdegen
Support user interaction in `ci_testing` authored by BD103
Adding VolumetricLight makes objects near the camera brighter authored by GitGhillie
UI Node's transform is sometimes incorrectly calculated authored by porkbrain
Debugger Remix: Terminal outputting ALSA function 'snd_pcm_poll_descriptors' failed with error 'UnknownErrno: Unknown errno' authored by Testare
ComputedStates are not linked from the `States` documentation authored by alice-i-cecile
Re-using transform in other apps requires a lot of deps authored by torsteingrindvik
Lightmaps break when deferred rendering is enabled authored by GitGhillie
STATUS_ACCESS_VIOLATION in CorePipelinePlugin authored by Weihnachtsbaum
Allow me to rotate a UiImage node or ui texture authored by ethereumdegen
Panic when `bevy_pbr` feature is not included authored by jgayfer
SyncEntityPool Proposal authored by dmyyy
Range<f32> is reflectable but not serializable authored by IceSentry
GizmoPrimitiveNd for external primitives authored by solis-lumine-vorago
`Gizmos::arc_2d` uses clockwise angles for some reason authored by mweatherley
DynamicScene missing docs for entity_map arg in methods authored by ua-kxie
`Arc2d` does not implement GizmoPrimitive2d authored by Olle-Lukowski
UI Node's dimensions are incorrectly calculated if camera at first node's update had zero size authored by bugsweeper
when will this support the mmd? authored by Tom-Jim
Raycasting for primitives. authored by Olle-Lukowski
Suggestion: Rename / Extend Condition Trait Methods. authored by CupOfTeaJay
Gamepad issue authored by goiw111
Dragging window around is very buggy authored by evrensen467