anchor.diff:          coc = clamp(coc, 0.0, centerCoc * 2.0);
       }
   
  -    float m = step(radius * BLUR_SCALE, coc * (SAMPLE_COUNT * BLUR_SCALE));
  +    float m = step(radius, coc * SAMPLE_COUNT);
       finalColor += mix(finalColor * (1.0 / blurAmount), color, m);
       blurAmount += 1.0;
   }
  
positive.code: 
  // Filter sample count, prefer odd values
  // (keep in sync with PostProcessManager.cpp:dof())
  const float SAMPLE_COUNT = 25.0;
  
  // A value > 1.0 allows a larger blur w/ dithering
  const float BLUR_SCALE = 1.0;
  
  // This is here just for aesthetic reasons
  const float BOKEH_ROTATION_ANGLE = PI / 6.0;
  
  #define unitvec(angle) vec2(cos(angle), sin(angle))
  
  // random number between 0 and 1, using interleaved gradient noise
  float random(const highp vec2 w) {
      const vec3 m = vec3(0.06711056, 0.00583715, 52.9829189);
      return fract(m.z * fract(dot(w, m.xy)));
  }
  
  float getCOC(float depth, vec2 cocParams) {
      float CoC = abs(depth * cocParams.x + cocParams.y);
  
negative.code:     vec4 finalColor = textureLod(colorBuffer, uv, 0.0);
  
      highp vec2 unit = materialParams.resolution.zw;
      direction *= unit;
  
      vec4 tc = uv.xyxy + vec4(direction * 0.5, -direction * 0.5) + vec4(direction, -direction);
      direction *= 2.0;
      for (float radius = 1.0 ; radius < (SAMPLE_COUNT * 0.5); radius += 1.0) {
          tap(finalColor, blurAmount, radius, tc.xy, colorBuffer, centerDepth, centerCoc);
          tap(finalColor, blurAmount, radius, tc.zw, colorBuffer, centerDepth, centerCoc);
          tc += vec4(direction, -direction);
      }
      return finalColor * (1.0 / blurAmount);
  }
  