anchor.diff:      vec2 texCoord = barycentricTexCoord(weights, createTexCoords(result.index)) + 0.5 / vec2(textureSize(atlasTex, 0));
       Material mat = createMaterial(result.index);
       vec3 macroNormal = barycentricNormal(weights, createNormals(result.index));
  +    vec3 microNormal = randomNormal(macroNormal, mat.specular, origin);
       vec3 incident = ray.dir;
  -    vec3 microNormal = randomNormal(macroNormal, mat.specular, origin);
       vec3 implicit = specular ? mat.emittance : vec3(0);
       specular = rand(origin.zx) < schlick(incident, microNormal) || mat.metal > 0.0;
       ray.origin = origin + macroNormal * EPSILON;
  
positive.code:   return createNode(index);
  }
  
  Node farChild(Node node, Ray ray){
    uint axis = uint(node.split);
    float index = ray.dir[axis] <= 0.0 ? node.left : node.right;
    return createNode(index);
  }
  
  
  
negative.code:         return result;
        }
        Node parentNear = nearChild(createNode(current.parent), ray);
        bool atNear = current.index == parentNear.index;
        current = createNode(atNear ? current.sibling : current.parent);
        state = atNear ? FROM_SIBLING : FROM_CHILD;
      } else {
        bool fromParent = state == FROM_PARENT;
        uint nextState = fromParent ? FROM_SIBLING : FROM_CHILD;
        float nextIndex = fromParent ? current.sibling : current.parent;
        if(rayBoxIntersect(current, ray) >= result.t){
          // missed box
        } else if (current.triangles > -1.0) {
          // at leaf
          processLeaf(current, ray, result);
        } else {
          nextIndex = nearChildIndex(current, ray);
          nextState = FROM_PARENT;
        }
        current = createNode(nextIndex);
        state = nextState;
      }
    }
  }
  