declare const _default: "\n\n#ifdef LIT_TANGENTS\n    #define TBN_TANGENTS\n#else\n    #if defined(LIT_USE_NORMALS) || defined(LIT_USE_CLEARCOAT_NORMALS)\n        #define TBN_DERIVATIVES\n    #endif\n#endif\n\n#if defined(TBN_DERIVATIVES)\n    uniform float tbnBasis;\n#endif\n\nvoid getTBN(vec3 tangent, vec3 binormal, vec3 normal) {\n\n    #ifdef TBN_TANGENTS // tangents / binormals based TBN\n\n        dTBN = mat3(normalize(tangent), normalize(binormal), normalize(normal));\n\n    #elif defined(TBN_DERIVATIVES) // derivatives based TBN\n\n        vec2 uv = {lightingUv};\n\n        // get edge vectors of the pixel triangle\n        vec3 dp1 = dFdx( vPositionW );\n        vec3 dp2 = dFdy( vPositionW );\n        vec2 duv1 = dFdx( uv );\n        vec2 duv2 = dFdy( uv );\n\n        // solve the linear system\n        vec3 dp2perp = cross( dp2, normal );\n        vec3 dp1perp = cross( normal, dp1 );\n        vec3 T = dp2perp * duv1.x + dp1perp * duv2.x;\n        vec3 B = dp2perp * duv1.y + dp1perp * duv2.y;\n\n        // construct a scale-invariant frame\n        float denom = max( dot(T,T), dot(B,B) );\n        float invmax = (denom == 0.0) ? 0.0 : tbnBasis / sqrt( denom );\n        dTBN = mat3(T * invmax, -B * invmax, normal );\n\n    #else // object space TBN\n\n        vec3 B = cross(normal, vObjectSpaceUpW);\n        vec3 T = cross(normal, B);\n\n        if (dot(B,B)==0.0) // deal with case when vObjectSpaceUpW normal are parallel\n        {\n            float major=max(max(normal.x, normal.y), normal.z);\n\n            if (normal.x == major)\n            {\n                B = cross(normal, vec3(0,1,0));\n                T = cross(normal, B);\n            }\n            else if (normal.y == major)\n            {\n                B = cross(normal, vec3(0,0,1));\n                T = cross(normal, B);\n            }\n            else if (normal.z == major)\n            {\n                B = cross(normal, vec3(1,0,0));\n                T = cross(normal, B);\n            }\n        }\n\n        dTBN = mat3(normalize(T), normalize(B), normalize(normal));\n\n    #endif\n}\n";
export default _default;
