From 80ed6a99d39ec06417c25af1de44df777cc9fd40 Mon Sep 17 00:00:00 2001 From: Carter Anderson Date: Sat, 3 Oct 2020 11:50:00 -0700 Subject: [PATCH 1/2] N14: Bevy Engine --- content/posts/newsletter-014/bevy_logo.png | Bin 0 -> 13762 bytes content/posts/newsletter-014/index.md | 84 +++++++++++++++++++++ 2 files changed, 84 insertions(+) create mode 100644 content/posts/newsletter-014/bevy_logo.png diff --git a/content/posts/newsletter-014/bevy_logo.png b/content/posts/newsletter-014/bevy_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..22508c73cf13ec8b3b65afaafc314b59533c68a0 GIT binary patch literal 13762 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 literal 0 HcmV?d00001 diff --git a/content/posts/newsletter-014/index.md b/content/posts/newsletter-014/index.md index b13fd591e..349e125fb 100644 --- a/content/posts/newsletter-014/index.md +++ b/content/posts/newsletter-014/index.md @@ -66,6 +66,90 @@ If needed, a section can be split into subsections with a "------" delimiter. ## Library & Tooling Updates +### [Bevy Engine][bevy] + +[![bevy logo](bevy_logo.png)](https://bevyengine.org/) + +[Bevy][bevy] is a refreshingly simple data-driven +game engine built in Rust. It is [free and open source][bevy-repo] forever! + +#### **Bevy 0.2 Released** + +This month, thanks to 87 contributors, 174 pull requests, and their +[generous sponsors][bevy-sponsors], **Bevy 0.2** was released. You can view the +[full Bevy 0.2 announcement here][bevy-0-2]. Here are some highlights: + +- **Async Task System**: Bevy now has a brand new async-friendly task system, +which enables the creation of context-specific task pools. For example, you might +have separate pools for compute, IO, networking, etc. This also provides the +flexibility to load balance work appropriately according to work type and/or priority. +Bevy (and a number of other rust game engines and ecs frameworks using rayon) +have received feedback that they were overly cpu hungry / usage was not proportional +to "real" work done. This new task system completely replaces Rayon and the cpu +usage wins were huge! +- **Initial Web Platform Support**: (A subset of) Bevy now runs on the web using +WebAssembly/WASM! Specifically, Bevy apps can run Bevy ECS schedules, react to +input events, create an empty canvas (using winit), and a few other things. This +is a huge first step, but it is important to call out that there are still a +number of missing pieces, such as 2D/3D rendering, multi-threading, and sound. +- **Parallel Queries**: Bevy ECS Queries are a flexible way to retrieve data from +the Entity Component System. Systems that use queries already run in parallel, +but before this change the queries themselves could not be iterated in parallel. +Bevy 0.2 adds the ability to easily iterate queries in parallel, which builds on +top of the new Async Task System. +- **Transform System Rewrite**: Bevy's old transform system used separate +`Translation`, `Rotation`, and `Scale` components as the "source of truth", +which were then synced to a `LocalTransform` component after each update. There +are Good Reasons™ to use this approach, but it created a "lag" between the +calculated LocalTransform and the source components and dataflow between components +is hard to reason about. This problem was resolved by making a newer, simpler +transform system that uses a consolidated `Transform` type. +- **Joystick/Gamepad Input**: The Bevy Input plugin now has cross-platform support +for most controllers thanks to the gilrs library! +- **Bevy ECS Performance Improvements**: + - *Generational Entity IDs*: Entity IDs have changed from being UUIDs to incrementing + generational indices. Random UUIDs were nice because they could be created anywhere, + were unique across game runs, and could be safely persisted to files or reused + across networks. Unfortunately they ended up being too slow relative to the alternatives. + The randomness had a measurable cost and entity locations had to be looked up + using a hash map. + - *Read Only Queries*: A "read only" trait was implemented for queries that + don't mutate anything. This allows Bevy to guarantee that a query won't mutate + anything. + - *Lock-Free World Apis*: This gave a really nice speed boost. World APIs are + still safe due to a combination of the new "read only queries" and changing + World mutation apis to be a mutable World borrow. + - *Direct Component Lookup*: As a result of the changes above, direct component + lookup is about 4x faster than it used to be! + +#### **Community Plugin Updates** + +- **[bevy_rapier](https://github.com/dimforge/bevy_rapier)**: Rapier Physics' +official Bevy plugin was updated to support Bevy 0.2 +- **[bevy_ninepatch](https://crates.io/crates/bevy_ninepatch)**: Display 9-Patch +UI elements, where you can specify how different parts of a PNG should grow +- **[bevy_mod_picking](https://github.com/aevyrie/bevy_mod_picking)**: 3d cursor +picking and highlighting +- **[bevy_contrib_colors](https://crates.io/crates/bevy_contrib_colors)**: A +simple color library +- **[bevy_input_map](https://crates.io/crates/bevy_prototype_input_map)**: Converts +user inputs from different input hardware into game specific actions. Ex: keyboard +"Space" or joystick "A" can be mapped to a "Jump" Action. +- **[bevy_prototype_lyon](https://github.com/Nilirad/bevy_prototype_lyon)**: Draw +2D shapes, like triangles, circles, and beziers +- **[bevy_contrib_inspector](https://github.com/jakobhellermann/bevy-contrib-inspector)**: +Visually edit fields of your bevy resources in a browser or native view. + +_Discussions: +[/r/rust](https://www.reddit.com/r/rust/comments/iw1yyp/bevy_02), +[hacker news](https://news.ycombinator.com/item?id=24530698), +[twitter](https://twitter.com/cart_cart/status/1307445918535315456)_ + +[bevy]: https://bevyengine.org +[bevy-repo]: https://github.com/bevyengine/bevy +[bevy-0-2]: https://bevyengine.org/news/bevy-0-2 +[bevy-sponsors]: https://github.com/sponsors/cart + ## Popular Workgroup Issues in Github ## Requests for Contribution From 725ce79aa1f1da5eca84d3b1e22f9bd37c58678d Mon Sep 17 00:00:00 2001 From: Andrey Lesnikov Date: Tue, 6 Oct 2020 13:11:27 +0300 Subject: [PATCH 2/2] N14: Bevy: Style tweaks & trim some details --- content/posts/newsletter-014/index.md | 118 +++++++++++--------------- 1 file changed, 50 insertions(+), 68 deletions(-) diff --git a/content/posts/newsletter-014/index.md b/content/posts/newsletter-014/index.md index 349e125fb..d5152ba0f 100644 --- a/content/posts/newsletter-014/index.md +++ b/content/posts/newsletter-014/index.md @@ -66,82 +66,64 @@ If needed, a section can be split into subsections with a "------" delimiter. ## Library & Tooling Updates -### [Bevy Engine][bevy] +### [Bevy Engine v0.2][bevy-0-2] -[![bevy logo](bevy_logo.png)](https://bevyengine.org/) +[![bevy logo](bevy_logo.png)][bevy] -[Bevy][bevy] is a refreshingly simple data-driven -game engine built in Rust. It is [free and open source][bevy-repo] forever! - -#### **Bevy 0.2 Released** +[Bevy][bevy] is a refreshingly simple data-driven game engine built in Rust. +It is [free and open source][bevy-repo] forever! This month, thanks to 87 contributors, 174 pull requests, and their -[generous sponsors][bevy-sponsors], **Bevy 0.2** was released. You can view the +[generous sponsors][bevy-sponsors], Bevy 0.2 was released. You can view the [full Bevy 0.2 announcement here][bevy-0-2]. Here are some highlights: -- **Async Task System**: Bevy now has a brand new async-friendly task system, -which enables the creation of context-specific task pools. For example, you might -have separate pools for compute, IO, networking, etc. This also provides the -flexibility to load balance work appropriately according to work type and/or priority. -Bevy (and a number of other rust game engines and ecs frameworks using rayon) -have received feedback that they were overly cpu hungry / usage was not proportional -to "real" work done. This new task system completely replaces Rayon and the cpu -usage wins were huge! -- **Initial Web Platform Support**: (A subset of) Bevy now runs on the web using -WebAssembly/WASM! Specifically, Bevy apps can run Bevy ECS schedules, react to -input events, create an empty canvas (using winit), and a few other things. This -is a huge first step, but it is important to call out that there are still a -number of missing pieces, such as 2D/3D rendering, multi-threading, and sound. -- **Parallel Queries**: Bevy ECS Queries are a flexible way to retrieve data from -the Entity Component System. Systems that use queries already run in parallel, -but before this change the queries themselves could not be iterated in parallel. -Bevy 0.2 adds the ability to easily iterate queries in parallel, which builds on -top of the new Async Task System. -- **Transform System Rewrite**: Bevy's old transform system used separate -`Translation`, `Rotation`, and `Scale` components as the "source of truth", -which were then synced to a `LocalTransform` component after each update. There -are Good Reasons™ to use this approach, but it created a "lag" between the -calculated LocalTransform and the source components and dataflow between components -is hard to reason about. This problem was resolved by making a newer, simpler -transform system that uses a consolidated `Transform` type. -- **Joystick/Gamepad Input**: The Bevy Input plugin now has cross-platform support -for most controllers thanks to the gilrs library! -- **Bevy ECS Performance Improvements**: - - *Generational Entity IDs*: Entity IDs have changed from being UUIDs to incrementing - generational indices. Random UUIDs were nice because they could be created anywhere, - were unique across game runs, and could be safely persisted to files or reused - across networks. Unfortunately they ended up being too slow relative to the alternatives. - The randomness had a measurable cost and entity locations had to be looked up - using a hash map. - - *Read Only Queries*: A "read only" trait was implemented for queries that - don't mutate anything. This allows Bevy to guarantee that a query won't mutate - anything. - - *Lock-Free World Apis*: This gave a really nice speed boost. World APIs are - still safe due to a combination of the new "read only queries" and changing - World mutation apis to be a mutable World borrow. - - *Direct Component Lookup*: As a result of the changes above, direct component - lookup is about 4x faster than it used to be! - -#### **Community Plugin Updates** - -- **[bevy_rapier](https://github.com/dimforge/bevy_rapier)**: Rapier Physics' -official Bevy plugin was updated to support Bevy 0.2 -- **[bevy_ninepatch](https://crates.io/crates/bevy_ninepatch)**: Display 9-Patch -UI elements, where you can specify how different parts of a PNG should grow -- **[bevy_mod_picking](https://github.com/aevyrie/bevy_mod_picking)**: 3d cursor -picking and highlighting -- **[bevy_contrib_colors](https://crates.io/crates/bevy_contrib_colors)**: A -simple color library -- **[bevy_input_map](https://crates.io/crates/bevy_prototype_input_map)**: Converts -user inputs from different input hardware into game specific actions. Ex: keyboard -"Space" or joystick "A" can be mapped to a "Jump" Action. -- **[bevy_prototype_lyon](https://github.com/Nilirad/bevy_prototype_lyon)**: Draw -2D shapes, like triangles, circles, and beziers -- **[bevy_contrib_inspector](https://github.com/jakobhellermann/bevy-contrib-inspector)**: -Visually edit fields of your bevy resources in a browser or native view. +- Async Task System: Bevy now has a brand new async-friendly task system, + which enables the creation of context-specific task pools. For example, you might + have separate pools for compute, IO, networking, etc. This also provides the + flexibility to load balance work appropriately according to work type and/or priority. + This new task system completely replaces Rayon and the cpu usage wins were huge! +- Initial Web Platform Support: (A subset of) Bevy now runs on the web using + WebAssembly/WASM! Specifically, Bevy apps can run Bevy ECS schedules, react to + input events, create an empty canvas (using winit), and a few other things. This + is a huge first step, but it is important to call out that there are still a + number of missing pieces, such as 2D/3D rendering, multi-threading, and sound. +- Parallel Queries: Systems that use queries already run in parallel, + but before this change the queries themselves could not be iterated in parallel. + Bevy 0.2 adds the ability to easily iterate queries in parallel, which builds on + top of the new Async Task System. +- Transform System Rewrite: Bevy's old transform system used separate + `Translation`, `Rotation`, and `Scale` components as the "source of truth", + which were then synced to a `LocalTransform` component after each update. There + are Good Reasons™ to use this approach, but it created a "lag" between the + calculated LocalTransform and the source components and dataflow between components + is hard to reason about. This problem was resolved by making a newer, simpler + transform system that uses a consolidated `Transform` type. +- Joystick/Gamepad Input: The Bevy Input plugin now has cross-platform support + for most controllers thanks to the gilrs library! +- Bevy ECS Performance Improvements: generational entity IDs, + read-only queries, lock-free world APIs, direct component lookup. + +Community plugin updates: + +- [bevy_rapier](https://github.com/dimforge/bevy_rapier): + Rapier Physics' official Bevy plugin was updated to support Bevy 0.2. +- [bevy_ninepatch](https://crates.io/crates/bevy_ninepatch): + Display 9-Patch UI elements, where you can specify how + different parts of a PNG should grow. +- [bevy_mod_picking](https://github.com/aevyrie/bevy_mod_picking): 3d cursor + picking and highlighting. +- [bevy_contrib_colors](https://crates.io/crates/bevy_contrib_colors): + A simple color library. +- [bevy_input_map](https://crates.io/crates/bevy_prototype_input_map): + Converts user inputs from different input hardware into game specific actions. + Ex: keyboard "Space" or joystick "A" can be mapped to a "Jump" Action. +- [bevy_prototype_lyon](https://github.com/Nilirad/bevy_prototype_lyon): + Draw 2D shapes, like triangles, circles, and beziers. +- [bevy_contrib_inspector](https://github.com/jakobhellermann/bevy-contrib-inspector): + Visually edit fields of your bevy resources in a browser or native view. _Discussions: -[/r/rust](https://www.reddit.com/r/rust/comments/iw1yyp/bevy_02), +[/r/rust](https://reddit.com/r/rust/comments/iw1yyp/bevy_02), [hacker news](https://news.ycombinator.com/item?id=24530698), [twitter](https://twitter.com/cart_cart/status/1307445918535315456)_