diff --git a/content/news/041/clicker.png b/content/news/041/clicker.png new file mode 100644 index 000000000..64ac43c00 Binary files /dev/null and b/content/news/041/clicker.png differ diff --git a/content/news/041/cnc.png b/content/news/041/cnc.png new file mode 100644 index 000000000..7bce0fab5 Binary files /dev/null and b/content/news/041/cnc.png differ diff --git a/content/news/041/doome.gif b/content/news/041/doome.gif new file mode 100644 index 000000000..9d4ab2850 Binary files /dev/null and b/content/news/041/doome.gif differ diff --git a/content/news/041/egui.gif b/content/news/041/egui.gif new file mode 100644 index 000000000..65cbe8702 Binary files /dev/null and b/content/news/041/egui.gif differ diff --git a/content/news/041/google-forma.png b/content/news/041/google-forma.png new file mode 100644 index 000000000..a1d8f1703 Binary files /dev/null and b/content/news/041/google-forma.png differ diff --git a/content/news/041/index.md b/content/news/041/index.md index 566e697c5..75a5b4849 100644 --- a/content/news/041/index.md +++ b/content/news/041/index.md @@ -1,7 +1,7 @@ +++ title = "This Month in Rust GameDev #41 - December 2022" transparent = true -date = 2023-01-25 +date = 2023-01-28 draft = false +++ @@ -35,13 +35,9 @@ Feel free to send PRs about your own projects! - [Learning Material Updates](#learning-material-updates) - [Tooling Updates](#tooling-updates) - [Library Updates](#library-updates) -- [Popular Workgroup Issues in Github](#popular-workgroup-issues-in-github) - [Other News](#other-news) -- [Meeting Minutes](#meeting-minutes) - [Discussions](#discussions) - [Requests for Contribution](#requests-for-contribution) -- [Jobs](#jobs) -- [Bonus](#bonus) +### [egui v0.20][egui-twi] + +![Demo of improved tables shows smooth column resizing](egui.gif) + +[egui] is an easy-to-use immediate mode GUI library in pure Rust. + +This month [egui v0.20][egui-twi] was released. Highlights: + +- Support for [AccessKit] vastly improves the accessibility of [eframe] apps + on Windows and Mac. +- Vastly improved tables (see above) for [rerun.io]'s needs. +- Improved wgpu renderer that now allows using egui-wgpu on the web, + with a WebGL backend. +- egui now expects integrations to do all color blending in gamma space. +- Interactive widgets can now be on top of other interactive widgets. + Great for putting floating widgets on top of 3D content, for instance. +- [ecolor] helper lib for all the color conversions needs. +- Helper functions for animating panels that collapse/expand. + +For full details see the [changelog][egui-changelog]. + +[egui]: https://egui.rs +[egui-twi]: https://twitter.com/ernerfeldt/status/1600869756491673600 +[egui-changelog]: https://github.com/emilk/egui/blob/master/CHANGELOG.md#0200---2022-12-08---accesskit-prettier-text-overlapping-widgets +[AccessKit]: https://github.com/AccessKit/accesskit +[eframe]: https://lib.rs/eframe +[rerun.io]: https://rerun.io +[ecolor]: https://docs.rs/ecolor + +### [google/forma][forma] + +[![two screenshots of an asteroids-like game: left is normal, +right shows only tiles that changed from the last frame](google-forma.png) +][forma-demo] + +[forma] by google is a (thoroughly) parallelized experimental +Rust vector-graphics renderer with both a software (CPU) and hardware (GPU) +back-end having the [goals][forma-goals] of portability, performance, simplicity, +and minimal size. +Forma relies on Rust's SIMD auto-vectorization/intrinsics and [Rayon] +to have good performance on the CPU, +while using [WebGPU] ([wgpu]) to take advantage of the GPU. + +A few implementation highlights that make the library stand out +from commonly used vector renderers: + +> - Curvature-aware flattening. +> All higher cubic Béziers are approximated by quadratic ones, then, +> in parallel, flattened to line segments according to their curvature. +> This [technique] was developed by Raph Levien. +> - Cheap translations and rotations. +> Translations and rotations can be rendered without having +> to re-flatten the curves, all the while maintaining full quality. +> - Parallel pixel grid intersection. +> Line segments are transformed into pixel segments by intersecting them +> with the pixel grid. We developed a simple method that performs this computation +> in O(1) and which is run in parallel. +> - Efficient sorting. +> We ported [crumsort] to Rust and parallelized it with Rayon, delivering +> improved performance over its pdqsort implementation for 64-bit random data. +> Scattering pixel segments with a sort was inspired from Allan MacKinnon's work +> on [Spinel]. +> - Update only the tiles that change (currently CPU-only). +> We implemented a fail-fast per-tile optimizer that tries to skip +> the painting step entirely. A similar approach could also be tested on the GPU. + +While Forma is a general-purpose library it can be an interesting building block +for vector-based games and engines (see the [spaceship demo][forma-demo] +from the above image). + +_Discussions: [/r/rust](https://reddit.com/r/rust/comments/znhus1/google_forma)_ + +[forma]: https://github.com/google/forma +[Rayon]: https://github.com/rayon-rs/rayon +[WebGPU]: https://github.com/gpuweb/gpuweb +[wgpu]: https://wgpu.rs/ +[forma-goals]: https://github.com/google/forma#readme +[technique]: https://raphlinus.github.io/graphics/curves/2019/12/23/flatten-quadbez.html +[crumsort]: https://github.com/google/crumsort-rs +[Spinel]: https://cs.opensource.google/fuchsia/fuchsia/+/main:src/graphics/lib/compute/spinel +[forma-demo]: https://github.com/google/forma/blob/681e8bfd3/demo/src/demos/spaceship.rs ## Other News -## Meeting Minutes - - - -[See all meeting issues][label_meeting] including full text notes -or [join the next meeting][join]. - -[label_meeting]: https://github.com/rust-gamedev/wg/issues?q=label%3Ameeting +- Other game updates: + - [Ivy Sly renamed][yomi-rename] their online turn-based fighting game + (and superpowered fight scene simulator) Yomi Hustle + to "Your Only Move Is HUSTLE" due to a trademark infringement; + The game also [got a Steam page][yomi-steam] in preparation + for the upcoming release in February. + - Orlando Valverde published [a new version Pushin' Boxes][pushin-boxes] + that features a level editor. + - [Dustin Carlino shared][ab-street] a retrospective of 2022 + and 2023 plans for the A/B Street project. + - [Paddlepunks got a new parry variation][paddlepunks] to homura that "pauses" + the ball for a bit before reflecting it back harder than the regular parry + - [@ollej released a web playable version][bunner] of the macroquad port + of the Infinite Bunner game. + - [@kuviman released Flashdark][flashdark] - a small first-person horror game + where you see the dark world using your flashdark and solve puzzles + while avoiding the ghost. + - [Fish Folk: Punchy v0.2 was released][punchy]: + Big Bass Boss has a new bomb toss attack, + hitstop on damage application has changed, + the beginnings of support for multiple attacks per fighter and attack chains + are implemented, and players can now wear special hats. + - [Red Life][red-life] is a small game about an astronaut who is trying + to survive in the hostile environment of Mars. + - [@Tantan shared a vlog][tantan-vid] about a bug he had encountered + during adding multiplayer to his voxel game. + - [Life Code shared a vlog][life-code] about making a user interface + using egui with AI assistance. + - [@enigmanark shared a bunch of updates][retrosic2] + about the RetrosicII shmup game. +- Other engine updates: + - [square_wheel] is a pretty advanced FPS-oriented software renderer + for modern CPUs. + - [Anthony Utt] released new vlogs about the [Alkahest] engine progress: + [orthograthic cameras](https://youtube.com/watch?v=eCVLRpJFOTQ), + [transforms, textures, and scenes](https://youtube.com/watch?v=WMIfFA2m9TA), + and [2D render batching](https://youtube.com/watch?v=HEqvKx4ihRU). +- Other learning material updates: + - [Raph gave a talk](https://youtube.com/watch?v=zVUTZlNCb8U) + about the vision for high performance UI implemented in Rust, + and status of the current Xilem effort to build it. + Includes sections on the piet-gpu 2D rendering engine, + integration with AccessKit, and some details of the reactive architecture. + - [PhaestusFox](https://youtube.com/playlist?list=PL6uRoaCCw7GN_lJxpKS3j-KXuThRiSXc6) + has posted more episodes of their 'Bevy Basics' tutorial series. + - [Maciej Główka released a blog post][tut-bevy-load-toml] on nuances of + loading game data from TOML or JSON assets into Bevy-based games. + - Matthew Bryant released another [Bevy Intro Tutorials][bevy-intro-playlist] + YouTube video: ["Compute Shaders in Bevy"](https://youtube.com/watch?v=neyIpnII-WQ). +- Other tooling updates: + - [uCrowds shared a video][ucrowds-sim] of a Rusty crowd simulation engine + compiled to WASM and running a simulation of 150.000 agents in real-time + in a browser. +- Other library updates: + - [devices] is a cross-platform library for retrieving information about + connected devices, supports Linux and Windows. + - [quad-svg] is a small library for rendering + .svg files to [macroquad]'s Texture2D using [resvg]. + - [@MatanLurey] released [mythoji] - a minimal Rust crate that helps to + identify and display fantasy appropriate emojis. + - [durian] is a general purpose client/server networking library that + provides a "thin" abstraction layer on top of the QUIC protocol (using [quinn]) + to make writing netcode extremely simple, automatically taking care of + connection/streams management, byte details, + packet framing/fragmentation/reassembly, parallel sender/receivers, etc. + - [faer] is a collection of crates that implement a low-level API + for linear algebra routines that is somewhat similar to BLAS/Lapack, + but gives more control to users by allowing parallelism + to be specified on a per-call basis. + - [bevy_adventure] is a framework for building adventure games in Bevy + that features GLTF support, multuple scenes with dynamic objects, inventory, + and automatic camera animation. + +[yomi-rename]: https://twitter.com/ivy_sly_/status/1603289612574937092 +[yomi-steam]: https://store.steampowered.com/app/2212330/Your_Only_Move_Is_HUSTLE +[pushin-boxes]: https://twitter.com/septum___/status/1606176677540683776 +[ab-street]: https://a-b-street.github.io/docs/project/history/vision_and_validate +[paddlepunks]: https://twitter.com/sov_gott_games/status/1600958840220299266 +[bunner]: https://hachyderm.io/@ollej/109506591357987042 +[flashdark]: https://twitter.com/kuviman/status/1598410936460738560 +[punchy]: https://twitter.com/spicylobsterfam/status/1600122907572654080 +[red-life]: https://reddit.com/r/rust/comments/zgv101/red_life_surviving_on_mars +[tantan-vid]: https://youtube.com/watch?v=PnwhUeyrQ54 +[life-code]: https://youtube.com/watch?v=miUD9Ni7LnQ +[retrosic2]: https://twitter.com/hashtag/RetrosicII?f=live +[square_wheel]: https://reddit.com/r/rust/comments/zd31kv/squarewheel_software_renderer_video +[Anthony Utt]: https://twitter.com/alkimia_studios +[Alkahest]: https://github.com/AlkimiaStudios/alkahest-rs +[tut-bevy-load-toml]: https://maciejglowka.com/blog/text-based-json-toml-resources-in-bevy-engine +[bevy-intro-playlist]: https://youtube.com/playlist?list=PLT_D88-MTFOPPl75g4WshL1Gx2bnGTUkz +[ucrowds-sim]: https://reddit.com/r/rust_gamedev/comments/zvud5j/ucrowds_150k_agents +[devices]: https://github.com/hankjordan/devices +[quad-svg]: https://github.com/macnelly/quad-svg +[macroquad]: https://github.com/not-fl3/macroquad +[resvg]: https://github.com/RazrFalcon/resvg +[@MatanLurey]: https://twitter.com/MatanLurey +[mythoji]: https://github.com/matanlurey/mythoji +[durian]: https://github.com/spoorn/durian +[quinn]: https://github.com/quinn-rs/quinn +[faer]: https://github.com/sarah-ek/faer-rs +[bevy_adventure]: https://github.com/hankjordan/bevy_adventure ## Discussions +- /r/rust_gamedev: + - ["Can a 2D game be made with rust without a game engine?"](https://reddit.com/r/rust_gamedev/comments/zrdsts/can_a_2d_game_be_made_with_rust_without_engine) + - ["DataFrames instead of ECS?"](https://reddit.com/r/rust_gamedev/comments/zoea0b/what_if_we_use_dataframes) + ## Requests for Contribution -## Jobs - - - -## Bonus - - +- ['Are We Game Yet?' wants to know about projects/games/resources that + aren't listed yet][awgy]. +- [Graphite is looking for contributors][graphite-contribute] to help build the + new node graph and 2D rendering systems. +- [winit's "difficulty: easy" issues][winit-issues]. +- [Backroll-rs, a new networking library][backroll-rs]. +- [Embark's open issues][embark-open-issues] ([embark.rs]). +- [wgpu's "help wanted" issues][wgpu-issues]. +- [luminance's "low hanging fruit" issues][luminance-fruits]. +- [ggez's "good first issue" issues][ggez-issues]. +- [Veloren's "beginner" issues][veloren-beginner]. +- [A/B Street's "good first issue" issues][abstreet-issues]. +- [Mun's "good first issue" issues][mun-issues]. +- [SIMple Mechanic's good first issues][simm-issues]. +- [Bevy's "good first issue" issues][bevy-issues]. + +[awgy]: https://github.com/rust-gamedev/arewegameyet#contribute +[graphite-contribute]: https://graphite.rs/contribute +[winit-issues]: https://github.com/rust-windowing/winit/issues?q=is%3Aopen+is%3Aissue+label%3A%22difficulty%3A+easy%22 +[backroll-rs]: https://github.com/HouraiTeahouse/backroll-rs/issues +[embark.rs]: https://embark.rs +[embark-open-issues]: https://github.com/search?q=user:EmbarkStudios+state:open +[wgpu-issues]: https://github.com/gfx-rs/wgpu/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22 +[luminance-fruits]: https://github.com/phaazon/luminance-rs/issues?q=is%3Aissue+is%3Aopen+label%3A%22low+hanging+fruit%22 +[ggez-issues]: https://github.com/ggez/ggez/labels/%2AGOOD%20FIRST%20ISSUE%2A +[veloren-beginner]: https://gitlab.com/veloren/veloren/issues?label_name=beginner +[abstreet-issues]: https://github.com/a-b-street/abstreet/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22 +[mun-issues]: https://github.com/mun-lang/mun/labels/good%20first%20issue +[simm-issues]: https://github.com/mkhan45/SIMple-Mechanics/labels/good%20first%20issue +[bevy-issues]: https://github.com/bevyengine/bevy/labels/D-Good-First-Issue ------ diff --git a/content/news/041/mastodon.png b/content/news/041/mastodon.png new file mode 100644 index 000000000..46cc7e499 Binary files /dev/null and b/content/news/041/mastodon.png differ diff --git a/content/news/041/rustacean-station.jpeg b/content/news/041/rustacean-station.jpeg new file mode 100644 index 000000000..4900c38db Binary files /dev/null and b/content/news/041/rustacean-station.jpeg differ diff --git a/content/news/041/triverse.png b/content/news/041/triverse.png new file mode 100644 index 000000000..ba5070df7 Binary files /dev/null and b/content/news/041/triverse.png differ diff --git a/content/news/041/tut-gltf-anim-in-wgpu.jpg b/content/news/041/tut-gltf-anim-in-wgpu.jpg new file mode 100644 index 000000000..b22f32a75 Binary files /dev/null and b/content/news/041/tut-gltf-anim-in-wgpu.jpg differ