anchor.diff:  }
   
   // Microfacet BRDF, distribution number stands for: 1 = Beckmann, 2 = GGX
  -vec3 microFacetSpecular(vec3 incidentVector, vec3 excidentVector, vec3 n, vec3 fresnel, float roughness, int distriNbr){
  +vec3 microFacetSpecular(vec3 incidentVector, vec3 excidentVector, vec3 normal, vec3 fresnel, float roughness, int distriNbr){
       // HalfVec
       vec3 halfVec = (incidentVector + excidentVector) / length(incidentVector + excidentVector);
   
       // Pre compute values:
       float excDotHalf = max(0.0001f,dot(excidentVector,halfVec));
  -    float normDotExc = max(0.0001f,dot(n,excidentVector));
  -    float normDotInc = max(0.0001f,dot(n,incidentVector));
  -    float normDotHalf = max(0.0001f,dot(n,halfVec));
  +    float normDotExc = max(0.0001f,dot(normal,excidentVector));
  +    float normDotInc = max(0.0001f,dot(normal,incidentVector));
  +    float normDotHalf = max(0.0001f,dot(normal,halfVec));
       float normDotHalfSquared = normDotHalf*normDotHalf;
       float roughnessSquared = roughness*roughness;
   
  
positive.code:     float roughness = tex2DBiLinear(roughnessMap, vTexCoords).r;
      float ao = tex2DBiLinear(aoMap, vTexCoords).r;
      float fresnel = tex2DBiLinear(fresnelMap, vTexCoords).r;
      vec3 n = perturb_normal( vNorm, excidentVector, vTexCoords );
  
      // Fresnel f0 term
      vec3 f0 = vec3(0.04); 
      f0 = mix(f0, albedo, fresnel);
  
  
      for (int i=0 ; i<nbLights; i++){
  
  
negative.code:         }
  
          vec3 incidentVector = normalize(u_perPass.lights[i].position-pos);
          float directionnalAttenuation = max(dot(normal, incidentVector), 0.0);
  
          vec3 kS = fresnelSchlick(incidentVector, excidentVector, f0);
          vec3 kD = vec3(1.0) - kS;
          kD *= 1.0 - fresnel;
  
          specular = microFacetSpecular(incidentVector,excidentVector,normal,kS,roughness, 2);
  
          vec3 radiance = vec3(u_perPass.lights[i].color) * getIntensityFromPosition(u_perPass.lights[i],pos);
  
  