Fix terrain normals to account for angle

This commit is contained in:
Lancelot de Ferrière 2024-12-20 22:57:46 +01:00 committed by wraitii
parent 1268854587
commit c2bb61fffc
3 changed files with 9 additions and 7 deletions

View file

@ -89,8 +89,7 @@ void main()
#endif
#if USE_NORMAL_MAP
float sign = v_tangent.w;
mat3 tbn = mat3(v_tangent.xyz, v_bitangent * -sign, v_normal);
mat3 tbn = mat3(v_tangent, v_bitangent, v_normal);
#if USE_TRIPLANAR
vec3 ntex = triplanarNormals(GET_DRAW_TEXTURE_2D(normTex), v_tex).rgb;
#else

View file

@ -49,7 +49,7 @@ VERTEX_OUTPUT(3, vec3, v_tex);
VERTEX_OUTPUT(3, vec2, v_tex);
#endif
#if USE_NORMAL_MAP
VERTEX_OUTPUT(4, vec4, v_tangent);
VERTEX_OUTPUT(4, vec3, v_tangent);
VERTEX_OUTPUT(5, vec3, v_bitangent);
#endif
#if USE_SPECULAR_MAP

View file

@ -57,10 +57,13 @@ void main()
#if USE_NORMAL_MAP || USE_SPECULAR_MAP || USE_TRIPLANAR
#if USE_NORMAL_MAP
vec3 t = vec3(1.0, 0.0, 0.0);
t = normalize(t - v_normal * dot(v_normal, t));
v_tangent = vec4(t, -1.0);
v_bitangent = cross(v_normal, t);
#if DECAL || USE_TRIPLANAR
// TODO: this should be fixed for decals/triplanar mapping.
v_tangent = vec3(1.0, 0.0, 0.0);
#else
v_tangent = normalize(vec3(c, 0.0, -s));
#endif
v_bitangent = cross(v_normal, v_tangent);
#endif
#if USE_SPECULAR_MAP