The first "real" post on my new blog.
morgenthum.dev/blog/introdu...
#gamedev #rust #bevy #bevyengine #indiedev #rustlang #architecture
The first "real" post on my new blog.
morgenthum.dev/blog/introdu...
#gamedev #rust #bevy #bevyengine #indiedev #rustlang #architecture
Released bevy_xray, a TUI tool to visualize Bevy state hierarchies, plugin dependencies, and schedule configurations.
crates.io/crates/bevy_...
#gamedev #rust #bevy #bevyengine #indiedev #rustlang
Examples: an LOD crate based on VisibilityRange (defaults for high/mid/low poly, overridable per asset), plus navmesh generation via bevy_rerecast + landmass_rerecast. New video mainly shows LOD + vegetation scattering (bevy_map_scatter)..
With that in place I could strip a lot of low-level Bevy specifics out of the game and push them into those mid-level abstractions. I'm also moving more towards a data-/asset-driven setup.
On the engine side I now have self-contained crates like camera, controller, behavior, weather, etc., with schedules/configuration properly encapsulated. I also added a runtime layer for settings, window creation, and other runtime concerns.
The last update was a while ago, so here's the current status: Over the last few weeks I've been working a lot on Wild Spikes and introduced a layered structure to keep technical details out of the game code.
#gamedev #rust #bevy #bevyengine #procedural #indiedev #rustlang
I have published a documentation website for map_scatter: mapscatter.rs
Check it out.
#gamedev #rust #bevy #bevyengine #procedural #indiedev #rustlang
map_scatter 0.4.0 is out!
Streaming and Bevy 0.18 support.
Check it out:
map_scatter: crates.io/crates/map_s...
bevy_map_scatter: crates.io/crates/bevy_...
#gamedev #rust #bevy #bevyengine #procedural #indiedev #rustlang
I still have a few issues with the lighting. The world still looks quite empty with just a few birch trees, mushrooms, and flowers, but that'll change quickly once I have some vegetation models. By the way, those elements were placed using bevy_map_scatter based on certain rules.
#map_scatter
I switched my custom weather implementation to use Bevys atmosphere and sundisk features. I also added several atmosphere presets that I interpolate between during weather transitions - for example, from sunny to rainy
#gamedev #rust #bevy #bevyengine #procedural #indiedev #rustlang
Released map_scatter and bevy_map_scatter in version 0.3.0! Serde and ron dependencies are now optional.
crates.io/crates/map_s...
crates.io/crates/bevy_...
#gamedev #rust #bevy #bevyengine #procedural #indiedev #rustlang #avian3d #avian #map_scatter
It uses the avian3d physics engine (also used in the game for general physics) to top-down raycasts to the ground, to find the height/y-coordinate for the trees.
Migrated the biome generation of Wild Spikes to bevy_map_scatter. Currently using a small scatter plan that only generates one type (one kind of tree). But everything works as expected!
#gamedev #rust #bevy #bevyengine #procedural #indiedev #rustlang #avian3d #avian #map_scatter
Oh, because the relative link doesnβt work on crates.io. Need to fix it, ty!
Examples: github.com/morgenthum/m...
Released bevy_map_scatter on crates.io.
Crate: crates.io/crates/bevy_...
Examples: github.com/morgenthum/m...
#gamedev #rust #bevy #bevyengine #procedural #indiedev #rustlang
Jittered grid position candidates are filtered by a field graph using a simple texture. The scene features a camera with a Bloom component and 3D cubes with emissive colors. A separate system modifies the cubes Y-scale to create this effect.
After releasing map_scatter yesterday, I am working on bevy_map_scatter.
#gamedev #rust #bevy #bevyengine #procedural #indiedev #rustlang
Finally released map_scatter on crates.io!
Crate: crates.io/crates/map_s...
Examples: github.com/morgenthum/m...
#gamedev #rust #bevy #bevyengine #procedural #indiedev #rustlang
Candidate positions were generated with Poisson-disk sampling; grass uses a jittered grid. Actual species are placed layer by layer - trees first - by computing per-species probabilities from their own field-graph specifications.
The water is the double sine wave in the middle of the image. It was constructed using the crates Texture-trait to generate the texture programmatically.
A more concrete example using map_scatter: a forest with natural rules, such as "willows are more likely to be near water."
#gamedev #rust #bevy #bevyengine #procedural #indiedev #rustlang
Iβm not sure yet whether I should release map_scatter as engine-agnostic, or if I should first think more about bevy_map_scatter. Iβd like to take the Bevy communityβs knowledge into account for the Bevy crate.
Points are generated by a jitter grid (with no jitter, so itβs actually just a grid). The first texture is used as the basis for a Euclidean distance transform to calculate the points nearest to the text. These are then filtered with smoothstep and finally rendered as a PNG for this example.
Working on final steps - documentation and examples!
#gamedev #rust #bevy #bevyengine #procedural #indiedev #rustlang
Final polish is underway. Expect a release in a few days with docs and examples.
If it looks too βgeneratedβ: use splat maps from texture paint (e.g., Blender) to drive or filter the rules - paint where to allow/boost/suppress types. Mix authored masks with procedural fields for control.
Works great for 2D - and for 3D too: sample a topβdown position, raycast to terrain for height, then spawn models at the hit. Same rules, different consumer. See my previous post for a 3D inβgame screenshot.
In the example, the rules (grass near river, trees away, mushrooms near trees) are ~250 LOC total. You write small fieldβgraphs (distance, smoothstep, masks) and compose them into stages/layers. Thatβs it - rules, not handβplaced points.
@bevy.org
Announcing map_scatter and bevy_map_scatter: a tiny, engineβagnostic toolkit for ruleβbased object scattering on maps. Build fieldβgraph rules, run multiβstage placement, get reproducible results.
#gamedev #rust #bevy #bevyengine #procedural #indiedev #rustlang
Of course, many species are still missing - just a first attempt.