anchor.diff:  }
   
   bool intersectBox(const vec3 origin, const vec3 dir, out float t0, out float t1) {
  -    vec3 invR = 1.0f / dir;
  -    vec3 tbot = invR * (vec3(0.0f) - origin);
  -    vec3 ttop = invR * (vec3(1.0f) - origin);
  -    vec3 tmin = min(ttop, tbot);
  -    vec3 tmax = max(ttop, tbot);
  -    vec2 t = max(tmin.xx, tmin.yz);
  -    t0 = max(t.x, t.y);
  -    t = min(tmax.xx, tmax.yz);
  -    t1 = min(t.x, t.y);
  -    return t0 <= t1;
  -}
  -
  +  vec3 invR = 1.0f / dir;
  +  vec3 tbot = invR * (vec3(0.0f) - origin);
  +  vec3 ttop = invR * (vec3(1.0f) - origin);
  +  vec3 tmin = min(ttop, tbot);
  +  vec3 tmax = max(ttop, tbot);
  +  vec2 t = max(tmin.xx, tmin.yz);
  +  t0 = max(t.x, t.y);
  +  t = min(tmax.xx, tmax.yz);
  +  t1 = min(t.x, t.y);
  +  return t0 <= t1;
  +}
   
   vec3 screenToVol(vec3 frag_coord) {
     vec4 position_curr = img_to_eye_curr * vec4(frag_coord,1.0);
  
positive.code:   float t_near = (is_t0 ? t0 : t1);
    // if camera is within cube, start from camera, else move inside a little
    t_near = (t_near < 0.0f ? 0.0f : t_near * 1.0000001f);
  
    vec3 sample_pos = CameraPos + sampleStep * t_near;
    float end = 0.0;
    if (skipSpace) { 
      vec4 posEnd = getStartPos(ivec2(gl_FragCoord.xy));
      sample_pos = posEnd.xyz;
    }
    // out_Color.rgb = sample_pos;
    // return;
    bool inside = isInside(sample_pos);  
    // cache value of previous sample
    float prev_density = sample(sample_pos); 
  
    while (inside) {
      ++out_Samples;
       // get sample
      float density = sample(sample_pos);
  
negative.code: #define GRAD_NORMALS
  
  vec3 get_gradient(const vec3 pos);
  float sample(const vec3 pos);
  vec4 blendColors(const in vec3 sample_pos);
  vec3 blendNormals(const in vec3 sample_pos);
  