bevyengine / bevyengine/bevy

Allow users to specify bevy components in external tools and make external tools compatable by supporting Bevy gltf custom property

Open
#21,038 10 comments 0 reactions 0 assignees View on GitHub
A-Assets A-glTF C-Feature S-Needs-Design
Dominant language
Rust
Stars
48.2k
Forks
4.8k
Avg merge
3d 16h
Merged PRs (30d)
171

Description

## What problem does this solve or what need does it fill?

There are various formats like GLTF, FBX, OpenUSD, etc that allow to transfer meshes, materials, animations, etc. Various tools may need to transfer some additional data to cover their specific needs. For such purposes these formats provide custom properties that can be appended to objects, meshes, materials.. and extend their description. Currently we don't have a builtin solution to import Bevy components from external tools. Custom properties can be used to transfer Bevy components.

Custom properties is commonly used feature and editors like Blender, Maya, Houdini, etc provide interface where custom properties can be specified.

Benefits of supporting Bevy components custom property:
- Users can specify Bevy components in external tool and after importing an asset have all initial components already in place.
- External tools like Blenvy/Skein that currently implement their own hacky Bevy components importers can migrate to Bevy solution and extend it.
- Maya/Houdini/Blender/Skein/Blenvy or any tools that allow to specify (Bevy) custom property becomes compatible. This allows to migrate from one tool to another without loosing specified Bevy components.
- Its much easier to implement external tool/plugin that allows specifying Bevy components.
- ...

## What solution would you like?

We already support GLTF custom properties. What is needed is to extend GLTF importer and parse Bevy defined custom property responsible for transferring components. When importing GLTF asset and iterating over asset objects, materials, meshes..the importer should parse Bevy custom property if present and insert parsed component.

Custom property could look something like this:
"bevy_components { MarkerComponent1, ComponentWithFields1 {.. }, ComponentWithFields2 {.. }, ..}"
or we can use an array or something else.

Alternatively our own Bevy GLTF extension can be implemented instead of using custom properties. Or we can implement both.

Contributor guide

Open the contributing guide

Research direction

Start by reading the existing GLTF custom-property support and the GLTF importer path that iterates asset objects, materials, and meshes. Compare the proposed custom-property format with the alternative Bevy GLTF extension, then establish how components should be represented and parsed. Done means imported GLTF assets can apply the chosen Bevy component metadata consistently.

Written by the indexing model from the issue text.

Assessment

Tech stack
rust
Domain
computer-graphics, game-dev
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.