State of Interoperability between Godot and Blender

I disagree. Starting projects and creating prototypes is the easy part.Where a project is actually finished is where the challenge lies and that’s also where solid improvements come from. Unity famously only made tech demos and unfinished prototypes and the users kept complaining that the tools felt somehow unfit for actual production.
Project Gold also was not meant to be “just a showcase”, either. It just happened to be that in this particular case. I was meant to be a full movie but it didn’t turn out that way. And sometimes that’s okay. But it sould never be the goal to begin with. At least from my perspective.

Ultimately the project’s scope has been set and it’s running already anyways. So all of this is a moot point anyways. :smiley:

6 Likes

Yeah i totally agree that its a moot point for this current project, but i believe we should share our opinion of future projects, having the goal to just improve the pipeline over focusing in making a project could be a good option for the future

This is amazing news.

As someone trying to get into 3D gamedev, Blender has been an integral part of my pipeline, although I’m still struggling with some of its aspects.

I know the scope of this project is not that big, but I’ll take the opportunity to mention most of my pain points. Disclaimer: I’m self-taught and still relatively new at this.

In terms of level creation, there are some rough edges that can be improved upon. The common modelling tools are not designed for this kind of workflow, and many plugins are needed: Texel Density checkers, Auto UV Project, Baking, etc.

PassiveStar has been working on turning Blender into something like Hammer, the Source Engine level builder. His input here would be essential I believe. Some official support for this use case would be amazing. His quick menu addon is very handy and makes the workflow very fast indeed.

In terms of asset handling, more support for online libraries would be ideal. Right now, any assets in a library need to be downloaded, which is fine, but there are also different standards on how assets are built that don’t translate well.

I’d say my biggest issue when exporting asset libraries into Godot is that every asset has to be superposed in the world origin, as Godot uses world origin as object origin.

Furthermore, many 3D models have to be put into collections to be turned into an asset because they are composed of several meshes. However, .gltf export does not support collections, so Godot does not see them, and some degree of restructuring (reparenting, empties, etc.) needs to be added.

For assets that share textures, it would be ideal to be able to choose which folder to drop the textures in when exporting, as currently it is required that textures are in the same folder than the .gltf, which can bloat folders very quickly, and using .glb instead of .gltf is heavily discouraged, since sharing textures is a must to keep file size and memory usage at a minimum.

Sometimes I’ve run into issues with UV maps and textures from Blender to Godot. Granted, this happened with assets exported from Unreal Engine, which is probably the cause, but the underlying issue was not easy to understand, which leads to much trial and error. Eventually I figured that these assets had two UV maps, and Blender would render the textures perfectly, whereas Godot would only see one of the UV maps and discard the other, leading to funky textures. I still do not know why Godot cannot read the second UV map even if it has support for 2 UVs.

One simple functionality that would be useful is to be able to choose the resolution of the textures in the exported gltf file… AFAIK it’s not an option.

Regarding animations, I don’t have much experience; most of what I’ve done is using Mixamo. The pipeline has not been clear to me, and Mixamo is clearly not intended for the Godot pipeline, but I managed to make it work thanks to FinePointCGI’s video tutorial. Using Mixamo Root is essential for properly handling root motion and ensuring correct animation imports. Streamlining character rigging workflows, especially for game development, would be a significant improvement.

Additionally, I want to give a shout out to Michael Jared, who has developed a Blender-to-Godot add-on, which aims to improve compatibility between the two platforms. As someone experienced in this area, his input is likely valuable.

That’s all I can remember right now. I realize much of what I’m talking about are shortcomings on Godot’s side, but it would help to talk about them since Godot communities in general have little to no experience with advanced 3D techniques and optimization, and more often than not, bringing up these issues results in almost zero feedback.

Therefore, I would appreciate any feedback or tips that simplify the process and automate some of the work. I’m still working on my pipeline and, ideally, I would like to be to download an asset pack and process each asset into two folders: the meshes folder and the textures folder. This allows for easy sharing of textures. I haven’t had any issues when making my own assets, but as a solo dev, having a clean asset packs pipeline is really helpful.

3 Likes

Hello Simon Thommes! My name is Aaron Franke. I am one of the main maintainers of the glTF import and export pipeline in Godot Engine. I would love to get involved in this project, and to get you and other Blender folks involved in the existing channels I’ve been using to discuss developing the asset pipeline. We at Godot, GD3D, and OMI have been working on the Godot and glTF side of the asset pipeline for awhile and we want to collaborate.

I saw in this Blender Studio Log 10 video that you are working on the glTF asset pipeline: https://www.youtube.com/watch?v=Q5Jj1c_F6QA

Between 7:15 to 7:40 in the video you mention that you set up a system in Blender to specify physics collision primitives. I have already done this on the Godot side via the OMI_physics_body glTF extension. In fact, it’s already merged into the engine, and is already in the currently released 4.3 version. Godot PR here GLTF: Update `OMI_physics_body`, add `OMI_physics_shape`, keep `OMI_collider` by aaronfranke · Pull Request #78967 · godotengine/godot · GitHub and glTF extension specification here gltf-extensions/extensions/2.0/OMI_physics_body at OMI_environment_sky · aaronfranke/gltf-extensions · GitHub Also, my friends at GD3D are working on a Blender addon called Bless which provides the capability to export glTF files from Blender with this physics data. You can find that project here GitHub - gd-3d/bless: blender level editor software suite

At 9:00 in the video I can tell that Blender Studio is currently not using our OMI physics system because you have a node named @CollisionShape3D@23577 and our system ensures that shape nodes have human-readable node names. It would improve interoperability and make things easier for you if we work together on this, so you avoid repeating work that we have already done.

I also saw that you are working on animations. I also recently implemented the KHR_animation_pointer glTF extension, which is already merged into Godot’s master branch and will be available in the upcoming Godot 4.4 release in a few weeks. Godot PR here https://github.com/godotengine/godot/pull/94165 and glTF extension specification here glTF/extensions/2.0/Khronos/KHR_animation_pointer at main · KhronosGroup/glTF · GitHub

See this proposal: Allow importing a 3D model file as a mesh resource (or material/etc) instead of a scene · Issue #7494 · godotengine/godot-proposals · GitHub

For collision, we don’t need a GODOT_* extension, since we have OMI_* extensions for this already merged into Godot 4.3, plus there is some work towards making these KHR_* extensions.

This can be solved with glTFX (formerly known as glXF) which allows multiple scenes to be composed together. Blender should add the ability to export one .blend file with 3 collections as 3 glTF files linked together with one glTFX. As for the Godot side, I’ve already made a complete implementation as a GDScript addon here: GitHub - aaronfranke/godot-gltfx-reference-format: Godot implementation of the glTFX Reference Format, also known as glTF External Reference, glTF Experience Format, or glXF: https://github.com/KhronosGroup/glTF-External-Reference (it’s not part of the engine yet because glTFX is a Khronos effort and it is still in draft stage).

20 Likes

Hey Aaron, this is a lot of useful information, thank you! We weren’t actually aware of most of this and it all sounds great!

Regarding collaboration:
Because of the small scope of the project and how far it’s already progressed I don’t really see how beneficial it would be to collaborate on the game specifically. The idea is more to kick off the conversation about interoperability from Blender’s side by making a game and experiencing the workflow.

If we had been aware of these things in advance there’s a good chance we might have used parts of it for our pipeline, but tbh I don’t think it’s a huge issue that we did some of the work again, since afaict the duplicate parts weren’t the biggest effort anyways. And since it’s a small project it’s good to have full control over the pipeline in-house.

Again, the idea is not to use what we’ve built for this project directly to replace any of your work anyways. It’s more so about research on our end and improving the existing workflow for now.

In the bigger picture:
It sounds like a lot of the topics we’ve run into are being addressed by what you are describing, so it would be great to have you as a part of the further conversation about interoperability between Blender and Godot, beyond the scope of the dogwalk project!

Thanks for getting in contact, I’ll make sure to follow up with you on that!

13 Likes

Yes, that’s what I meant, working on the interoperability, workflow, and pipeline aspects, not the game specifically. My hope is that the final deliverable for this Project DogWalk will not just be some DogWalk-specific assets and Blender plugins in an obscure repo, but rather we can use this as an opportunity to improve interoperability for everyone.

While I understand wanting to have full control of the pipeline, my goal is kinda the opposite: I want to move more things into the general pipeline, minimizing the amount of DogWalk-specific pipeline effort required, and therefore also minimizing the app-specific work all future users of this pipeline will need to do.

So indeed, my sights are set beyond the scope of this project, I’m taking advantage of this project as an opportunity to get my foot in the door for a larger interoperability discussion :stuck_out_tongue:. But anyway, yes, there is a lot of overlap between us and I look forward to working on this together.

17 Likes