• Stars
    star
    443
  • Rank 98,504 (Top 2 %)
  • Language
    Python
  • License
    Other
  • Created over 1 year ago
  • Updated 4 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Bevy Code & Blender addon for a simple workflow to add & edit Bevy components in Blender

Bevy tracking License

Blender_bevy_components_workflow

demo

Crates & tools for adding components from gltf files in the Bevy game engine.

It enables 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 (some visually , some using 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 (and more !) if you want !)
  • define components in Blender Collections & override any of them in your collection instances if you want
  • ability to automatically turn your Blender collections into gltf Blueprints for reuse
  • minimal setup & code, you can have something basic running fast
  • minimal dependencies: Bevy, Serde & Ron only !
  • opensource

Crates

  • bevy_gltf_components This crate allows you to define components direclty inside gltf files and instanciate/inject the components on the Bevy side. There is a video tutorial/explanation if you want, or you can read the crate docs. The examples for the crate are here

  • bevy_gltf_blueprints This crate adds the ability to define Blueprints/Prefabs for Bevy inside gltf files and spawn them in Bevy. With the ability to override and add components when spawning, efficient "level" loading etc There is a video tutorial/explanation for this one too, or you can read the crate docs The examples for the crate are here

Note: this is the recomended crate to use and uses bevy_gltf_components under the hood

Tools

Blender: gltf_auto_export

  • for convenience I also added a Blender addon that automatically exports your level/world from Blender to gltf whenever you save your Blend file
  • it also supports automatical exports of collections as Gltf blueprints & more !

Please read the README of the add-on for installation & use instructions

Examples

you can find all examples, by crate as seperate crates for clearer dependencies in here

  • bevy_gltf_components

    • basic use of bevy_gltf_components only, to spawn entities with components defined inside gltf files
  • bevy_gltf_blueprints

    • basic more advanced example : use of bevy_gltf_blueprints to spawn a level and then populate it with entities coming from different gltf files, live (at runtime) spawning of entities etc
    • animation how to use and trigger animations from gltf files (a feature of bevy_gltf_blueprints)

Workflow

The workflow goes as follows (once you got your Bevy code setup)

  • create & register all your components you want to be able to set from the Blender side (this is basic Bevy, no specific work needed)

component registration

  • Create an object / 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

      unit struct components in Blender

      In rust:

      unit struct components in Bevy

      (the Rust struct for these components for reference is here )

      complex components in Blender

      In rust:

      complex components in Blender

      (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

      complex components in Blender

  • for collections & their instances:

    • I usually create a library scene with nested collections

      • the leaf collections are the assets you use in your level
      • add an empty called xxxx_components
      • add the components as explained in the previous part

      blender collection asset

    • 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 :

    • using Blender's default gltf exporter !!IMPORTANT you need to check the following:
      • custom properties
      • cameras & lights if you want a complete level (as in this example) gltf_export
    • or much better, using gltf_auto_export
  • load it in Bevy (see the demo main file for this)

  • you should see the components attached to your entities in Bevy

components in bevy components in bevy components 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

missing components warnings

Limitations / issues

  • some components have to be defined in text in Blender, might try using the AppTypeRegistry and some Python code on the Blender side for a nicer UI (although this loses the "fast & easy, no tooling" approach)
  • Some of bevy_rapier/physics code / ways to define colliders could perhaps be done better/visually within Blender (currently it also goes via RON)

Future work

  • I have a number of other tools/ code helpers that I have not yet included here, because they need cleanup/ might make this example too complex

Credits

  • somebody I cannot recall helped me originally with the gltf loading tracker in the Bevy Discord, so thanks ! And if it was you, please let me know so I can give credit where credit is due :)

Contributors

Thanks to all the contributors helping out with this project ! Big kudos to you, contributions are always appreciated ! :)

License

This repo, all its code, contents & assets is Dual-licensed under either of

More Repositories

1

CoffeeSCad

DISCONTINUED ! Browser based 3D solid CAD editor, Openscad style, with a Coffeescript based syntax, using only Coffeescript + Javascript
JavaScript
226
star
2

polymer-threejs

Experimental Three.js elements using the Polymer framework + three.js
JavaScript
27
star
3

adafruit-i2c-pwm-driver

Node.js implementation for the Adafruit 16-Channel 12-bit PWM/Servo Driver
JavaScript
25
star
4

bevy-fun-examples

A few "fun" examples for the Bevy engine !
WGSL
23
star
5

awesome-quickjs

A curated list of awesome things related to QuickJS
22
star
6

bevy_mod_yarn

Rust
19
star
7

Doboz-web

Doboz: Web client and server for reprap/repstrap/3d scanner control
JavaScript
15
star
8

most-gestures

unified desktop/mobile high level pointer gestures, using most.js
JavaScript
12
star
9

socket-io

socket.io web component (polymer)
HTML
12
star
10

grunt-polymer-nodewebkit-example

Example polymer/node-webkit/grunt project
CoffeeScript
11
star
11

Doboz-2

All files, instructions and information for the Doboz 2 H-bot reprap
OpenSCAD
8
star
12

grunt-polymer-atomshell-example

Demo project/utility using grunt to build polymer + atom-shell apps
CoffeeScript
7
star
13

polymer-elements

JavaScript
5
star
14

Isolos

3d printable quadruped robot designed in JSCAD
JavaScript
4
star
15

CuraEngine-js

Experimental attempt at porting CuraEngine to javascript using Emscripten
JavaScript
4
star
16

HydroDuino

Remote monitoring and control for Hydroponics Aquariums etc using python, arduino etc
4
star
17

simple-scan

C++
3
star
18

Backbone.dropbox

dropbox storage (sync) for Backbonejs
CoffeeScript
3
star
19

gofree

JavaScript
2
star
20

jscad-tree-experiments

Experiments for partial re-evaluation/ virtual trees of jscad code for significant perf improvements
JavaScript
2
star
21

polymer-threejs-databinding-demo

Demo for nested databing inside a THREE.js cssRenderer3D view
CSS
2
star
22

CoffeeSCad-examples

All sorts of example projects for CoffeeSCad : feel free to fork and make pull requests , so we can centralize as much examples as possible
CoffeeScript
2
star
23

Openscad_designs

various openscad designs, usually heavy wip
2
star
24

SMARS-jscad

Recreation of the SMARS 3D printed robot as a modular JSCAD design
JavaScript
2
star
25

node-github-autochangelog

Automatic generation of changelogs using the github api + nodejs
JavaScript
2
star
26

3DR-Tiki

3DR reprap fork using 20mm T-Slots for sides
C++
1
star
27

Rampage

JavaScript
1
star
28

Pollapli

JavaScript
1
star
29

jscad-hannoverjs

Presentation about JSCAD at HannoverJs : slides + code
JavaScript
1
star
30

repBug

Openscad design files, documentation etc for the RepBug hexapod
Python
1
star
31

threejs-amf-loader

AMF file loader for THREE.js
JavaScript
1
star
32

Web-Experiments

Various node -js / browserify /components.js etc experiments
JavaScript
1
star