Skip to content

Commit 14d0d22

Browse files
Implement workaround for cubemap filtering issue on NVIDIA.
1 parent c434c45 commit 14d0d22

1 file changed

Lines changed: 28 additions & 32 deletions

File tree

servers/rendering/renderer_rd/shaders/effects/cubemap_roughness_inc.glsl

Lines changed: 28 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -10,40 +10,36 @@ layout(push_constant, std430) uniform Params {
1010
params;
1111

1212
vec3 texelCoordToVec(vec2 uv, uint faceID) {
13-
mat3 faceUvVectors[6];
14-
15-
// -x
16-
faceUvVectors[1][0] = vec3(0.0, 0.0, 1.0); // u -> +z
17-
faceUvVectors[1][1] = vec3(0.0, -1.0, 0.0); // v -> -y
18-
faceUvVectors[1][2] = vec3(-1.0, 0.0, 0.0); // -x face
19-
20-
// +x
21-
faceUvVectors[0][0] = vec3(0.0, 0.0, -1.0); // u -> -z
22-
faceUvVectors[0][1] = vec3(0.0, -1.0, 0.0); // v -> -y
23-
faceUvVectors[0][2] = vec3(1.0, 0.0, 0.0); // +x face
24-
25-
// -y
26-
faceUvVectors[3][0] = vec3(1.0, 0.0, 0.0); // u -> +x
27-
faceUvVectors[3][1] = vec3(0.0, 0.0, -1.0); // v -> -z
28-
faceUvVectors[3][2] = vec3(0.0, -1.0, 0.0); // -y face
29-
30-
// +y
31-
faceUvVectors[2][0] = vec3(1.0, 0.0, 0.0); // u -> +x
32-
faceUvVectors[2][1] = vec3(0.0, 0.0, 1.0); // v -> +z
33-
faceUvVectors[2][2] = vec3(0.0, 1.0, 0.0); // +y face
34-
35-
// -z
36-
faceUvVectors[5][0] = vec3(-1.0, 0.0, 0.0); // u -> -x
37-
faceUvVectors[5][1] = vec3(0.0, -1.0, 0.0); // v -> -y
38-
faceUvVectors[5][2] = vec3(0.0, 0.0, -1.0); // -z face
39-
40-
// +z
41-
faceUvVectors[4][0] = vec3(1.0, 0.0, 0.0); // u -> +x
42-
faceUvVectors[4][1] = vec3(0.0, -1.0, 0.0); // v -> -y
43-
faceUvVectors[4][2] = vec3(0.0, 0.0, 1.0); // +z face
13+
vec3 a, b, c;
14+
15+
if (faceID == 1) { // -x
16+
a = vec3(0.0, 0.0, 1.0); // u -> +z
17+
b = vec3(0.0, -1.0, 0.0); // v -> -y
18+
c = vec3(-1.0, 0.0, 0.0); // -x face
19+
} else if (faceID == 0) { // +x
20+
a = vec3(0.0, 0.0, -1.0); // u -> -z
21+
b = vec3(0.0, -1.0, 0.0); // v -> -y
22+
c = vec3(1.0, 0.0, 0.0); // +x face
23+
} else if (faceID == 3) { // -y
24+
a = vec3(1.0, 0.0, 0.0); // u -> +x
25+
b = vec3(0.0, 0.0, -1.0); // v -> -z
26+
c = vec3(0.0, -1.0, 0.0); // -y face
27+
} else if (faceID == 2) { // +y
28+
a = vec3(1.0, 0.0, 0.0); // u -> +x
29+
b = vec3(0.0, 0.0, 1.0); // v -> +z
30+
c = vec3(0.0, 1.0, 0.0); // +y face
31+
} else if (faceID == 5) { // -z
32+
a = vec3(-1.0, 0.0, 0.0); // u -> -x
33+
b = vec3(0.0, -1.0, 0.0); // v -> -y
34+
c = vec3(0.0, 0.0, -1.0); // -z face
35+
} else /* if (faceID == 4) */ { // +z
36+
a = vec3(1.0, 0.0, 0.0); // u -> +x
37+
b = vec3(0.0, -1.0, 0.0); // v -> -y
38+
c = vec3(0.0, 0.0, 1.0); // +z face
39+
}
4440

4541
// out = u * s_faceUv[0] + v * s_faceUv[1] + s_faceUv[2].
46-
vec3 result = (faceUvVectors[faceID][0] * uv.x) + (faceUvVectors[faceID][1] * uv.y) + faceUvVectors[faceID][2];
42+
vec3 result = (a * uv.x) + (b * uv.y) + c;
4743
return normalize(result);
4844
}
4945

0 commit comments

Comments
 (0)