diff options
author | clayjohn <claynjohn@gmail.com> | 2023-10-31 15:51:07 +0100 |
---|---|---|
committer | clayjohn <claynjohn@gmail.com> | 2023-11-01 22:40:42 +0100 |
commit | d1043a5f930513aa4b48b014ec7961cad48b0560 (patch) | |
tree | 9db1971e8d3b8f33cfc5947628bc454031be065d /editor/import/resource_importer_obj.cpp | |
parent | 6afd320984cf14198368cc6c53752813a02169e3 (diff) | |
download | redot-engine-d1043a5f930513aa4b48b014ec7961cad48b0560.tar.gz |
Enhance checks and user experience around tangents.
Ensure `ensure_tangents` option actually creates tangent array. Even if it is just a dummy array.
Allow mesh to generate its own tangents when using compression. This allows users to compress meshes without tangents.
Warn users if they are trying to read from tangents without providing tangents.
Diffstat (limited to 'editor/import/resource_importer_obj.cpp')
-rw-r--r-- | editor/import/resource_importer_obj.cpp | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/editor/import/resource_importer_obj.cpp b/editor/import/resource_importer_obj.cpp index 646831ca24..082e78fdbe 100644 --- a/editor/import/resource_importer_obj.cpp +++ b/editor/import/resource_importer_obj.cpp @@ -327,6 +327,17 @@ static Error _parse_obj(const String &p_path, List<Ref<Mesh>> &r_meshes, bool p_ } ERR_FAIL_INDEX_V(norm, normals.size(), ERR_FILE_CORRUPT); surf_tool->set_normal(normals[norm]); + if (generate_tangents && uvs.is_empty()) { + // We can't generate tangents without UVs, so create dummy tangents. + Vector3 tan = Vector3(0.0, 1.0, 0.0).cross(normals[norm]); + surf_tool->set_tangent(Plane(tan.x, tan.y, tan.z, 1.0)); + } + } else { + // No normals, use a dummy normal since normals will be generated. + if (generate_tangents && uvs.is_empty()) { + // We can't generate tangents without UVs, so create dummy tangents. + surf_tool->set_tangent(Plane(1.0, 0.0, 0.0, 1.0)); + } } if (face[idx].size() >= 2 && !face[idx][1].is_empty()) { @@ -383,9 +394,6 @@ static Error _parse_obj(const String &p_path, List<Ref<Mesh>> &r_meshes, bool p_ if (generate_tangents && uvs.size()) { surf_tool->generate_tangents(); - } else { - // We need tangents in order to compress vertex data. So disable if tangents aren't generated. - mesh_flags = 0; } surf_tool->index(); |