From 424c4d30c161977eec03f5f9ddc672954f7be29d Mon Sep 17 00:00:00 2001 From: Gaktan Date: Fri, 13 Mar 2026 20:18:46 +0100 Subject: [PATCH] Fix Octahedral encoding special case when computing vertex skinning Signed-off-by: Gaktan (cherry picked from commit c05c85581eb236f224dd15a04feda2a8d80082cc) --- servers/rendering/renderer_rd/shaders/skeleton.glsl | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/servers/rendering/renderer_rd/shaders/skeleton.glsl b/servers/rendering/renderer_rd/shaders/skeleton.glsl index 894dee1728..8348f33f33 100644 --- a/servers/rendering/renderer_rd/shaders/skeleton.glsl +++ b/servers/rendering/renderer_rd/shaders/skeleton.glsl @@ -110,6 +110,13 @@ uint encode_tang_to_uint_oct(vec4 base) { // Encode binormal sign in y component oct.y = oct.y * 0.5f + 0.5f; oct.y = base.w >= 0.0f ? oct.y : 1 - oct.y; + + if (oct.x == 0.0 && oct.y == 1.0) { + // (1, 1) and (0, 1) decode to the same value, but (0, 1) messes with our compression detection. + // So we sanitize here. + oct.x = 1.0; + } + return vec2_to_uint(oct); }