@@ -32,6 +32,7 @@ Feel free to send PRs about your own projects!
32
32
33
33
Table of contents:
34
34
35
+ - [ Last Call for Rust GameDev Survey] ( #last-call-for-rust-gamedev-survey )
35
36
- [ Game Updates] ( #game-updates )
36
37
- [ Learning Material Updates] ( #learning-material-updates )
37
38
- [ Library & Tooling Updates] ( #library-tooling-updates )
@@ -61,12 +62,270 @@ _Discussions:
61
62
If needed, a section can be split into subsections with a "------" delimiter.
62
63
-->
63
64
65
+ ## Last Call for [ Rust GameDev Survey] [ survey ]
66
+
67
+ Our annual [ Rust Game Development Ecosystem Survey] [ survey ] will be closed
68
+ on Sunday at the end of this week, 6. December 2020.
69
+ It'll only take 10 minutes, and your responses help us
70
+ better understand the state of our ecosystem and where we
71
+ should try to focus our collective efforts.
72
+
73
+ [ survey ] : https://surveymonkey.com/r/F2JYRFF
74
+
64
75
## Game Updates
65
76
77
+ ### [ A/B Street] [ abstreet ]
78
+
79
+ ![ 15 minute tool] ( abstreet.png )
80
+
81
+ [ A/B Street] [ abstreet ] is a traffic simulation game exploring how small changes
82
+ to roads affect cyclists, transit users, pedestrians, and drivers. Any city
83
+ with OpenStreetMap coverage can be used!
84
+
85
+ Some of this month's updates:
86
+
87
+ - started a new tool to explore 15-minute neighborhoods;
88
+ - simpler process for [ importing new cities] [ abstreet-new-cities ] ;
89
+ - large internal refactoring for the GUI and initializing the simulation;
90
+
91
+ [ abstreet ] : https://abstreet.org
92
+ [ abstreet-new-cities ] : https://dabreegster.github.io/abstreet/howto/new_city.html
93
+
94
+ ### FBSim
95
+
96
+ ![ FBSim initial version] ( fbsim.png )
97
+ _ FBSim running with default agents._
98
+
99
+ [ FBSim] by [ Ian Tayler] is a football/soccer game where you program the
100
+ players using Rust and try to beat a team controlled by another AI.
101
+
102
+ You can follow the [ tutorial] for implementing your own simple AI for FBSim,
103
+ or you can look at the code directly, which can be found on the
104
+ [ github repo] . FBSim is at an early stage of development so issues and
105
+ comments are welcome!
106
+
107
+ _ Discussions:
108
+ [ /r/rust_gamedev] ( https://reddit.com/r/rust_gamedev/comments/jz4x1f/fbsim/ ) _
109
+
110
+ [ FBSim ] : https://github.com/IanTayler/fbsim
111
+ [ github repo ] : https://github.com/IanTayler/fbsim
112
+ [ Ian Tayler ] : https://iantayler.com
113
+ [ tutorial ] : https://iantayler.com/2020/11/22/fbsim-football-playing-ai-agents-in-rust/
114
+
66
115
## Learning Material Updates
67
116
117
+ ### [ ECS scheduler thoughts, part 1]
118
+
119
+ [ @Ratys ] wrote an article about system schedulers in [ ECS] . It contains
120
+ an overview of the scheduling problem itself, covers the constraints a solution
121
+ to it should consider, and dissects schedulers of [ Bevy] engine and [ ` yaks ` ] as
122
+ examples.
123
+
124
+ [ ECS scheduler thoughts, part 1 ] : https://ratysz.github.io/article/scheduling-1/
125
+ [ @Ratys ] : https://twitter.com/ratysz
126
+ [ ECS ] : https://en.wikipedia.org/wiki/Entity_component_system
127
+ [ Bevy ] : https://bevyengine.org/
128
+ [ `yaks` ] : https://crates.io/crates/yaks
129
+
130
+ ### [ Chess game in Rust using Bevy]
131
+
132
+ ![ Tutorial result] ( bevy_chess.gif )
133
+ _ Chess gameplay_
134
+
135
+ [ @guimcaballero ] published a tutorial on using Bevy 0.3 to make a Chess clone in
136
+ 3d. Most of the concepts are explained along the way, from how to load meshes to
137
+ how to select pieces and board squares, using [ bevy_mod_picking] .
138
+
139
+ [ Chess game in Rust using Bevy ] : https://caballerocoll.com/blog/bevy-chess-tutorial/
140
+ [ @guimcaballero ] : https://twitter.com/guimcaballero
141
+ [ bevy_mod_picking ] : https://github.com/aevyrie/bevy_mod_picking/
142
+
143
+ ### [ Learn Wgpu] [ learn-wgpu ]
144
+
145
+ Development of new tutorial content has slowed down due to wgpu still being in
146
+ development. [ @sotrh ] has committed to continue maintaining the project through
147
+ the comming version changes, and plans to add more new content when the API
148
+ solidifies. He with the help of other contributors such as GitHub user
149
+ [ @kanerogers ] worked through a series of issues to polish the repository before
150
+ the content freeze.
151
+ In addition to that he added a [ compute pipeline showcase] [ learn-wgpu-compute ]
152
+ and an [ imgui showcase] [ learn-wgpu-imgui ] .
153
+
154
+ In other news @sotrh has started a [ Patreon] [ @sotrh ] to help fund research
155
+ and development on the Learn Wgpu site as well as other wgpu related projects.
156
+
157
+ You can learn more [ on the Learn Wgpu news page] [ learn-wgpu-news ] .
158
+
159
+ [ learn-wgpu ] : https://sotrh.github.io/learn-wgpu
160
+ [ learn-wgpu-compute ] : https://sotrh.github.io/learn-wgpu/showcase/compute
161
+ [ learn-wgpu-imgui ] : https://sotrh.github.io/learn-wgpu/showcase/imgui-demo
162
+ [ learn-wgpu-news ] : https://sotrh.github.io/learn-wgpu/news
163
+ [ @sotrh ] : https://patreon.com/sotrh
164
+ [ @kanerogers ] : https://github.com/kanerogers
165
+
68
166
## Library & Tooling Updates
69
167
168
+ ### [ profiling]
169
+
170
+ This month, [ profiling] was released on crates.io. This crate provides a very
171
+ thin abstraction over instrumented profiling crates like ` puffin ` , ` optick ` ,
172
+ ` tracy ` , and ` superluminal-perf ` .
173
+
174
+ Mark up your code like this:
175
+
176
+ ``` rust
177
+ #[profiling:: function]
178
+ fn some_function () {
179
+ burn_time (5 );
180
+
181
+ for i in 0 .. 5 {
182
+ profiling :: scope! (" Looped Operation" );
183
+ burn_time (1 );
184
+ }
185
+ }
186
+ ```
187
+
188
+ And get visualizations like this (` optick ` and ` puffin ` shown):
189
+
190
+ [ ![ Screenshot of Optick Profiler] ( optick-small.png )] ( optick.jpeg )
191
+
192
+ [ profiling ] : https://crates.io/crates/profiling
193
+
194
+ ### [ rkyv]
195
+
196
+ [ rkyv] is a zero-copy deserialization framework for Rust. It's similar to
197
+ FlatBuffers and Cap'n Proto and can be used for data storage and messaging.
198
+
199
+ It has a handful of features that make it stand out:
200
+
201
+ - No schema restrictions
202
+ - HashMap support out of the box
203
+ - Trait object support through the [ ` rkyv_dyn ` ] crate
204
+ - Validation through the [ ` bytecheck ` ] crate, suitable for untrusted and
205
+ potentially malicious data
206
+ - Safe mutable archives with pinning
207
+
208
+ Reddit user [ vlmutolo] also made a [ toy benchmark] comparing rkyv against serde
209
+ and bincode and found that rkyv had promising initial numbers:
210
+
211
+ ``` text
212
+ serialize (bincode): 89 ns/iter
213
+ serialize (rkyv): 86 ns/iter
214
+
215
+ deserialize (bincode): 118 ns/iter
216
+ deserialize (rkyv): 16 ns/iter
217
+ ```
218
+
219
+ A write-up on the [ architecture and internals of rkyv] is also available.
220
+
221
+ _ Discussions:
222
+ [ /r/rust (v0.1)] ( https://www.reddit.com/r/rust/comments/jss6h4/rkyv_a_zerocopy_deserialization_framework_for_rust/ ) ,
223
+ [ /r/rust (v0.2)] ( https://www.reddit.com/r/rust/comments/jx32e8/rkyv_02_and_bytecheck_validation_mutable_archives/ ) _
224
+
225
+ [ rkyv ] : https://github.com/djkoloski/rkyv
226
+ [ `rkyv_dyn` ] : https://docs.rs/rkyv_dyn
227
+ [ `bytecheck` ] : https://github.com/djkoloski/bytecheck
228
+ [ vlmutolo ] : https://www.reddit.com/r/rust/comments/jx32e8/rkyv_02_and_bytecheck_validation_mutable_archives/gcyfoqc
229
+ [ toy benchmark ] : https://git.sr.ht/~vlmutolo/rkyv-bench/tree/master/src/main.rs
230
+ [ architecture and internals of rkyv ] : https://davidkoloski.me/blog/rkyv-architecture/
231
+
232
+ ### [ Kira]
233
+
234
+ [ Kira] by [ @tesselode ] is an audio library designed to help create expressive
235
+ audio for games. It aims to fill the holes in many game engines' built-in audio
236
+ APIs with features for creating seamless music loops and scripting audio events.
237
+
238
+ v0.2.0 is coming out soon with an Arrangements feature for creating complex pieces
239
+ out of individual sounds, tween easing, panning support, and workflow improvements.
240
+
241
+ [ Kira ] : https://github.com/tesselode/kira
242
+ [ @tesselode ] : https://twitter.com/tesselode
243
+
244
+ _ Discussions:
245
+ [ /r/rust] ( https://reddit.com/r/rust/comments/jxd9zz/announcing_kira_dynamic_audio_library_for_games/ ) ,
246
+ [ twitter] ( https://twitter.com/tesselode/status/1329559760111357954 ) _
247
+
248
+ ### [ gfx-rs] and [ wgpu]
249
+
250
+ ![ gfx-picture] ( wgpu-big-picture.svg )
251
+
252
+ The gfx-rs team has published a post [ "The Big Picture"] [ gfx-post ] providing
253
+ the overview of all projects in the works, and how they are connected to each other.
254
+
255
+ [ wgpu] has moved from [ gfx-extras] to the new [ gpu-alloc] and [ gpu-descriptor]
256
+ libraries by [ @zakarumych ] . These are backend-agnostic, which allows ` wgpu `
257
+ to now depend on ` gfx-hal ` directly without intermediates. Patching [ gfx-rs]
258
+ will now be easier, without the need to release every little change.
259
+
260
+ Finally, all the latest [ wgpu] code has landed into Gecko, and new
261
+ features and fixes are implemented in Firefox. That allows it to run
262
+ most of the updated [ WebGPU samples] [ wgpu-samples ] .
263
+
264
+ [ gfx-rs ] : https://github.com/gfx-rs/gfx
265
+ [ wgpu ] : https://github.com/gfx-rs/wgpu
266
+ [ gfx-post ] : https://gfx-rs.github.io/2020/11/16/big-picture.html
267
+ [ gfx-extras ] : https://github.com/gfx-rs/gfx-extras
268
+ [ @zakarumych ] : https://github.com/zakarumych
269
+ [ gpu-alloc ] : https://github.com/zakarumych/gpu-alloc
270
+ [ gpu-descriptor ] : https://github.com/zakarumych/gpu-descriptor
271
+ [ wgpu-samples ] : https://austineng.github.io/webgpu-samples
272
+
273
+ ### [ KAS] v0.6 and [ KAS-text] v0.2
274
+
275
+ ![ KAS markdown] ( kas-markdown.png )
276
+ _ Markdown parsing demo_
277
+
278
+ [ KAS] by [ @dhardy ] is a general purpose UI toolkit; its
279
+ initial aim is "old school" desktop apps with good keyboard and touchscreen
280
+ support. Unlike many modern immediate-mode UIs, KAS's widgets retain state,
281
+ allowing minimal per-frame updates. KAS supports embedded WebGPU graphics now,
282
+ and plans to support embedded usage and additional rendering systems.
283
+
284
+ [ KAS-text] v0.2 saw a significant revision to its API, including support for
285
+ rich text (bold, italic, underline, size and some layout improvements).
286
+ [ KAS] v0.6 pulls in those changes and adds a few fixes and QoL improvements.
287
+
288
+ [ KAS ] : https://github.com/kas-gui/kas
289
+ [ KAS-text ] : https://github.com/kas-gui/kas-text
290
+ [ @dhardy ] : https://github.com/dhardy
291
+
292
+ ### [ Tetra]
293
+
294
+ [ Tetra] is a simple 2D game framework, inspired by XNA and Raylib. This month,
295
+ versions 0.5.3 and 0.5.4 were released, with some frequently requested features:
296
+
297
+ - A ` Mesh ` API, allowing users to create arbitary 2D geometry
298
+ - Experimental support for high-DPI rendering
299
+
300
+ There has also been numerous bug fixes and documentation improvements. For full
301
+ details and a list of breaking changes, see the [ changelog] [ tetra-changelog ] .
302
+
303
+ [ tetra ] : https://github.com/17cupsofcoffee/tetra
304
+ [ tetra-changelog ] : https://github.com/17cupsofcoffee/tetra/blob/main/CHANGELOG.md
305
+
306
+ ### [ ogmo3]
307
+
308
+ [ ogmo3] is a Rust crate for parsing projects and levels created with
309
+ [ Ogmo Editor 3] . This month, version 0.1 was released, adding serialization
310
+ support, and helper methods for unpacking layer data. The [ sample code] [ ogmo3-sample ]
311
+ has also been updated to show the new helpers in action.
312
+
313
+ [ ogmo3 ] : https://github.com/17cupsofcoffee/ogmo3
314
+ [ Ogmo Editor 3 ] : https://ogmo-editor-3.github.io/
315
+ [ ogmo3-sample ] : https://github.com/17cupsofcoffee/ogmo3/blob/main/examples/sample.rs
316
+
317
+ ### [ F1 Telemetry TUI]
318
+
319
+ ![ f1-telemetry-tui] ( f1-tui.gif )
320
+
321
+ [ F1 Telemetry TUI] by [ @aldidana ] is a terminal telemetry tool for F1 video games.
322
+
323
+ _ Discussions:
324
+ [ Twitter] ( https://twitter.com/aldidana/status/1323185465319596032 ) _
325
+
326
+ [ F1 Telemetry TUI ] : https://github.com/aldidana/f1-telemetry-tui
327
+ [ @aldidana ] : https://github.com/aldidana
328
+
70
329
### [ bevmnist] [ bevmnist-itch.io ]
71
330
72
331
![ demo of running inferences for all digits] ( bevmnist.gif )
0 commit comments