Skip to content

Commit 783bc0e

Browse files
committed
N14: Bevy Engine
1 parent bd6dac1 commit 783bc0e

File tree

2 files changed

+84
-0
lines changed

2 files changed

+84
-0
lines changed
13.4 KB
Loading

content/posts/newsletter-014/index.md

+84
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,90 @@ If needed, a section can be split into subsections with a "------" delimiter.
6666

6767
## Library & Tooling Updates
6868

69+
### [Bevy Engine][bevy]
70+
71+
[![bevy logo](bevy_logo.png)](https://bevyengine.org/)
72+
73+
[Bevy][bevy] is a refreshingly simple data-driven
74+
game engine built in Rust. It is [free and open source][bevy-repo] forever!
75+
76+
#### **Bevy 0.2 Released**
77+
78+
This month, thanks to 87 contributors, 174 pull requests, and their
79+
[generous sponsors][bevy-sponsors], **Bevy 0.2** was released. You can view the
80+
[full Bevy 0.2 announcement here][bevy-0-2]. Here are some highlights:
81+
82+
- **Async Task System**: Bevy now has a brand new async-friendly task system,
83+
which enables the creation of context-specific task pools. For example, you might
84+
have separate pools for compute, IO, networking, etc. This also provides the
85+
flexibility to load balance work appropriately according to work type and/or priority.
86+
Bevy (and a number of other rust game engines and ecs frameworks using rayon)
87+
have received feedback that they were overly cpu hungry / usage was not proportional
88+
to "real" work done. This new task system completely replaces Rayon and the cpu
89+
usage wins were huge!
90+
- **Initial Web Platform Support**: (A subset of) Bevy now runs on the web using
91+
WebAssembly/WASM! Specifically, Bevy apps can run Bevy ECS schedules, react to
92+
input events, create an empty canvas (using winit), and a few other things. This
93+
is a huge first step, but it is important to call out that there are still a
94+
number of missing pieces, such as 2D/3D rendering, multi-threading, and sound.
95+
- **Parallel Queries**: Bevy ECS Queries are a flexible way to retrieve data from
96+
the Entity Component System. Systems that use queries already run in parallel,
97+
but before this change the queries themselves could not be iterated in parallel.
98+
Bevy 0.2 adds the ability to easily iterate queries in parallel, which builds on
99+
top of the new Async Task System.
100+
- **Transform System Rewrite**: Bevy's old transform system used separate
101+
`Translation`, `Rotation`, and `Scale` components as the "source of truth",
102+
which were then synced to a `LocalTransform` component after each update. There
103+
are Good Reasons™ to use this approach, but it created a "lag" between the
104+
calculated LocalTransform and the source components and dataflow between components
105+
is hard to reason about. This problem was resolved by making a newer, simpler
106+
transform system that uses a consolidated `Transform` type.
107+
- **Joystick/Gamepad Input**: The Bevy Input plugin now has cross-platform support
108+
for most controllers thanks to the gilrs library!
109+
- **Bevy ECS Performance Improvements**:
110+
- *Generational Entity IDs*: Entity IDs have changed from being UUIDs to incrementing
111+
generational indices. Random UUIDs were nice because they could be created anywhere,
112+
were unique across game runs, and could be safely persisteto files or reused across
113+
networks.Unfortunately they ended up being too slow relative to the alternatives.
114+
The randomness had a measurable cost and entity locations had to be looked up
115+
using a hash map.
116+
- *Read Only Queries*: A "read only" trait was implemented for queries that
117+
don't mutate anything. This allows Bevy to guarantee that a query won't mutate
118+
anything.
119+
- *Lock-Free World Apis*: This gave a really nice speed boost. World APIs are
120+
still safe due to a combination of the new "read only queries" and changing
121+
World mutation apis to be a mutable World borrow.
122+
- *Direct Component Lookup*: As a result of the changes above, direct component
123+
lookup is about 4x faster than it used to be!
124+
125+
#### **Community Plugin Updates**
126+
127+
- **[bevy_rapier](https://github.com/dimforge/bevy_rapier)**: Rapier Physics'
128+
official Bevy plugin was updated to support Bevy 0.2
129+
- **[bevy_ninepatch](https://crates.io/crates/bevy_ninepatch)**: Display 9-Patch
130+
UI elements, where you can specify how different parts of a PNG should grow
131+
- **[bevy_mod_picking](https://github.com/aevyrie/bevy_mod_picking)**: 3d cursor
132+
picking and highlighting
133+
- **[bevy_contrib_colors](https://crates.io/crates/bevy_contrib_colors)**: A
134+
simple color library
135+
- **[bevy_input_map](https://crates.io/crates/bevy_prototype_input_map)**: Converts
136+
user inputs from different input hardware into game specific actions. Ex: keyboard
137+
"Space" or joystick "A" can be mapped to a "Jump" Action.
138+
- **[bevy_prototype_lyon](https://github.com/Nilirad/bevy_prototype_lyon)**: Draw
139+
2D shapes, like triangles, circles, and beziers
140+
- **[bevy_contrib_inspector](https://github.com/jakobhellermann/bevy-contrib-inspector)**:
141+
Visually edit fields of your bevy resources in a browser or native view.
142+
143+
_Discussions:
144+
[/r/rust](https://www.reddit.com/r/rust/comments/iw1yyp/bevy_02),
145+
[hacker news](https://news.ycombinator.com/item?id=24530698),
146+
[twitter](https://twitter.com/cart_cart/status/1307445918535315456)_
147+
148+
[bevy]: https://bevyengine.org
149+
[bevy-repo]: https://github.com/bevyengine/bevy
150+
[bevy-0-2]: https://bevyengine.org/news/bevy-0-2
151+
[bevy-sponsors]: https://github.com/sponsors/cart
152+
69153
## Popular Workgroup Issues in Github
70154

71155
## Requests for Contribution

0 commit comments

Comments
 (0)