perf(v4.2): remove useless BVH build in LargeAssemblyManager
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:
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user