From 56d2ab9f1466b781a45e17298c3b4907c70a40bc Mon Sep 17 00:00:00 2001 From: MihailRis Date: Sat, 19 Sep 2026 20:04:30 +0300 Subject: [PATCH] fix custom model blocks with disabled ambient-occlusion --- src/graphics/render/BlocksRenderer.cpp | 34 +++++++++++++++++--------- 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/src/graphics/render/BlocksRenderer.cpp b/src/graphics/render/BlocksRenderer.cpp index f75bd675c..8b8a667eb 100644 --- a/src/graphics/render/BlocksRenderer.cpp +++ b/src/graphics/render/BlocksRenderer.cpp @@ -357,20 +357,30 @@ void BlocksRenderer::blockCustomModel( const auto& vcoord = vertex.coord - 0.5f; glm::vec4 aoColor {1.0f, 1.0f, 1.0f, 1.0f}; - if (shading && ao) { + if (shading) { const float eps = 0.05f; auto p = coord + vcoord.x * X + vcoord.y * Y + vcoord.z * Z + - r * 0.5f + t * 0.5f + n * eps; - auto p1 = p + n * eps; - auto p2 = p + n * 0.5f; - aoColor = pickSoftLight(p1.x, p1.y, p1.z, glm::ivec3(r), glm::ivec3(t)); - if (!block.lightPassing) { - aoColor = glm::max( - aoColor, - pickSoftLight( - p2.x, p2.y, p2.z, glm::ivec3(r), glm::ivec3(t) - ) - ); + r * 0.5f + t * 0.5f + n * eps; + if (ao) { + auto p1 = p + n * eps; + auto p2 = p + n * 0.5f; + aoColor = pickSoftLight(p1.x, p1.y, p1.z, glm::ivec3(r), glm::ivec3(t)); + if (!block.lightPassing) { + aoColor = glm::max( + aoColor, + pickSoftLight( + p2.x, p2.y, p2.z, glm::ivec3(r), glm::ivec3(t) + ) + ); + } + } else { + aoColor = pickLight(glm::floor(p + 0.5f) + 0.5f); + if (!block.lightPassing) { + aoColor = glm::max( + aoColor, + pickLight(glm::floor(p + n + 0.5f) + 0.5f) + ); + } } } this->vertex(