 layout(constant_id = 1000) const bool enableUVTransform = true;
 layout(constant_id = 1001) const bool enableAlphaCutoff = false;
 layout(constant_id = 1002) const bool enableGlow = false;
-layout(constant_id = 1003) const bool useColorTexture = false;
-layout(constant_id = 1004) const bool useGlowTexture = false;
-layout(constant_id = 1005) const bool useMetalnessTexture = false;
-layout(constant_id = 1006) const bool useRoughnessTexture = false;
-layout(constant_id = 1007) const bool useOcclusionTexture = false;
-layout(constant_id = 1008) const bool useClearcoatTexture = false;
-layout(constant_id = 1009) const bool useNormalTexture = false;
+layout(constant_id = 1003) const bool enableNormalMap = false;
+layout(constant_id = 1004) const bool useVertexTangents = true;
+layout(constant_id = 1005) const bool useColorTexture = true;
+layout(constant_id = 1006) const bool useGlowTexture = false;
+layout(constant_id = 1007) const bool useMetalnessTexture = true;
+layout(constant_id = 1008) const bool useRoughnessTexture = true;
+layout(constant_id = 1009) const bool useOcclusionTexture = false;
+layout(constant_id = 1010) const bool useClearcoatTexture = false;
 
 // Resources
 #ifndef GL_COMPUTE_SHADER

layout(location = 11) in vec3 Normal;
layout(location = 12) in vec4 Color;
layout(location = 13) in vec2 UV;
#endif

// Macros

  vec3 V = surface.view;
  vec3 L = normalize(-direction);
  vec3 H = normalize(V + L);
  //vec3 R = surface.reflection;
  float NoV = abs(dot(N, V)) + 1e-8;
  float NoL = clamp(dot(N, L) * .5 + .5, 0., 1.);
  float NoH = clamp(dot(N, H), 0., 1.);
  float VoH = clamp(dot(V, H), 0., 1.);

