Bevy Color, Gizmos, and 7drl
2024-03-04
Welcome to another week in the Bevy ecosystem!
This week we've got the new bevy_color crate, a few new gizmos, and a number of people started participating in the 7 day roguelike challenge game jam.
We also cover some updates to the Lighting system that happened in 0.13 and how you might want to update your app.
bevy_color
A new crate was introduced to the repo this week called bevy_color
. While some details are still being worked out, this seems like its going to be the location for color palettes in the future. One change that came through with this that I think will make it nicer for those new to shaders is LinearRgba
.
Color space conversion are super confusing, which is why its nice to see a new color space conversion diagram make its way into the documentation this week.
New Gizmos!
A couple new gizmos made their way in including Grids and coordinate axes.
7DRL
A number of people are participating in the seven day roguelike game jam, leading to a number of showcases this week.
etc
The lighting system changed in Bevy 0.13, so you may want to check in on the values you've chosen like in this PR.
Showcase
Bevy work from the #showcase channel in Discord and around the internet. Use hashtag #bevyengine.
Bevy Firework particles
showcase
Bevy Firework is a particle system plugin where particles are simulated on the CPU and use GPU batching for rendering. This allows each particle system to be rendered in a single draw call (rather than one per particle).
Erosion simulation (now with deposits!)
showcase
A continuation of an erosion simulation that was previously posted, now with deposits!
Scroll View (early preview)
showcase
A simple scroll view that hasn't been published yet. There's an example that runs on the web and the source is available on GitHub
netcode and knockback
showcase
This is a test from the client's perspective with ~30ms ping and 1% packet loss.
This is built on top of renet and thus has access to the renet visualizer
Images don't do the videos in the Discord thread justice, so be sure to clickthrough and check them out for more.
Do you like CATS?
showcase
A published game on iOS and Android!
Very similar to a fruit merging game that went viral a short time ago. The game is just as fun as the original and I actually got distracted playing it while writing this description. Drop cats in, similar cats merge, and there's physics!
PoC time-travel debugger
showcase
time-travel debugging is a concept where you basically record a whole bunch of historical state and can then move through that state to see how your system is responding at certain points in the past.
Revy is a proof of concept time-travel debugger for Bevy. There's an online demo using Rerun which honestly does more than any words can for the concept.
bevy_peck progress
showcase
bevy_peck uses bevy_math and Glam types to enable collision detection. This is one of the more "Bevy-native" collision detection attempts that exist right now. The long-term goal of this work is to replace Parry (which uses nalgebra) in bevy_xpbd.
Why do this? There's whole bunch of reasons in this comment in the Discord thread
Contact Projective Decals
showcase
Based on this talk, this bevy implementation of contact projective decals shows off a 1 x 1
Rectangle (A quad) located at Vec3::ZERO
with the normal pointing in the Y direction with the decal material applied. Stretching over a slightly angled Cuboid.
The Discord thread has hundreds of comments from people using it in various ways and other discussion, so check it out if this is interesting to you.
octree mesh: 256^3 potential leaf nodes
showcase
This is a single entity representing a bunch of voxels organized in an octree, which subdivides only when required. Lots of great discussion in the Discord thread
Ferris Fur Shader
showcase
A fur shader in WGSL. The fur is on a Ferris model which is quite hidden by the fur!
If you're interested in fur, acerola has a video exploring how games render fur.
infinitely destructible volumetrics
showcase
sdf is only at generating regular shapes like the planet as a sphere. A volumetric data is extracted from the sdf shapes at some resolution depending on how much detail is needed. Then boolean operations (such as subtract, union, etc,) is done at the volumetrics, and can be done infinitely since there is no need to keep track of previous operations as you would in sdf only.
3rd Person Shooter
showcase
A third person shooter game. This video showcases some development content, including character movement, animation, ray detection, and shooting effects.
boids!
showcase
Very cool to have several hundred boids in debug build, without paying any mind yet to optimization.
Crates
New releases to crates.io and substantial updates to existing projects
Shadplay for Bevy 0.13
crate_release
Real-time wgsl visualisation tooling for educating oneself in the art of shader programming
bevy_third_person_camera 0.1.1
crate_release
Now there are basic WASD & sprint movement controls if you add the ThirdPersonController::default()
component alongside your ThirdPersonCameraTarget
component
Foxtrot for Bevy 0.13
crate_release
"Foxtrot, the all-in-one 3D game template for desktop" gets its Bevy 0.13 update. This is a heavier game template repo forked from NiklasEi/bevy_game_template aimed at making 3d games.
bevy_water
crate_release
bevy_water got its Bevy 0.13 update, with a small caveat. The time global was removed from vertex shaders in 0.13, so we really need 0.13.1 for that fix to be released.
bevy_simple_text_input 0.5.0
crate_release
bevy_simple_text_input
is an unambitious single-line text input widget for bevy_ui. At just under 500 lines of code, this may be bevy_simple_text_input
's last batch of features. New features are shown off in the new value example
bevy_ratatui 0.1!
crate_release
bevy_ratatui
turns Bevy into a terminal and draws to it! ... and its wasm compatible!.
bevy_flowfield_tiles_plugin 0.8
crate_release
A pathfinding library using vector fields (fluid mechanic stuffs) inspired by the likes of Supreme Commander, Beyond All Reason and the works of Elijah Emerson, leifnode and jdxdev.
bevy_save for Bevy 0.13
crate_release
bevy_save
enables you to easily save and load your entire game state, including resources.
bevy_simple_scroll_view first release!
crate_release
Simple to use plugin implementing ScrollView into Bevy engine. Supports scroll using dragging and scrolling, should work on all platforms.
leafwing_input_playback 0.5
crate_release
A straightforward but robust input capture and playback crate for Bevy: supports gamepads, mice and keyboards with both time and frame inputs.
This crate is designed for testing (especially of UI), but you could probably use it for TAS support or weird art games?
note: TAS means "Tool Assisted Speedrun".
bevy_cobweb first release!
crate_release
bevy_cobweb
is a general-purpose reactivity framework for Bevy.
Features:
- Manually run systems with SystemCommands.
- React to ECS mutations: resource mutations, component insertions/mutations/removals, entity despawns.
- React to events: broadcasted events and entity-targeted events.
- Send data directly to systems with system events.
- Write recursive system commands/system events/reactions.
bevy_collider_gen 0.1.0
crate_release
bevy_rapier_collider_gen has undergone a transformation and is now simply... bevy_collider_gen 😄
bevy_collider_gen
is a library for generating bevy_rapier2d colliders, for bevy apps, from images with transparency.
rapier and bevy_xpbd are now supported!
bevy_serde_project first release!
crate_release
Stateful pretty serialization for the bevy engine.
Features:
- Treats Entity, its Components and Children as a single serde object
- Fetches data from the world during serialization, which allows you to, among other things, serialize Handles
- Supports every serde format.
- Larps as typetag, especially for wasm.
bevy-yoleck 0.19
crate_release
Yoleck - Your Own Level Editor Creation Kit - has been updated for Bevy 0.13. Yoleck is enables a Bevy app to act as its own level editor. The same executable can launch in either game mode or editor mode
Devlogs
vlog style updates from long-term projects
Operation Deep Freeze
devlog
Operation Deep Freeze is a hardcore FPS extraction-based looter/shooter based in Antarctica.
They're using Blender as an editor using the Blender_bevy_components_workflow approach and rapier3d for physics.
They have an additional post about why they chose Bevy (reddit).
switching from 0.11 to 0.12 was done in 4 hours for me, and switching from 0.12 to 0.13 was done in 1.5 hrs
Added `add_group` to `PluginGroupBuilder` authored by bushrat011899
Fix WebGL not rendering `StandardMaterial` authored by janhohenheim
Early-exit bloom node if `intensity == 0.0` authored by SludgePhD
Made `bevy_color` a dependency of `bevy_render` authored by bushrat011899
Cleanup: Use Parallel in extract_meshes authored by james7132
Reflect `GizmoConfigStore` authored by SludgePhD
Check `cfg` during CI and fix feature typos authored by eerii
Simplified `bevy_color` `Srgba` hex string parsing authored by afonsolage
Add a way to get a strong handle from an AssetId authored by nicopap
Prefer `UVec2` when working with texture dimensions authored by CptPotato
Normalise root path in file_watcher authored by theon
Increase 3D Lighting example's light intensity authored by BD103
Update docstrings for some Commands to use the correct type authored by cBournhonesque
Fixed iOS documentation typo for xcrun command authored by JoshuaSchlichting
Run the multi-threaded executor at the end of each system task. authored by chescock
Make Gilrs a normal resource on non-Wasm targets authored by james7132
sort alpha masked pipelines by pipeline & mesh instead of by distance authored by Elabajaba
Implements conversion from `SystemId` to `Entity` authored by porkbrain
Port `bevy_core_pipeline` to `LinearRgba` authored by alice-i-cecile
`bevy_color`: Added `Hsva` and `Hwba` Models authored by bushrat011899
make gizmo groups ordering stable when rendering authored by mockersf
Add random shader utils, fix cluster_debug_visualization authored by JMS55
Remove custom window size from `flex_layout` example authored by rparrett
Remove the UpdateAssets and AssetEvents schedules authored by james7132
reflect: treat proxy types correctly when serializing authored by soqb
Add `typos` - Source code spell checker authored by ameknite
Use immutable key for `HashMap` and `HashSet` authored by tguichaoua
Use `spawn_batch` in `many_lights` example authored by BD103
Add Archetype::component_count authored by AxiomaticSemantics
Fix `CameraProjectionPlugin` not implementing `Plugin` in some cases authored by doonv
Fix typos authored by alice-i-cecile
Added reflect support for std::HashSet, BTreeSet and BTreeMap. authored by mintlu8
Make `TemporalJitter` and `MipBias` reflectable authored by SludgePhD
Add to_bits and from_bits functions to `AssetIndex` authored by TheRawMeatball
`bevy_color`: Add `Laba` to support Lab Color Model authored by bushrat011899
Impl ShaderType for LinearRgba authored by IceSentry
Improve lighting in more examples authored by BD103
Add `Direction3dA` and move direction types out of `primitives` authored by Jondolf
Use LinearRgba in `bevy_gizmos` internals authored by alice-i-cecile
Add methods to directly load assets from World authored by nicopap
Remove unnecessary `impl_reflect_for_btree_map` macro authored by chompaa
examples/ecs/iter_combinations: Initialize velocity using fixed timestep authored by IWonderWhatThisAPIDoes
Define a prelude for bevy_color, and add it to bevy_internal authored by alice-i-cecile
Replace `FromWorld` requirement on `ReflectResource` and reflect `Resource` for `State<S>` authored by SkiFire13
compute shader game of life example: use R32Float instead of Rgba8Unorm authored by mockersf
CI: run long tasks on new macOS runners authored by mockersf
Remove downcast-rs as a dependency from bevy_ecs authored by james7132
`bevy_color`: Added Color Conversion Mermaid Diagram authored by bushrat011899
Rename `Direction2d/3d` to `Dir2/3` authored by Jondolf
add cancel in progress support to automated CI checks authored by lee-orr
`bevy_color::Color` convenience methods authored by alice-i-cecile
Add Grid gizmos authored by solis-lumine-vorago
add note about unloading assets from ram in wasm authored by mockersf
`bevy_color`: Add Oklch Color Space authored by bushrat011899
Re-export `basic` color palette via `css` color palette authored by alice-i-cecile
Register `fxaa::Sensitivity` and derive `Debug` authored by SludgePhD
Add a colon to error message link authored by BD103
Cubic splines overhaul authored by JohnTheCoolingFan
Add tinting to the border in `ui_texture_slice` example authored by rparrett
ui materials respect target camera authored by robtfm
Make sysinfo diagnostic plugin optional authored by AxiomaticSemantics
`bevy_color`: Add `sequence_dispersed` to `Hsla`, `Lcha`, `Oklcha` authored by bushrat011899
include links in error messages authored by tomara-x
Add an index argument to parallel iteration helpers in bevy_tasks authored by msvbg
Calculate AABBs to enable text2d culling authored by Kanabenki
minor oklab/oklch doc nitpicks authored by Gingeh
Migrate from `LegacyColor` to `bevy_color::Color` authored by alice-i-cecile
configure_surface needs to be on the main thread on iOS authored by mockersf
Avoid panicking with non-UI nodes authored by SludgePhD
bloom: use emissive instead of base_color for emissive authored by mockersf
Add coordinate axes gizmo authored by mweatherley
Update cargo deny authored by ameknite
Various improvements to the `contributors` example authored by rparrett
Build dev docs like docs.rs authored by mockersf
Component Lifecycle Hooks and a Deferred World authored by james-j-obrien
Explicitly run `+nightly` for `-Zcheck-cfg` pass in ci. authored by targrub
Intern mesh vertex buffer layouts so that we don't have to compare them over and over. authored by pcwalton
Add `size` and `physical_size` to `window` authored by hi-names-nat
Move commands module into bevy::ecs::world authored by targrub
PBR: use attenuation instead of base_color for attenuation authored by mockersf
Replace bevy_log's tracing reexport with bevy_utils' authored by james7132
Document instability of Entity's internal representation authored by james7132
Update engine_style_guide with guideline to link to the error code when using bevy engine error codes authored by NoahShomette
Update `wgpu` to v0.19.3 and unpin `web-sys`. authored by xStrom
Replace init_component_info with register_component_hooks authored by james-j-obrien
Add nightly hint to config.toml authored by janhohenheim
Batching: replace GpuArrayBufferIndex::index with a u32 authored by james7132
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
Support wireframes for 2D meshes authored by msvbg
Fix fetching assets in Web Workers authored by allsey87
Add `scale_around_center` method to `BoundingVolume` trait authored by chompaa
Faster query construction authored by Trashtalk217
Gate bevy_utils web-time re-export authored by AxiomaticSemantics
Clarify meaning of 'subset' in transmute_lens doc authored by nicopap
Add an optional `TaskPool` for `MultiThreadedExecutor` authored by afonsolage
Don't panic in the ECS where we know a fetch is valid authored by james7132
bevy palette authored by tomara-x
Alignment API for Transforms authored by mweatherley
Add a way to define and enforce legal state transitions authored by tguichaoua
texture transform: use 2 vec4 (4 Vec2) instead of a mat3x3 (Mat3) authored by mockersf
Get Bevy building for WebAssembly with multithreading authored by kettle11
Add the ability to request a redraw from an external source authored by R081n
Quality-of-life updates for running CI locally authored by mweatherley
Refactor build-templated-pages/features authored by tygyh
Fix winit control flow when re-focusing game authored by thebluefish
Add basic light gizmos authored by Kanabenki
Deprecate `SpriteSheetBundle` and `AtlasImageBundle` authored by benfrankel
fix example lightmaps after color migration authored by mockersf
Gizmo line joints authored by solis-lumine-vorago
update comment on `emissive` field of `StandardMaterial` struct to mention large color channel values authored by bcolloran
`#[reflect(Default)]` for Handle/Mesh2dHandle authored by SludgePhD
Issues Opened this week
Unable to Close Window and Exit Program on Application Shutdown authored by LTstrange
Ui Editable TextBox authored by miketwenty1
Conditionally compile rendering features authored by nicopap
Consider switching to aborting on panic in hot ECS functions authored by james7132
Render world blocking certain ecs developments authored by Trashtalk217
Replace `PositionItem` in bevy_gizmos with a Vec3 authored by alice-i-cecile
[0.13] An orthographic 2d Camera on top of a 3d Perspective Camera - Potential bug with Camera2d ClearColorConfig authored by nerdachse
Document loading texture normals in linear RGB authored by BD103
Fetching assets is broken in web workers authored by allsey87
Performance Issues in WASM Builds When Refocusing in Firefox authored by camblomquist
Add method in BoundingVolume trait to scale the volume relative to its center authored by unknownue
Inconsistency between `Debug` and serialized representation of `Entity` authored by Zeenobit
Provide more guidance for PR-adopters in CONTRIBUTING authored by rparrett
Support triggering the winit render loop from an external source authored by R081n
Maximize distance between exclusive systems authored by james7132
UI `Grid` `Style.grid_template_columns` `GridTrackRepetition::AutoFill` "off by 1" when particular floats passed to `px`, seems float precision related authored by databasedav
keyboard events sometimes will not work authored by tomara-x
Implement missing `From<Quat>` for matrices (get basis from quaternion) authored by Wilker-uwu
Color palettes should be defined in terms of `Color`, not specific color spaces authored by alice-i-cecile
Color's representation as a series of 4 floats is inconsistent authored by alice-i-cecile
Panic with UI hierarchy when no camera is present authored by rparrett
Add an interface for `State` to easily define and enforce legal state transitions authored by maxrdz
Create and use a unified example color palette authored by alice-i-cecile
Refactor access patterns of `UnsafeWorldCell` authored by alice-i-cecile
Weird `MouseMotion` delta-y output authored by woongzeyi
Don't use the polymorphic `Color` enum in components and user-facing config authored by alice-i-cecile
Allow missing assets authored by viridia
Gltf loader should allow custom material substitutions authored by viridia
Multi-pass materials authored by viridia
bevy_gizmos doc tests hang compute when run locally authored by alice-i-cecile
Don't abort CI checks on first error authored by alice-i-cecile
Add `Events::retain` authored by Shatur
Add color animation support authored by alice-i-cecile
Add shader color conversion methods authored by alice-i-cecile
Add hue rotation traits authored by alice-i-cecile
Resizing causes a crash on latest stable Nvidia driver 550 authored by eero-lehtinen
Support for WOFF2 compressed font files authored by SludgePhD
Extended Material breaks when using asset preprocessing authored by RyanSpaker
No convenient way to set default assets through the `AssetServer` authored by SludgePhD
After 0.13 upgrade sometimes mouse clicks are completely missed authored by wilk10
Various examples are incorrectly using `DARK_GRAY` authored by rparrett
Various examples are incorrectly using `GREEN` authored by rparrett
`Oklcha` `with_` methods are inconsistent with other color spaces authored by rparrett
`axes_2d` gizmo authored by Jondolf
Feathering for Gizmo lines authored by SludgePhD
Add resource hooks (and observers) authored by alice-i-cecile
Running nightly cargo in CI can lead to local panics authored by targrub
Add a Bevy-native tool to generate (and bake) global illumination for light maps authored by alice-i-cecile
Use component lifecycle hooks to make `Parent` + `Children` hierarchy code simpler and more robust authored by alice-i-cecile
Unable to create the primary window manually after updating to v0.13 authored by umut-sahin
Command stepping authored by MiniaczQ
`Plane` is confusingly named: it should be renamed and an endless plane mesh primitive added authored by alice-i-cecile
[0.13] split-screen example extended: Fail to render more than two cameras authored by BenedictWilkins
UI element positioning bug updating TargetCamera on cursor transition between Viewports in multi-camera setup authored by StrikeForceZero
"emissive strength" should have a separate field in StandardMaterial, rather than needing large color channel values authored by bcolloran
Improve Components Hooks docs authored by afonsolage
WebGPU examples broken in Safari authored by sjmueller
AsBindGroup derive for ImageSamplerDescriptor in custom Material authored by cornytrace
Weird Warnings on Multiple Windows Window Close authored by DasLixou
Explore background CPU->GPU RenderAsset upload authored by JMS55
The OrthographicProjection has it's default values overriden in Camera2dBundle's default implementation, causing counter-intuitive problems authored by Gaspard--