Here are my bevy contributions and plugins. As a member of the bevy organization, beside the visible work shown here, I also do invisible work such as PR review, opening/categorizing/closing bugs, mentoring new contributors, helping new users get up quickly with the engine or opening design discussions about aspects of the engine.

Ui Navigation


A generic UI navigation algorithm for the Bevy engine default UI library.

A 8 months effort to add gamepad navigation and an ergonomic event system to bevy’s UI library.

Bevy UI is very rough, without even the concept of an event. UI navigation is a design from first principle of an ECS-native UI navigation system, specifically integrating both gamepad and mouse input.

It was first designed as ad-hoc implementation independent from the ECS. However, navigation relying heavily on two-way tree data structures, a notoriously challenging data structure to model in Rust, the bevy ECS became an major part of the implementation.

It was first implemented as a pure design document RFC, then as a 3rd party crate, which learnings guided improvements on the RFC. There is now an actual PR as a first party Bevy implementation.

The current blocking issue is integrated handling of both mouse hover and gamepad focus state.

Texture Parallax Mapping

(September 2022)

Parallax mapping shaders (relief and POM) for the bevy game engine

Parallax mapping is a graphical effect adding the impression of depth to simple 2d textures by moving the texture’s pixel around according to the viewport’s perspective.

This is NOT a “parallax” à la Super Mario World.

The section link goes to a web live demo site. The source code is available on github and the feature is intended to be upstreamed into bevy.

System failure decorator

(September 2022)

Decorate your bevy system with the sysfail macro attribute to make them handle cleanly failure mods.

Bevy’s systems only allow unit return values.

This means that the ? operator cannot be used in a bevy system, as it requires the return type to be Option or Result. Or not quite, it is possible to add error handling to a system using the chain pattern. But it is burdensome to use.

This crates defines a #[sysfail(log)] macro attribute to add to bevy systems for customizable error handling. The macro works by injecting error handling code directly into the system, and converting the return type to a unit type.

Bevy scene hook


Ad-hoc component insertion for bevy scenes

A tinny crate (29 lines of effective code) extracted from Warlock’s Gambit to ease importing scenes from 3D software into bevy.

It stores a closure in a trait object to then later-on run it once per entity in a loaded gltf file. This is currently the easiest way to add custom behavior in bevy to objects loaded from a third party scene format such as fbx or gltf.

Bevy FBX loader


An FBX scene and material loader for bevy

An FBX scene reader and loader. It relieds on the fbxcel-dom crate for parsing FBX. However, interpreting the data and converting it its ECS representation is entierly done in the crate.

This includes computing object positions based on FBX’s nightmarish scene format (including custom ordering of transform appilcation) and loading Maya’s PBR material extension.

It is capable of loading the amazon bistro scene, and helped fix a bevy rendering issue.

Bevy debug text overlay


A convenient on-screen message print macro for bevy.

A macro for on-screen printing. The code was taken from Warlock’s Gambit and released as an independent crate. The particularity of this crate is that instead of using the bevy ECS to communicate messages to display, it uses a simple non-blocking rust std::mpsc channel. This allows much better ergonomics.

It also uses a cargo flag to switch to dummy mocks in release build, allowing user to just turn off the crate with a simple flag.

The crate includes a 1d line allocator, to properly place messages on screen and re-use available space.

Various contributions


And a pletora of small fixes to community plugins and bevy itself

Beside my own plugins and features, I contribute to third party plugins. Most notably, I contributed the 3D debug renderer for heron, which itself is now used in bevy_rapier, a popular rust 3d physics engine.