diff --git a/editor/import/3d/resource_importer_scene.cpp b/editor/import/3d/resource_importer_scene.cpp index 56b67db30288..a54e832674f5 100644 --- a/editor/import/3d/resource_importer_scene.cpp +++ b/editor/import/3d/resource_importer_scene.cpp @@ -1535,6 +1535,12 @@ Node *ResourceImporterScene::_post_fix_node(Node *p_node, Node *p_root, HashMap< Ref mat = m->get_surface_material(i); if (mat.is_valid()) { String mat_id = mat->get_meta("import_id", mat->get_name()); + + if (mat_id.is_empty() && mat->has_meta("unique_id")) { + mat_id = mat->get_meta("unique_id"); + mat->remove_meta("unique_id"); + } + if (!mat_id.is_empty() && p_material_data.has(mat_id)) { Dictionary matdata = p_material_data[mat_id]; { diff --git a/editor/import/3d/scene_import_settings.cpp b/editor/import/3d/scene_import_settings.cpp index 727577204db3..d1376b463b1d 100644 --- a/editor/import/3d/scene_import_settings.cpp +++ b/editor/import/3d/scene_import_settings.cpp @@ -228,6 +228,8 @@ void SceneImportSettingsDialog::_fill_material(Tree *p_tree, const Ref } else if (!p_material->get_name().is_empty()) { import_id = p_material->get_name(); has_import_id = true; + } else if (p_material->has_meta("unique_id")) { + import_id = p_material->get_meta("unique_id"); } else if (unnamed_material_name_map.has(p_material)) { import_id = unnamed_material_name_map[p_material]; } else { diff --git a/modules/gltf/gltf_document.cpp b/modules/gltf/gltf_document.cpp index 7ed443cf18e8..ee4d3717241a 100644 --- a/modules/gltf/gltf_document.cpp +++ b/modules/gltf/gltf_document.cpp @@ -3784,6 +3784,7 @@ Error GLTFDocument::_parse_meshes(Ref p_state) { } else { Ref mat3d; mat3d.instantiate(); + mat3d->set_meta("unique_id", vformat("%s@%s", import_mesh->get_name(), itos(j))); if (has_vertex_color) { mat3d->set_flag(StandardMaterial3D::FLAG_ALBEDO_FROM_VERTEX_COLOR, true); }