anchor.diff:    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;
  +  vec3 u = normalize(cross(oNormal,vec3(0.0,0.0,1.0)));
  +  vec3 v = normalize(cross(u, oNormal));
  +  vec3 facet = cos(phi) * sinTheta * u + sinTheta * sin(phi) * v + cos(theta) * oNormal;
  +  return facet;
   }
   
   // GGX PDF
  
positive.code: const int NUM_BOUNCES = 8;
  const float max_t = 100000.0;
  const float n1 = 1.0;
  const float n2 = 1.43;
  const float EPSILON = 0.000001;
  const float sr = n1/n2;
  const float r0 = ((n1 - n2)/(n1 + n2))*((n1 - n2)/(n1 + n2));
  
negative.code:   vec3 color = vec3(0);
    int bounces = 0;
    bool specular = true;
    for(int i=0; i < NUM_BOUNCES; ++i){
      result = traverseTree(ray);
      vec3 origin = ray.origin + ray.dir * result.t;
      bounces++;
  