I went ahead and figured out the workflow myself, you can apply materials to meshes just fine but they require using the Material Override in their properties since there is a bug that does not allow you to edit the properties for individual meshes.
Here is my workflow:
- Export GLTF 2.0 file from Blender of all the individual meshes in your scene. Use GLB instead of embedded, since Godot 4 has a bug that will not create mipmaps for imported textures from a GLTF embedded file.
- Make sure that materials are set as "placeholder" in the export dialogue, so the model is exported without materials but will have the appropriate slots to insert them in Godot (if you have any objects that use 2 or more materials, the appropriate amount of slots will appear in Godot)
- Import the GLTF (in this case, GLB) to Godot, import your textures separately (make sure to set "generate mipmaps"), create your materials manually.
- Right click your mesh file in the file browser > create new inherited scene. Assign your materials to each individual mesh under "material override" (you can apply materials to multiple meshes at once).
Usually this process would be streamlined and using material overrides would not be necessary, you could simply apply a material to a mesh directly or import a GLTF embedded file. There are two bugs that make this impossible right now:
- Mipmaps are not generated for textures when you can't access their import settings (such as when a GLTF with embedded materials is used). Using a GLTF embedded also results in bad draw call performance right now.
- There is an inheritance loop bug, which does not allow you to edit the individual properties for imported meshes. It will throw up the inheritance warning, and simply re-open the whole mesh scene when you confirm. Changes made to meshes directly are also not saved. This seems to be the bug we're all experiencing.
These bugs have been reported and are actively being resolved, which is understandable since Godot 4 is in Alpha. Hope this helps and allows you to continue using Godot!