Bevy 0.20 moves its shaders to WESL and brings the Solari path tracer to macOS

The Rust game engine's 0.20 release, from 227 contributors and 817 pull requests, reworks its BSN scene syntax, improves the Solari path tracer and adds sprite materials and mesh shaders.

AI-drafted from 3 sources. This story was written with AI from the outside reporting listed under Sources, and checked by automated tools before it went up. The originals have the full detail.

Bevy, the open source game engine written in Rust, released version 0.20 on 8 October. The release post credits 227 contributors and 817 pull requests, and the GitHub release follows two release candidates in September. Existing projects need some changes to upgrade, and the post points to a migration guide.

Shaders move to WESL

The change most likely to touch existing projects is the shader language. Bevy's shaders now use WESL, which the post describes as "a language standard that extends WGSL," adding modules, imports and conditional compilation. Bevy's own custom WGSL dialect is gone. Custom shaders that used its preprocessor features need translating and renaming from .wgsl to .wesl, while plain WGSL files without preprocessor directives keep working. In return Bevy gets shared tooling, such as language server support.

Rendering

Solari, Bevy's realtime path-tracing renderer, gets better image quality, lower CPU cost and support for more light types. It now runs on macOS through Metal, though there is no built-in denoiser there yet. DLSS-RR 4.5 is supported for denoising, which means downloading the newest DLSS SDK. ReSTIR is now off by default, because the post says it costs performance without a large visual gain in many scenes.

Mesh shaders arrive as an initial, advanced feature and do not work on the web. On the 2D side, sprites can now use custom shader materials, there is a 2D counterpart to the 3D ExtendedMaterial, and the sprite renderer now reuses the 3D rendering infrastructure, which the post says improves performance in many cases.

Scenes and UI

BSN, the scene system, "landed with a few idiosyncrasies that caused friction in practice," the post admits. Scene references now need an @ prefix, most template_value wrappers can go, and entity lists use a new separator. Scene entities also fire a Ready event once their children have spawned.

The Feathers widget set adds a colour input, a list view with scrollbar, a dropdown and a lazy menu, and number inputs can now be dragged to change their value. There are headless tab widgets, em and rem sizing units for UI, elliptical border radii and inline images inside text. A pan and orbit camera has been upstreamed from bevy_editor_cam for CAD-style navigation.

Engine internals

Panics in systems, commands and observers are now turned into errors and passed to the fallback error handler. Bulk despawning is batched, with benchmarks showing roughly 1.3 to 1.7 times faster results, and new weak ordering methods let systems run in parallel unless their data actually conflicts.

For what comes next, the post lists a human-readable .bsn file format, assets represented as entities, a remote inspector and HDR display support. "Game engines, unfortunately, are never done," it says.

Sources

Image: Bevy

More news from Gaming World