anchor.diff:  const int NUM_BOUNCES = 8;
   const float max_t = 100000.0;
   const float n1 = 1.0;
  -const float n2 = 1.43;
  +const float n2 = 1.2;
   const float EPSILON = 0.000001;
   const float sr = n1/n2;
   const float r0 = ((n1 - n2)/(n1 + n2))*((n1 - n2)/(n1 + n2));
  
positive.code:   float phi = 2.0f * M_PI * xi.x;
    float theta = acos(sqrt((1.0f - xi.y)/((a*a - 1.0f) * xi.y + 1.0f)));
    float sinTheta = sin(theta);
    vec3 facet = vec3(cos(phi) * sinTheta, sinTheta * sin(phi), cos(theta));
    float trans = getAngle(oNormal);
    return rotationMatrix(cross(oNormal,vec3(0.0,0.0,1.0)),trans) * facet;
  }
  
  // GGX PDF
  
negative.code:  float theta = 2.0 * M_PI * rand(seed.zx);
   float x = r * cos(theta);
   float y = r * sin(theta);
   vec3 u = normalize(cross(normal,vec3(0.0,0.0,1.0)));
   vec3 v = normalize(cross(u, normal));
   return x*u + y*v + sqrt(1.0 - r*r)*normal;
  }
  
  // Moller-Trumbore
  