Skip to content

Commit

Permalink
Improved 3D Asset Import Dialog material editing
Browse files Browse the repository at this point in the history
Implements [7238](godotengine/godot-proposals#7238) (for the most part).

* Ability to select nodes, meshes or materials by clicking.
* Moved mesh/material previews to the inspector area.
* Ability to override materials and edit them directly in the inspector.
* By default, shows overridden materials in the imported scene, with a button to disable them and show original materials.
* Keeps compatibility with the old override format.
  • Loading branch information
reduz committed Jan 26, 2024
1 parent 17e7f85 commit 4a461df
Show file tree
Hide file tree
Showing 15 changed files with 586 additions and 139 deletions.
4 changes: 2 additions & 2 deletions core/math/triangle_mesh.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -107,13 +107,13 @@ void TriangleMesh::get_indices(Vector<int> *r_triangles_indices) const {
void TriangleMesh::create(const Vector<Vector3> &p_faces, const Vector<int32_t> &p_surface_indices) {
valid = false;

ERR_FAIL_COND(p_surface_indices.size() && p_surface_indices.size() != p_faces.size());

int fc = p_faces.size();
ERR_FAIL_COND(!fc || ((fc % 3) != 0));
fc /= 3;
triangles.resize(fc);

ERR_FAIL_COND(p_surface_indices.size() && p_surface_indices.size() != triangles.size());

bvh.resize(fc * 3); //will never be larger than this (todo make better)
BVH *bw = bvh.ptrw();

Expand Down
2 changes: 1 addition & 1 deletion editor/editor_node.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1284,7 +1284,7 @@ void EditorNode::save_resource(const Ref<Resource> &p_resource) {
if (path.is_resource_file() && !FileAccess::exists(path + ".import")) {
save_resource_in_path(p_resource, p_resource->get_path());
} else {
save_resource_as(p_resource);
save_resource_as(p_resource, "");
}
}

Expand Down
2 changes: 2 additions & 0 deletions editor/editor_resource_picker.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -398,13 +398,15 @@ void EditorResourcePicker::_edit_menu_cbk(int p_which) {
if (edited_resource.is_null()) {
return;
}

EditorNode::get_singleton()->save_resource(edited_resource);
} break;

case OBJ_MENU_SAVE_AS: {
if (edited_resource.is_null()) {
return;
}

EditorNode::get_singleton()->save_resource_as(edited_resource);
} break;

Expand Down
4 changes: 4 additions & 0 deletions editor/icons/MaterialSelect.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
42 changes: 42 additions & 0 deletions editor/icons/MaterialSelectDisabled.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
39 changes: 39 additions & 0 deletions editor/icons/MeshSelect.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
42 changes: 42 additions & 0 deletions editor/icons/NodeSelect.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
15 changes: 13 additions & 2 deletions editor/import/3d/resource_importer_scene.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1192,13 +1192,21 @@ Node *ResourceImporterScene::_post_fix_node(Node *p_node, Node *p_root, HashMap<
post_importer_plugins.write[j]->internal_process(EditorScenePostImportPlugin::INTERNAL_IMPORT_CATEGORY_MATERIAL, p_root, p_node, mat, matdata);
}

// Old style material, keep for compatibility.
if (matdata.has("use_external/enabled") && bool(matdata["use_external/enabled"]) && matdata.has("use_external/path")) {
String path = matdata["use_external/path"];
Ref<Material> external_mat = ResourceLoader::load(path);
if (external_mat.is_valid()) {
m->set_surface_material(i, external_mat);
}
}
// New style custom material
if (matdata.has("custom")) {
Ref<Material> external_mat = matdata["custom"];
if (external_mat.is_valid()) {
m->set_surface_material(i, external_mat);
}
}
}
}
}
Expand Down Expand Up @@ -1708,8 +1716,11 @@ void ResourceImporterScene::get_internal_import_options(InternalImportCategory p
r_options->push_back(ImportOption(PropertyInfo(Variant::FLOAT, "lods/normal_merge_angle", PROPERTY_HINT_RANGE, "0,180,0.1,degrees"), 60.0f));
} break;
case INTERNAL_IMPORT_CATEGORY_MATERIAL: {
r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "use_external/enabled", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED), false));
r_options->push_back(ImportOption(PropertyInfo(Variant::STRING, "use_external/path", PROPERTY_HINT_FILE, "*.material,*.res,*.tres"), ""));
// Compatibility (hidden) settings.
r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "use_external/enabled", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NONE), false));
r_options->push_back(ImportOption(PropertyInfo(Variant::STRING, "use_external/path", PROPERTY_HINT_FILE, "*.material,*.res,*.tres", PROPERTY_USAGE_NONE), ""));
r_options->push_back(ImportOption(PropertyInfo(Variant::OBJECT, "custom", PROPERTY_HINT_RESOURCE_TYPE, "BaseMaterial3D,ShaderMaterial"), Ref<Material>()));

} break;
case INTERNAL_IMPORT_CATEGORY_ANIMATION: {
r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "settings/loop_mode", PROPERTY_HINT_ENUM, "None,Linear,Pingpong"), 0));
Expand Down
Loading

0 comments on commit 4a461df

Please sign in to comment.