diff --git a/binaries/data/mods/mod/shaders/glsl/terrain_common.fs b/binaries/data/mods/mod/shaders/glsl/terrain_common.fs index 6a1e3e049f..d5d40975ae 100644 --- a/binaries/data/mods/mod/shaders/glsl/terrain_common.fs +++ b/binaries/data/mods/mod/shaders/glsl/terrain_common.fs @@ -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 diff --git a/binaries/data/mods/mod/shaders/glsl/terrain_common.h b/binaries/data/mods/mod/shaders/glsl/terrain_common.h index 8000c6268f..3d12186ddb 100644 --- a/binaries/data/mods/mod/shaders/glsl/terrain_common.h +++ b/binaries/data/mods/mod/shaders/glsl/terrain_common.h @@ -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 diff --git a/binaries/data/mods/mod/shaders/glsl/terrain_common.vs b/binaries/data/mods/mod/shaders/glsl/terrain_common.vs index 579f323c0e..3de77021b3 100644 --- a/binaries/data/mods/mod/shaders/glsl/terrain_common.vs +++ b/binaries/data/mods/mod/shaders/glsl/terrain_common.vs @@ -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