summaryrefslogtreecommitdiffstats
path: root/scene
diff options
context:
space:
mode:
authorRémi Verschelde <rverschelde@gmail.com>2023-09-25 17:18:43 +0200
committerRémi Verschelde <rverschelde@gmail.com>2023-09-25 17:18:43 +0200
commita9af6af4b685a6078989d16cf5ff8e4db37f11cb (patch)
tree27cf304a40811e1131210a85d03739944c74f4f8 /scene
parente4cfd4e26a7bb497a5fafcf804bae91ead3ac1c2 (diff)
parentacf76027bd2926ed2a9538f992ad6a7c9888d518 (diff)
downloadredot-engine-a9af6af4b685a6078989d16cf5ff8e4db37f11cb.tar.gz
Merge pull request #82285 from lyuma/nan_lods
Avoid crash when generating LODs on meshes with non-finite vertices.
Diffstat (limited to 'scene')
-rw-r--r--scene/resources/importer_mesh.cpp4
1 files changed, 4 insertions, 0 deletions
diff --git a/scene/resources/importer_mesh.cpp b/scene/resources/importer_mesh.cpp
index f479ae1e1b..092ba84aa5 100644
--- a/scene/resources/importer_mesh.cpp
+++ b/scene/resources/importer_mesh.cpp
@@ -514,6 +514,10 @@ void ImporterMesh::generate_lods(float p_normal_merge_angle, float p_normal_spli
const Vector3 &v2 = vertices_ptr[new_indices_ptr[j + 2]];
Vector3 face_normal = vec3_cross(v0 - v2, v0 - v1);
float face_area = face_normal.length(); // Actually twice the face area, since it's the same error_factor on all faces, we don't care
+ if (!Math::is_finite(face_area) || face_area == 0) {
+ WARN_PRINT_ONCE("Ignoring face with non-finite normal in LOD generation.");
+ continue;
+ }
Vector3 dir = face_normal / face_area;
int ray_count = CLAMP(5.0 * face_area * error_factor, 16, 64);