]> git.lizzy.rs Git - minetest.git/commitdiff
Mapblock Mesh BspTree: Increase the depth of block-level splits
authorx2048 <codeforsmile@gmail.com>
Tue, 7 Jun 2022 19:26:31 +0000 (21:26 +0200)
committerGitHub <noreply@github.com>
Tue, 7 Jun 2022 19:26:31 +0000 (21:26 +0200)
... before going node-level triangle search.
Fixes transparent grass on transparent land

src/client/mapblock_mesh.cpp

index 3be9e13b89558b0beb51ce3e760855e554b74e32..d8a8c25ebd914184dd4e3af80f6e6521b04309e0 100644 (file)
@@ -1021,7 +1021,12 @@ void MapBlockBspTree::buildTree(const std::vector<MeshTriangle> *triangles)
        for (u32 i = 0; i < triangles->size(); i++)
                indexes.push_back(i);
 
-       root = buildTree(v3f(1, 0, 0), v3f(85, 85, 85), 40, indexes, 0);
+       if (!indexes.empty()) {
+               // Start in the center of the block with increment of one quarter in each direction
+               root = buildTree(v3f(1, 0, 0), v3f((MAP_BLOCKSIZE + 1) * 0.5f * BS), MAP_BLOCKSIZE * 0.25f * BS, indexes, 0);
+       } else {
+               root = -1;
+       }
 }
 
 /**
@@ -1097,7 +1102,7 @@ s32 MapBlockBspTree::buildTree(v3f normal, v3f origin, float delta, const std::v
                v3f next_normal = candidate_normal;
                v3f next_origin = origin + delta * normal;
                float next_delta = candidate_delta;
-               if (next_delta < 10) {
+               if (next_delta < 5) {
                        const MeshTriangle *candidate = findSplitCandidate(front_list, *triangles);
                        next_normal = candidate->getNormal();
                        next_origin = candidate->centroid;
@@ -1113,7 +1118,7 @@ s32 MapBlockBspTree::buildTree(v3f normal, v3f origin, float delta, const std::v
                v3f next_normal = candidate_normal;
                v3f next_origin = origin - delta * normal;
                float next_delta = candidate_delta;
-               if (next_delta < 10) {
+               if (next_delta < 5) {
                        const MeshTriangle *candidate = findSplitCandidate(back_list, *triangles);
                        next_normal = candidate->getNormal();
                        next_origin = candidate->centroid;