     materialInfo.f90 = vec3(clamp(reflectance * 50.0, 0.0, 1.0));
 
     vec3 normal = getNormal(false);
+    vec3 tangent = normalize(v_TBN[0].xyz);
+    vec3 bitangent = normalize(v_TBN[1].xyz);
     vec3 view = normalize(u_Camera - v_Position);
+
+    float TdotV = dot(tangent, view);
+    float BdotV = dot(bitangent, view);
 
     materialInfo.normal = normal;
 

// Specular
uniform float u_MetallicRoughnessSpecularFactor;

// Subsurface
uniform float u_SubsurfaceScale;
uniform float u_SubsurfaceDistortion;

        }

        vec3 l = normalize(pointToLight);
        vec3 h = normalize(l + view);

        vec3 intensity = rangeAttenuation * spotAttenuation * light.intensity * light.color;

        AngularInfo angularInfo = getAngularInfo(pointToLight, materialInfo.normal, view);
        float TdotL = dot(tangent, l);
        float BdotL = dot(bitangent, l);
        float TdotH = dot(tangent, h);
        float BdotH = dot(bitangent, h);

        if (angularInfo.NdotL > 0.0 || angularInfo.NdotV > 0.0)
        {
