From 091fa5fb7f552d2d9be01077705d3590ba0b7872 Mon Sep 17 00:00:00 2001 From: scurest Date: Sat, 7 Jan 2023 11:29:09 -0600 Subject: Add vertex color support to OBJ importer Fixes #70982 --- editor/import/resource_importer_obj.cpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/editor/import/resource_importer_obj.cpp b/editor/import/resource_importer_obj.cpp index a67da0c2b1..5da4659767 100644 --- a/editor/import/resource_importer_obj.cpp +++ b/editor/import/resource_importer_obj.cpp @@ -217,6 +217,7 @@ static Error _parse_obj(const String &p_path, List> &r_meshes, bool p_ Vector vertices; Vector normals; Vector uvs; + Vector colors; String name; HashMap>> material_map; @@ -249,6 +250,19 @@ static Error _parse_obj(const String &p_path, List> &r_meshes, bool p_ vtx.y = v[2].to_float() * scale_mesh.y + offset_mesh.y; vtx.z = v[3].to_float() * scale_mesh.z + offset_mesh.z; vertices.push_back(vtx); + //vertex color + if (v.size() == 7) { + while (colors.size() < vertices.size() - 1) { + colors.push_back(Color(1.0, 1.0, 1.0)); + } + Color c; + c.r = v[4].to_float(); + c.g = v[5].to_float(); + c.b = v[6].to_float(); + colors.push_back(c); + } else if (!colors.is_empty()) { + colors.push_back(Color(1.0, 1.0, 1.0)); + } } else if (l.begins_with("vt ")) { //uv Vector v = l.split(" ", false); @@ -317,6 +331,9 @@ static Error _parse_obj(const String &p_path, List> &r_meshes, bool p_ ERR_FAIL_INDEX_V(vtx, vertices.size(), ERR_FILE_CORRUPT); Vector3 vertex = vertices[vtx]; + if (!colors.is_empty()) { + surf_tool->set_color(colors[vtx]); + } if (!smoothing) { smooth_group++; } -- cgit v1.2.3 From 649857416dc1080d1b049da22d11a9bc20f84fc4 Mon Sep 17 00:00:00 2001 From: scurest Date: Sat, 7 Jan 2023 16:45:28 -0600 Subject: Mark OBJ vertex colors sRGB in materials (only if has vertex colors) --- editor/import/resource_importer_obj.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/editor/import/resource_importer_obj.cpp b/editor/import/resource_importer_obj.cpp index 5da4659767..f1fd1d5a03 100644 --- a/editor/import/resource_importer_obj.cpp +++ b/editor/import/resource_importer_obj.cpp @@ -373,7 +373,11 @@ static Error _parse_obj(const String &p_path, List> &r_meshes, bool p_ print_verbose("OBJ: Current material " + current_material + " has " + itos(material_map.has(current_material_library) && material_map[current_material_library].has(current_material))); if (material_map.has(current_material_library) && material_map[current_material_library].has(current_material)) { - surf_tool->set_material(material_map[current_material_library][current_material]); + Ref &material = material_map[current_material_library][current_material]; + if (!colors.is_empty()) { + material->set_flag(StandardMaterial3D::FLAG_SRGB_VERTEX_COLOR, true); + } + surf_tool->set_material(material); } mesh = surf_tool->commit(mesh, mesh_flags); -- cgit v1.2.3