[Godot 4] How to edit materials on a 3D imported model

:information_source: Attention Topic was automatically imported from the old Question2Answer platform.
:bust_in_silhouette: Asked By soloparatolos

I’m aware that there is a new workflow in place and it is kind of documented but after quite amount of tries, I’m not able to import a model in a way that materials are editable.

After importing a gltf+bin+textures, opening the scene and creating a new inherited one… I try to edit/load a material… but a warning indicates that I need to create a new inherited scene. Well, this happens on a infinite loop.

I guess I’m doing something wrong, Never had problems importing from versión 2 to 3.

Can someone lend a hand with this?

Many thanks!

Did you figure out how to do this?
Asking for a friend cough

KE90 | 2022-03-18 00:38

Same thing happening to me, not sure how I’m supposed to edit/assign the materials for any of my scenes if I can’t make any changes to the mesh.

wickedinsignia | 2022-07-01 03:49

Hi.

Sorry, I was not around lately…

I have not tested again. I will wait for the beta and check if the situation is the same.

I have seen people making nice looking scenes so, I guess it’s me (us?) that are doing something wrong.

In any case, Godot being a labeled “approachable/beginner friendly engine” it is a bit out of place the complication regarding importing and working with imported objects/textures.

I hope this is streamelined.

Regards!

soloparatolos | 2022-07-04 10:42

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!

wickedinsignia | 2022-07-04 11:00

I really appreciate all this info. I don’t have a lot of time lately and when trying Godot 4 builds felt like fighting against the engine.

Once again, thank you so much for the info.

soloparatolos | 2022-07-06 10:00

Is this still the workaround in Godot 4.0.1? I’m just getting started and want to make sure that I haven’t missed a trick.

QueyJoh | 2023-04-20 12:22

I found this thread because I was also struggling to understand the intended workflow. It didn’t make sense having to make a new inherited scene every time I updated my model… and fortunately you don’t!

  1. Double click your .gltf in Godot’s file system window to open the Advanced Import Settings
  2. In the top left of the window click Actions… > Extract Materials
  3. Select where to save the extracted .tres files

Once it’s done you can double click the material .tres files and they will popup in the inspector window. You can change all the properties as you wish, and your .gltf scene will inherit any changes (no need to make local/inherited/whatever).

You should also be able to update/re-export your models without losing any material changes in Godot.

2 Likes