anchor.diff:  // IBL specular
   //------------------------------------------------------------------------------
   
  -vec3 specularIrradiance(const vec3 r, float roughness) {
  +vec3 prefilteredRadiance(const vec3 r, float roughness) {
       // lod = lod_count * sqrt(linear_roughness), which is the mapping used by cmgen
       // where linear_roughness = roughness^2
       // using all the mip levels requires seamless cubemap sampling
  
positive.code:         inout vec3 Fd, inout vec3 Fr) {
  #if defined(SHADING_MODEL_SUBSURFACE)
      vec3 viewIndependent = diffuseIrradiance;
      vec3 viewDependent = specularIrradiance(-shading_view, pixel.roughness, 1.0 + pixel.thickness);
      float attenuation = (1.0 - pixel.thickness) / (2.0 * PI);
      Fd += pixel.subsurfaceColor * (viewIndependent + viewDependent) * attenuation;
  #elif defined(SHADING_MODEL_CLOTH) && defined(MATERIAL_HAS_SUBSURFACE_COLOR)
  
negative.code:     // specular indirect
      vec3 Fr;
  #if IBL_INTEGRATION == IBL_INTEGRATION_PREFILTERED_CUBEMAP
      Fr = specularDFG(pixel) * prefilteredRadiance(r, pixel.roughness);
      Fr *= specularAO * pixel.energyCompensation;
      evaluateClearCoatIBL(pixel, specularAO, Fd, Fr);
  #elif IBL_INTEGRATION == IBL_INTEGRATION_IMPORTANCE_SAMPLING
  