I have a relatively simple model that I made in Blender that I want to import in Godot:

I made a simple rig for it, but when I import it into Godot, a bunch of new bones appear and the skeleton becomes a mess:

In blender, I made the rig and parented the parts to the bones (NO armature deform). When I import this, the skeleton node is not created and the model doesn't have any bones. I was told that if add a mesh to my armature, then it should work, so I added a single vertex and did an armature deform with automatic weights on it just so that Godot would create the skeleton. So now I have a skeleton, but for every objects that is parented, there is a new bone for it.

These new bones are not created if I use armature deform with vertex group for every single parts, but setting this up is very time consuming and tedious... Isn't there a way to create robots and other hard surface rigged models without resorting to armature deform and having Godot import play nice with the asset?

My goal is to have a robot working with animations and IK. Perhaps there's a better way to do this in Blender so that the Godot import will stay clean?

    Lightsheik I made a simple rig for it, but when I import it into Godot, a bunch of new bones appear and the skeleton becomes a mess:

    This looks like a problem. If you can share the problem model, I can try to work through this.

    Isn't there a way to create robots and other hard surface rigged models without resorting to armature deform

    If very briefly — unlikely, since the concept of deformation seems to include the position and rotation of dependent body parts. But you could try to find workarounds.

      Tomcat After some more testing, I concluded that Godot import simply doesn't like when bones have child objects. It seems to converts those objects into bones inside the skeleton. It seems like the skeleton still works fine, as long as you don't move the extra bones. So it looks like the only way to have a clean skeleton is to only use vertex groups/weight painting. The downside of this is that anything you add to the asset needs to be assigned to the proper vertex groups, as parenting to a different part will leave it immobile when the skeleton deforms the vertex of the parent object. I mean, it's a bit obvious, but I wish the Skeleton could work with parented objects.

        Lightsheik Don't use armature deform for that. You can parent objects to bones, Godot will just create a bone and BoneAttachment3D node for each. Don't expect Godot's skeleton to be as clean as Blender's.

        If you're not using GLTF export from Blender, try that and mess with the options. Godot can't actually import FBX and Blender files, it just runs another program to convert them to GLTF.

          synthnostate It's not creating the bones nor the skeleton though. It's only importing each bones as nodes. I know the behavior is supposed to be that parented objects to bones should be imported as bone attachements, but it's not doing that.

          I am using GLTF export, not the blend file itself.

            Lightsheik Okay, that should work. I just started making a rigid model like yours because I could use some undead skeletons in my game. I did a quick test and everything works in Blender 3.6.1 and Godot 4.1.1.

            I did NOT have to add a skinned mesh, so that's nice, although I will use one for the spinal column.

            I also confirmed that Godot (not Blender) is creating a bone for every object. The bone's head is the parent bone's head, and the bone's tail is the object's origin. I'm pretty sure it's more efficient to create another bone than a Node3D (child of the BoneAttachment3D to) store the bone-to-object-origin offset. I bet that's the rationale.


              synthnostate Perhaps there's no way around it then. Would be nice if there was an option to hide these newly generated bones though.

              Thanks for your help!