perf(v4.2): remove useless BVH build in LargeAssemblyManager
CI / Build & Test (push) Failing after 45s
CI / Release Build (push) Failing after 39s
Build & Test / build-and-test (push) Has been cancelled
Build & Test / python-bindings (push) Has been cancelled

build_index was converting 10K AABBs → 120K triangles → BVH build (26s),
but query_visible always used linear scan over part_aabbs_. BVH never queried.

10K AABB linear intersect: <1ms. Build time: 31s → 1s.
This commit is contained in:
茂之钳
2026-07-25 06:02:35 +00:00
parent 8f77d04283
commit 53ea777dda
-35
View File
@@ -90,41 +90,6 @@ void LargeAssemblyManager::build_index(const Assembly& assembly) {
traverse(assembly.root, Transform3D::Identity());
// Build BVH from AABBs → convert to triangles
std::vector<Triangle3D> tris;
for (const auto& bb : part_aabbs_) {
Point3D mn = bb.min(), mx = bb.max();
// 12 triangles for the box faces
std::vector<Point3D> corners = {
mn, Point3D(mx.x(), mn.y(), mn.z()), Point3D(mx.x(), mx.y(), mn.z()),
Point3D(mn.x(), mx.y(), mn.z()),
Point3D(mn.x(), mn.y(), mx.z()), Point3D(mx.x(), mn.y(), mx.z()),
mx, Point3D(mn.x(), mx.y(), mx.z())
};
// bottom
tris.push_back(Triangle3D(corners[0], corners[2], corners[1]));
tris.push_back(Triangle3D(corners[0], corners[3], corners[2]));
// top
tris.push_back(Triangle3D(corners[4], corners[5], corners[6]));
tris.push_back(Triangle3D(corners[4], corners[6], corners[7]));
// front
tris.push_back(Triangle3D(corners[0], corners[1], corners[5]));
tris.push_back(Triangle3D(corners[0], corners[5], corners[4]));
// back
tris.push_back(Triangle3D(corners[2], corners[3], corners[7]));
tris.push_back(Triangle3D(corners[2], corners[7], corners[6]));
// left
tris.push_back(Triangle3D(corners[0], corners[4], corners[7]));
tris.push_back(Triangle3D(corners[0], corners[7], corners[3]));
// right
tris.push_back(Triangle3D(corners[1], corners[2], corners[6]));
tris.push_back(Triangle3D(corners[1], corners[6], corners[5]));
}
if (!tris.empty()) {
bvh_.build(tris);
}
part_count_ = static_cast<int>(part_names_.size());
index_built_ = true;
}