From 3107c9859114336989855a2c9ee2cbde0e88e3d3 Mon Sep 17 00:00:00 2001 From: x2048 Date: Tue, 7 Jun 2022 21:26:31 +0200 Subject: Mapblock Mesh BspTree: Increase the depth of block-level splits ... before going node-level triangle search. Fixes transparent grass on transparent land --- src/client/mapblock_mesh.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'src/client/mapblock_mesh.cpp') diff --git a/src/client/mapblock_mesh.cpp b/src/client/mapblock_mesh.cpp index 3be9e13b8..d8a8c25eb 100644 --- a/src/client/mapblock_mesh.cpp +++ b/src/client/mapblock_mesh.cpp @@ -1021,7 +1021,12 @@ void MapBlockBspTree::buildTree(const std::vector *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; -- cgit v1.2.3