Edit: Make Local is an option when you right click a GLTF imported node in the scene tree. I'm not talking about Make Local on a resource, which makes more sense to me.
Let me start by saying I have used Godot 4 just about every day since launch, so I am pretty experienced in the engine. This is a long rant, so I'll put a TLDR here:
TLDR: After years of using Godot, I don't understand the point of "Make Local". Nobody makes a 3D model once and then it is perfect. It precludes the option of iterating on it, or at best, makes iterating extremely painful. So what's the point of this feature?
When it comes to importing models, textures, etc., .gltf + .bin file importing makes a lot of sense. The Godot docs also suggest this as the best way to do it. I don't like .blend importing, the external blender call is slow, and sometimes it breaks things. So .gltf + .bin is the way to go.
Now, once the file is actually in the engine, you have two options:
- Drag the .gltf file into a scene to make its own node containing all of the contents of the .gltf file
- Set mesh save paths, save animations, etc., to extract the contents of the .gltf file
Most game developers will immediately recognize the problem with the first option: namely, that you will need to modify the structure of what gets imported. You might need physics bodies, scripts, or ShaderMaterials applied to the objects contained within it. You might need to add signals or dynamic behaviour, or groups. At this point you have two options:
- Hit Make Local - effectively destroying the link to the original blender file, but allowing you to modify the node however you want
- Hit Make Editable - gives you some ability to add nodes and change things, but not completely
To my knowledge, developers don't like either of these options. I know in Brackey's video on importing things into Godot, he strongly suggests the option of "set mesh save paths", to create a more modular workflow where you still maintain the link to the .gltf file.
So that's all fine and well - and I use this workflow myself sometimes - but doesn't that defeat the purpose of .gltf in the first place? We have an entire scene hierarchy that we aren't using.
To my knowledge the solution to this is either:
Use convoluted pipelining steps (like the Blender-Godot addon, which I develop), or use GLTFDocumentExtension (a better way) to get more integrated pipelining.
I know there is some effort to get GLTFExtensions integrated in the engine, but won't this ultimately have some limitations as well? The extensions can't cover all usecases. Even something simple like trying to make a dynamic door opening object - there's no specific extension that would cover this type of dynamic functionality. In an ideal world, this type of thing could be pipelined, like how the Trenchbroom editor allows dynamic functions to be baked into the level design.
Should every developer make their own GLTFDocumentExtension pipeline to design their or asset conditioning pipeline? In principal I like the idea, but the overhead is intense, and even though I know how to do it, I often don't opt for it because it's slow or may end up not actually fitting my usecase.