ClearCoat, new examples, and game updates
2024-05-13
This week in Bevy there are a bunch of new examples added to the repo, new additions to the StandardMaterial
, and more.
Out in the wider ecosystem, we'll see 400,000 entities on a flowfield in the showcases as well as crates for networking, ui, and signals.
On top of that there are game updates from past Bevy jams, card games and more.
ClearCoat
A clear coat is a thin layer of clear-ish material on top of something else, often meant to protect the underlying material. In real life this can mean a clear coat on top of canvas artwork, car paint, soda cans, or lacquer on wood.
Bevy's StandardMaterial
now supports a clearcoat
layer, including when imported from a GLTF using extensions, such as when applying a clearcoat in Blender. Bevy's StandardMaterial
configuration includes the ability to modify strength, roughness, and normal modifiers.
Annulus (Torus) Gizmos
The Annulus primitive now has gizmos and the math/render_primitives
example has been updated accordingly.
New Examples
Repeated texture example
A new example showing off how to load an asset using Bevy's AssetServer
with and without sampler configuration that results in textures being either repeated or the default: filling the space allotted.
Headless Example
A new headless_renderer example shows off how to use Bevy to render a scene and save it to a file without using a window. The example is a bit long but there are comments detailing the more complicated bits and it supports native as well as wasm applications.
Amongst other refactorings, bevy_state was created to encapsulate the newly expanded state infrastructure. The relevant code was pulled out of the ecs crate.
Extrusion
The tracking issue for primitive shapes gains an implementation of extrusion for shapes. Implementations of .area()
and .perimeter()
have moved from the relative primitives to implementations of the new Measured2d
and Measured3d
traits.
Meshing and gizmos for extruded shapes has been left to a future PR.
Showcase
Bevy work from the #showcase channel in Discord and around the internet. Use hashtag #bevyengine.
bevy_reactor color picker
showcase
bevy_reactor
is a framework for fine-grained reactivity in Bevy. This is a demo of a color picker widget implemented using bevy_reactor.
CLRS v2.0!
showcase
This game started as a Bevy jam 3 submission and about a year later, 2.0 is released! There's a whole host of improvements including:
- New graphics
- Smoother gameplay
- Difficulty settings
- Rebalanced gameplay,
- New more functional ui and controls
- Better Performance
Playable on Itch.io
Bevy Bistro scene updates
showcase
The Amazon Lumberyard Bistro scene merged with a bunch of Bevy features including lighting. Relevant assets are linked in the Discord thread and the GitHub repo.
Zoolitaire passes review
showcase
Zoolitaire is a puzzle game that has seen a few releases since its first, and seems to be the driving motivation behind a bunch of bevy/ios integration crates that have been released in the last few weeks.
The game now includes an in-app purchase to unlock the full 100 levels after the first 23 demo levels.
bevy_wireframe first steps
showcase
These images are the first steps towards bevy_wireframe
, which is trying to implement an algorithm from the linked paper: Two methods for antialiased wireframe drawing with hidden line removal
bevy_mesh_terrain_editor
showcase
bevy_mesh_terrain_editor
is an experimental editor targeted at supporting bevy_mesh_terrain
. This is a screenshot of what it looks like.
Jarl Gameplay
showcase
Jarl: A Fantasy Colony Builder built with bevy_magic_light_2d shared some gameplay from their latest build.
Empire building game on a hex grid
showcase
This demo takes advantage of a number of crates in the ecosystem to build a hex-based empire building game.
- First, hexx's latest features allow for custom terrain mesh creation and improved piece movement. The terrain is influenced by temperature and the presence of rain.
bevy_mod_outline
powers every object's outline- The camera is powered by
bevy_rts_camera
bevy_mod_scripting
powers an interface built on top of Bevy's own UI.
As for the game itself, the plan is to make a grand strategy game in the vein of CK3 and Total War, set in an early bronze age level fantasy world
tomara-x/quartz
showcase
This is a visual programming and dsp playground. The YouTube video is definitely worth checking out, since this is an audio based demo.
Source is available on GitHub
Crates
New releases to crates.io and substantial updates to existing projects
bevy_lunex alpha
crate_release
bevy_lunex is a path (as in: "filepath") based retained layout engine for Bevy entities, built around vanilla Bevy ECS. IT is library is intended to replace the existing bevy_ui crate, but nothing is stopping you from using them both at the same time. For the alpha a bunch of major changes have been made:
- Completely rewritten from scratch
- ECS friendly now (define UI as components)
- 2D & 3D support (3D still needs to be more tested)
- Custom mod_picking backend
- Events as callbacks for interactivity
- 9 Stackable UI units, with impl add for each other
Bevy Replicon 0.25.0
crate_release
bevy_replicon
is a crate for server-authoritative networking. Notable for this release is a focus on supporting crates building on top of bevy_replicon
, such as bevy_bundlication
.
Additionally, users can now define replication rules similar to queries. Transform
and Player
components will be replicated only if both present on an entity.
app.replicate_group::<(Transform, Player)>()
seldom_pixel 0.6
crate_release
seldom_pixel
is a plugin for limited color palette pixel art games.
The major change in 0.6 is the replacement of bevy_ecs_tilemap
integration with a built-in tilemap solution.
Devlogs
vlog style updates from long-term projects
Broken Spirit devlog
devlog
A short video detailing the state of "Broken Spirit", an early-stage rpg.
Educational
Tutorials, deep dives, and other information on developing Bevy applications, games, and plugins
Processing Texture atlases in-Bevy
educational
This post covers loading a bunch of separate images using bevy_asset_loader, then turning those into a TextureAtlas
using Bevy's APIs.
Implement clearcoat per the Filament and the `KHR_materials_clearcoat` specifications. authored by pcwalton
Update compile test to use ui_test 0.23 authored by Brezak
Add `Annulus`-gizmos authored by solis-lumine-vorago
Only create changed buffer if it already exists authored by IceSentry
Example with repeated texture authored by bugsweeper
Doc custom CameraProjection requires use of plugin authored by Zoomulator
Fix unfinished sentence in a comment in asset_settings example authored by MTFT-Games
Remove bevy log's usage of non send resource authored by hymm
Ellipse functions authored by solis-lumine-vorago
Use `Dir3` for local axis methods in `GlobalTransform` authored by ghost
Refactor align example to use `Dir3` random sampling authored by mweatherley
multi_threaded feature rename authored by andristarr
Modulate the emissive texture by the emissive color again. authored by pcwalton
Extrusion authored by solis-lumine-vorago
Rename `bevy_reflect_derive` folder to `derive` authored by BD103
Extract mesh view layouts logic authored by IceSentry
replace std::f32::EPSILON with f32::EPSILON authored by moonlightaria
Make `AssetMetaCheck` a field on the asset plugin authored by Brezak
Clean up 2d render phases authored by IceSentry
Fix the WebGL 2 backend by giving the `visibility_ranges` array a fixed length. authored by pcwalton
Headless renderer example has been added authored by bugsweeper
Finish the work on `try_apply` authored by Brezak
Don't deploy docs when working on a fork authored by BD103
Add `AXES` iterators for `Dir` types authored by mweatherley
bevy_reflect: Remove `ContainerAttributes::merge` authored by MrGVSV
Separate state crate authored by lee-orr
Add color conversions #13224 authored by moonlightaria
bevy_core: Derive useful traits on FrameCount authored by snendev
Remove `ClampColor` authored by bushrat011899
gizmos: take normal of normal on plane 3d before rotation 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
Apply uv transform in the prepass authored by DGriffin91
Refactor command application for more consistency authored by james-j-obrien
Compare screenshots with main on PRs authored by mockersf
12660 progress and small optimization authored by moonlightaria
Don't ignore draw errors authored by IceSentry
Make `bevy_time` optionally depend on `bevy_reflect` authored by juliohq
add tonemapping LUT bindings for sprite and mesh2d pipelines authored by arcashka
More gizmos builders authored by solis-lumine-vorago
bevy_reflect: Reflection diffing authored by MrGVSV
Refactor CI tool and drop xshell dependency. authored by Brezak
Make render phases render world resources instead of components. authored by pcwalton
Check docs.rs metadata in CI authored by BD103
Update release workflow pr body authored by Brezak
Improvement of AssetServer::load documentation to help find a way to load from file with hash in filename authored by bugsweeper
bevy_asset: Add missing web-sys feature and cleanup unused ones authored by snendev
Add `cargo ci` alias for `ci` tool authored by BD103
Fix incorrect workgroupBarrier and OOB array access in auto_exposure authored by Kurble
Implement Color Operations for `Color` authored by bushrat011899
Fix `asset-source-website.patch` line number authored by BD103
Implement images with layout for TextureAtlasBuilder authored by s-puig
Specify units in `AmbientLight::brightness` docs authored by BD103
Add copy, clone, and debug derives to cubic spline structs authored by aristaeus
disable gpu preprocessing without SAMPLED_TEXTURE_AND_STORAGE_BUFFER_ARRAY_NON_UNIFORM_INDEXING authored by mockersf
State example authored by moonlightaria
bevy_reflect: Nested `TypeInfo` getters authored by MrGVSV
bevy_reflect: `TypeInfo` casting methods authored by MrGVSV
Add `Distribution` access methods for `ShapeSample` trait authored by mweatherley
Add simple preferences API authored by aevyrie
Support operations for render layers authored by JoJoJet
Ci quiet #12318 authored by moonlightaria
#12502 Remove limit on RenderLayers. authored by tychedelia
Issues Opened this week
Make `bevy_time` optionally depend on `bevy_reflect` authored by notmd
Removing image crate from wasm builds authored by valaphee
Mesh2d improvements tracking issues authored by IceSentry
`PlaneMeshBuilder` should include a configurable amount of subdivision for the mesh authored by EmiOnGit
Remove `check-cfg` when Rust 1.80 is released authored by BD103
transmission renders black on macOS authored by mockersf
`ci setup` command authored by BD103
Phantom key presses on window focus change (alt+tab, etc) authored by hut
Weird Rendering Order authored by itsmeagainlamo
`init_gizmo_group` silently ignores missing `RenderApp` if in wrong order authored by RubenArtmann
Not a precise copy of the texture Image authored by itsmeagainlamo
Some KTX2 Images fail to load authored by DGriffin91
OwningPtr should impl From<Box<T>> authored by dmyyy
Add a standardized way to track simulation time for interoperability authored by NiseVoid
game_menu example took 93% of cpu authored by adals
Bevy Preferences API authored by viridia
KHR_lights_punctual spot light range not interpeted correctly authored by DGriffin91
Lights with radius overlapping with mesh result in sharp specular cutoff authored by DGriffin91
9-Slices don't update when using RenderAssetUsages::RENDER_WORLD authored by s-puig
There should be some kind of error for spawning a scene handle without a `SceneBundle`. authored by mintlu8
`RegularPolygon` should allow `circumradius` to be 0.0 authored by mamekoro
bevy mobile example crashes on Android authored by FabianZeuner
Implement `WorldQuery` and `QueryData` for `Mut` authored by Themayu
Specular from area lights is disproportionately bright authored by DGriffin91