From 1004d6ae20ccbfe48bef574beb31f7f511da0c8e Mon Sep 17 00:00:00 2001 From: Magnus Norddahl Date: Thu, 12 Dec 2024 20:18:27 +0100 Subject: [PATCH] Exclude inactive triangles from subdivide --- .../rendering/hwrenderer/data/hw_collision.cpp | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/common/rendering/hwrenderer/data/hw_collision.cpp b/src/common/rendering/hwrenderer/data/hw_collision.cpp index 3bbaf2152..6faf5a473 100644 --- a/src/common/rendering/hwrenderer/data/hw_collision.cpp +++ b/src/common/rendering/hwrenderer/data/hw_collision.cpp @@ -361,16 +361,23 @@ CPUBottomLevelAccelStruct::CPUBottomLevelAccelStruct(const FFlatVertex *vertices scratch.leafs.reserve(num_triangles); scratch.centroids.clear(); scratch.centroids.reserve(num_triangles); + int active_triangles = 0; for (int i = 0; i < num_triangles; i++) { - scratch.leafs.push_back(i); - int element_index = i * 3; - FVector3 centroid = (vertices[elements[element_index + 0]].fPos() + vertices[elements[element_index + 1]].fPos() + vertices[elements[element_index + 2]].fPos()) * (1.0f / 3.0f); + int a = elements[element_index + 0]; + int b = elements[element_index + 1]; + int c = elements[element_index + 2]; + if (a == b) + continue; + + FVector3 centroid = (vertices[a].fPos() + vertices[b].fPos() + vertices[c].fPos()) * (1.0f / 3.0f); + scratch.leafs.push_back(i); scratch.centroids.push_back(FVector4(centroid, 1.0f)); + active_triangles++; } - size_t neededbuffersize = num_triangles * 2; + size_t neededbuffersize = active_triangles * 2; if (scratch.workbuffer.size() < neededbuffersize) scratch.workbuffer.resize(neededbuffersize);