Skip to content

N30: Release, take 2 #944

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 10 commits into from
Feb 10, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file modified content/news/030/graphite_alpha.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
108 changes: 55 additions & 53 deletions content/news/030/index.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
+++
title = "This Month in Rust GameDev #30 - January 2022"
transparent = true
draft = true
date = 2022-02-10
+++

<!-- no toc -->
Expand Down Expand Up @@ -106,12 +106,12 @@ _Rusty Vangers engine in action within the original game_
[Vangers] game from the last century.
It's in Rust, and uses GPU and multiple threads heavily.

Something incredible has been brewing within the small by dedicated community
Something incredible has been brewing within the small but dedicated community
of the original game. They prototyped a pluggable rendering interface in order
to support rendering the game via [Rusty Vangers] instead of the default
CPU-based rasterizer. The plugin is made as a static library sub-crate with a
bunch of C-exported functions.
Basic concept worked on the terrain, and the mini working group transitioned
The approach worked for the terrain, so the mini working group transitioned
to moving more visual features off the old path and into the Rust-based plugin.

At the same time, [Rusty Vangers] engine got a number of important
Expand All @@ -138,7 +138,7 @@ engine. It has a demo available [on Steam][wor].
Latest developments:

- [Making Your Game Go Fast by Asking Windows Nicely][wor-fast] was published,
discussing Windows specific performance tweaks in Way of Rhea's engine
discussing Windows-specific performance tweaks in Way of Rhea's engine
- Work started on the Snowcrab + Teleporter puzzles, completing nearly all the
puzzles in the main game
- Work began on art for The Professor (pictured left), Shrew, and Hermes
Expand Down Expand Up @@ -204,7 +204,7 @@ _A light to keep the night away_
Fortress and Cube World.

In January, another [Veloren Reading Club was
recorded]([veloren-reading-club-4])!. The `entity_sync` system was refactored to
recorded]([veloren-reading-club-4])! The `entity_sync` system was refactored to
be parallel. This was the largest bottleneck during the last release party, and
this fix will allow us to more easily surpass the 200 player mark on the server.
Work has been done to improve dagger animations. Sounds for flowing rivers are
Expand All @@ -214,7 +214,7 @@ backward compatibility for older GPUs.

Skiing and ice skating have gotten to a playable state. The mounts system was
overhauled to make it more ergonomic to work with, you can [watch a video of
that here][veloren-mounts]. Several shaders experimental shaders have been
that here][veloren-mounts]. Several experimental shaders have been
added, along with a "point glow" which help lanterns look better. With these new
shaders, swimming underwater is a whole new experience! A tracking issue was
created for worldgen issues that will help coordinate direction for some large
Expand Down Expand Up @@ -313,22 +313,22 @@ Features
is a realistic sailing/foiling inshore simulator in development for PC/Steam
that will put you in the driving seat of modern competitive sailing.

Last couple of months saw great disappointment for the failed port to WGPU
due to unexpected performance losses compared to the old renderer.
The game is now back to its original DirectX 11 renderer.
The last couple of months saw great disappointment for the failed port to WGPU
due to unexpected performance losses compared to the old renderer. The game is
now back to its original DirectX 11 renderer.

February will see the beginning of the private alpha testing program, exciting
opportunity to gather the first feedbacks about boat handling and controls
before diving in one of the most challeging task of the game: sailing rules
implementation.
February will see the beginning of the private alpha testing program, an
exciting opportunity to gather the first feedback about boat handling and
controls before diving into one of the most challenging tasks of the game:
sailing rules implementation.

Content-wise, Hong Kong will soon join Den Haag as race location while the race
course is getting more and more alive with addition of spectators boats.
The playable foiling catamaran Jx50 is also constantly getting graphical
Content-wise, Hong Kong will soon join Den Haag as a race location while the
racecourse is becoming more and more alive with the addition of spectators
boats. The playable foiling catamaran Jx50 is also constantly getting graphical
updates and physics tweaks.

Hydrofoil Generation is scheduled to release on Steam Early Access in
Summer 2022.
Hydrofoil Generation is scheduled to release on Steam Early Access in Summer
2022.

[Hydrofoil Generation]: https://hydrofoil-generation.com/
[hgs_facebook]: https://www.facebook.com/HydrofoilGenerationSailing/
Expand All @@ -344,7 +344,7 @@ Summer 2022.
[@anastasiaopara][country-slice-twitter]'s hobby project, where users can draw a
small procedurally assembled scene.

Newest addition is an erase brush and an ability to continue existing walls.
The newest addition is an erase brush and an ability to continue existing walls.

[@anastasiaopara][country-slice-twitter] also shared [a Twitter thread][country-slice-discussion]
about doing procedural generation in Houdini vs Rust & OpenGL.
Expand All @@ -360,26 +360,26 @@ about doing procedural generation in Houdini vs Rust & OpenGL.
godot-rust ([GitHub][gd-github], [Discord][gd-discord], [Twitter][gd-twitter])
is a Rust library that provides bindings for the Godot game engine.

The start of 2022 is a good opportunity to showcase a few godot-rust games
in development. More info is available in [the book][gd-book-games].
The start of 2022 is a good opportunity to showcase a few godot-rust games in
development. More info is available in [the book][gd-book-games].

![godot-rust example games](godot-rust-games.jpg)

Using custom builds of the Godot engine involved quite a bit of ceremony
in the past: manual CLI invocations, code replacement and re-wiring
of the `gdnative-bindings` subcrate. The approach has been fundamentally
overhauled, and is now as simple as specifying the crate feature `custom-godot`
Using custom builds of the Godot engine involved quite a bit of ceremony in the
past: manual CLI invocations, code replacement, and re-wiring of the
`gdnative-bindings` subcrate. The approach has been fundamentally overhauled,
and is now as simple as specifying the crate feature `custom-godot`
([#833][gd-833]). The library will automatically look for a `godot` executable
in the system path (or a `GODOT_BIN` environment variable), and regenerate
`api.json`. This makes using older or module-extended Godot versions a breeze.

Latest `master` branch has now been updated to support Godot 3.4 out of the box
([#829][gd-829]).
The latest `master` branch has now been updated to support Godot 3.4 out of the
box ([#829][gd-829]).

Upcoming godot-rust version 0.10 seems to be finally on the horizon, with only
a handful of tasks left ([#842][gd-842]). A changelog since v0.9.3 is now
available. The continous stream of small improvements here and there has led
to a sizable list! ([#845][gd-845])
Upcoming godot-rust version 0.10 seems to be finally on the horizon, with only a
handful of tasks left ([#842][gd-842]). A changelog since v0.9.3 is now
available. The continuous stream of small improvements here and there has led to
a sizable list! ([#845][gd-845])

[gd-833]: https://github.com/godot-rust/godot-rust/pull/833
[gd-829]: https://github.com/godot-rust/godot-rust/pull/829
Expand Down Expand Up @@ -469,11 +469,11 @@ that aims to make rendering simple and give the user full control.
- Environment lighting (image-based lighting)
- HDR environment map
- Headless graphics context
- Tangent vertex atributes
- Tangent vertex attributes
- Texture transform
- Cube map render targets
- f16 and u16 texture data types
- and more..
- and more...

See [this Twitter thread][three-d-twitter] for videos.

Expand All @@ -487,7 +487,7 @@ month, an alpha version of Tetra 0.7 was released, featuring:

- Support for a wider variety of texture formats
- A more powerful API for blending
- Lots of bug fixes, cleanups and improvements
- Lots of bug fixes, cleanups, and improvements

For more details, see the [changelog][tetra-changelog].

Expand All @@ -509,7 +509,7 @@ rationale for why they decided to move on from the project.
[![A speed limit sign labeled 45 FPS](awn-header.jpg)][awn-post]

[Mason Remaley][awn-mason-remaley] published [a blog post][awn-post] covering
Windows specific performance tweaks employed in his Rust game engine:
Windows-specific performance tweaks employed in his Rust game engine:

> Normally, to make your software go faster, it has to do less work. This
> usually involves improving your algorithms, skipping work the user won't see,
Expand Down Expand Up @@ -553,7 +553,7 @@ takeaways from this post:
hole goes.
- Evaluate the library ecosystem of Rust thoroughly before using it for a
project that requires somewhat exotic functionality.
- Rust forces you to care about the details, regardless whether you want to.
- Rust forces you to care about the details, regardless of whether you want to.

The remainder of the article goes into depth on these three points.

Expand Down Expand Up @@ -689,15 +689,15 @@ _Sci-fi base demo scene, [watch TAA demo on youtube][rafx-youtube-video]!_
Since the previous rafx update in this newsletter (6 months ago!), many new
features have been introduced to improve performance and image quality. The
main rendering pipeline has also been split into "modern" and "basic"
pipelines. Unlike the basic pipeline which focusses on wide compatibility,
pipelines. Unlike the basic pipeline which focuses on wide compatibility,
the modern pipeline uses forward-clustered lighting and handles hundreds
of shadow-casting lights. It is targeting compute shaders and will be adding
bindless and GPU-driven rendering soon.

Since the last update, the modern pipeline adds GPU-accelierated light binning,
Since the last update, the modern pipeline adds GPU-accelerated light binning,
SSAO, shadow map atlasing/caching, TAA with sharpening, and auto-exposure/HDR.
In addition, both modern and basic pipelines now support transparency. A
[video demonstrating TAA](rafx-youtube-video) (temporal anti-aliasing) is
[video demonstrating TAA][rafx-youtube-video] (temporal anti-aliasing) is
available on youtube.

With these performance improvements, `rafx` is now able to render challenging
Expand All @@ -715,7 +715,7 @@ scenes with photorealistic style at 60FPS/1440p on modern, mid-range GPUs.

When starting a new Vulkan project, there's always the struggle of writing a
whole bunch of boilerplate code in order to, e.g., get your first triangle on
the screen. You have to create an `VkInstance`, with the validation layers
the screen. You have to create a `VkInstance`, with the validation layers
set up and working for development. Then select the best suited
`VkPhysicalDevice` for your app's requirements. Use that to create a `VkDevice`
with the appropriate queue families chosen. Oh, and after that, you need
Expand All @@ -731,49 +731,51 @@ the excellent [vk-bootstrap] library for C++.

### [Edict]

New archetypes based ECS implementation by [@zakarumych](https://github.com/zakarumych).
[Edict] is a new archetype-based ECS implementation by [@zakarumych].

The novel feature of [Edict] is entity ownership implemented via reference counting.
This optional feature allows creating owned kind of `Entity` "reference",
that ensures entity is alive and despawns it on drop.
that ensures the entity is alive and despawns it on drop.
Storing owning `Entity` in the component of another entity
creates ownership relation between those entities.
Even though `Entity` is an owning reference,
components of the entity are can be queried from `World` as usual.
Shared ownership is also available.

Optimized for both high density `World`s with thousands of entities
and also for `World`s with lower number of entities spread among many archetypes.
[Edict] is aimed for wide range of game genres and use cases outside of games.
and also for `World`s with a lower number of entities spread among many archetypes.
[Edict] is aimed at a wide range of game genres and use cases outside of games.

Built-in change detection with epochs allows systems to query for components
that were updated since last run of that query,
that were updated since the last run of that query,
or since any other epoch as defined by `Tracks` argument.
This opens possibility to have multiple POV on changes even in single system.
For example server-side netcode can track changes individually
for each client and query for changes since last ACK.
This opens the possibility to have multiple POV on changes even in a single system.
For example, server-side netcode can track changes individually
for each client and query for changes since the last ACK.
[Edict] optimizes iteration significantly when entities
with modified components are queried.

Although ECS abbreviation implies, [Edict] does not come
with predefined `System` trait and systems scheduler.
We can call it ECQ (Entity-Component-Query) as an alternative to ECS.

[Edict] is added to [ecs_bench_suite](https://github.com/rust-gamedev/ecs_bench_suite)
[Edict] is added to [ecs_bench_suite]
so anyone can compare performance in some trivial examples with other ECS.

Development focus for February is making more public API, including unsafe parts,
to allow writing custom queries, implement schedulers with parallel execution etc.
to allow writing custom queries, implement schedulers with parallel execution, etc.

[@zakarumych]: https://github.com/zakarumych
[Edict]: https://github.com/zakarumych/edict
[ecs_bench_suite]: https://github.com/rust-gamedev/ecs_bench_suite

### [bevy_backroll v0.3][backroll-github]

[Backroll][backroll-github] is a 100% type-safe native Rust implementation of the
[GGPO][ggpo] rollback netcode library. The core library has gone through
superfical updates, but the [Bevy plugin][bevy-backroll-crates-io] has been
massively overhauled. This update signfigantly improves the ergonomics of setting
up rollback netcode for your game (no more ugly turbofishes! no more generic type
superficial updates, but the [Bevy plugin][bevy-backroll-crates-io] has been
massively overhauled. This update significantly improves the ergonomics of setting
up rollback netcode for your game (no more ugly turbofishes! No more generic type
parameter config type!), provides an automatic way of saving and loading Bevy
components and resources, and fully parallelizes the saving and loading of game
state when a rollback occurs.
Expand Down
5 changes: 4 additions & 1 deletion sass/_extra.scss
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
hr {
margin-bottom: $spacing-unit / 2;
border: 0;
height: 1px;
margin: 32px 0;
background-color: #bfbfbf;
}

li {
Expand Down