4866ce1620 | ||
---|---|---|
.. | ||
core | ||
README.md | ||
game.rs | ||
main.rs | ||
test_components.rs |
README.md
Workflow with blender / demo information
This example, is actually closer to a boilerplate + tooling showcases how to use a minimalistic Blender (gltf) centric workflow for Bevy, ie defining entites & their components inside Blender using Blender's objects custom properties. Aka "Blender as editor for Bevy"
It also allows you to setup 'blueprints' in Blender by using collections (the recomended way to go most of the time), or directly on single use objects .
Features
- Useful if you want to use Blender (or any editor allowing to export gltf with configurable gltf_extras) as your Editor
- define Bevy components as custom properties in Blender (RON, though an older JSON version is also available)
- no plugin or extra tools needed in Blender (but I provide a little Blender plugin to auto-export to gltf on save if you want !)
- define components in Blender Collections & override any of them in your collection instances if you want
- code to auto add additional required components in Bevy (if B is needed with A but B is not present, it adds it: optional & configurable)
- minimal setup & code, you can have something basic running fast
- opensource
There is a video tutorial/explanation if you want, or you can skip to the text version ahead
Running this example
cargo run --example general --features bevy/dynamic_linking
Workflow
The workflow goes as follows (once you got your Bevy code setup)
All core/helper modules
see the example for more information on how to set things up
Then...
- create & register all your components you want to be able to set from the Blender side (this is basic Bevy, no specific work needed)
-
Create a mesh/ collection (for reuse) in Blender
-
Go to object properties => add a property, and add your component data
-
unit structs, enums, and more complex strucs / components are all supported, (if the fields are basic data types at least, have not tried more complex ones yet, but should also work)
- for structs with no params (unit structs): use a STRING property & an empty value
- for structs with params: use a RON representation of your fields (see below)
- for tupple strucs you can use any of the built in Blender custom property types: Strings, Booleans, floats, Vectors, etc
In rust:
(the Rust struct for these components for reference is here )
In rust:
(the Rust struct for this component for reference is here )
There is an other examples of using various Component types: Enums, Tupple structs, strucs with fields etc here, even colors, Vecs (arrays), Vec2, Vec3 etc are all supported
-
-
for collections & their instances:
-
I usually create a library scene with nested collections
-
In the Level/world itself, just create an instance of the collection (standard Blender, ie Shift+A -> collection instance -> pick the collection)
-
-
export your level as a glb/gltf file : !!IMPORTANT you need to check the following:
- custom properties
- cameras & lights if you want a complete level (as in this example)
-
load it in Bevy (see the demo main file for this)
-
you should see the components attached to your entities in Bevy
note: you get a warning if there are any unregistered components in your gltf file (they get ignored) you will get a warning per entity
Additional notes
- You usually define either the Components directly or use
Proxy components
that get replaced in Bevy systems with the actual Components that you want (usually when for some reason, ie external crates with unregistered components etc) you cannot use the components directly.
Included are the following modules / tools
process_gltf
the most important module: this is the one extractingcomponent
information from the gltf filesinsert_dependant_component
a small utility to automatically inject components that are dependant on an other component for example an Entity with a Player component should also always have a ShouldBeWithPlayer component you get a warning if you use this though, as I consider this to be stop-gap solution (usually you should have either a bundle, or directly define all needed components)camera
an example post process/replace proxies plugin, for Camera that also adds CameraTracking functions (to enable a camera to follow an object, ie the player)lighting
an other example post process/replace proxies plugin for lighting, that toggles shadows, lighting config, etc so that things look closer to the original Blender dataphysics
an other example post process/replace proxies plugin for physics, that add Rapier Colliders, Rigidbodies etc . Most of these do not need proxies these days, as the most Rapier components are in the Registry & can be used directly
Feel free to use as you want, rip it appart, use any/all parts that you need !
This tooling and workflow has enabled me to go from a blank Bevy + Blender setup to a working barebones level in very little time (30 minutes or so ?) ! You can then add your own components & systems for your own gameplay very easilly
Information
- the Bevy/ Rust code is here
- the Blender file is here
- I added bevy_editor_pls as a dependency for convenience so you can inspect your level/components