Variable generateTBNConst
generateTBN: "\n// TBN generates a tangent bitangent normal coordinate frame from the normal\n// (the normal must be normalized)\nfn generateTBN(normal: vec3f) -> mat3x3f {\n var bitangent: vec3f = vec3(0.0, 1.0, 0.0);\n\n let NdotUp: f32 = dot(normal, vec3(0.0, 1.0, 0.0));\n \n if (1.0 - abs(NdotUp) <= EPSILON) {\n // Sampling +Y or -Y, so we need a more robust bitangent.\n if (NdotUp > 0.0) {\n bitangent = vec3(0.0, 0.0, 1.0);\n }\n else {\n bitangent = vec3(0.0, 0.0, -1.0);\n }\n }\n\n let tangent: vec3f = normalize(cross(bitangent, normal));\n bitangent = cross(normal, tangent);\n\n return mat3x3f(tangent, bitangent, normal);\n}\n" = ...
WGSL function to generate a tangent bitangent normal coordinate frame from the normal.