Avoid singularity during sky filtering by using a different method of calculating the orthonormal basis

This commit is contained in:
clayjohn
2025-12-21 22:31:06 -08:00
parent fbc9539764
commit 6e6d59b2e7
2 changed files with 4 additions and 2 deletions

View File

@@ -29,7 +29,8 @@ void main() {
float solid_angle_texel = 4.0 * M_PI / float(params.dest_size * params.dest_size);
float roughness2 = params.roughness * params.roughness;
float roughness4 = roughness2 * roughness2;
vec3 UpVector = abs(N.z) < 0.999 ? vec3(0.0, 0.0, 1.0) : vec3(1.0, 0.0, 0.0);
vec3 UpVector = abs(N.y) < 0.999 ? vec3(0.0, 1.0, 0.0) : vec3(0.0, 0.0, 1.0);
mat3 T;
T[0] = normalize(cross(UpVector, N));
T[1] = cross(N, T[0]);

View File

@@ -43,7 +43,8 @@ void main() {
float solid_angle_texel = 4.0 * M_PI / (params.size * params.size);
float roughness2 = params.roughness * params.roughness;
float roughness4 = roughness2 * roughness2;
vec3 UpVector = abs(N.z) < 0.999 ? vec3(0.0, 0.0, 1.0) : vec3(1.0, 0.0, 0.0);
vec3 UpVector = abs(N.y) < 0.999 ? vec3(0.0, 1.0, 0.0) : vec3(0.0, 0.0, 1.0);
mat3 T;
T[0] = normalize(cross(UpVector, N));
T[1] = cross(N, T[0]);